diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..d9cdb81 --- /dev/null +++ b/404.html @@ -0,0 +1,24 @@ + + + + + + 404 | QSU + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..96c1cde --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +qsu.cdget.com \ No newline at end of file diff --git a/assets/app.CnYbRfy2.js b/assets/app.CnYbRfy2.js new file mode 100644 index 0000000..30cfeba --- /dev/null +++ b/assets/app.CnYbRfy2.js @@ -0,0 +1 @@ +import{t as i}from"./chunks/theme.HAdjE-22.js";import{U as o,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,ac as y,d as P,u as v,y as C,x as b,ad as w,ae as E,af as R,ag as S}from"./chunks/framework.C94oF1kp.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return C(()=>{b(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&w(),E(),R(),s.setup&&s.setup(),()=>S(s.Layout)}});async function x(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function D(){return g(T)}function _(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&x().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{x as createApp}; diff --git a/assets/changelog.md.DzTTOHiP.js b/assets/changelog.md.DzTTOHiP.js new file mode 100644 index 0000000..4c72594 --- /dev/null +++ b/assets/changelog.md.DzTTOHiP.js @@ -0,0 +1 @@ +import{_ as e,c as o,o as d,a2 as a}from"./chunks/framework.C94oF1kp.js";const p=JSON.parse('{"title":"Change Log","description":"","frontmatter":{},"headers":[],"relativePath":"changelog.md","filePath":"changelog.md","lastUpdated":null}'),t={name:"changelog.md"},i=a('

Change Log

1.4.2 (2024-06-25)

1.4.1 (2024-05-05)

1.4.0 (2024-04-14)

1.3.8 (2024-04-12)

1.3.7 (2024-04-07)

1.3.6 (2024-04-07)

1.3.5 (2024-03-31)

1.3.4 (2024-03-19)

1.3.3 (2024-03-05)

1.3.2 (2023-12-28)

1.3.1 (2023-11-08)

1.3.0 (2023-09-27)

1.2.3 (2023-09-15)

1.2.2 (2023-08-15)

1.2.1 (2023-08-07)

1.2.0 (2023-06-29)

BREAKING CHANGES: The isBotAgent, license methods were separated from qsu to the qsu-web package. These methods are no longer available after version 1.2.0.

1.1.8 (2023-05-13)

1.1.7 (2023-03-17)

1.1.6 (2023-02-28)

1.1.5 (2023-02-07)

1.1.4 (2022-12-22)

1.1.3 (2022-10-23)

1.1.2 (2022-10-20)

1.1.1 (2022-10-08)

1.1.0 (2022-09-03)

1.0.9 (2022-08-15)

1.0.8 (2022-08-15)

1.0.7 (2022-07-24)

1.0.6 (2022-07-24)

1.0.5 (2022-06-23)

1.0.4 (2022-06-16)

BREAKING CHANGES: convertDate is no longer supported due to the removal of moment as a dependent module.

The today method has changed its usage. We no longer support custom date formats.

1.0.3 (2022-05-24)

1.0.2 (2022-05-23)

1.0.1 (2022-05-12)

1.0.0 (2022-05-09)

0.0.1 ~ 0.5.5 (2021-03-16 ~ 2022-04-09)

',76),l=[i];function c(r,n,h,s,u,m){return d(),o("div",null,l)}const _=e(t,[["render",c]]);export{p as __pageData,_ as default}; diff --git a/assets/changelog.md.DzTTOHiP.lean.js b/assets/changelog.md.DzTTOHiP.lean.js new file mode 100644 index 0000000..81e88b3 --- /dev/null +++ b/assets/changelog.md.DzTTOHiP.lean.js @@ -0,0 +1 @@ +import{_ as e,c as o,o as d,a2 as a}from"./chunks/framework.C94oF1kp.js";const p=JSON.parse('{"title":"Change Log","description":"","frontmatter":{},"headers":[],"relativePath":"changelog.md","filePath":"changelog.md","lastUpdated":null}'),t={name:"changelog.md"},i=a("",76),l=[i];function c(r,n,h,s,u,m){return d(),o("div",null,l)}const _=e(t,[["render",c]]);export{p as __pageData,_ as default}; diff --git a/assets/chunks/framework.C94oF1kp.js b/assets/chunks/framework.C94oF1kp.js new file mode 100644 index 0000000..28b3b93 --- /dev/null +++ b/assets/chunks/framework.C94oF1kp.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function us(e,t){const n=new Set(e.split(","));return s=>n.has(s)}const se={},mt=[],Ae=()=>{},ao=()=>!1,Vt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ds=e=>e.startsWith("onUpdate:"),le=Object.assign,hs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},fo=Object.prototype.hasOwnProperty,Y=(e,t)=>fo.call(e,t),V=Array.isArray,yt=e=>mn(e)==="[object Map]",Or=e=>mn(e)==="[object Set]",K=e=>typeof e=="function",ie=e=>typeof e=="string",Je=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Lr=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Ir=Object.prototype.toString,mn=e=>Ir.call(e),uo=e=>mn(e).slice(8,-1),Mr=e=>mn(e)==="[object Object]",ps=e=>ie(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,_t=us(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),yn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ho=/-(\w)/g,Le=yn(e=>e.replace(ho,(t,n)=>n?n.toUpperCase():"")),po=/\B([A-Z])/g,Qe=yn(e=>e.replace(po,"-$1").toLowerCase()),_n=yn(e=>e.charAt(0).toUpperCase()+e.slice(1)),nn=yn(e=>e?`on${_n(e)}`:""),Xe=(e,t)=>!Object.is(e,t),Fn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},go=e=>{const t=parseFloat(e);return isNaN(t)?e:t},mo=e=>{const t=ie(e)?Number(e):NaN;return isNaN(t)?e:t};let js;const Nr=()=>js||(js=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function gs(e){if(V(e)){const t={};for(let n=0;n{if(n){const s=n.split(_o);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ms(e){let t="";if(ie(e))t=e;else if(V(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Co=e=>ie(e)?e:e==null?"":V(e)||Z(e)&&(e.toString===Ir||!K(e.toString))?Hr(e)?Co(e.value):JSON.stringify(e,$r,2):String(e),$r=(e,t)=>Hr(t)?$r(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Hn(s,i)+" =>"]=r,n),{})}:Or(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Hn(n))}:Je(t)?Hn(t):Z(t)&&!V(t)&&!Mr(t)?String(t):t,Hn=(e,t="")=>{var n;return Je(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ee;class So{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ee,!t&&Ee&&(this.index=(Ee.scopes||(Ee.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ee;try{return Ee=this,t()}finally{Ee=n}}}on(){Ee=this}off(){Ee=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),et()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=qe,n=ct;try{return qe=!0,ct=this,this._runnings++,Ds(this),this.fn()}finally{Vs(this),this._runnings--,ct=n,qe=t}}stop(){this.active&&(Ds(this),Vs(this),this.onStop&&this.onStop(),this.active=!1)}}function Ao(e){return e.value}function Ds(e){e._trackId++,e._depsLength=0}function Vs(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},cn=new WeakMap,at=Symbol(""),ns=Symbol("");function ve(e,t,n){if(qe&&ct){let s=cn.get(e);s||cn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=kr(()=>s.delete(n))),Ur(ct,r)}}function $e(e,t,n,s,r,i){const o=cn.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&V(e)){const c=Number(s);o.forEach((u,d)=>{(d==="length"||!Je(d)&&d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":V(e)?ps(n)&&l.push(o.get("length")):(l.push(o.get(at)),yt(e)&&l.push(o.get(ns)));break;case"delete":V(e)||(l.push(o.get(at)),yt(e)&&l.push(o.get(ns)));break;case"set":yt(e)&&l.push(o.get(at));break}_s();for(const c of l)c&&Br(c,4);bs()}function Ro(e,t){const n=cn.get(e);return n&&n.get(t)}const Oo=us("__proto__,__v_isRef,__isVue"),Kr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Je)),Us=Lo();function Lo(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let i=0,o=this.length;i{e[t]=function(...n){Ze(),_s();const s=J(this)[t].apply(this,n);return bs(),et(),s}}),e}function Io(e){Je(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Wr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ko:Xr:i?zr:Gr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!r){if(o&&Y(Us,n))return Reflect.get(Us,n,s);if(n==="hasOwnProperty")return Io}const l=Reflect.get(t,n,s);return(Je(n)?Kr.has(n):Oo(n))||(r||ve(t,"get",n),i)?l:ge(l)?o&&ps(n)?l:l.value:Z(l)?r?wn(l):vn(l):l}}class qr extends Wr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=dt(i);if(!St(s)&&!dt(s)&&(i=J(i),s=J(s)),!V(t)&&ge(i)&&!ge(s))return c?!1:(i.value=s,!0)}const o=V(t)&&ps(n)?Number(n)e,bn=e=>Reflect.getPrototypeOf(e);function Kt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),i=J(t);n||(Xe(t,i)&&ve(r,"get",t),ve(r,"get",i));const{has:o}=bn(r),l=s?vs:n?Cs:Ft;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function Wt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(Xe(e,r)&&ve(s,"has",e),ve(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function qt(e,t=!1){return e=e.__v_raw,!t&&ve(J(e),"iterate",at),Reflect.get(e,"size",e)}function Bs(e,t=!1){!t&&!St(e)&&!dt(e)&&(e=J(e));const n=J(this);return bn(n).has.call(n,e)||(n.add(e),$e(n,"add",e,e)),this}function ks(e,t,n=!1){!n&&!St(t)&&!dt(t)&&(t=J(t));const s=J(this),{has:r,get:i}=bn(s);let o=r.call(s,e);o||(e=J(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?Xe(t,l)&&$e(s,"set",e,t):$e(s,"add",e,t),this}function Ks(e){const t=J(this),{has:n,get:s}=bn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&$e(t,"delete",e,void 0),i}function Ws(){const e=J(this),t=e.size!==0,n=e.clear();return t&&$e(e,"clear",void 0,void 0),n}function Gt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=J(o),c=t?vs:e?Cs:Ft;return!e&&ve(l,"iterate",at),o.forEach((u,d)=>s.call(r,c(u),c(d),i))}}function zt(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=yt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),d=n?vs:t?Cs:Ft;return!t&&ve(i,"iterate",c?ns:at),{next(){const{value:h,done:v}=u.next();return v?{value:h,done:v}:{value:l?[d(h[0]),d(h[1])]:d(h),done:v}},[Symbol.iterator](){return this}}}}function Ve(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ho(){const e={get(i){return Kt(this,i)},get size(){return qt(this)},has:Wt,add:Bs,set:ks,delete:Ks,clear:Ws,forEach:Gt(!1,!1)},t={get(i){return Kt(this,i,!1,!0)},get size(){return qt(this)},has:Wt,add(i){return Bs.call(this,i,!0)},set(i,o){return ks.call(this,i,o,!0)},delete:Ks,clear:Ws,forEach:Gt(!1,!0)},n={get(i){return Kt(this,i,!0)},get size(){return qt(this,!0)},has(i){return Wt.call(this,i,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Gt(!0,!1)},s={get(i){return Kt(this,i,!0,!0)},get size(){return qt(this,!0)},has(i){return Wt.call(this,i,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:Gt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=zt(i,!1,!1),n[i]=zt(i,!0,!1),t[i]=zt(i,!1,!0),s[i]=zt(i,!0,!0)}),[e,n,t,s]}const[$o,jo,Do,Vo]=Ho();function ws(e,t){const n=t?e?Vo:Do:e?jo:$o;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Y(n,r)&&r in s?n:s,r,i)}const Uo={get:ws(!1,!1)},Bo={get:ws(!1,!0)},ko={get:ws(!0,!1)};const Gr=new WeakMap,zr=new WeakMap,Xr=new WeakMap,Ko=new WeakMap;function Wo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qo(e){return e.__v_skip||!Object.isExtensible(e)?0:Wo(uo(e))}function vn(e){return dt(e)?e:Es(e,!1,Po,Uo,Gr)}function Go(e){return Es(e,!1,Fo,Bo,zr)}function wn(e){return Es(e,!0,No,ko,Xr)}function Es(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=qo(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function bt(e){return dt(e)?bt(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function St(e){return!!(e&&e.__v_isShallow)}function Yr(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function sn(e){return Object.isExtensible(e)&&Pr(e,"__v_skip",!0),e}const Ft=e=>Z(e)?vn(e):e,Cs=e=>Z(e)?wn(e):e;class Jr{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new ys(()=>t(this._value),()=>It(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Xe(t._value,t._value=t.effect.run())&&It(t,4),Ss(t),t.effect._dirtyLevel>=2&&It(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function zo(e,t,n=!1){let s,r;const i=K(e);return i?(s=e,r=Ae):(s=e.get,r=e.set),new Jr(s,r,i||!r,n)}function Ss(e){var t;qe&&ct&&(e=J(e),Ur(ct,(t=e.dep)!=null?t:e.dep=kr(()=>e.dep=void 0,e instanceof Jr?e:void 0)))}function It(e,t=4,n,s){e=J(e);const r=e.dep;r&&Br(r,t)}function ge(e){return!!(e&&e.__v_isRef===!0)}function fe(e){return Zr(e,!1)}function Qr(e){return Zr(e,!0)}function Zr(e,t){return ge(e)?e:new Xo(e,t)}class Xo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Ft(t)}get value(){return Ss(this),this._value}set value(t){const n=this.__v_isShallow||St(t)||dt(t);t=n?t:J(t),Xe(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Ft(t),It(this,4))}}function ei(e){return ge(e)?e.value:e}const Yo={get:(e,t,n)=>ei(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ge(r)&&!ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ti(e){return bt(e)?e:new Proxy(e,Yo)}class Jo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Ss(this),()=>It(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Qo(e){return new Jo(e)}class Zo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Ro(J(this._object),this._key)}}class el{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function tl(e,t,n){return ge(e)?e:K(e)?new el(e):Z(e)&&arguments.length>1?nl(e,t,n):fe(e)}function nl(e,t,n){const s=e[t];return ge(s)?s:new Zo(e,t,n)}/** +* @vue/runtime-core v3.4.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ge(e,t,n,s){try{return s?e(...s):e()}catch(r){En(r,t,n)}}function Re(e,t,n,s){if(K(e)){const r=Ge(e,t,n,s);return r&&Lr(r)&&r.catch(i=>{En(i,t,n)}),r}if(V(e)){const r=[];for(let i=0;i>>1,r=he[s],i=$t(r);iNe&&he.splice(t,1)}function ol(e){V(e)?vt.push(...e):(!ke||!ke.includes(e,e.allowRecurse?it+1:it))&&vt.push(e),si()}function qs(e,t,n=Ht?Ne+1:0){for(;n$t(n)-$t(s));if(vt.length=0,ke){ke.push(...t);return}for(ke=t,it=0;ite.id==null?1/0:e.id,ll=(e,t)=>{const n=$t(e)-$t(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ri(e){ss=!1,Ht=!0,he.sort(ll);try{for(Ne=0;Ne{s._d&&sr(-1);const i=fn(t);let o;try{o=e(...r)}finally{fn(i),s._d&&sr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pe(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),ui(()=>{e.isUnmounting=!0}),e}const Se=[Function,Array],ii={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Se,onEnter:Se,onAfterEnter:Se,onEnterCancelled:Se,onBeforeLeave:Se,onLeave:Se,onAfterLeave:Se,onLeaveCancelled:Se,onBeforeAppear:Se,onAppear:Se,onAfterAppear:Se,onAppearCancelled:Se},oi=e=>{const t=e.subTree;return t.component?oi(t.component):t},fl={name:"BaseTransition",props:ii,setup(e,{slots:t}){const n=Ln(),s=al();return()=>{const r=t.default&&ci(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const v of r)if(v.type!==ye){i=v;break}}const o=J(e),{mode:l}=o;if(s.isLeaving)return $n(i);const c=Gs(i);if(!c)return $n(i);let u=rs(c,o,s,n,v=>u=v);un(c,u);const d=n.subTree,h=d&&Gs(d);if(h&&h.type!==ye&&!lt(c,h)&&oi(n).type!==ye){const v=rs(h,o,s,n);if(un(h,v),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,v.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},$n(i);l==="in-out"&&c.type!==ye&&(v.delayLeave=(T,N,P)=>{const W=li(s,h);W[String(h.key)]=h,T[Ke]=()=>{N(),T[Ke]=void 0,delete u.delayedLeave},u.delayedLeave=P})}return i}}},ul=fl;function li(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function rs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:d,onEnterCancelled:h,onBeforeLeave:v,onLeave:T,onAfterLeave:N,onLeaveCancelled:P,onBeforeAppear:W,onAppear:q,onAfterAppear:G,onAppearCancelled:p}=t,m=String(e.key),I=li(n,e),R=(O,_)=>{O&&Re(O,s,9,_)},U=(O,_)=>{const M=_[1];R(O,_),V(O)?O.every(E=>E.length<=1)&&M():O.length<=1&&M()},B={mode:o,persisted:l,beforeEnter(O){let _=c;if(!n.isMounted)if(i)_=W||c;else return;O[Ke]&&O[Ke](!0);const M=I[m];M&<(e,M)&&M.el[Ke]&&M.el[Ke](),R(_,[O])},enter(O){let _=u,M=d,E=h;if(!n.isMounted)if(i)_=q||u,M=G||d,E=p||h;else return;let D=!1;const ee=O[Xt]=ne=>{D||(D=!0,ne?R(E,[O]):R(M,[O]),B.delayedLeave&&B.delayedLeave(),O[Xt]=void 0)};_?U(_,[O,ee]):ee()},leave(O,_){const M=String(e.key);if(O[Xt]&&O[Xt](!0),n.isUnmounting)return _();R(v,[O]);let E=!1;const D=O[Ke]=ee=>{E||(E=!0,_(),ee?R(P,[O]):R(N,[O]),O[Ke]=void 0,I[M]===e&&delete I[M])};I[M]=e,T?U(T,[O,D]):D()},clone(O){const _=rs(O,t,n,s,r);return r&&r(_),_}};return B}function $n(e){if(xn(e))return e=Ye(e),e.children=null,e}function Gs(e){if(!xn(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function un(e,t){e.shapeFlag&6&&e.component?un(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ci(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,xn=e=>e.type.__isKeepAlive;function dl(e,t){fi(e,"a",t)}function hl(e,t){fi(e,"da",t)}function fi(e,t,n=ae){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Tn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)xn(r.parent.vnode)&&pl(s,t,n,r),r=r.parent}}function pl(e,t,n,s){const r=Tn(t,e,s,!0);An(()=>{hs(s[t],r)},n)}function Tn(e,t,n=ae,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ze();const l=Ut(n),c=Re(t,n,e,o);return l(),et(),c});return s?r.unshift(i):r.push(i),i}}const De=e=>(t,n=ae)=>{(!In||e==="sp")&&Tn(e,(...s)=>t(...s),n)},gl=De("bm"),Tt=De("m"),ml=De("bu"),yl=De("u"),ui=De("bum"),An=De("um"),_l=De("sp"),bl=De("rtg"),vl=De("rtc");function wl(e,t=ae){Tn("ec",e,t)}const di="components";function ka(e,t){return pi(di,e,!0,t)||e}const hi=Symbol.for("v-ndc");function Ka(e){return ie(e)?pi(di,e,!1)||e:e||hi}function pi(e,t,n=!0,s=!1){const r=pe||ae;if(r){const i=r.type;{const l=dc(i,!1);if(l&&(l===t||l===Le(t)||l===_n(Le(t))))return i}const o=zs(r[e]||i[e],t)||zs(r.appContext[e],t);return!o&&s?i:o}}function zs(e,t){return e&&(e[t]||e[Le(t)]||e[_n(Le(t))])}function Wa(e,t,n,s){let r;const i=n;if(V(e)||ie(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lpn(t)?!(t.type===ye||t.type===be&&!gi(t.children)):!0)?e:null}function Ga(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:nn(s)]=e[s];return n}const is=e=>e?Vi(e)?Ls(e):is(e.parent):null,Mt=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>is(e.parent),$root:e=>is(e.root),$emit:e=>e.emit,$options:e=>As(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Ts(e.update)}),$nextTick:e=>e.n||(e.n=Cn.bind(e.proxy)),$watch:e=>zl.bind(e)}),jn=(e,t)=>e!==se&&!e.__isScriptSetup&&Y(e,t),El={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const T=o[t];if(T!==void 0)switch(T){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(jn(s,t))return o[t]=1,s[t];if(r!==se&&Y(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&Y(u,t))return o[t]=3,i[t];if(n!==se&&Y(n,t))return o[t]=4,n[t];os&&(o[t]=0)}}const d=Mt[t];let h,v;if(d)return t==="$attrs"&&ve(e.attrs,"get",""),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==se&&Y(n,t))return o[t]=4,n[t];if(v=c.config.globalProperties,Y(v,t))return v[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return jn(r,t)?(r[t]=n,!0):s!==se&&Y(s,t)?(s[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==se&&Y(e,o)||jn(t,o)||(l=i[0])&&Y(l,o)||Y(s,o)||Y(Mt,o)||Y(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function za(){return Cl().slots}function Cl(){const e=Ln();return e.setupContext||(e.setupContext=Bi(e))}function Xs(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let os=!0;function Sl(e){const t=As(e),n=e.proxy,s=e.ctx;os=!1,t.beforeCreate&&Ys(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:d,beforeMount:h,mounted:v,beforeUpdate:T,updated:N,activated:P,deactivated:W,beforeDestroy:q,beforeUnmount:G,destroyed:p,unmounted:m,render:I,renderTracked:R,renderTriggered:U,errorCaptured:B,serverPrefetch:O,expose:_,inheritAttrs:M,components:E,directives:D,filters:ee}=t;if(u&&xl(u,s,null),o)for(const X in o){const j=o[X];K(j)&&(s[X]=j.bind(n))}if(r){const X=r.call(n,n);Z(X)&&(e.data=vn(X))}if(os=!0,i)for(const X in i){const j=i[X],ce=K(j)?j.bind(n,n):K(j.get)?j.get.bind(n,n):Ae,Bt=!K(j)&&K(j.set)?j.set.bind(n):Ae,tt=re({get:ce,set:Bt});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>tt.value,set:Ie=>tt.value=Ie})}if(l)for(const X in l)mi(l[X],s,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(j=>{Il(j,X[j])})}d&&Ys(d,e,"c");function $(X,j){V(j)?j.forEach(ce=>X(ce.bind(n))):j&&X(j.bind(n))}if($(gl,h),$(Tt,v),$(ml,T),$(yl,N),$(dl,P),$(hl,W),$(wl,B),$(vl,R),$(bl,U),$(ui,G),$(An,m),$(_l,O),V(_))if(_.length){const X=e.exposed||(e.exposed={});_.forEach(j=>{Object.defineProperty(X,j,{get:()=>n[j],set:ce=>n[j]=ce})})}else e.exposed||(e.exposed={});I&&e.render===Ae&&(e.render=I),M!=null&&(e.inheritAttrs=M),E&&(e.components=E),D&&(e.directives=D)}function xl(e,t,n=Ae){V(e)&&(e=ls(e));for(const s in e){const r=e[s];let i;Z(r)?"default"in r?i=Ct(r.from||s,r.default,!0):i=Ct(r.from||s):i=Ct(r),ge(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ys(e,t,n){Re(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function mi(e,t,n,s){const r=s.includes(".")?Ii(n,s):()=>n[s];if(ie(e)){const i=t[e];K(i)&&Fe(r,i)}else if(K(e))Fe(r,e.bind(n));else if(Z(e))if(V(e))e.forEach(i=>mi(i,t,n,s));else{const i=K(e.handler)?e.handler.bind(n):t[e.handler];K(i)&&Fe(r,i,e)}}function As(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>dn(c,u,o,!0)),dn(c,t,o)),Z(t)&&i.set(t,c),c}function dn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&dn(e,i,n,!0),r&&r.forEach(o=>dn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Tl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Tl={data:Js,props:Qs,emits:Qs,methods:Lt,computed:Lt,beforeCreate:me,created:me,beforeMount:me,mounted:me,beforeUpdate:me,updated:me,beforeDestroy:me,beforeUnmount:me,destroyed:me,unmounted:me,activated:me,deactivated:me,errorCaptured:me,serverPrefetch:me,components:Lt,directives:Lt,watch:Rl,provide:Js,inject:Al};function Js(e,t){return t?e?function(){return le(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Al(e,t){return Lt(ls(e),ls(t))}function ls(e){if(V(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(s&&s.proxy):t}}const _i={},bi=()=>Object.create(_i),vi=e=>Object.getPrototypeOf(e)===_i;function Ml(e,t,n,s=!1){const r={},i=bi();e.propsDefaults=Object.create(null),wi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Go(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Pl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[v,T]=Ei(h,t,!0);le(o,v),T&&l.push(...T)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return Z(e)&&s.set(e,mt),mt;if(V(i))for(let d=0;de[0]==="_"||e==="$stable",Rs=e=>V(e)?e.map(Te):[Te(e)],Fl=(e,t,n)=>{if(t._n)return t;const s=cl((...r)=>Rs(t(...r)),n);return s._c=!1,s},Si=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ci(r))continue;const i=e[r];if(K(i))t[r]=Fl(r,i,s);else if(i!=null){const o=Rs(i);t[r]=()=>o}}},xi=(e,t)=>{const n=Rs(t);e.slots.default=()=>n},Ti=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Hl=(e,t,n)=>{const s=e.slots=bi();if(e.vnode.shapeFlag&32){const r=t._;r?(Ti(s,t,n),n&&Pr(s,"_",r,!0)):Si(t,s)}else t&&xi(e,t)},$l=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=se;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:Ti(r,t,n):(i=!t.$stable,Si(t,r)),o=t}else t&&(xi(e,t),o={default:1});if(i)for(const l in r)!Ci(l)&&o[l]==null&&delete r[l]};function hn(e,t,n,s,r=!1){if(V(e)){e.forEach((v,T)=>hn(v,t&&(V(t)?t[T]:t),n,s,r));return}if(wt(s)&&!r)return;const i=s.shapeFlag&4?Ls(s.component):s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,d=l.refs===se?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ie(u)?(d[u]=null,Y(h,u)&&(h[u]=null)):ge(u)&&(u.value=null)),K(c))Ge(c,l,12,[o,d]);else{const v=ie(c),T=ge(c);if(v||T){const N=()=>{if(e.f){const P=v?Y(h,c)?h[c]:d[c]:c.value;r?V(P)&&hs(P,i):V(P)?P.includes(i)||P.push(i):v?(d[c]=[i],Y(h,c)&&(h[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else v?(d[c]=o,Y(h,c)&&(h[c]=o)):T&&(c.value=o,e.k&&(d[e.k]=o))};o?(N.id=-1,_e(N,n)):N()}}}const jl=Symbol("_vte"),Dl=e=>e.__isTeleport;let er=!1;const gt=()=>{er||(console.error("Hydration completed but contains mismatches."),er=!0)},Vl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Ul=e=>e.namespaceURI.includes("MathML"),Yt=e=>{if(Vl(e))return"svg";if(Ul(e))return"mathml"},Jt=e=>e.nodeType===8;function Bl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,d=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),an(),m._vnode=p;return}h(m.firstChild,p,null,null,null),an(),m._vnode=p},h=(p,m,I,R,U,B=!1)=>{B=B||!!m.dynamicChildren;const O=Jt(p)&&p.data==="[",_=()=>P(p,m,I,R,U,O),{type:M,ref:E,shapeFlag:D,patchFlag:ee}=m;let ne=p.nodeType;m.el=p,ee===-2&&(B=!1,m.dynamicChildren=null);let $=null;switch(M){case ft:ne!==3?m.children===""?(c(m.el=r(""),o(p),p),$=p):$=_():(p.data!==m.children&&(gt(),p.data=m.children),$=i(p));break;case ye:G(p)?($=i(p),q(m.el=p.content.firstChild,p,I)):ne!==8||O?$=_():$=i(p);break;case Pt:if(O&&(p=i(p),ne=p.nodeType),ne===1||ne===3){$=p;const X=!m.children.length;for(let j=0;j{B=B||!!m.dynamicChildren;const{type:O,props:_,patchFlag:M,shapeFlag:E,dirs:D,transition:ee}=m,ne=O==="input"||O==="option";if(ne||M!==-1){D&&Pe(m,null,I,"created");let $=!1;if(G(p)){$=Ai(R,ee)&&I&&I.vnode.props&&I.vnode.props.appear;const j=p.content.firstChild;$&&ee.beforeEnter(j),q(j,p,I),m.el=p=j}if(E&16&&!(_&&(_.innerHTML||_.textContent))){let j=T(p.firstChild,m,p,I,R,U,B);for(;j;){gt();const ce=j;j=j.nextSibling,l(ce)}}else E&8&&p.textContent!==m.children&&(gt(),p.textContent=m.children);if(_){if(ne||!B||M&48){const j=p.tagName.includes("-");for(const ce in _)(ne&&(ce.endsWith("value")||ce==="indeterminate")||Vt(ce)&&!_t(ce)||ce[0]==="."||j)&&s(p,ce,null,_[ce],void 0,I)}else if(_.onClick)s(p,"onClick",null,_.onClick,void 0,I);else if(M&4&&bt(_.style))for(const j in _.style)_.style[j]}let X;(X=_&&_.onVnodeBeforeMount)&&xe(X,I,m),D&&Pe(m,null,I,"beforeMount"),((X=_&&_.onVnodeMounted)||D||$)&&Pi(()=>{X&&xe(X,I,m),$&&ee.enter(p),D&&Pe(m,null,I,"mounted")},R)}return p.nextSibling},T=(p,m,I,R,U,B,O)=>{O=O||!!m.dynamicChildren;const _=m.children,M=_.length;for(let E=0;E{const{slotScopeIds:O}=m;O&&(U=U?U.concat(O):O);const _=o(p),M=T(i(p),m,_,I,R,U,B);return M&&Jt(M)&&M.data==="]"?i(m.anchor=M):(gt(),c(m.anchor=u("]"),_,M),M)},P=(p,m,I,R,U,B)=>{if(gt(),m.el=null,B){const M=W(p);for(;;){const E=i(p);if(E&&E!==M)l(E);else break}}const O=i(p),_=o(p);return l(p),n(null,m,_,O,I,R,Yt(_),U),O},W=(p,m="[",I="]")=>{let R=0;for(;p;)if(p=i(p),p&&Jt(p)&&(p.data===m&&R++,p.data===I)){if(R===0)return i(p);R--}return p},q=(p,m,I)=>{const R=m.parentNode;R&&R.replaceChild(p,m);let U=I;for(;U;)U.vnode.el===m&&(U.vnode.el=U.subTree.el=p),U=U.parent},G=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[d,h]}const _e=Pi;function kl(e){return Kl(e,Bl)}function Kl(e,t){const n=Nr();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:v,setScopeId:T=Ae,insertStaticContent:N}=e,P=(a,f,g,w=null,y=null,C=null,A=void 0,S=null,x=!!f.dynamicChildren)=>{if(a===f)return;a&&!lt(a,f)&&(w=kt(a),Ie(a,y,C,!0),a=null),f.patchFlag===-2&&(x=!1,f.dynamicChildren=null);const{type:b,ref:L,shapeFlag:H}=f;switch(b){case ft:W(a,f,g,w);break;case ye:q(a,f,g,w);break;case Pt:a==null&&G(f,g,w,A);break;case be:E(a,f,g,w,y,C,A,S,x);break;default:H&1?I(a,f,g,w,y,C,A,S,x):H&6?D(a,f,g,w,y,C,A,S,x):(H&64||H&128)&&b.process(a,f,g,w,y,C,A,S,x,ht)}L!=null&&y&&hn(L,a&&a.ref,C,f||a,!f)},W=(a,f,g,w)=>{if(a==null)s(f.el=l(f.children),g,w);else{const y=f.el=a.el;f.children!==a.children&&u(y,f.children)}},q=(a,f,g,w)=>{a==null?s(f.el=c(f.children||""),g,w):f.el=a.el},G=(a,f,g,w)=>{[a.el,a.anchor]=N(a.children,f,g,w,a.el,a.anchor)},p=({el:a,anchor:f},g,w)=>{let y;for(;a&&a!==f;)y=v(a),s(a,g,w),a=y;s(f,g,w)},m=({el:a,anchor:f})=>{let g;for(;a&&a!==f;)g=v(a),r(a),a=g;r(f)},I=(a,f,g,w,y,C,A,S,x)=>{f.type==="svg"?A="svg":f.type==="math"&&(A="mathml"),a==null?R(f,g,w,y,C,A,S,x):O(a,f,y,C,A,S,x)},R=(a,f,g,w,y,C,A,S)=>{let x,b;const{props:L,shapeFlag:H,transition:F,dirs:k}=a;if(x=a.el=o(a.type,C,L&&L.is,L),H&8?d(x,a.children):H&16&&B(a.children,x,null,w,y,Dn(a,C),A,S),k&&Pe(a,null,w,"created"),U(x,a,a.scopeId,A,w),L){for(const te in L)te!=="value"&&!_t(te)&&i(x,te,null,L[te],C,w);"value"in L&&i(x,"value",null,L.value,C),(b=L.onVnodeBeforeMount)&&xe(b,w,a)}k&&Pe(a,null,w,"beforeMount");const z=Ai(y,F);z&&F.beforeEnter(x),s(x,f,g),((b=L&&L.onVnodeMounted)||z||k)&&_e(()=>{b&&xe(b,w,a),z&&F.enter(x),k&&Pe(a,null,w,"mounted")},y)},U=(a,f,g,w,y)=>{if(g&&T(a,g),w)for(let C=0;C{for(let b=x;b{const S=f.el=a.el;let{patchFlag:x,dynamicChildren:b,dirs:L}=f;x|=a.patchFlag&16;const H=a.props||se,F=f.props||se;let k;if(g&&nt(g,!1),(k=F.onVnodeBeforeUpdate)&&xe(k,g,f,a),L&&Pe(f,a,g,"beforeUpdate"),g&&nt(g,!0),(H.innerHTML&&F.innerHTML==null||H.textContent&&F.textContent==null)&&d(S,""),b?_(a.dynamicChildren,b,S,g,w,Dn(f,y),C):A||j(a,f,S,null,g,w,Dn(f,y),C,!1),x>0){if(x&16)M(S,H,F,g,y);else if(x&2&&H.class!==F.class&&i(S,"class",null,F.class,y),x&4&&i(S,"style",H.style,F.style,y),x&8){const z=f.dynamicProps;for(let te=0;te{k&&xe(k,g,f,a),L&&Pe(f,a,g,"updated")},w)},_=(a,f,g,w,y,C,A)=>{for(let S=0;S{if(f!==g){if(f!==se)for(const C in f)!_t(C)&&!(C in g)&&i(a,C,f[C],null,y,w);for(const C in g){if(_t(C))continue;const A=g[C],S=f[C];A!==S&&C!=="value"&&i(a,C,S,A,y,w)}"value"in g&&i(a,"value",f.value,g.value,y)}},E=(a,f,g,w,y,C,A,S,x)=>{const b=f.el=a?a.el:l(""),L=f.anchor=a?a.anchor:l("");let{patchFlag:H,dynamicChildren:F,slotScopeIds:k}=f;k&&(S=S?S.concat(k):k),a==null?(s(b,g,w),s(L,g,w),B(f.children||[],g,L,y,C,A,S,x)):H>0&&H&64&&F&&a.dynamicChildren?(_(a.dynamicChildren,F,g,y,C,A,S),(f.key!=null||y&&f===y.subTree)&&Ri(a,f,!0)):j(a,f,g,L,y,C,A,S,x)},D=(a,f,g,w,y,C,A,S,x)=>{f.slotScopeIds=S,a==null?f.shapeFlag&512?y.ctx.activate(f,g,w,A,x):ee(f,g,w,y,C,A,x):ne(a,f,x)},ee=(a,f,g,w,y,C,A)=>{const S=a.component=cc(a,w,y);if(xn(a)&&(S.ctx.renderer=ht),ac(S,!1,A),S.asyncDep){if(y&&y.registerDep(S,$,A),!a.el){const x=S.subTree=ue(ye);q(null,x,f,g)}}else $(S,a,f,g,y,C,A)},ne=(a,f,g)=>{const w=f.component=a.component;if(Zl(a,f,g))if(w.asyncDep&&!w.asyncResolved){X(w,f,g);return}else w.next=f,il(w.update),w.effect.dirty=!0,w.update();else f.el=a.el,w.vnode=f},$=(a,f,g,w,y,C,A)=>{const S=()=>{if(a.isMounted){let{next:L,bu:H,u:F,parent:k,vnode:z}=a;{const pt=Oi(a);if(pt){L&&(L.el=z.el,X(a,L,A)),pt.asyncDep.then(()=>{a.isUnmounted||S()});return}}let te=L,Q;nt(a,!1),L?(L.el=z.el,X(a,L,A)):L=z,H&&Fn(H),(Q=L.props&&L.props.onVnodeBeforeUpdate)&&xe(Q,k,L,z),nt(a,!0);const oe=Vn(a),Oe=a.subTree;a.subTree=oe,P(Oe,oe,h(Oe.el),kt(Oe),a,y,C),L.el=oe.el,te===null&&ec(a,oe.el),F&&_e(F,y),(Q=L.props&&L.props.onVnodeUpdated)&&_e(()=>xe(Q,k,L,z),y)}else{let L;const{el:H,props:F}=f,{bm:k,m:z,parent:te}=a,Q=wt(f);if(nt(a,!1),k&&Fn(k),!Q&&(L=F&&F.onVnodeBeforeMount)&&xe(L,te,f),nt(a,!0),H&&Nn){const oe=()=>{a.subTree=Vn(a),Nn(H,a.subTree,a,y,null)};Q?f.type.__asyncLoader().then(()=>!a.isUnmounted&&oe()):oe()}else{const oe=a.subTree=Vn(a);P(null,oe,g,w,a,y,C),f.el=oe.el}if(z&&_e(z,y),!Q&&(L=F&&F.onVnodeMounted)){const oe=f;_e(()=>xe(L,te,oe),y)}(f.shapeFlag&256||te&&wt(te.vnode)&&te.vnode.shapeFlag&256)&&a.a&&_e(a.a,y),a.isMounted=!0,f=g=w=null}},x=a.effect=new ys(S,Ae,()=>Ts(b),a.scope),b=a.update=()=>{x.dirty&&x.run()};b.i=a,b.id=a.uid,nt(a,!0),b()},X=(a,f,g)=>{f.component=a;const w=a.vnode.props;a.vnode=f,a.next=null,Pl(a,f.props,w,g),$l(a,f.children,g),Ze(),qs(a),et()},j=(a,f,g,w,y,C,A,S,x=!1)=>{const b=a&&a.children,L=a?a.shapeFlag:0,H=f.children,{patchFlag:F,shapeFlag:k}=f;if(F>0){if(F&128){Bt(b,H,g,w,y,C,A,S,x);return}else if(F&256){ce(b,H,g,w,y,C,A,S,x);return}}k&8?(L&16&&At(b,y,C),H!==b&&d(g,H)):L&16?k&16?Bt(b,H,g,w,y,C,A,S,x):At(b,y,C,!0):(L&8&&d(g,""),k&16&&B(H,g,w,y,C,A,S,x))},ce=(a,f,g,w,y,C,A,S,x)=>{a=a||mt,f=f||mt;const b=a.length,L=f.length,H=Math.min(b,L);let F;for(F=0;FL?At(a,y,C,!0,!1,H):B(f,g,w,y,C,A,S,x,H)},Bt=(a,f,g,w,y,C,A,S,x)=>{let b=0;const L=f.length;let H=a.length-1,F=L-1;for(;b<=H&&b<=F;){const k=a[b],z=f[b]=x?We(f[b]):Te(f[b]);if(lt(k,z))P(k,z,g,null,y,C,A,S,x);else break;b++}for(;b<=H&&b<=F;){const k=a[H],z=f[F]=x?We(f[F]):Te(f[F]);if(lt(k,z))P(k,z,g,null,y,C,A,S,x);else break;H--,F--}if(b>H){if(b<=F){const k=F+1,z=kF)for(;b<=H;)Ie(a[b],y,C,!0),b++;else{const k=b,z=b,te=new Map;for(b=z;b<=F;b++){const we=f[b]=x?We(f[b]):Te(f[b]);we.key!=null&&te.set(we.key,b)}let Q,oe=0;const Oe=F-z+1;let pt=!1,Fs=0;const Rt=new Array(Oe);for(b=0;b=Oe){Ie(we,y,C,!0);continue}let Me;if(we.key!=null)Me=te.get(we.key);else for(Q=z;Q<=F;Q++)if(Rt[Q-z]===0&<(we,f[Q])){Me=Q;break}Me===void 0?Ie(we,y,C,!0):(Rt[Me-z]=b+1,Me>=Fs?Fs=Me:pt=!0,P(we,f[Me],g,null,y,C,A,S,x),oe++)}const Hs=pt?Wl(Rt):mt;for(Q=Hs.length-1,b=Oe-1;b>=0;b--){const we=z+b,Me=f[we],$s=we+1{const{el:C,type:A,transition:S,children:x,shapeFlag:b}=a;if(b&6){tt(a.component.subTree,f,g,w);return}if(b&128){a.suspense.move(f,g,w);return}if(b&64){A.move(a,f,g,ht);return}if(A===be){s(C,f,g);for(let H=0;HS.enter(C),y);else{const{leave:H,delayLeave:F,afterLeave:k}=S,z=()=>s(C,f,g),te=()=>{H(C,()=>{z(),k&&k()})};F?F(C,z,te):te()}else s(C,f,g)},Ie=(a,f,g,w=!1,y=!1)=>{const{type:C,props:A,ref:S,children:x,dynamicChildren:b,shapeFlag:L,patchFlag:H,dirs:F,cacheIndex:k}=a;if(H===-2&&(y=!1),S!=null&&hn(S,null,g,a,!0),k!=null&&(f.renderCache[k]=void 0),L&256){f.ctx.deactivate(a);return}const z=L&1&&F,te=!wt(a);let Q;if(te&&(Q=A&&A.onVnodeBeforeUnmount)&&xe(Q,f,a),L&6)co(a.component,g,w);else{if(L&128){a.suspense.unmount(g,w);return}z&&Pe(a,null,f,"beforeUnmount"),L&64?a.type.remove(a,f,g,ht,w):b&&!b.hasOnce&&(C!==be||H>0&&H&64)?At(b,f,g,!1,!0):(C===be&&H&384||!y&&L&16)&&At(x,f,g),w&&Ps(a)}(te&&(Q=A&&A.onVnodeUnmounted)||z)&&_e(()=>{Q&&xe(Q,f,a),z&&Pe(a,null,f,"unmounted")},g)},Ps=a=>{const{type:f,el:g,anchor:w,transition:y}=a;if(f===be){lo(g,w);return}if(f===Pt){m(a);return}const C=()=>{r(g),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(a.shapeFlag&1&&y&&!y.persisted){const{leave:A,delayLeave:S}=y,x=()=>A(g,C);S?S(a.el,C,x):x()}else C()},lo=(a,f)=>{let g;for(;a!==f;)g=v(a),r(a),a=g;r(f)},co=(a,f,g)=>{const{bum:w,scope:y,update:C,subTree:A,um:S,m:x,a:b}=a;tr(x),tr(b),w&&Fn(w),y.stop(),C&&(C.active=!1,Ie(A,a,f,g)),S&&_e(S,f),_e(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},At=(a,f,g,w=!1,y=!1,C=0)=>{for(let A=C;A{if(a.shapeFlag&6)return kt(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const f=v(a.anchor||a.el),g=f&&f[jl];return g?v(g):f};let Mn=!1;const Ns=(a,f,g)=>{a==null?f._vnode&&Ie(f._vnode,null,null,!0):P(f._vnode||null,a,f,null,null,null,g),f._vnode=a,Mn||(Mn=!0,qs(),an(),Mn=!1)},ht={p:P,um:Ie,m:tt,r:Ps,mt:ee,mc:B,pc:j,pbc:_,n:kt,o:e};let Pn,Nn;return t&&([Pn,Nn]=t(ht)),{render:Ns,hydrate:Pn,createApp:Ll(Ns,Pn)}}function Dn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ai(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ri(e,t,n=!1){const s=e.children,r=t.children;if(V(s)&&V(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Oi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Oi(t)}function tr(e){if(e)for(let t=0;tCt(ql);function Li(e,t){return Rn(e,null,t)}function Xa(e,t){return Rn(e,null,{flush:"post"})}const Qt={};function Fe(e,t,n){return Rn(e,t,n)}function Rn(e,t,{immediate:n,deep:s,flush:r,once:i,onTrack:o,onTrigger:l}=se){if(t&&i){const R=t;t=(...U)=>{R(...U),I()}}const c=ae,u=R=>s===!0?R:ot(R,s===!1?1:void 0);let d,h=!1,v=!1;if(ge(e)?(d=()=>e.value,h=St(e)):bt(e)?(d=()=>u(e),h=!0):V(e)?(v=!0,h=e.some(R=>bt(R)||St(R)),d=()=>e.map(R=>{if(ge(R))return R.value;if(bt(R))return u(R);if(K(R))return Ge(R,c,2)})):K(e)?t?d=()=>Ge(e,c,2):d=()=>(T&&T(),Re(e,c,3,[N])):d=Ae,t&&s){const R=d;d=()=>ot(R())}let T,N=R=>{T=p.onStop=()=>{Ge(R,c,4),T=p.onStop=void 0}},P;if(In)if(N=Ae,t?n&&Re(t,c,3,[d(),v?[]:void 0,N]):d(),r==="sync"){const R=Gl();P=R.__watcherHandles||(R.__watcherHandles=[])}else return Ae;let W=v?new Array(e.length).fill(Qt):Qt;const q=()=>{if(!(!p.active||!p.dirty))if(t){const R=p.run();(s||h||(v?R.some((U,B)=>Xe(U,W[B])):Xe(R,W)))&&(T&&T(),Re(t,c,3,[R,W===Qt?void 0:v&&W[0]===Qt?[]:W,N]),W=R)}else p.run()};q.allowRecurse=!!t;let G;r==="sync"?G=q:r==="post"?G=()=>_e(q,c&&c.suspense):(q.pre=!0,c&&(q.id=c.uid),G=()=>Ts(q));const p=new ys(d,Ae,G),m=jr(),I=()=>{p.stop(),m&&hs(m.effects,p)};return t?n?q():W=p.run():r==="post"?_e(p.run.bind(p),c&&c.suspense):p.run(),P&&P.push(I),I}function zl(e,t,n){const s=this.proxy,r=ie(e)?e.includes(".")?Ii(s,e):()=>s[e]:e.bind(s,s);let i;K(t)?i=t:(i=t.handler,n=t);const o=Ut(this),l=Rn(r,i.bind(s),n);return o(),l}function Ii(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{ot(s,t,n)});else if(Mr(e)){for(const s in e)ot(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&ot(e[s],t,n)}return e}const Xl=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Le(t)}Modifiers`]||e[`${Qe(t)}Modifiers`];function Yl(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||se;let r=n;const i=t.startsWith("update:"),o=i&&Xl(s,t.slice(7));o&&(o.trim&&(r=n.map(d=>ie(d)?d.trim():d)),o.number&&(r=n.map(go)));let l,c=s[l=nn(t)]||s[l=nn(Le(t))];!c&&i&&(c=s[l=nn(Qe(t))]),c&&Re(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Re(u,e,6,r)}}function Mi(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!K(e)){const c=u=>{const d=Mi(u,t,!0);d&&(l=!0,le(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Z(e)&&s.set(e,null),null):(V(i)?i.forEach(c=>o[c]=null):le(o,i),Z(e)&&s.set(e,o),o)}function On(e,t){return!e||!Vt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,Qe(t))||Y(e,t))}function Vn(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:d,props:h,data:v,setupState:T,ctx:N,inheritAttrs:P}=e,W=fn(e);let q,G;try{if(n.shapeFlag&4){const m=r||s,I=m;q=Te(u.call(I,m,d,h,T,v,N)),G=l}else{const m=t;q=Te(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),G=t.props?l:Jl(l)}}catch(m){Nt.length=0,En(m,e,1),q=ue(ye)}let p=q;if(G&&P!==!1){const m=Object.keys(G),{shapeFlag:I}=p;m.length&&I&7&&(i&&m.some(ds)&&(G=Ql(G,i)),p=Ye(p,G,!1,!0))}return n.dirs&&(p=Ye(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),q=p,fn(W),q}const Jl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Vt(n))&&((t||(t={}))[n]=e[n]);return t},Ql=(e,t)=>{const n={};for(const s in e)(!ds(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Zl(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?nr(s,o,u):!!o;if(c&8){const d=t.dynamicProps;for(let h=0;he.__isSuspense;function Pi(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):ol(e)}const be=Symbol.for("v-fgt"),ft=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Pt=Symbol.for("v-stc"),Nt=[];let Ce=null;function Ni(e=!1){Nt.push(Ce=e?null:[])}function nc(){Nt.pop(),Ce=Nt[Nt.length-1]||null}let jt=1;function sr(e){jt+=e,e<0&&Ce&&(Ce.hasOnce=!0)}function Fi(e){return e.dynamicChildren=jt>0?Ce||mt:null,nc(),jt>0&&Ce&&Ce.push(e),e}function Ya(e,t,n,s,r,i){return Fi(ji(e,t,n,s,r,i,!0))}function Hi(e,t,n,s,r){return Fi(ue(e,t,n,s,r,!0))}function pn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const $i=({key:e})=>e??null,rn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ie(e)||ge(e)||K(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function ji(e,t=null,n=null,s=0,r=null,i=e===be?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&$i(t),ref:t&&rn(t),scopeId:Sn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:pe};return l?(Os(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ie(n)?8:16),jt>0&&!o&&Ce&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ce.push(c),c}const ue=sc;function sc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===hi)&&(e=ye),pn(e)){const l=Ye(e,t,!0);return n&&Os(l,n),jt>0&&!i&&Ce&&(l.shapeFlag&6?Ce[Ce.indexOf(e)]=l:Ce.push(l)),l.patchFlag=-2,l}if(hc(e)&&(e=e.__vccOpts),t){t=rc(t);let{class:l,style:c}=t;l&&!ie(l)&&(t.class=ms(l)),Z(c)&&(Yr(c)&&!V(c)&&(c=le({},c)),t.style=gs(c))}const o=ie(e)?1:tc(e)?128:Dl(e)?64:Z(e)?4:K(e)?2:0;return ji(e,t,n,s,r,o,i,!0)}function rc(e){return e?Yr(e)||vi(e)?le({},e):e:null}function Ye(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,u=t?ic(r||{},t):r,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&$i(u),ref:t&&t.ref?n&&i?V(i)?i.concat(rn(t)):[i,rn(t)]:rn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==be?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ye(e.ssContent),ssFallback:e.ssFallback&&Ye(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&un(d,c.clone(d)),d}function Di(e=" ",t=0){return ue(ft,null,e,t)}function Ja(e,t){const n=ue(Pt,null,e);return n.staticCount=t,n}function Qa(e="",t=!1){return t?(Ni(),Hi(ye,null,e)):ue(ye,null,e)}function Te(e){return e==null||typeof e=="boolean"?ue(ye):V(e)?ue(be,null,e.slice()):typeof e=="object"?We(e):ue(ft,null,String(e))}function We(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ye(e)}function Os(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Os(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!vi(t)?t._ctx=pe:r===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),s&64?(n=16,t=[Di(t)]):n=8);e.children=t,e.shapeFlag|=n}function ic(...e){const t={};for(let n=0;nae||pe;let gn,as;{const e=Nr(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};gn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),as=t("__VUE_SSR_SETTERS__",n=>In=n)}const Ut=e=>{const t=ae;return gn(e),e.scope.on(),()=>{e.scope.off(),gn(t)}},rr=()=>{ae&&ae.scope.off(),gn(null)};function Vi(e){return e.vnode.shapeFlag&4}let In=!1;function ac(e,t=!1,n=!1){t&&as(t);const{props:s,children:r}=e.vnode,i=Vi(e);Ml(e,s,i,t),Hl(e,r,n);const o=i?fc(e,t):void 0;return t&&as(!1),o}function fc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,El);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Bi(e):null,i=Ut(e);Ze();const o=Ge(s,e,0,[e.props,r]);if(et(),i(),Lr(o)){if(o.then(rr,rr),t)return o.then(l=>{ir(e,l,t)}).catch(l=>{En(l,e,0)});e.asyncDep=o}else ir(e,o,t)}else Ui(e,t)}function ir(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=ti(t)),Ui(e,n)}let or;function Ui(e,t,n){const s=e.type;if(!e.render){if(!t&&or&&!s.render){const r=s.template||As(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=le(le({isCustomElement:i,delimiters:l},o),c);s.render=or(r,u)}}e.render=s.render||Ae}{const r=Ut(e);Ze();try{Sl(e)}finally{et(),r()}}}const uc={get(e,t){return ve(e,"get",""),e[t]}};function Bi(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,uc),slots:e.slots,emit:e.emit,expose:t}}function Ls(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(ti(sn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Mt)return Mt[n](e)},has(t,n){return n in t||n in Mt}})):e.proxy}function dc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function hc(e){return K(e)&&"__vccOpts"in e}const re=(e,t)=>zo(e,t,In);function fs(e,t,n){const s=arguments.length;return s===2?Z(t)&&!V(t)?pn(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pn(n)&&(n=[n]),ue(e,t,n))}const pc="3.4.38";/** +* @vue/runtime-dom v3.4.38 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const gc="http://www.w3.org/2000/svg",mc="http://www.w3.org/1998/Math/MathML",He=typeof document<"u"?document:null,lr=He&&He.createElement("template"),yc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?He.createElementNS(gc,e):t==="mathml"?He.createElementNS(mc,e):n?He.createElement(e,{is:n}):He.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>He.createTextNode(e),createComment:e=>He.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>He.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{lr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=lr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Ue="transition",Ot="animation",Dt=Symbol("_vtc"),ki=(e,{slots:t})=>fs(ul,_c(e),t);ki.displayName="Transition";const Ki={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};ki.props=le({},ii,Ki);const st=(e,t=[])=>{V(e)?e.forEach(n=>n(...t)):e&&e(...t)},cr=e=>e?V(e)?e.some(t=>t.length>1):e.length>1:!1;function _c(e){const t={};for(const E in e)E in Ki||(t[E]=e[E]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:T=`${n}-leave-to`}=e,N=bc(r),P=N&&N[0],W=N&&N[1],{onBeforeEnter:q,onEnter:G,onEnterCancelled:p,onLeave:m,onLeaveCancelled:I,onBeforeAppear:R=q,onAppear:U=G,onAppearCancelled:B=p}=t,O=(E,D,ee)=>{rt(E,D?d:l),rt(E,D?u:o),ee&&ee()},_=(E,D)=>{E._isLeaving=!1,rt(E,h),rt(E,T),rt(E,v),D&&D()},M=E=>(D,ee)=>{const ne=E?U:G,$=()=>O(D,E,ee);st(ne,[D,$]),ar(()=>{rt(D,E?c:i),Be(D,E?d:l),cr(ne)||fr(D,s,P,$)})};return le(t,{onBeforeEnter(E){st(q,[E]),Be(E,i),Be(E,o)},onBeforeAppear(E){st(R,[E]),Be(E,c),Be(E,u)},onEnter:M(!1),onAppear:M(!0),onLeave(E,D){E._isLeaving=!0;const ee=()=>_(E,D);Be(E,h),Be(E,v),Ec(),ar(()=>{E._isLeaving&&(rt(E,h),Be(E,T),cr(m)||fr(E,s,W,ee))}),st(m,[E,ee])},onEnterCancelled(E){O(E,!1),st(p,[E])},onAppearCancelled(E){O(E,!0),st(B,[E])},onLeaveCancelled(E){_(E),st(I,[E])}})}function bc(e){if(e==null)return null;if(Z(e))return[Un(e.enter),Un(e.leave)];{const t=Un(e);return[t,t]}}function Un(e){return mo(e)}function Be(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Dt]||(e[Dt]=new Set)).add(t)}function rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Dt];n&&(n.delete(t),n.size||(e[Dt]=void 0))}function ar(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let vc=0;function fr(e,t,n,s){const r=e._endId=++vc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=wc(e,t);if(!o)return s();const u=o+"end";let d=0;const h=()=>{e.removeEventListener(u,v),i()},v=T=>{T.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[N]||"").split(", "),r=s(`${Ue}Delay`),i=s(`${Ue}Duration`),o=ur(r,i),l=s(`${Ot}Delay`),c=s(`${Ot}Duration`),u=ur(l,c);let d=null,h=0,v=0;t===Ue?o>0&&(d=Ue,h=o,v=i.length):t===Ot?u>0&&(d=Ot,h=u,v=c.length):(h=Math.max(o,u),d=h>0?o>u?Ue:Ot:null,v=d?d===Ue?i.length:c.length:0);const T=d===Ue&&/\b(transform|all)(,|$)/.test(s(`${Ue}Property`).toString());return{type:d,timeout:h,propCount:v,hasTransform:T}}function ur(e,t){for(;e.lengthdr(n)+dr(e[s])))}function dr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Ec(){return document.body.offsetHeight}function Cc(e,t,n){const s=e[Dt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const hr=Symbol("_vod"),Sc=Symbol("_vsh"),xc=Symbol(""),Tc=/(^|;)\s*display\s*:/;function Ac(e,t,n){const s=e.style,r=ie(n);let i=!1;if(n&&!r){if(t)if(ie(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n)o==="display"&&(i=!0),on(s,o,n[o])}else if(r){if(t!==n){const o=s[xc];o&&(n+=";"+o),s.cssText=n,i=Tc.test(n)}}else t&&e.removeAttribute("style");hr in e&&(e[hr]=i?s.display:"",e[Sc]&&(s.display="none"))}const pr=/\s*!important$/;function on(e,t,n){if(V(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Rc(e,t);pr.test(n)?e.setProperty(Qe(s),n.replace(pr,""),"important"):e[s]=n}}const gr=["Webkit","Moz","ms"],Bn={};function Rc(e,t){const n=Bn[t];if(n)return n;let s=Le(t);if(s!=="filter"&&s in e)return Bn[t]=s;s=_n(s);for(let r=0;rkn||(Nc.then(()=>kn=0),kn=Date.now());function Hc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Re($c(s,n.value),t,5,[s])};return n.value=e,n.attached=Fc(),n}function $c(e,t){if(V(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const vr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,jc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Cc(e,s,o):t==="style"?Ac(e,n,s):Vt(t)?ds(t)||Mc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Dc(e,t,s,o))?(Oc(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&yr(e,t,s,o,i,t!=="value")):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),yr(e,t,s,o))};function Dc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&vr(t)&&K(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 r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return vr(t)&&ie(n)?!1:t in e}const Vc=["ctrl","shift","alt","meta"],Uc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Vc.some(n=>e[`${n}Key`]&&!t.includes(n))},Za=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=Qe(r.key);if(t.some(o=>o===i||Bc[o]===i))return e(r)})},kc=le({patchProp:jc},yc);let Kn,wr=!1;function Kc(){return Kn=wr?Kn:kl(kc),wr=!0,Kn}const tf=(...e)=>{const t=Kc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=qc(s);if(r)return n(r,!0,Wc(r))},t};function Wc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function qc(e){return ie(e)?document.querySelector(e):e}const nf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Gc=window.__VP_SITE_DATA__;function Is(e){return jr()?(To(e),!0):!1}function ze(e){return typeof e=="function"?e():ei(e)}const Wi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const zc=Object.prototype.toString,Xc=e=>zc.call(e)==="[object Object]",qi=()=>{},Er=Yc();function Yc(){var e,t;return Wi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Jc(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Gi=e=>e();function Qc(e=Gi){const t=fe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:wn(t),pause:n,resume:s,eventFilter:r}}function Zc(e){return Ln()}function zi(...e){if(e.length!==1)return tl(...e);const t=e[0];return typeof t=="function"?wn(Qo(()=>({get:t,set:qi}))):fe(t)}function ea(e,t,n={}){const{eventFilter:s=Gi,...r}=n;return Fe(e,Jc(s,t),r)}function ta(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Qc(s);return{stop:ea(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function Ms(e,t=!0,n){Zc()?Tt(e,n):t?e():Cn(e)}function Xi(e){var t;const n=ze(e);return(t=n==null?void 0:n.$el)!=null?t:n}const je=Wi?window:void 0;function xt(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=je):[t,n,s,r]=e,!t)return qi;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,v,T)=>(d.addEventListener(h,v,T),()=>d.removeEventListener(h,v,T)),c=Fe(()=>[Xi(t),ze(r)],([d,h])=>{if(o(),!d)return;const v=Xc(h)?{...h}:h;i.push(...n.flatMap(T=>s.map(N=>l(d,T,N,v))))},{immediate:!0,flush:"post"}),u=()=>{c(),o()};return Is(u),u}function na(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function sf(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=na(t);return xt(r,i,d=>{d.repeat&&ze(l)||c(d)&&n(d)},o)}function sa(){const e=fe(!1),t=Ln();return t&&Tt(()=>{e.value=!0},t),e}function ra(e){const t=sa();return re(()=>(t.value,!!e()))}function Yi(e,t={}){const{window:n=je}=t,s=ra(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=fe(!1),o=u=>{i.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=Li(()=>{s.value&&(l(),r=n.matchMedia(ze(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Is(()=>{c(),l(),r=void 0}),i}const Zt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},en="__vueuse_ssr_handlers__",ia=oa();function oa(){return en in Zt||(Zt[en]=Zt[en]||{}),Zt[en]}function Ji(e,t){return ia[e]||t}function la(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 ca={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()}},Cr="vueuse-storage";function aa(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=je,eventFilter:v,onError:T=_=>{console.error(_)},initOnMounted:N}=s,P=(d?Qr:fe)(typeof t=="function"?t():t);if(!n)try{n=Ji("getDefaultStorage",()=>{var _;return(_=je)==null?void 0:_.localStorage})()}catch(_){T(_)}if(!n)return P;const W=ze(t),q=la(W),G=(r=s.serializer)!=null?r:ca[q],{pause:p,resume:m}=ta(P,()=>R(P.value),{flush:i,deep:o,eventFilter:v});h&&l&&Ms(()=>{n instanceof Storage?xt(h,"storage",B):xt(h,Cr,O),N&&B()}),N||B();function I(_,M){if(h){const E={key:e,oldValue:_,newValue:M,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",E):new CustomEvent(Cr,{detail:E}))}}function R(_){try{const M=n.getItem(e);if(_==null)I(M,null),n.removeItem(e);else{const E=G.write(_);M!==E&&(n.setItem(e,E),I(M,E))}}catch(M){T(M)}}function U(_){const M=_?_.newValue:n.getItem(e);if(M==null)return c&&W!=null&&n.setItem(e,G.write(W)),W;if(!_&&u){const E=G.read(M);return typeof u=="function"?u(E,W):q==="object"&&!Array.isArray(E)?{...W,...E}:E}else return typeof M!="string"?M:G.read(M)}function B(_){if(!(_&&_.storageArea!==n)){if(_&&_.key==null){P.value=W;return}if(!(_&&_.key!==e)){p();try{(_==null?void 0:_.newValue)!==G.write(P.value)&&(P.value=U(_))}catch(M){T(M)}finally{_?Cn(m):m()}}}}function O(_){B(_.detail)}return P}function Qi(e){return Yi("(prefers-color-scheme: dark)",e)}const fa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function ua(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},v=Qi({window:r}),T=re(()=>v.value?"dark":"light"),N=c||(o==null?zi(s):aa(o,s,i,{window:r,listenToStorageChanges:l})),P=re(()=>N.value==="auto"?T.value:N.value),W=Ji("updateHTMLAttrs",(m,I,R)=>{const U=typeof m=="string"?r==null?void 0:r.document.querySelector(m):Xi(m);if(!U)return;const B=new Set,O=new Set;let _=null;if(I==="class"){const E=R.split(/\s/g);Object.values(h).flatMap(D=>(D||"").split(/\s/g)).filter(Boolean).forEach(D=>{E.includes(D)?B.add(D):O.add(D)})}else _={key:I,value:R};if(B.size===0&&O.size===0&&_===null)return;let M;d&&(M=r.document.createElement("style"),M.appendChild(document.createTextNode(fa)),r.document.head.appendChild(M));for(const E of B)U.classList.add(E);for(const E of O)U.classList.remove(E);_&&U.setAttribute(_.key,_.value),d&&(r.getComputedStyle(M).opacity,document.head.removeChild(M))});function q(m){var I;W(t,n,(I=h[m])!=null?I:m)}function G(m){e.onChanged?e.onChanged(m,q):q(m)}Fe(P,G,{flush:"post",immediate:!0}),Ms(()=>G(P.value));const p=re({get(){return u?N.value:P.value},set(m){N.value=m}});try{return Object.assign(p,{store:N,system:T,state:P})}catch{return p}}function da(e={}){const{valueDark:t="dark",valueLight:n="",window:s=je}=e,r=ua({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=re(()=>r.system?r.system.value:Qi({window:s}).value?"dark":"light");return re({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Wn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Zi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const qn=new WeakMap;function rf(e,t=!1){const n=fe(t);let s=null,r="";Fe(zi(e),l=>{const c=Wn(ze(l));if(c){const u=c;if(qn.get(u)||qn.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=Wn(ze(e));!l||n.value||(Er&&(s=xt(l,"touchmove",c=>{ha(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=Wn(ze(e));!l||!n.value||(Er&&(s==null||s()),l.style.overflow=r,qn.delete(l),n.value=!1)};return Is(o),re({get(){return n.value},set(l){l?i():o()}})}function of(e={}){const{window:t=je,behavior:n="auto"}=e;if(!t)return{x:fe(0),y:fe(0)};const s=fe(t.scrollX),r=fe(t.scrollY),i=re({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=re({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return xt(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function lf(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=fe(n),c=fe(s),u=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(u(),Ms(u),xt("resize",u,{passive:!0}),r){const d=Yi("(orientation: portrait)");Fe(d,()=>u())}return{width:l,height:c}}const Gn={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var zn={};const eo=/^(?:[a-z]+:|\/\/)/i,pa="vitepress-theme-appearance",ga=/#.*$/,ma=/[?#].*$/,ya=/(?:(^|\/)index)?\.(?:md|html)$/,de=typeof document<"u",to={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function _a(e,t,n=!1){if(t===void 0)return!1;if(e=Sr(`/${e}`),n)return new RegExp(t).test(e);if(Sr(t)!==e)return!1;const s=t.match(ga);return s?(de?location.hash:"")===s[0]:!0}function Sr(e){return decodeURI(e).replace(ma,"").replace(ya,"$1")}function ba(e){return eo.test(e)}function va(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!ba(n)&&_a(t,`/${n}/`,!0))||"root"}function wa(e,t){var s,r,i,o,l,c,u;const n=va(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:so(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function no(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=Ea(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function Ea(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ca(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function so(e,t){return[...e.filter(n=>!Ca(t,n)),...t]}const Sa=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,xa=/^[a-z]:/i;function xr(e){const t=xa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Sa,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Xn=new Set;function Ta(e){if(Xn.size===0){const n=typeof process=="object"&&(zn==null?void 0:zn.VITE_EXTRA_EXTENSIONS)||(Gn==null?void 0:Gn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Xn.add(s))}const t=e.split(".").pop();return t==null||!Xn.has(t.toLowerCase())}const Aa=Symbol(),ut=Qr(Gc);function cf(e){const t=re(()=>wa(ut.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?fe(!0):n?da({storageKey:pa,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):fe(!1),r=fe(de?location.hash:"");return de&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Fe(()=>e.data,()=>{r.value=de?location.hash:""}),{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>no(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:s,hash:re(()=>r.value)}}function Ra(){const e=Ct(Aa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Oa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Tr(e){return eo.test(e)||!e.startsWith("/")?e:Oa(ut.value.base,e)}function La(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),de){const n="/";t=xr(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${xr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ln=[];function af(e){ln.push(e),An(()=>{ln=ln.filter(t=>t!==e)})}function Ia(){let e=ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ar(e,n);else if(Array.isArray(e))for(const s of e){const r=Ar(s,n);if(r){t=r;break}}return t}function Ar(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Ma=Symbol(),ro="http://a.com",Pa=()=>({path:"/",component:null,data:to});function ff(e,t){const n=vn(Pa()),s={route:n,go:r};async function r(l=de?location.href:"/"){var c,u;l=Yn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(de&&l!==Yn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l)))}let i=null;async function o(l,c=0,u=!1){var v;if(await((v=s.onBeforePageLoad)==null?void 0:v.call(s,l))===!1)return;const d=new URL(l,ro),h=i=d.pathname;try{let T=await e(h);if(!T)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:N,__pageData:P}=T;if(!N)throw new Error(`Invalid route component: ${N}`);n.path=de?h:Tr(h),n.component=sn(N),n.data=sn(P),de&&Cn(()=>{let W=ut.value.base+P.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ut.value.cleanUrls&&!W.endsWith("/")&&(W+=".html"),W!==d.pathname&&(d.pathname=W,l=W+d.search+d.hash,history.replaceState({},"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(G){console.warn(G)}if(q){Rr(q,d.hash);return}}window.scrollTo(0,c)})}}catch(T){if(!/fetch|Page not found/.test(T.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(T),!u)try{const N=await fetch(ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await N.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=de?h:Tr(h),n.component=t?sn(t):null;const N=de?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...to,relativePath:N}}}}return de&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:d,origin:h,pathname:v,hash:T,search:N}=new URL(u,c.baseURI),P=new URL(location.href);h===P.origin&&Ta(v)&&(l.preventDefault(),v===P.pathname&&N===P.search?(T!==P.hash&&(history.pushState({},"",d),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:P.href,newURL:d}))),T?Rr(c,T,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(d))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(Yn(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Na(){const e=Ct(Ma);if(!e)throw new Error("useRouter() is called without provider.");return e}function io(){return Na().route}function Rr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Ia()+i;requestAnimationFrame(r)}}function Yn(e){const t=new URL(e,ro);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Jn=()=>ln.forEach(e=>e()),uf=ai({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=io(),{site:n}=Ra();return()=>fs(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?fs(t.component,{onVnodeMounted:Jn,onVnodeUpdated:Jn,onVnodeUnmounted:Jn}):"404 Page Not Found"])}}),df=ai({setup(e,{slots:t}){const n=fe(!1);return Tt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function hf(){de&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function pf(){if(de){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(d=>d.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Fa(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const d=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,d)})}})}}async function Fa(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function gf(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=Qn(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(Qn);s.forEach((l,c)=>{const u=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};Li(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=no(o,i);u!==document.title&&(document.title=u);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Qn(["meta",{name:"description",content:d}]),r(so(o.head,$a(c)))})}function Qn([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Ha(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function $a(e){return e.filter(t=>!Ha(t))}const Zn=new Set,oo=()=>document.createElement("link"),ja=e=>{const t=oo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Da=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let tn;const Va=de&&(tn=oo())&&tn.relList&&tn.relList.supports&&tn.relList.supports("prefetch")?ja:Da;function mf(){if(!de||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Zn.has(c)){Zn.add(c);const u=La(c);u&&Va(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Zn.add(l))})})};Tt(s);const r=io();Fe(()=>r.path,s),An(()=>{n&&n.disconnect()})}export{ui as $,Xa as A,yl as B,Ia as C,ka as D,Wa as E,be as F,Qr as G,af as H,ue as I,Ka as J,eo as K,io as L,ic as M,Ct as N,lf as O,gs as P,sf as Q,Cn as R,of as S,ki as T,de as U,wn as V,rf as W,Il as X,ef as Y,Ga as Z,nf as _,Di as a,Za as a0,za as a1,Ja as a2,gf as a3,Ma as a4,cf as a5,Aa as a6,uf as a7,df as a8,ut as a9,tf as aa,ff as ab,La as ac,mf as ad,pf as ae,hf as af,fs as ag,Hi as b,Ya as c,ai as d,Qa as e,Ta as f,Tr as g,re as h,ba as i,ji as j,ei as k,Ba as l,_a as m,ms as n,Ni as o,Ua as p,Yi as q,qa as r,fe as s,Co as t,Ra as u,Fe as v,cl as w,Li as x,Tt as y,An as z}; diff --git a/assets/chunks/metadata.26cd3d1c.js b/assets/chunks/metadata.26cd3d1c.js new file mode 100644 index 0000000..7fce0f0 --- /dev/null +++ b/assets/chunks/metadata.26cd3d1c.js @@ -0,0 +1 @@ +window.__VP_HASH_MAP__=JSON.parse("{\"changelog.md\":\"DzTTOHiP\",\"dart_api_format.md\":\"DR-edXt0\",\"dart_api_index.md\":\"DM_mNYW9\",\"dart_api_string.md\":\"Bb_91aIp\",\"dart_dart.md\":\"CjYHPzEJ\",\"dart_installation.md\":\"40B1wVko\",\"index.md\":\"DJBof6uu\",\"introduction.md\":\"C5L9HcfQ\",\"js_api_array.md\":\"MuUQaxvs\",\"js_api_crypto.md\":\"DWDCP7x5\",\"js_api_date.md\":\"D0dBBDiO\",\"js_api_format.md\":\"BEODkbmw\",\"js_api_index.md\":\"CAPv2HYo\",\"js_api_math.md\":\"CEKd2KuL\",\"js_api_misc.md\":\"BqNcZivJ\",\"js_api_object.md\":\"CPHo2EZ3\",\"js_api_string.md\":\"DeKPXuMr\",\"js_api_verify.md\":\"BqArh73l\",\"js_installation.md\":\"BLmW6zAx\",\"js_js.md\":\"DEJf1Edl\",\"js_qsu-web_api_index.md\":\"CmwO6iGe\",\"js_qsu-web_api_web.md\":\"C1UHo3YI\",\"js_qsu-web_installation.md\":\"DHji8q2j\",\"ko_dart_api_format.md\":\"ChyCeyny\",\"ko_dart_api_index.md\":\"DktGqtiu\",\"ko_dart_api_string.md\":\"DkrkSVvN\",\"ko_dart_dart.md\":\"BWgDH20j\",\"ko_dart_installation.md\":\"_931pPlw\",\"ko_index.md\":\"BOisvvBD\",\"ko_introduction.md\":\"wUSGH5H2\",\"ko_js_api_array.md\":\"BHmeF-S_\",\"ko_js_api_crypto.md\":\"ed9Rza2p\",\"ko_js_api_date.md\":\"DDF3M5ki\",\"ko_js_api_format.md\":\"D0sl5Vi7\",\"ko_js_api_index.md\":\"B8uIDdkf\",\"ko_js_api_math.md\":\"D6cYV6Da\",\"ko_js_api_misc.md\":\"DXT2Oy3O\",\"ko_js_api_object.md\":\"Bl6g5yCW\",\"ko_js_api_string.md\":\"BqZM1Zai\",\"ko_js_api_verify.md\":\"DTTpOah8\",\"ko_js_installation.md\":\"BNtZcu_d\",\"ko_js_js.md\":\"BkC8YduL\",\"ko_js_qsu-web_api_index.md\":\"lxregmxH\",\"ko_js_qsu-web_api_web.md\":\"BkRW42Q9\",\"ko_js_qsu-web_installation.md\":\"mQdEhdcr\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"QSU\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":{\"src\":\"/logo-32.png\",\"width\":24,\"height\":24},\"sidebar\":{\"/\":{\"base\":\"/\",\"items\":[{\"text\":\"Introduction\",\"link\":\"introduction\"},{\"text\":\"JavaScript/Node.js\",\"link\":\"js/js\",\"items\":[{\"text\":\"Installation\",\"link\":\"js/installation\"},{\"text\":\"Api\",\"items\":[{\"text\":\"Array\",\"link\":\"js/api/array\"},{\"text\":\"Object\",\"link\":\"js/api/object\"},{\"text\":\"String\",\"link\":\"js/api/string\"},{\"text\":\"Math\",\"link\":\"js/api/math\"},{\"text\":\"Verify\",\"link\":\"js/api/verify\"},{\"text\":\"Crypto\",\"link\":\"js/api/crypto\"},{\"text\":\"Date\",\"link\":\"js/api/date\"},{\"text\":\"Format\",\"link\":\"js/api/format\"},{\"text\":\"Misc\",\"link\":\"js/api/misc\"}],\"collapsed\":false},{\"text\":\"Qsu-web\",\"items\":[{\"text\":\"Installation\",\"link\":\"js/qsu-web/installation\"},{\"text\":\"Api\",\"items\":[{\"text\":\"Web\",\"link\":\"js/qsu-web/api/web\"}],\"collapsed\":false}],\"collapsed\":false}],\"collapsed\":false},{\"text\":\"Dart/Flutter\",\"link\":\"dart/dart\",\"items\":[{\"text\":\"Installation\",\"link\":\"dart/installation\"},{\"text\":\"Api\",\"items\":[{\"text\":\"String\",\"link\":\"dart/api/string\"},{\"text\":\"Format\",\"link\":\"dart/api/format\"}],\"collapsed\":false}],\"collapsed\":false}]},\"/ko/\":{\"base\":\"/ko/\",\"items\":[{\"text\":\"소개\",\"link\":\"introduction\"},{\"text\":\"JavaScript/Node.js\",\"link\":\"js/js\",\"items\":[{\"text\":\"설치\",\"link\":\"js/installation\"},{\"text\":\"Api\",\"items\":[{\"text\":\"Array\",\"link\":\"js/api/array\"},{\"text\":\"Object\",\"link\":\"js/api/object\"},{\"text\":\"String\",\"link\":\"js/api/string\"},{\"text\":\"Math\",\"link\":\"js/api/math\"},{\"text\":\"Verify\",\"link\":\"js/api/verify\"},{\"text\":\"Crypto\",\"link\":\"js/api/crypto\"},{\"text\":\"Date\",\"link\":\"js/api/date\"},{\"text\":\"Format\",\"link\":\"js/api/format\"},{\"text\":\"Misc\",\"link\":\"js/api/misc\"}],\"collapsed\":false},{\"text\":\"Qsu-web\",\"items\":[{\"text\":\"설치\",\"link\":\"js/qsu-web/installation\"},{\"text\":\"Api\",\"items\":[{\"text\":\"Web\",\"link\":\"js/qsu-web/api/web\"}],\"collapsed\":false}],\"collapsed\":false}],\"collapsed\":false},{\"text\":\"Dart/Flutter\",\"link\":\"dart/dart\",\"items\":[{\"text\":\"Installation\",\"link\":\"dart/installation\"},{\"text\":\"Api\",\"items\":[{\"text\":\"String\",\"link\":\"dart/api/string\"},{\"text\":\"Format\",\"link\":\"dart/api/format\"}],\"collapsed\":false}],\"collapsed\":false}]}},\"footer\":{\"message\":\"Released under the MIT License\",\"copyright\":\"© CDGet\"}},\"locales\":{\"root\":{\"lang\":\"en-US\",\"label\":\"English\",\"description\":\"QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.\",\"themeConfig\":{\"editLink\":{\"pattern\":\"https://github.com/jooy2/qsu/edit/master/docs/src/:path\",\"text\":\"Edit this page\"},\"docFooter\":{\"prev\":\"Previous page\",\"next\":\"Next page\"},\"outline\":{\"label\":\"On this page\"},\"lastUpdated\":{\"text\":\"Last updated\"},\"langMenuLabel\":\"Change language\",\"returnToTopLabel\":\"Return to top\",\"sidebarMenuLabel\":\"Menu\",\"darkModeSwitchLabel\":\"Appearance\",\"lightModeSwitchTitle\":\"Switch to light theme\",\"darkModeSwitchTitle\":\"Switch to dark theme\",\"nav\":[{\"text\":\"JavaScript\",\"link\":\"js/installation\"},{\"text\":\"Dart\",\"link\":\"dart/installation\"}]}},\"ko\":{\"lang\":\"ko-KR\",\"label\":\"한국어\",\"description\":\"QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.\",\"themeConfig\":{\"editLink\":{\"pattern\":\"https://github.com/jooy2/qsu/edit/master/docs/src/:path\",\"text\":\"이 페이지 편집 제안\"},\"docFooter\":{\"prev\":\"이전\",\"next\":\"다음\"},\"outline\":{\"label\":\"이 페이지 콘텐츠\"},\"lastUpdated\":{\"text\":\"업데이트 일자\"},\"langMenuLabel\":\"언어 변경\",\"returnToTopLabel\":\"맨 위로\",\"sidebarMenuLabel\":\"사이드바 메뉴\",\"darkModeSwitchLabel\":\"다크 모드\",\"lightModeSwitchTitle\":\"라이트 모드로 변경\",\"darkModeSwitchTitle\":\"다크 모드로 변경\",\"nav\":[{\"text\":\"JavaScript\",\"link\":\"js/installation\"},{\"text\":\"Dart\",\"link\":\"dart/installation\"}]}}},\"scrollOffset\":134,\"cleanUrls\":true}"); \ No newline at end of file diff --git a/assets/chunks/theme.HAdjE-22.js b/assets/chunks/theme.HAdjE-22.js new file mode 100644 index 0000000..15abe55 --- /dev/null +++ b/assets/chunks/theme.HAdjE-22.js @@ -0,0 +1 @@ +import{d as _,o as a,c,r as l,n as w,a as O,t as T,b as k,w as v,e as f,T as de,_ as b,u as Oe,i as Ge,f as Ue,g as ve,h as g,j as p,k as r,p as C,l as H,m as W,q as ie,s as I,v as G,x as Z,y as K,z as pe,A as he,B as je,C as ze,D as J,F as M,E,G as ye,H as x,I as m,J as F,K as Pe,L as ee,M as q,N as te,O as qe,P as Ve,Q as We,R as Ke,S as Le,U as oe,V as Je,W as Se,X as Te,Y as Re,Z as Ye,$ as Qe,a0 as Xe,a1 as Ze}from"./framework.C94oF1kp.js";const xe=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:w(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[O(T(e.text),1)])],2))}}),et={key:0,class:"VPBackdrop"},tt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(de,{name:"fade"},{default:v(()=>[e.show?(a(),c("div",et)):f("",!0)]),_:1}))}}),ot=b(tt,[["__scopeId","data-v-c79a1216"]]),P=Oe;function nt(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!Ue(e))return o;const{site:i}=P(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(u)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=P(),u=g(()=>{var d,$;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:g(()=>Object.entries(e.value.locales).flatMap(([d,$])=>u.value.label===$.label?[]:{text:$.label,link:st($.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function st(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const at=o=>(C("data-v-d6be1790"),o=o(),H(),o),rt={class:"NotFound"},it={class:"code"},lt={class:"title"},ct=at(()=>p("div",{class:"divider"},null,-1)),ut={class:"quote"},dt={class:"action"},vt=["href","aria-label"],pt=_({__name:"NotFound",setup(o){const{theme:e}=P(),{currentLang:t}=Y();return(s,n)=>{var i,u,h,d,$;return a(),c("div",rt,[p("p",it,T(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",lt,T(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),ct,p("blockquote",ut,T(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",dt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},T((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,vt)])])}}}),ht=b(pt,[["__scopeId","data-v-d6be1790"]]);function Ie(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?Q(s):Q(s.items,s.base)}function ft(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function _t(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):W(o,e.link)?!0:e.items?ce(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=Q(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=P(),s=ie("(min-width: 960px)"),n=I(!1),i=g(()=>{const B=t.value.sidebar,S=e.value.relativePath;return B?Ie(B,S):[]}),u=I(i.value);G(i,(B,S)=>{JSON.stringify(B)!==JSON.stringify(S)&&(u.value=i.value)});const h=g(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),d=g(()=>$?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),$=g(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=g(()=>h.value&&s.value),y=g(()=>h.value?ft(u.value):[]);function L(){n.value=!0}function N(){n.value=!1}function A(){n.value?N():L()}return{isOpen:n,sidebar:u,sidebarGroups:y,hasSidebar:h,hasAside:$,leftAside:d,isSidebarEnabled:V,open:L,close:N,toggle:A}}function mt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),K(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function kt(o){const{page:e,hash:t}=P(),s=I(!1),n=g(()=>o.value.collapsed!=null),i=g(()=>!!o.value.link),u=I(!1),h=()=>{u.value=W(e.value.relativePath,o.value.link)};G([e,o,t],h),K(h);const d=g(()=>u.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),$=g(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),he(()=>{(u.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:u,hasActiveLink:d,hasChildren:$,toggle:V}}function bt(){const{hasSidebar:o}=U(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function we(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:$t(t),link:"#"+t.id,level:s}});return gt(e,o)}function $t(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function gt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=s&&u.level<=n),ue.length=0;for(const{element:u,link:h}of o)ue.push({element:u,link:h});const i=[];e:for(let u=0;u=0;d--){const $=o[d];if($.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),je(()=>{u(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const h=window.scrollY,d=window.innerHeight,$=document.body.offsetHeight,V=Math.abs(h+d-$)<1,y=ue.map(({element:N,link:A})=>({link:A,top:Pt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!y.length){u(null);return}if(h<1){u(null);return}if(V){u(y[y.length-1].link);return}let L=null;for(const{link:N,top:A}of y){if(A>h+ze()+4)break;L=N}u(L)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Pt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Vt=["href","title"],Lt=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=J("VPDocOutlineItem",!0);return a(),c("ul",{class:w(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[p("a",{class:"outline-link",href:u,onClick:e,title:h},T(h),9,Vt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ne=b(Lt,[["__scopeId","data-v-b933a997"]]),St={class:"content"},Tt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=P(),s=ye([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=I(),i=I();return yt(n,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",St,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",Tt,T(r(we)(r(t))),1),m(Ne,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),wt=b(It,[["__scopeId","data-v-a5bbad30"]]),Nt={class:"VPDocAsideCarbonAds"},Mt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Nt,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),At=o=>(C("data-v-3f215769"),o=o(),H(),o),Bt={class:"VPDocAside"},Ct=At(()=>p("div",{class:"spacer"},null,-1)),Ht=_({__name:"VPDocAside",setup(o){const{theme:e}=P();return(t,s)=>(a(),c("div",Bt,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(wt),l(t.$slots,"aside-outline-after",{},void 0,!0),Ct,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(Mt,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=b(Ht,[["__scopeId","data-v-3f215769"]]);function Ft(){const{theme:o,page:e}=P();return g(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Dt(){const{page:o,theme:e,frontmatter:t}=P();return g(()=>{var $,V,y,L,N,A,B,S;const s=Ie(e.value.sidebar,o.value.relativePath),n=_t(s),i=Ot(n,j=>j.link.replace(/[?#].*$/,"")),u=i.findIndex(j=>W(o.value.relativePath,j.link)),h=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[u-1])==null?void 0:y.docFooterText)??((L=i[u-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((N=i[u-1])==null?void 0:N.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[u+1])==null?void 0:A.docFooterText)??((B=i[u+1])==null?void 0:B.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[u+1])==null?void 0:S.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.tag??(e.href?"a":"span")),s=g(()=>e.href&&Pe.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(F(t.value),{class:w(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:v(()=>[l(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Gt={class:"VPLastUpdated"},Ut=["datetime"],jt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=P(),n=g(()=>new Date(t.value.lastUpdated)),i=g(()=>n.value.toISOString()),u=I("");return K(()=>{Z(()=>{var h,d,$;u.value=new Intl.DateTimeFormat((d=(h=e.value.lastUpdated)==null?void 0:h.formatOptions)!=null&&d.forceLocale?s.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(h,d)=>{var $;return a(),c("p",Gt,[O(T((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},T(u.value),9,Ut)])}}}),zt=b(jt,[["__scopeId","data-v-e98dd255"]]),Me=o=>(C("data-v-e257564d"),o=o(),H(),o),qt={key:0,class:"VPDocFooter"},Wt={key:0,class:"edit-info"},Kt={key:0,class:"edit-link"},Jt=Me(()=>p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Rt={key:1,class:"last-updated"},Yt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Qt=Me(()=>p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Xt={class:"pager"},Zt=["innerHTML"],xt=["innerHTML"],eo={class:"pager"},to=["innerHTML"],oo=["innerHTML"],no=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=P(),n=Ft(),i=Dt(),u=g(()=>e.value.editLink&&s.value.editLink!==!1),h=g(()=>t.value.lastUpdated),d=g(()=>u.value||h.value||i.value.prev||i.value.next);return($,V)=>{var y,L,N,A;return d.value?(a(),c("footer",qt,[l($.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Wt,[u.value?(a(),c("div",Kt,[m(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:v(()=>[Jt,O(" "+T(r(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Rt,[m(zt)])):f("",!0)])):f("",!0),(y=r(i).prev)!=null&&y.link||(L=r(i).next)!=null&&L.link?(a(),c("nav",Yt,[Qt,p("div",Xt,[(N=r(i).prev)!=null&&N.link?(a(),k(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:v(()=>{var B;return[p("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,Zt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,xt)]}),_:1},8,["href"])):f("",!0)]),p("div",eo,[(A=r(i).next)!=null&&A.link?(a(),k(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:v(()=>{var B;return[p("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,to),p("span",{class:"title",innerHTML:r(i).next.text},null,8,oo)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),so=b(no,[["__scopeId","data-v-e257564d"]]),ao=o=>(C("data-v-39a288b8"),o=o(),H(),o),ro={class:"container"},io=ao(()=>p("div",{class:"aside-curtain"},null,-1)),lo={class:"aside-container"},co={class:"aside-content"},uo={class:"content"},vo={class:"content-container"},po={class:"main"},ho=_({__name:"VPDoc",setup(o){const{theme:e}=P(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),u=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,d)=>{const $=J("Content");return a(),c("div",{class:w(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[l(h.$slots,"doc-top",{},void 0,!0),p("div",ro,[r(n)?(a(),c("div",{key:0,class:w(["aside",{"left-aside":r(i)}])},[io,p("div",lo,[p("div",co,[m(Et,null,{"aside-top":v(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),p("div",uo,[p("div",vo,[l(h.$slots,"doc-before",{},void 0,!0),p("main",po,[m($,{class:w(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(so,null,{"doc-footer-before":v(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),fo=b(ho,[["__scopeId","data-v-39a288b8"]]),_o=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.href&&Pe.test(e.href)),s=g(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),k(F(s.value),{class:w(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[O(T(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),mo=b(_o,[["__scopeId","data-v-cad61b99"]]),ko=["src","alt"],bo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=J("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,ko)):(a(),c(M,{key:1},[m(s,q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(s,q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=b(bo,[["__scopeId","data-v-8426fc1a"]]),$o=o=>(C("data-v-303bb580"),o=o(),H(),o),go={class:"container"},yo={class:"main"},Po={key:0,class:"name"},Vo=["innerHTML"],Lo=["innerHTML"],So=["innerHTML"],To={key:0,class:"actions"},Io={key:0,class:"image"},wo={class:"image-container"},No=$o(()=>p("div",{class:"image-bg"},null,-1)),Mo=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=te("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:w(["VPHero",{"has-image":t.image||r(e)}])},[p("div",go,[p("div",yo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Po,[p("span",{innerHTML:t.name,class:"clip"},null,8,Vo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,Lo)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,So)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",To,[(a(!0),c(M,null,E(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[m(mo,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",Io,[p("div",wo,[No,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ao=b(Mo,[["__scopeId","data-v-303bb580"]]),Bo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=P();return(t,s)=>r(e).hero?(a(),k(Ao,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Co=o=>(C("data-v-a3976bdc"),o=o(),H(),o),Ho={class:"box"},Eo={key:0,class:"icon"},Fo=["innerHTML"],Do=["innerHTML"],Oo=["innerHTML"],Go={key:4,class:"link-text"},Uo={class:"link-text-value"},jo=Co(()=>p("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),zo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[p("article",Ho,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Eo,[m(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Fo)):f("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Do),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Oo)):f("",!0),e.linkText?(a(),c("div",Go,[p("p",Uo,[O(T(e.linkText)+" ",1),jo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),qo=b(zo,[["__scopeId","data-v-a3976bdc"]]),Wo={key:0,class:"VPFeatures"},Ko={class:"container"},Jo={class:"items"},Ro=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=g(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",Wo,[p("div",Ko,[p("div",Jo,[(a(!0),c(M,null,E(s.features,i=>(a(),c("div",{key:i.title,class:w(["item",[t.value]])},[m(qo,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Yo=b(Ro,[["__scopeId","data-v-a6181336"]]),Qo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=P();return(t,s)=>r(e).features?(a(),k(Yo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),Xo=_({__name:"VPHomeContent",setup(o){const{width:e}=qe({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),Zo=b(Xo,[["__scopeId","data-v-8e2d4988"]]),xo={class:"VPHome"},en=_({__name:"VPHome",setup(o){const{frontmatter:e}=P();return(t,s)=>{const n=J("Content");return a(),c("div",xo,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Bo,null,{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(Qo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(Zo,{key:0},{default:v(()=>[m(n)]),_:1})):(a(),k(n,{key:1}))])}}}),tn=b(en,[["__scopeId","data-v-686f80a6"]]),on={},nn={class:"VPPage"};function sn(o,e){const t=J("Content");return a(),c("div",nn,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const an=b(on,[["render",sn]]),rn=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=P(),{hasSidebar:s}=U();return(n,i)=>(a(),c("div",{class:w(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(n.$slots,"not-found",{key:0},()=>[m(ht)],!0):r(t).layout==="page"?(a(),k(an,{key:1},{"page-top":v(()=>[l(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(tn,{key:2},{"home-hero-before":v(()=>[l(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(F(r(t).layout),{key:3})):(a(),k(fo,{key:4},{"doc-top":v(()=>[l(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[l(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[l(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[l(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[l(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ln=b(rn,[["__scopeId","data-v-1428d186"]]),cn={class:"container"},un=["innerHTML"],dn=["innerHTML"],vn=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:w(["VPFooter",{"has-sidebar":r(s)}])},[p("div",cn,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,un)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,dn)):f("",!0)])],2)):f("",!0)}}),pn=b(vn,[["__scopeId","data-v-e315a0ad"]]);function hn(){const{theme:o,frontmatter:e}=P(),t=ye([]),s=g(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const fn=o=>(C("data-v-17a5e62e"),o=o(),H(),o),_n={class:"menu-text"},mn=fn(()=>p("span",{class:"vpi-chevron-right icon"},null,-1)),kn={class:"header"},bn={class:"outline"},$n=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=P(),s=I(!1),n=I(0),i=I(),u=I();function h(y){var L;(L=i.value)!=null&&L.contains(y.target)||(s.value=!1)}G(s,y=>{if(y){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),We("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Ke(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,L)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),c("button",{key:0,onClick:d,class:w({open:s.value})},[p("span",_n,T(r(we)(r(t))),1),mn],2)):(a(),c("button",{key:1,onClick:V},T(r(t).returnToTopLabel||"Return to top"),1)),m(de,{name:"flyout"},{default:v(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:$},[p("div",kn,[p("a",{class:"top-link",href:"#",onClick:V},T(r(t).returnToTopLabel||"Return to top"),1)]),p("div",bn,[m(Ne,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),gn=b($n,[["__scopeId","data-v-17a5e62e"]]),yn=o=>(C("data-v-a6f0e41e"),o=o(),H(),o),Pn={class:"container"},Vn=["aria-expanded"],Ln=yn(()=>p("span",{class:"vpi-align-left menu-icon"},null,-1)),Sn={class:"menu-text"},Tn=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:s}=U(),{headers:n}=hn(),{y:i}=Le(),u=I(0);K(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const h=g(()=>n.value.length===0),d=g(()=>h.value&&!s.value),$=g(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:h.value,fixed:d.value}));return(V,y)=>r(t).layout!=="home"&&(!d.value||r(i)>=u.value)?(a(),c("div",{key:0,class:w($.value)},[p("div",Pn,[r(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=L=>V.$emit("open-menu"))},[Ln,p("span",Sn,T(r(e).sidebarMenuLabel||"Menu"),1)],8,Vn)):f("",!0),m(gn,{headers:r(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),In=b(Tn,[["__scopeId","data-v-a6f0e41e"]]);function wn(){const o=I(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return G(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const Nn={},Mn={class:"VPSwitch",type:"button",role:"switch"},An={class:"check"},Bn={key:0,class:"icon"};function Cn(o,e){return a(),c("button",Mn,[p("span",An,[o.$slots.default?(a(),c("span",Bn,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Hn=b(Nn,[["render",Cn],["__scopeId","data-v-1d5665e3"]]),Ae=o=>(C("data-v-5337faa4"),o=o(),H(),o),En=Ae(()=>p("span",{class:"vpi-sun sun"},null,-1)),Fn=Ae(()=>p("span",{class:"vpi-moon moon"},null,-1)),Dn=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=P(),s=te("toggle-appearance",()=>{e.value=!e.value}),n=I("");return he(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,u)=>(a(),k(Hn,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:v(()=>[En,Fn]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Dn,[["__scopeId","data-v-5337faa4"]]),On={key:0,class:"VPNavBarAppearance"},Gn=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=P();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",On,[m(me)])):f("",!0)}}),Un=b(Gn,[["__scopeId","data-v-6c893767"]]),ke=I();let Be=!1,re=0;function jn(o){const e=I(!1);if(oe){!Be&&zn(),re++;const t=G(ke,s=>{var n,i,u;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});pe(()=>{t(),re--,re||qn()})}return Je(e)}function zn(){document.addEventListener("focusin",Ce),Be=!0,ke.value=document.activeElement}function qn(){document.removeEventListener("focusin",Ce)}function Ce(){ke.value=document.activeElement}const Wn={class:"VPMenuLink"},Kn=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,s)=>(a(),c("div",Wn,[m(D,{class:w({active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[O(T(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=b(Kn,[["__scopeId","data-v-43f1e123"]]),Jn={class:"VPMenuGroup"},Rn={key:0,class:"title"},Yn=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Jn,[e.text?(a(),c("p",Rn,T(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),c(M,null,["link"in s?(a(),k(ne,{key:0,item:s},null,8,["item"])):f("",!0)],64))),256))]))}}),Qn=b(Yn,[["__scopeId","data-v-69e747b5"]]),Xn={class:"VPMenu"},Zn={key:0,class:"items"},xn=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Xn,[e.items?(a(),c("div",Zn,[(a(!0),c(M,null,E(e.items,s=>(a(),c(M,{key:JSON.stringify(s)},["link"in s?(a(),k(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),k(F(s.component),q({key:1,ref_for:!0},s.props),null,16)):(a(),k(Qn,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),es=b(xn,[["__scopeId","data-v-b98bc113"]]),ts=o=>(C("data-v-b6c34ac9"),o=o(),H(),o),os=["aria-expanded","aria-label"],ns={key:0,class:"text"},ss=["innerHTML"],as=ts(()=>p("span",{class:"vpi-chevron-down text-icon"},null,-1)),rs={key:1,class:"vpi-more-horizontal icon"},is={class:"menu"},ls=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=I(!1),t=I();jn({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",ns,[n.icon?(a(),c("span",{key:0,class:w([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,ss)):f("",!0),as])):(a(),c("span",rs))],8,os),p("div",is,[m(es,{items:n.items},{default:v(()=>[l(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(ls,[["__scopeId","data-v-b6c34ac9"]]),cs=["href","aria-label","innerHTML"],us=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),c("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,cs))}}),ds=b(us,[["__scopeId","data-v-eee4e7cb"]]),vs={class:"VPSocialLinks"},ps=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",vs,[(a(!0),c(M,null,E(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),k(ds,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(ps,[["__scopeId","data-v-7bc22406"]]),hs={key:0,class:"group translations"},fs={class:"trans-title"},_s={key:1,class:"group"},ms={class:"item appearance"},ks={class:"label"},bs={class:"appearance-action"},$s={key:2,class:"group"},gs={class:"item social-links"},ys=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=P(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=g(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),k(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[r(s).length&&r(n).label?(a(),c("div",hs,[p("p",fs,T(r(n).label),1),(a(!0),c(M,null,E(r(s),d=>(a(),k(ne,{key:d.link,item:d},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",_s,[p("div",ms,[p("p",ks,T(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",bs,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",$s,[p("div",gs,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ps=b(ys,[["__scopeId","data-v-bb2aa2f0"]]),Vs=o=>(C("data-v-e5dd9c1c"),o=o(),H(),o),Ls=["aria-expanded"],Ss=Vs(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),Ts=[Ss],Is=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},Ts,10,Ls))}}),ws=b(Is,[["__scopeId","data-v-e5dd9c1c"]]),Ns=["innerHTML"],Ms=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,s)=>(a(),k(D,{class:w({VPNavBarMenuLink:!0,active:r(W)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Ns)]),_:1},8,["class","href","noIcon","target","rel"]))}}),As=b(Ms,[["__scopeId","data-v-9c663999"]]),Bs=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=P(),s=i=>"component"in i?!1:"link"in i?W(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=g(()=>s(e.item));return(i,u)=>(a(),k(be,{class:w({VPNavBarMenuGroup:!0,active:r(W)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Cs=o=>(C("data-v-dc692963"),o=o(),H(),o),Hs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Es=Cs(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),Fs=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=P();return(t,s)=>r(e).nav?(a(),c("nav",Hs,[Es,(a(!0),c(M,null,E(r(e).nav,n=>(a(),c(M,{key:JSON.stringify(n)},["link"in n?(a(),k(As,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),q({key:1,ref_for:!0},n.props),null,16)):(a(),k(Bs,{key:2,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Ds=b(Fs,[["__scopeId","data-v-dc692963"]]);function Os(o){const{localeIndex:e,theme:t}=P();function s(n){var A,B,S;const i=n.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",d=h&&((S=(B=u.locales)==null?void 0:B[e.value])==null?void 0:S.translations)||null,$=h&&u.translations||null;let V=d,y=$,L=o;const N=i.pop();for(const j of i){let z=null;const R=L==null?void 0:L[j];R&&(z=L=R);const se=y==null?void 0:y[j];se&&(z=y=se);const ae=V==null?void 0:V[j];ae&&(z=V=ae),R||(L=z),se||(y=z),ae||(V=z)}return(V==null?void 0:V[N])??(y==null?void 0:y[N])??(L==null?void 0:L[N])??""}return s}const Gs=["aria-label"],Us={class:"DocSearch-Button-Container"},js=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),zs={class:"DocSearch-Button-Placeholder"},qs=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Os({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",Us,[js,p("span",zs,T(r(t)("button.buttonText")),1)]),qs],8,Gs))}}),Ws={class:"VPNavBarSearch"},Ks={id:"local-search"},Js={key:1,id:"docsearch"},Rs=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=()=>null,{theme:s}=P(),n=I(!1),i=I(!1);K(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const V=new Event("keydown");V.key="k",V.metaKey=!0,window.dispatchEvent(V),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const d=I(!1),$="";return(V,y)=>{var L;return a(),c("div",Ws,[r($)==="local"?(a(),c(M,{key:0},[d.value?(a(),k(r(e),{key:0,onClose:y[0]||(y[0]=N=>d.value=!1)})):f("",!0),p("div",Ks,[m(ge,{onClick:y[1]||(y[1]=N=>d.value=!0)})])],64)):r($)==="algolia"?(a(),c(M,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((L=r(s).search)==null?void 0:L.options)??r(s).algolia,onVnodeBeforeMount:y[2]||(y[2]=N=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Js,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Ys=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=P();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Qs=b(Ys,[["__scopeId","data-v-0394ad82"]]),Xs=["href","rel","target"],Zs={key:1},xs={key:2},ea=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=P(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=g(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),u=g(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),h=g(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,$)=>(a(),c("div",{class:w(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:u.value,target:h.value},[l(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",Zs,T(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",xs,T(r(e).title),1)):f("",!0),l(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,Xs)],2))}}),ta=b(ea,[["__scopeId","data-v-ab179fa1"]]),oa={class:"items"},na={class:"title"},sa=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=P(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),k(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:v(()=>[p("div",oa,[p("p",na,T(r(s).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),k(ne,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),aa=b(sa,[["__scopeId","data-v-88af2de4"]]),ra=o=>(C("data-v-6aa21345"),o=o(),H(),o),ia={class:"wrapper"},la={class:"container"},ca={class:"title"},ua={class:"content"},da={class:"content-body"},va=ra(()=>p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1)),pa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=Le(),{hasSidebar:s}=U(),{frontmatter:n}=P(),i=I({});return he(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(u,h)=>(a(),c("div",{class:w(["VPNavBar",i.value])},[p("div",ia,[p("div",la,[p("div",ca,[m(ta,null,{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",ua,[p("div",da,[l(u.$slots,"nav-bar-content-before",{},void 0,!0),m(Rs,{class:"search"}),m(Ds,{class:"menu"}),m(aa,{class:"translations"}),m(Un,{class:"appearance"}),m(Qs,{class:"social-links"}),m(Ps,{class:"extra"}),l(u.$slots,"nav-bar-content-after",{},void 0,!0),m(ws,{class:"hamburger",active:u.isScreenOpen,onClick:h[0]||(h[0]=d=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),va],2))}}),ha=b(pa,[["__scopeId","data-v-6aa21345"]]),fa={key:0,class:"VPNavScreenAppearance"},_a={class:"text"},ma=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=P();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",fa,[p("p",_a,T(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),ka=b(ma,[["__scopeId","data-v-b44890b2"]]),ba=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),$a=b(ba,[["__scopeId","data-v-7f31e1f6"]]),ga=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:v(()=>[O(T(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),He=b(ga,[["__scopeId","data-v-19976ae1"]]),ya={class:"VPNavScreenMenuGroupSection"},Pa={key:0,class:"title"},Va=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",ya,[e.text?(a(),c("p",Pa,T(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,s=>(a(),k(He,{key:s.text,item:s},null,8,["item"]))),128))]))}}),La=b(Va,[["__scopeId","data-v-8133b170"]]),Sa=o=>(C("data-v-b9ab8c58"),o=o(),H(),o),Ta=["aria-controls","aria-expanded"],Ia=["innerHTML"],wa=Sa(()=>p("span",{class:"vpi-plus button-icon"},null,-1)),Na=["id"],Ma={key:0,class:"item"},Aa={key:1,class:"item"},Ba={key:2,class:"group"},Ca=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=I(!1),s=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:w(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,Ia),wa],8,Ta),p("div",{id:s.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:JSON.stringify(h)},["link"in h?(a(),c("div",Ma,[m(He,{item:h},null,8,["item"])])):"component"in h?(a(),c("div",Aa,[(a(),k(F(h.component),q({ref_for:!0},h.props,{"screen-menu":""}),null,16))])):(a(),c("div",Ba,[m(La,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Na)],2))}}),Ha=b(Ca,[["__scopeId","data-v-b9ab8c58"]]),Ea={key:0,class:"VPNavScreenMenu"},Fa=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=P();return(t,s)=>r(e).nav?(a(),c("nav",Ea,[(a(!0),c(M,null,E(r(e).nav,n=>(a(),c(M,{key:JSON.stringify(n)},["link"in n?(a(),k($a,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),q({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),k(Ha,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Da=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=P();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Ee=o=>(C("data-v-858fe1a4"),o=o(),H(),o),Oa=Ee(()=>p("span",{class:"vpi-languages icon lang"},null,-1)),Ga=Ee(()=>p("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ua={class:"list"},ja=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=I(!1);function n(){s.value=!s.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:w(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[Oa,O(" "+T(r(t).label)+" ",1),Ga]),p("ul",Ua,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:v(()=>[O(T(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),za=b(ja,[["__scopeId","data-v-858fe1a4"]]),qa={class:"container"},Wa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=I(null),t=Se(oe?document.body:null);return(s,n)=>(a(),k(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:v(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",qa,[l(s.$slots,"nav-screen-content-before",{},void 0,!0),m(Fa,{class:"menu"}),m(za,{class:"translations"}),m(ka,{class:"appearance"}),m(Da,{class:"social-links"}),l(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ka=b(Wa,[["__scopeId","data-v-f2779853"]]),Ja={key:0,class:"VPNav"},Ra=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=wn(),{frontmatter:n}=P(),i=g(()=>n.value.navbar!==!1);return Te("close-screen",t),Z(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Ja,[m(ha,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ka,{open:r(e)},{"nav-screen-content-before":v(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ya=b(Ra,[["__scopeId","data-v-ae24b3ad"]]),Fe=o=>(C("data-v-b7550ba0"),o=o(),H(),o),Qa=["role","tabindex"],Xa=Fe(()=>p("div",{class:"indicator"},null,-1)),Za=Fe(()=>p("span",{class:"vpi-chevron-right caret-icon"},null,-1)),xa=[Za],er={key:1,class:"items"},tr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:d}=kt(g(()=>e.item)),$=g(()=>h.value?"section":"div"),V=g(()=>n.value?"a":"div"),y=g(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=g(()=>n.value?void 0:"button"),N=g(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":u.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&d()}function B(){e.item.link&&d()}return(S,j)=>{const z=J("VPSidebarItem",!0);return a(),k(F($.value),{class:w(["VPSidebarItem",N.value])},{default:v(()=>[S.item.text?(a(),c("div",q({key:0,class:"item",role:L.value},Ye(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[Xa,S.item.link?(a(),k(D,{key:0,tag:V.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:v(()=>[(a(),k(F(y.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(F(y.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Re(B,["enter"]),tabindex:"0"},xa,32)):f("",!0)],16,Qa)):f("",!0),S.item.items&&S.item.items.length?(a(),c("div",er,[S.depth<5?(a(!0),c(M,{key:0},E(S.item.items,R=>(a(),k(z,{key:R.text,item:R,depth:S.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),or=b(tr,[["__scopeId","data-v-b7550ba0"]]),nr=_({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=I(!0);let t=null;return K(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Qe(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),c(M,null,E(s.items,i=>(a(),c("div",{key:i.text,class:w(["group",{"no-transition":e.value}])},[m(or,{item:i,depth:0},null,8,["item"])],2))),128))}}),sr=b(nr,[["__scopeId","data-v-c40bc020"]]),De=o=>(C("data-v-319d5ca6"),o=o(),H(),o),ar=De(()=>p("div",{class:"curtain"},null,-1)),rr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},ir=De(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),lr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=I(null),i=Se(oe?document.body:null);G([s,n],()=>{var h;s.open?(i.value=!0,(h=n.value)==null||h.focus()):i.value=!1},{immediate:!0,flush:"post"});const u=I(0);return G(e,()=>{u.value+=1},{deep:!0}),(h,d)=>r(t)?(a(),c("aside",{key:0,class:w(["VPSidebar",{open:h.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=Xe(()=>{},["stop"]))},[ar,p("nav",rr,[ir,l(h.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k(sr,{items:r(e),key:u.value},null,8,["items"])),l(h.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),cr=b(lr,[["__scopeId","data-v-319d5ca6"]]),ur=_({__name:"VPSkipLink",setup(o){const e=ee(),t=I();G(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),c(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),dr=b(ur,[["__scopeId","data-v-0f60ec36"]]),vr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();G(()=>n.path,s),mt(e,s);const{frontmatter:i}=P(),u=Ze(),h=g(()=>!!u["home-hero-image"]);return Te("hero-image-slot-exists",h),(d,$)=>{const V=J("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:w(["Layout",r(i).pageClass])},[l(d.$slots,"layout-top",{},void 0,!0),m(dr),m(ot,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),m(Ya,null,{"nav-bar-title-before":v(()=>[l(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[l(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(In,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(cr,{open:r(e)},{"sidebar-nav-before":v(()=>[l(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[l(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(ln,null,{"page-top":v(()=>[l(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[l(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[l(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[l(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[l(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[l(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(pn),l(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(V,{key:1}))}}}),pr=b(vr,[["__scopeId","data-v-5d98c3a5"]]),fr={Layout:pr,enhanceApp:({app:o})=>{o.component("Badge",xe)}};export{fr as t}; diff --git a/assets/dart_api_format.md.DR-edXt0.js b/assets/dart_api_format.md.DR-edXt0.js new file mode 100644 index 0000000..cbe0b5d --- /dev/null +++ b/assets/dart_api_format.md.DR-edXt0.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as t,a2 as r}from"./chunks/framework.C94oF1kp.js";const k=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"dart/api/format.md","filePath":"en/dart/api/format.md","lastUpdated":1725328376000}'),s={name:"dart/api/format.md"},i=r('

API: Format

numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

dart
numberFormat(1234567); // Returns 1,234,567
',9),o=[i];function n(l,d,h,m,p,c){return t(),e("div",null,o)}const _=a(s,[["render",n]]);export{k as __pageData,_ as default}; diff --git a/assets/dart_api_format.md.DR-edXt0.lean.js b/assets/dart_api_format.md.DR-edXt0.lean.js new file mode 100644 index 0000000..6367538 --- /dev/null +++ b/assets/dart_api_format.md.DR-edXt0.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as t,a2 as r}from"./chunks/framework.C94oF1kp.js";const k=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"dart/api/format.md","filePath":"en/dart/api/format.md","lastUpdated":1725328376000}'),s={name:"dart/api/format.md"},i=r("",9),o=[i];function n(l,d,h,m,p,c){return t(),e("div",null,o)}const _=a(s,[["render",n]]);export{k as __pageData,_ as default}; diff --git a/assets/dart_api_index.md.DM_mNYW9.js b/assets/dart_api_index.md.DM_mNYW9.js new file mode 100644 index 0000000..08e6e54 --- /dev/null +++ b/assets/dart_api_index.md.DM_mNYW9.js @@ -0,0 +1 @@ +import{_ as t,c as a,o,j as e,a as s}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"dart/api/index.md","filePath":"en/dart/api/index.md","lastUpdated":1725328376000}'),i={name:"dart/api/index.md"},r=e("h1",{id:"api",tabindex:"-1"},[s("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),n=e("p",null,"A complete list of utility methods available in QSU.",-1),d=e("p",null,"Explore the APIs for your purpose in the left sidebar.",-1),l=[r,n,d];function c(p,_,h,f,m,u){return o(),a("div",null,l)}const A=t(i,[["render",c]]);export{P as __pageData,A as default}; diff --git a/assets/dart_api_index.md.DM_mNYW9.lean.js b/assets/dart_api_index.md.DM_mNYW9.lean.js new file mode 100644 index 0000000..08e6e54 --- /dev/null +++ b/assets/dart_api_index.md.DM_mNYW9.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o,j as e,a as s}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"dart/api/index.md","filePath":"en/dart/api/index.md","lastUpdated":1725328376000}'),i={name:"dart/api/index.md"},r=e("h1",{id:"api",tabindex:"-1"},[s("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),n=e("p",null,"A complete list of utility methods available in QSU.",-1),d=e("p",null,"Explore the APIs for your purpose in the left sidebar.",-1),l=[r,n,d];function c(p,_,h,f,m,u){return o(),a("div",null,l)}const A=t(i,[["render",c]]);export{P as __pageData,A as default}; diff --git a/assets/dart_api_string.md.Bb_91aIp.js b/assets/dart_api_string.md.Bb_91aIp.js new file mode 100644 index 0000000..2682cb9 --- /dev/null +++ b/assets/dart_api_string.md.Bb_91aIp.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"dart/api/string.md","filePath":"en/dart/api/string.md","lastUpdated":1725328376000}'),t={name:"dart/api/string.md"},r=e('

API: String

capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

dart
capitalizeFirst('abcd'); // Returns 'Abcd'

truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number

Optional Parameters

  • ellipsis::string || ''

Returns

string

Examples

dart
truncate('hello', 3); // Returns 'hel'\ntruncate('hello', 2, ellipsis: '...'); // Returns 'he...'
',19),l=[r];function n(h,p,o,d,c,k){return i(),s("div",null,l)}const E=a(t,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/dart_api_string.md.Bb_91aIp.lean.js b/assets/dart_api_string.md.Bb_91aIp.lean.js new file mode 100644 index 0000000..9e4eadd --- /dev/null +++ b/assets/dart_api_string.md.Bb_91aIp.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"dart/api/string.md","filePath":"en/dart/api/string.md","lastUpdated":1725328376000}'),t={name:"dart/api/string.md"},r=e("",19),l=[r];function n(h,p,o,d,c,k){return i(),s("div",null,l)}const E=a(t,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/dart_dart.md.CjYHPzEJ.js b/assets/dart_dart.md.CjYHPzEJ.js new file mode 100644 index 0000000..7dc7a51 --- /dev/null +++ b/assets/dart_dart.md.CjYHPzEJ.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as r,j as t,a as d}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Dart/Flutter","description":"","frontmatter":{},"headers":[],"relativePath":"dart/dart.md","filePath":"en/dart/dart.md","lastUpdated":1725328376000}'),s={name:"dart/dart.md"},o=t("h1",{id:"dart-flutter",tabindex:"-1"},[d("Dart/Flutter "),t("a",{class:"header-anchor",href:"#dart-flutter","aria-label":'Permalink to "Dart/Flutter"'},"​")],-1),n=[o];function c(l,i,_,p,f,h){return r(),e("div",null,n)}const x=a(s,[["render",c]]);export{u as __pageData,x as default}; diff --git a/assets/dart_dart.md.CjYHPzEJ.lean.js b/assets/dart_dart.md.CjYHPzEJ.lean.js new file mode 100644 index 0000000..7dc7a51 --- /dev/null +++ b/assets/dart_dart.md.CjYHPzEJ.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as r,j as t,a as d}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Dart/Flutter","description":"","frontmatter":{},"headers":[],"relativePath":"dart/dart.md","filePath":"en/dart/dart.md","lastUpdated":1725328376000}'),s={name:"dart/dart.md"},o=t("h1",{id:"dart-flutter",tabindex:"-1"},[d("Dart/Flutter "),t("a",{class:"header-anchor",href:"#dart-flutter","aria-label":'Permalink to "Dart/Flutter"'},"​")],-1),n=[o];function c(l,i,_,p,f,h){return r(),e("div",null,n)}const x=a(s,[["render",c]]);export{u as __pageData,x as default}; diff --git a/assets/dart_installation.md.40B1wVko.js b/assets/dart_installation.md.40B1wVko.js new file mode 100644 index 0000000..50959bb --- /dev/null +++ b/assets/dart_installation.md.40B1wVko.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as i,a2 as s}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation","order":1},"headers":[],"relativePath":"dart/installation.md","filePath":"en/dart/installation.md","lastUpdated":1725329036000}'),e={name:"dart/installation.md"},n=s('

Installation

Qsu requires Dart 3.x or higher. If you are using Flutter, you must be using Flutter version 3.10.x or later.

After configuring the dart environment, you can simply run the following command:

With Dart

bash
$ dart pub add qsu

With Flutter

bash
$flutter pub add qsu

How to Use

You can import the following code manually or automatically to bring up the QSU utility

dart
import 'package:qsu/qsu.dart';

To learn more about utility functions, browse the API documentation.

',11),l=[n];function o(r,h,d,p,c,u){return i(),t("div",null,l)}const b=a(e,[["render",o]]);export{g as __pageData,b as default}; diff --git a/assets/dart_installation.md.40B1wVko.lean.js b/assets/dart_installation.md.40B1wVko.lean.js new file mode 100644 index 0000000..961e516 --- /dev/null +++ b/assets/dart_installation.md.40B1wVko.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as i,a2 as s}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation","order":1},"headers":[],"relativePath":"dart/installation.md","filePath":"en/dart/installation.md","lastUpdated":1725329036000}'),e={name:"dart/installation.md"},n=s("",11),l=[n];function o(r,h,d,p,c,u){return i(),t("div",null,l)}const b=a(e,[["render",o]]);export{g as __pageData,b as default}; diff --git a/assets/index.md.DJBof6uu.js b/assets/index.md.DJBof6uu.js new file mode 100644 index 0000000..3413e2c --- /dev/null +++ b/assets/index.md.DJBof6uu.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"QSU","titleTemplate":"Lightweight and extensive utility helpers","description":"","frontmatter":{"layout":"home","title":"QSU","titleTemplate":"Lightweight and extensive utility helpers","hero":{"name":"QSU","text":"Lightweight and extensive utility helpers","tagline":"QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.","actions":[{"theme":"brand","text":"Introduction","link":"introduction"},{"theme":"alt","text":"For JavaScript/NodeJS","link":"js/installation"},{"theme":"alt","text":"For Dart/Flutter","link":"dart/installation"}],"image":{"src":"/icon.png","alt":"Utility"}},"features":[{"icon":"","title":"Lightweight and fast!","details":"Aim for small footprint and fast performance. Ideal for modern Node.js programming."},{"icon":"","title":"Speed up your programming with tons of utility functions.","details":"Meet the functions available in QSU. Minimize repetitive utility writing."},{"icon":"","title":"Reliable maintenance support","details":"There are many real-world use cases, and we have fast technical support."}]},"headers":[],"relativePath":"index.md","filePath":"en/index.md","lastUpdated":1725328376000}'),l={name:"index.md"};function a(o,n,s,r,p,c){return i(),e("div")}const h=t(l,[["render",a]]);export{f as __pageData,h as default}; diff --git a/assets/index.md.DJBof6uu.lean.js b/assets/index.md.DJBof6uu.lean.js new file mode 100644 index 0000000..3413e2c --- /dev/null +++ b/assets/index.md.DJBof6uu.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"QSU","titleTemplate":"Lightweight and extensive utility helpers","description":"","frontmatter":{"layout":"home","title":"QSU","titleTemplate":"Lightweight and extensive utility helpers","hero":{"name":"QSU","text":"Lightweight and extensive utility helpers","tagline":"QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.","actions":[{"theme":"brand","text":"Introduction","link":"introduction"},{"theme":"alt","text":"For JavaScript/NodeJS","link":"js/installation"},{"theme":"alt","text":"For Dart/Flutter","link":"dart/installation"}],"image":{"src":"/icon.png","alt":"Utility"}},"features":[{"icon":"","title":"Lightweight and fast!","details":"Aim for small footprint and fast performance. Ideal for modern Node.js programming."},{"icon":"","title":"Speed up your programming with tons of utility functions.","details":"Meet the functions available in QSU. Minimize repetitive utility writing."},{"icon":"","title":"Reliable maintenance support","details":"There are many real-world use cases, and we have fast technical support."}]},"headers":[],"relativePath":"index.md","filePath":"en/index.md","lastUpdated":1725328376000}'),l={name:"index.md"};function a(o,n,s,r,p,c){return i(),e("div")}const h=t(l,[["render",a]]);export{f as __pageData,h as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 0000000..b6b603d Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 0000000..def40a4 Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 0000000..e070c3d Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 0000000..a3c16ca Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 0000000..2210a89 Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 0000000..790d62d Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 0000000..1eec077 Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 0000000..2cfe615 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 0000000..e3886dd Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 0000000..36d6748 Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 0000000..2bed1e8 Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 0000000..9a8d1e2 Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 0000000..07d3c53 Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 0000000..57bdc22 Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/introduction.md.C5L9HcfQ.js b/assets/introduction.md.C5L9HcfQ.js new file mode 100644 index 0000000..579bdff --- /dev/null +++ b/assets/introduction.md.C5L9HcfQ.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as n,j as t,a as o}from"./chunks/framework.C94oF1kp.js";const x=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"en/introduction.md","lastUpdated":1725328376000}'),i={name:"introduction.md"},r=t("h1",{id:"introduction",tabindex:"-1"},[o("Introduction "),t("a",{class:"header-anchor",href:"#introduction","aria-label":'Permalink to "Introduction"'},"​")],-1),s=t("p",null,"QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.",-1),c=t("p",null,"Start with your favorite language; there may be differences in the utility functions provided for each language.",-1),l=t("ul",null,[t("li",null,[t("a",{href:"/js/installation"},"JavaScript/Node.js")]),t("li",null,[t("a",{href:"/dart/installation"},"Dart/Flutter")])],-1),d=[r,s,c,l];function u(_,h,p,f,m,g){return n(),a("div",null,d)}const N=e(i,[["render",u]]);export{x as __pageData,N as default}; diff --git a/assets/introduction.md.C5L9HcfQ.lean.js b/assets/introduction.md.C5L9HcfQ.lean.js new file mode 100644 index 0000000..579bdff --- /dev/null +++ b/assets/introduction.md.C5L9HcfQ.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as n,j as t,a as o}from"./chunks/framework.C94oF1kp.js";const x=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"en/introduction.md","lastUpdated":1725328376000}'),i={name:"introduction.md"},r=t("h1",{id:"introduction",tabindex:"-1"},[o("Introduction "),t("a",{class:"header-anchor",href:"#introduction","aria-label":'Permalink to "Introduction"'},"​")],-1),s=t("p",null,"QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.",-1),c=t("p",null,"Start with your favorite language; there may be differences in the utility functions provided for each language.",-1),l=t("ul",null,[t("li",null,[t("a",{href:"/js/installation"},"JavaScript/Node.js")]),t("li",null,[t("a",{href:"/dart/installation"},"Dart/Flutter")])],-1),d=[r,s,c,l];function u(_,h,p,f,m,g){return n(),a("div",null,d)}const N=e(i,[["render",u]]);export{x as __pageData,N as default}; diff --git a/assets/js_api_array.md.MuUQaxvs.js b/assets/js_api_array.md.MuUQaxvs.js new file mode 100644 index 0000000..3a81a52 --- /dev/null +++ b/assets/js_api_array.md.MuUQaxvs.js @@ -0,0 +1,55 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Array","description":"","frontmatter":{"title":"Array","order":1},"headers":[],"relativePath":"js/api/array.md","filePath":"en/js/api/array.md","lastUpdated":1725328376000}'),t={name:"js/api/array.md"},n=e(`

API: Array

_.arrShuffle

Shuffle the order of the given array and return.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrShuffle([1, 2, 3, 4]); // Returns [4, 2, 3, 1]

_.arrWithDefault

Initialize an array with a default value of a specific length.

Parameters

  • defaultValue::any
  • length::number || 0

Returns

any[]

Examples

javascript
_.arrWithDefault('abc', 4); // Returns ['abc', 'abc', 'abc', 'abc']
+_.arrWithDefault(null, 3); // Returns [null, null, null]

_.arrWithNumber

Creates and returns an Array in the order of start...end values.

Parameters

  • start::number
  • end::number

Returns

number[]

Examples

javascript
_.arrWithNumber(1, 3); // Returns [1, 2, 3]
+_.arrWithNumber(0, 3); // Returns [0, 1, 2, 3]

_.arrUnique

Remove duplicate values from array and two-dimensional array data. In the case of 2d arrays, json type data duplication is not removed.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrUnique([1, 2, 2, 3]); // Returns [1, 2, 3]
+_.arrUnique([[1], [1], [2]]); // Returns [[1], [2]]

_.average

Returns the average of all numeric values in an array.

Parameters

  • array::number[]

Returns

number

Examples

javascript
_.average([1, 5, 15, 50]); // Returns 17.75

_.arrMove

Moves the position of a specific element in an array to the specified position. (Position starts from 0.)

Parameters

  • array::any[]
  • from::number
  • to::number

Returns

any[]

Examples

javascript
_.arrMove([1, 2, 3, 4], 1, 0); // Returns [2, 1, 3, 4]

_.arrTo1dArray

Merges all elements of a multidimensional array into a one-dimensional array.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrTo1dArray([1, 2, [3, 4]], 5); // Returns [1, 2, 3, 4, 5]

_.arrRepeat

Repeats the data of an Array or Object a specific number of times and returns it as a 1d array.

Parameters

  • array::any[]|object
  • count::number

Returns

any[]

Examples

javascript
_.arrRepeat([1, 2, 3, 4], 3); // Returns [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
+_.arrRepeat({ a: 1, b: 2 }, 2); // Returns [{ a: 1, b: 2 }, { a: 1, b: 2 }]

_.arrCount

Returns the number of duplicates for each unique value in the given array. The array values can only be of type String or Number.

Parameters

  • array::string[]|number[]
  • count::number

Returns

object

Examples

javascript
_.arrCount(['a', 'a', 'a', 'b', 'c', 'b', 'a', 'd']); // Returns { a: 4, b: 2, c: 1, d: 1 }

_.sortByObjectKey

Sort array values by a specific key value in an array containing multiple objects. It does not affect the order or value of elements within an object.

If the numerically option is true, when sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names.

Parameters

  • array::any[]
  • key::string
  • descending::boolean
  • numerically::boolean

Returns

any[]

Examples

javascript
const obj = [
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	}
+];
+
+_.sortByObjectKey(obj, 'aa');
+
+/*
+[
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	}
+]
+*/

_.sortNumeric

When sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names. For example, given the array ['1-a', '100-a', '10-a', '2-a'], it returns ['1-a', '2-a', '10-a', '100-a'] with the smaller numbers at the front.

Parameters

  • array::string[]
  • descending::boolean

Returns

string[]

Examples

javascript
_.sortNumeric(['a1a', 'b2a', 'aa1a', '1', 'a11a', 'a3a', 'a2a', '1a']);
+// Returns ['1', '1a', 'a1a', 'a2a', 'a3a', 'a11a', 'aa1a', 'b2a']

_.arrGroupByMaxCount

Separates the data in the given array into a two-dimensional array containing only the maximum number of elements. For example, if you have an array of 6 data in 2 groups, this function will create a 2-dimensional array with 3 lengths.

Parameters

  • array::any[]
  • maxLengthPerGroup::number

Returns

any[]

Examples

javascript
_.arrGroupByMaxCount(['a', 'b', 'c', 'd', 'e'], 2);
+// Returns [['a', 'b'], ['c', 'd'], ['e']]
`,98),h=[n];function l(r,p,k,d,o,E){return i(),s("div",null,h)}const y=a(t,[["render",l]]);export{u as __pageData,y as default}; diff --git a/assets/js_api_array.md.MuUQaxvs.lean.js b/assets/js_api_array.md.MuUQaxvs.lean.js new file mode 100644 index 0000000..52e2cd2 --- /dev/null +++ b/assets/js_api_array.md.MuUQaxvs.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Array","description":"","frontmatter":{"title":"Array","order":1},"headers":[],"relativePath":"js/api/array.md","filePath":"en/js/api/array.md","lastUpdated":1725328376000}'),t={name:"js/api/array.md"},n=e("",98),h=[n];function l(r,p,k,d,o,E){return i(),s("div",null,h)}const y=a(t,[["render",l]]);export{u as __pageData,y as default}; diff --git a/assets/js_api_crypto.md.DWDCP7x5.js b/assets/js_api_crypto.md.DWDCP7x5.js new file mode 100644 index 0000000..0c216a5 --- /dev/null +++ b/assets/js_api_crypto.md.DWDCP7x5.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"Crypto","description":"","frontmatter":{"title":"Crypto","order":6},"headers":[],"relativePath":"js/api/crypto.md","filePath":"en/js/api/crypto.md","lastUpdated":1725328376000}'),t={name:"js/api/crypto.md"},r=i('

API: Crypto

_.encrypt

Encrypt with the algorithm of your choice (algorithm default: aes-256-cbc, ivSize default: 16) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'
  • ivSize::number || 16

Returns

string

Examples

javascript
_.encrypt('test', 'secret-key');

_.decrypt

Decrypt with the specified algorithm (default: aes-256-cbc) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'

Returns

string

Examples

javascript
_.decrypt('61ba43b65fc...', 'secret-key');

_.objectId

Returns a random string hash of the ObjectId format (primarily utilized by MongoDB).

Parameters

No parameters required

Returns

string

Examples

javascript
_.objectId(); // Returns '651372605b49507aea707488'

_.md5

Converts String data to md5 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.md5('test'); // Returns '098f6bcd4621d373cade4e832627b4f6'

_.sha1

Converts String data to sha1 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha1('test'); // Returns 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'

_.sha256

Converts String data to sha256 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha256('test'); // Returns '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'

_.encodeBase64

Base64-encode the given string.

Parameters

  • str::string

Returns

string

Examples

javascript
_.encodeBase64('this is test'); // Returns 'dGhpcyBpcyB0ZXN0'

_.decodeBase64

Decodes an encoded base64 string to a plain string.

Parameters

  • encodedStr::string

Returns

string

Examples

javascript
_.decodeBase64('dGhpcyBpcyB0ZXN0'); // Returns 'this is test'

_.strToNumberHash

Returns the specified string as a hash value of type number. The return value can also be negative.

Parameters

  • str::string

Returns

number

Examples

javascript
_.strToNumberHash('abc'); // Returns 96354\n_.strToNumberHash('Hello'); // Returns 69609650\n_.strToNumberHash('hello'); // Returns 99162322
',73),h=[r];function l(n,p,d,o,c,k){return s(),e("div",null,h)}const E=a(t,[["render",l]]);export{b as __pageData,E as default}; diff --git a/assets/js_api_crypto.md.DWDCP7x5.lean.js b/assets/js_api_crypto.md.DWDCP7x5.lean.js new file mode 100644 index 0000000..33faafb --- /dev/null +++ b/assets/js_api_crypto.md.DWDCP7x5.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"Crypto","description":"","frontmatter":{"title":"Crypto","order":6},"headers":[],"relativePath":"js/api/crypto.md","filePath":"en/js/api/crypto.md","lastUpdated":1725328376000}'),t={name:"js/api/crypto.md"},r=i("",73),h=[r];function l(n,p,d,o,c,k){return s(),e("div",null,h)}const E=a(t,[["render",l]]);export{b as __pageData,E as default}; diff --git a/assets/js_api_date.md.D0dBBDiO.js b/assets/js_api_date.md.D0dBBDiO.js new file mode 100644 index 0000000..cbbfc88 --- /dev/null +++ b/assets/js_api_date.md.D0dBBDiO.js @@ -0,0 +1,14 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Date","description":"","frontmatter":{"title":"Date","order":7},"headers":[],"relativePath":"js/api/date.md","filePath":"en/js/api/date.md","lastUpdated":1725328376000}'),t={name:"js/api/date.md"},l=e(`

API: Date

_.dayDiff

Calculates the difference between two given dates and returns the number of days.

Parameters

  • date1::Date
  • date2::Date?

Returns

number

Examples

javascript
_.daydiff(new Date('2021-01-01'), new Date('2021-01-03')); // Returns 2

_.today

Returns today's date.

Parameters

  • separator::string = '-'
  • yearFirst::boolean = false

Returns

string

Examples

javascript
_.today(); // Returns YYYY-MM-DD
+_.today('/'); // Returns YYYY/MM/DD
+_.today('/', false); // Returns DD/MM/YYYY

_.isValidDate

Checks if a given date actually exists. Check only in YYYY-MM-DD format.

Parameters

  • date::string

Returns

boolean

Examples

javascript
_.isValidDate('2021-01-01'); // Returns true
+_.isValidDate('2021-02-30'); // Returns false

_.dateToYYYYMMDD

Returns the date data of a Date object in the format YYYY-MM-DD.

Parameters

  • date::Date
  • separator:string

Returns

string

Examples

javascript
_.dateToYYYYMMDD(new Date(2023, 11, 31)); // Returns '2023-12-31'

_.createDateListFromRange

Create an array list of all dates from startDate to endDate in the format YYYY-MM-DD.

Parameters

  • startDate::Date
  • endDate::Date

Returns

string[]

Examples

javascript
_.createDateListFromRange(new Date('2023-01-01T01:00:00Z'), new Date('2023-01-05T01:00:00Z'));
+
+/*
+	 [
+		 '2023-01-01',
+		 '2023-01-02',
+		 '2023-01-03',
+		 '2023-01-04',
+		 '2023-01-05'
+	 ]
+ */
`,41),n=[l];function h(r,p,d,k,o,c){return i(),s("div",null,n)}const g=a(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_date.md.D0dBBDiO.lean.js b/assets/js_api_date.md.D0dBBDiO.lean.js new file mode 100644 index 0000000..f8c3724 --- /dev/null +++ b/assets/js_api_date.md.D0dBBDiO.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Date","description":"","frontmatter":{"title":"Date","order":7},"headers":[],"relativePath":"js/api/date.md","filePath":"en/js/api/date.md","lastUpdated":1725328376000}'),t={name:"js/api/date.md"},l=e("",41),n=[l];function h(r,p,d,k,o,c){return i(),s("div",null,n)}const g=a(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_format.md.BEODkbmw.js b/assets/js_api_format.md.BEODkbmw.js new file mode 100644 index 0000000..e20e3a5 --- /dev/null +++ b/assets/js_api_format.md.BEODkbmw.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"js/api/format.md","filePath":"en/js/api/format.md","lastUpdated":1725328376000}'),t={name:"js/api/format.md"},n=e('

API: Format

_.numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

javascript
_.numberFormat(1234567); // Returns 1,234,567

_.fileName

Extract the file name from the path. Include the extension if withExtension is true.

Parameters

  • filePath::string
  • withExtension::boolean || false

Returns

string

Examples

javascript
_.fileName('C:Temphello.txt'); // Returns 'hello.txt'\n_.fileName('C:Temp\\file.mp3', true); // Returns 'file.mp3'

_.fileSize

Converts the file size in bytes to human-readable and returns it. The return value is a String and includes the file units (Bytes, MB, GB...). If the second optional argument value is included, you can display as many decimal places as you like.

Parameters

  • bytes::number
  • decimals::number || 2

Returns

string

Examples

javascript
_.fileSize(2000, 3); // Returns '1.953 KB'\n_.fileSize(250000000); // Returns '238.42 MB'

_.fileExt

Returns only the extensions in the file path. If unknown, returns 'Unknown'.

Parameters

  • filePath::string

Returns

string

Examples

javascript
_.fileExt('C:Temphello.txt'); // Returns 'txt'\n_.fileExt('this-is-file.mp3'); // Returns 'mp3'

_.duration

Displays the given millisecond value in human-readable time. For example, the value of 604800000 (7 days) is displayed as 7 Days.

Parameters

  • milliseconds::number
  • options::DurationOptions | undefined
typescript
const {\n	// Converts to `Days` -> `D`, `Hours` -> `H`,  `Minutes` -> `M`, `Seconds` -> `S`, `Milliseconds` -> `ms`\n	useShortString = false,\n	// Use space (e.g. `1Days` -> `1 Days`)\n	useSpace = true,\n	// Do not include units with a value of 0.\n	withZeroValue = false,\n	// Use Separator (e.g. If separator value is `-`, result is: `1 Hour 10 Minutes` -> `1 Hour-10 Minutes`)\n	separator = ' '\n}: DurationOptions = options;

Returns

string

Examples

javascript
_.duration(1234567890); // 'Returns '14 Days 6 Hours 56 Minutes 7 Seconds 890 Milliseconds'\n_.duration(604800000, {\n	useSpace: false\n}); // Returns '7Days'

_.safeJSONParse

Attempts to parse without returning an error, even if the argument value is of the wrong type or in JSON format. If parsing fails, it will be replaced with the object set in fallback.fallback의 기본값은 빈 오브젝트입니다.

Parameters

  • jsonString::any
  • fallback::object

Returns

object

Examples

javascript
const result1 = _.safeJSONParse('{"a":1,"b":2}');\nconst result2 = _.safeJSONParse(null);\n\nconsole.log(result1); // Returns { a: 1, b: 2 }\nconsole.log(result2); // Returns {}

_.safeParseInt

Any argument value will be attempted to be parsed as a Number type without returning an error. If parsing fails, it is replaced by the number set in fallback. The default value for fallback is 0. You can specify radix (default is decimal: 10) in the third argument.

Parameters

  • value::any
  • fallback::number
  • radix::number

Returns

number

Examples

javascript
const result1 = _.safeParseInt('00010');\nconst result2 = _.safeParseInt('10.1234');\nconst result3 = _.safeParseInt(null, -1);\n\nconsole.log(result1); // Returns 10\nconsole.log(result2); // Returns 10\nconsole.log(result3); // Returns -1
',58),l=[n];function h(r,p,k,d,o,c){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_format.md.BEODkbmw.lean.js b/assets/js_api_format.md.BEODkbmw.lean.js new file mode 100644 index 0000000..c27960b --- /dev/null +++ b/assets/js_api_format.md.BEODkbmw.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"js/api/format.md","filePath":"en/js/api/format.md","lastUpdated":1725328376000}'),t={name:"js/api/format.md"},n=e("",58),l=[n];function h(r,p,k,d,o,c){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_index.md.CAPv2HYo.js b/assets/js_api_index.md.CAPv2HYo.js new file mode 100644 index 0000000..d849f2f --- /dev/null +++ b/assets/js_api_index.md.CAPv2HYo.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"js/api/index.md","filePath":"en/js/api/index.md","lastUpdated":1725328376000}'),i={name:"js/api/index.md"},n=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),r=e("p",null,"A complete list of utility methods available in QSU.",-1),d=e("p",null,"Explore the APIs for your purpose in the left sidebar.",-1),l=[n,r,d];function c(p,_,h,f,m,u){return s(),a("div",null,l)}const A=t(i,[["render",c]]);export{P as __pageData,A as default}; diff --git a/assets/js_api_index.md.CAPv2HYo.lean.js b/assets/js_api_index.md.CAPv2HYo.lean.js new file mode 100644 index 0000000..d849f2f --- /dev/null +++ b/assets/js_api_index.md.CAPv2HYo.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"js/api/index.md","filePath":"en/js/api/index.md","lastUpdated":1725328376000}'),i={name:"js/api/index.md"},n=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),r=e("p",null,"A complete list of utility methods available in QSU.",-1),d=e("p",null,"Explore the APIs for your purpose in the left sidebar.",-1),l=[n,r,d];function c(p,_,h,f,m,u){return s(),a("div",null,l)}const A=t(i,[["render",c]]);export{P as __pageData,A as default}; diff --git a/assets/js_api_math.md.CEKd2KuL.js b/assets/js_api_math.md.CEKd2KuL.js new file mode 100644 index 0000000..e222ce0 --- /dev/null +++ b/assets/js_api_math.md.CEKd2KuL.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const c=JSON.parse('{"title":"Math","description":"","frontmatter":{"title":"Math","order":4},"headers":[],"relativePath":"js/api/math.md","filePath":"en/js/api/math.md","lastUpdated":1725328376000}'),t={name:"js/api/math.md"},h=e('

API: Math

_.numRandom

Returns a random number (Between min and max).

Parameters

  • min::number
  • max::number

Returns

number

Examples

javascript
_.numRandom(1, 5); // Returns 1~5\n_.numRandom(10, 20); // Returns 10~20

_.sum

Returns after adding up all the n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sum(1, 2, 3); // Returns 6\n_.sum([1, 2, 3, 4]); // Returns 10

_.mul

Returns after multiplying all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.mul(1, 2, 3); // Returns 6\n_.mul([1, 2, 3, 4]); // Returns 24

_.sub

Returns after subtracting all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sub(10, 1, 5); // Returns 4\n_.sub([1, 2, 3, 4]); // Returns -8

_.div

Returns after dividing all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.div(10, 5, 2); // Returns 1\n_.div([100, 2, 2, 5]); // Returns 5
',41),n=[h];function l(r,k,p,d,E,o){return i(),a("div",null,n)}const g=s(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/js_api_math.md.CEKd2KuL.lean.js b/assets/js_api_math.md.CEKd2KuL.lean.js new file mode 100644 index 0000000..99ae847 --- /dev/null +++ b/assets/js_api_math.md.CEKd2KuL.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const c=JSON.parse('{"title":"Math","description":"","frontmatter":{"title":"Math","order":4},"headers":[],"relativePath":"js/api/math.md","filePath":"en/js/api/math.md","lastUpdated":1725328376000}'),t={name:"js/api/math.md"},h=e("",41),n=[h];function l(r,k,p,d,E,o){return i(),a("div",null,n)}const g=s(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/js_api_misc.md.BqNcZivJ.js b/assets/js_api_misc.md.BqNcZivJ.js new file mode 100644 index 0000000..e24f943 --- /dev/null +++ b/assets/js_api_misc.md.BqNcZivJ.js @@ -0,0 +1,29 @@ +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"Misc","description":"","frontmatter":{"title":"Misc","order":9},"headers":[],"relativePath":"js/api/misc.md","filePath":"en/js/api/misc.md","lastUpdated":1725328376000}'),n={name:"js/api/misc.md"},e=t(`

API: Misc

_.sleep

Sleep function using Promise.

Parameters

  • milliseconds::number

Returns

Promise:boolean

Examples

javascript
await _.sleep(1000); // 1s
+
+_.sleep(5000).then(() => {
+	// continue
+});

_.funcTimes

Repeat iteratee n (times argument value) times. After the return result of each function is stored in the array in order, the final array is returned.

Parameters

  • times::number
  • iteratee::function

Returns

any[]

Examples

javascript
function sayHi(str) {
+	return \`Hi\${str || ''}\`;
+}
+
+_.funcTimes(3, sayHi); // Returns ['Hi', 'Hi', 'Hi']
+_.funcTimes(4, () => sayHi('!')); // Returns ['Hi!', 'Hi!', 'Hi!', 'Hi!']

_.debounce

When the given function is executed repeatedly, the function is called if it has not been called again within the specified timeout. This function is used when a small number of function calls are needed for repetitive input events.

For example, if you have a func variable written as const func = debounce(() => console.log('hello'), 1000) and you repeat the func function 100 times with a wait interval of 100ms, the function will only run once after 1000ms because the function was executed at 100ms intervals. However, if you increase the wait interval from 100ms to 1100ms or more and repeat it 100 times, the function will run all 100 times intended.

Parameters

  • func::function
  • timeout::number

Returns

No return values

Examples

html
<!doctype html>
+<html lang="en">
+	<head>
+		<title>test</title>
+	</head>
+	<body>
+		<input type="text" onkeyup="handleKeyUp()" />
+	</body>
+</html>
+<script>
+	import _ from 'qsu';
+
+	const keyUpDebounce = _.debounce(() => {
+		console.log('handleKeyUp called.');
+	}, 100);
+
+	function handleKeyUp() {
+		keyUpDebounce();
+	}
+</script>
`,26),l=[e];function h(p,k,r,E,d,o){return a(),i("div",null,l)}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/js_api_misc.md.BqNcZivJ.lean.js b/assets/js_api_misc.md.BqNcZivJ.lean.js new file mode 100644 index 0000000..ee0763a --- /dev/null +++ b/assets/js_api_misc.md.BqNcZivJ.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"Misc","description":"","frontmatter":{"title":"Misc","order":9},"headers":[],"relativePath":"js/api/misc.md","filePath":"en/js/api/misc.md","lastUpdated":1725328376000}'),n={name:"js/api/misc.md"},e=t("",26),l=[e];function h(p,k,r,E,d,o){return a(),i("div",null,l)}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/js_api_object.md.CPHo2EZ3.js b/assets/js_api_object.md.CPHo2EZ3.js new file mode 100644 index 0000000..8f50711 --- /dev/null +++ b/assets/js_api_object.md.CPHo2EZ3.js @@ -0,0 +1,80 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const y=JSON.parse('{"title":"Object","description":"","frontmatter":{"title":"Object","order":2},"headers":[],"relativePath":"js/api/object.md","filePath":"en/js/api/object.md","lastUpdated":1725328376000}'),t={name:"js/api/object.md"},n=e(`

API: Object

_.objToQueryString

Converts the given object data to a URL query string.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToQueryString({
+	hello: 'world',
+	test: 1234,
+	arr: [1, 2, 3]
+}); // Returns 'hello=world&test=1234&arr=%5B1%2C2%2C3%5D'

_.objToPrettyStr

Recursively output all the steps of the JSON object (JSON.stringify) and then output the JSON object with newlines and tab characters to make it easier to read in a console function, for example.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToPrettyStr({ a: 1, b: { c: 1, d: 2 } }); // Returns '{\\n\\t"a": 1,\\n\\t"b": {\\n\\t\\t"c": 1,\\n\\t\\t"d": 2\\n\\t}\\n}'

_.objFindItemRecursiveByKey

Returns the object if the key of a specific piece of data in the object's dataset corresponds to a specific value. This function returns only one result, so it is used to search for unique IDs, including all of their children.

Parameters

  • obj::object
  • searchKey::string
  • searchValue::any
  • childKey::string

Returns

object|null

Examples

javascript
_.objFindItemRecursiveByKey(
+	{
+		id: 123,
+		name: 'parent',
+		child: [
+			{
+				id: 456,
+				name: 'childItemA'
+			},
+			{
+				id: 789,
+				name: 'childItemB'
+			}
+		]
+	}, // obj
+	'id', // searchKey
+	456, // searchValue
+	'child' // childKey
+); // Returns '{ id: 456, name: 'childItemA' }'

_.objToArray

Converts the given object to array format. The resulting array is a two-dimensional array with one key value stored as follows: [key, value]. If the recursive option is true, it will convert to a two-dimensional array again when the value is of type object.

Parameters

  • obj::object
  • recursive::boolean

Returns

any[]

Examples

javascript
_.objToArray({
+	a: 1.234,
+	b: 'str',
+	c: [1, 2, 3],
+	d: { a: 1 }
+}); // Returns [['a', 1.234], ['b', 'str'], ['c', [1, 2, 3]], ['d', { a: 1 }]]

_.objTo1d

Merges objects from the given object to the top level of the child items and displays the key names in steps, using a delimiter (. by default) instead of the existing keys. For example, if an object a has keys b, c, and d, the a key is not displayed, and the keys and values a.b, a.c, and a.d are displayed in the parent step.

Parameters

  • obj::object
  • separator::string

Returns

object

Examples

javascript
_.objToArray({
+	a: 1,
+	b: {
+		aa: 1,
+		bb: 2
+	},
+	c: 3
+});
+
+/*
+Returns:
+{
+	a: 1,
+	'b.aa': 1,
+	'b.bb': 2,
+	c: 3
+}
+ */

_.objDeleteKeyByValue

Deletes keys equal to the given value from the object data. If the recursive option is true, also deletes all keys corresponding to the same value in the child items.

Parameters

  • obj::object
  • searchValue::string|number|null|undefined
  • recursive::boolean

Returns

object|null

Examples

javascript
const result = _.objDeleteKeyByValue(
+	{
+		a: 1,
+		b: 2,
+		c: {
+			aa: 2,
+			bb: {
+				aaa: 1,
+				bbb: 2
+			}
+		},
+		d: {
+			aa: 2
+		}
+	},
+	2,
+	true
+);
+
+console.log(result); // Returns { a: 1, c: { bb: { aaa: 1 } }, d: {} }

_.objUpdate

Changes the value matching a specific key name in the given object. If the recursive option is true, it will also search in child object items. This changes the value of the same key found in both the parent and child items. If the upsert option is true, add it as a new attribute to the top-level item when the key is not found.

Parameters

  • obj::object
  • searchKey::string
  • value::any
  • recursive::boolean
  • upsert::boolean

Returns

object|null

Examples

javascript
const result = _.objUpdate(
+	{
+		a: 1,
+		b: {
+			a: 1,
+			b: 2,
+			c: 3
+		},
+		c: 3
+	},
+	'c',
+	5,
+	true,
+	false
+);
+
+console.log(result); // Returns { a: 1, b: { a: 1, b: 2, c: 5 }, c: 5 }
`,57),l=[n];function h(p,k,r,d,o,E){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{y as __pageData,g as default}; diff --git a/assets/js_api_object.md.CPHo2EZ3.lean.js b/assets/js_api_object.md.CPHo2EZ3.lean.js new file mode 100644 index 0000000..1e36ab7 --- /dev/null +++ b/assets/js_api_object.md.CPHo2EZ3.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const y=JSON.parse('{"title":"Object","description":"","frontmatter":{"title":"Object","order":2},"headers":[],"relativePath":"js/api/object.md","filePath":"en/js/api/object.md","lastUpdated":1725328376000}'),t={name:"js/api/object.md"},n=e("",57),l=[n];function h(p,k,r,d,o,E){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{y as __pageData,g as default}; diff --git a/assets/js_api_string.md.DeKPXuMr.js b/assets/js_api_string.md.DeKPXuMr.js new file mode 100644 index 0000000..3e7b1b3 --- /dev/null +++ b/assets/js_api_string.md.DeKPXuMr.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"js/api/string.md","filePath":"en/js/api/string.md","lastUpdated":1725328376000}'),t={name:"js/api/string.md"},l=e('

API: String

_.trim

Removes all whitespace before and after a string. Unlike JavaScript's trim function, it converts two or more spaces between sentences into a single space.

Parameters

  • str::string

Returns

string

Examples

javascript
_.trim(' Hello Wor  ld  '); // Returns 'Hello Wor ld'\n_.trim('H e l l o     World'); // Returns 'H e l l o World'

_.removeSpecialChar

Returns after removing all special characters, including spaces. If you want to allow any special characters as exceptions, list them in the second argument value without delimiters. For example, if you want to allow spaces and the symbols & and *, the second argument value would be ' &*'.

Parameters

  • str::string
  • exceptionCharacters::string?

Returns

string

Examples

javascript
_.removeSpecialChar('Hello-qsu, World!'); // Returns 'HelloqsuWorld'\n_.removeSpecialChar('Hello-qsu, World!', ' -'); // Returns 'Hello-qsu World'

_.removeNewLine

Removes \\n, \\r characters or replaces them with specified characters.

Parameters

  • str::string
  • replaceTo::string || ''

Returns

string

Examples

javascript
_.removeNewLine('ab\\ncd'); // Returns 'abcd'\n_.removeNewLine('ab\\r\\ncd', '-'); // Returns 'ab-cd'

_.replaceBetween

Replaces text within a range starting and ending with a specific character in a given string with another string. For example, given the string abc<DEF>ghi, to change <DEF> to def, use replaceBetween('abc<DEF>ghi', '<', '>', 'def'). The result would be abcdefghi.

Deletes strings in the range if replaceWith is not specified.

Parameters

  • str::string
  • startChar::string
  • endChar::string
  • replaceWith::string || ''

Returns

string

Examples

javascript
_.replaceBetween('ab[c]d[e]f', '[', ']'); // Returns 'abdf'\n_.replaceBetween('abcd:replace:', ':', ':', 'e'); // Returns 'abcde'

_.capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

javascript
_.capitalizeFirst('abcd'); // Returns 'Abcd'

_.capitalizeEverySentence

Capitalize the first letter of every sentence. Typically, the . characters to separate sentences, but this can be customized via the value of the splitChar argument.

Parameters

  • str::string
  • splitChar::string

Returns

string

Examples

javascript
_.capitalizeEverySentence('hello. world. hi.'); // Returns 'Hello. World. Hi.'\n_.capitalizeEverySentence('hello!world', '!'); // Returns 'Hello!World'

_.capitalizeEachWords

Converts every word with spaces to uppercase. If the naturally argument is true, only some special cases (such as prepositions) are kept lowercase.

Parameters

  • str::string
  • natural::boolean || false

Returns

string

Examples

javascript
_.capitalizeEachWords('abcd'); // Returns 'Abcd'

_.strCount

Returns the number of times the second String argument is contained in the first String argument.

Parameters

  • str::string
  • search::string

Returns

number

Examples

javascript
_.strCount('abcabc', 'a'); // Returns 2

_.strShuffle

Randomly shuffles the received string and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strShuffle('abcdefg'); // Returns 'bgafced'

_.strRandom

Returns a random String containing numbers or uppercase and lowercase letters of the given length. The default return length is 12.

Parameters

  • length::number
  • additionalCharacters::string?

Returns

string

Examples

javascript
_.strRandom(5); // Returns 'CHy2M'

_.strBlindRandom

Replace strings at random locations with a specified number of characters (default 1) with characters (default *).

Parameters

  • str::string
  • blindLength::number
  • blindStr::string || '*'

Returns

string

Examples

javascript
_.strBlindRandom('hello', 2, '#'); // Returns '#el#o'

_.truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number
  • ellipsis::string || ''

Returns

string

Examples

javascript
_.truncate('hello', 3); // Returns 'hel'\n_.truncate('hello', 2, '...'); // Returns 'he...'

_.truncateExpect

The string ignores truncation until the ending character (endStringChar). If the expected length is reached, return the truncated string until after the ending character.

Parameters

  • str::string
  • expectLength::number
  • endStringChar::string || '.'

Returns

string

Examples

javascript
_.truncateExpect('hello. this is test string.', 10, '.'); // Returns 'hello. this is test string.'\n_.truncateExpect('hello-this-is-test-string-bye', 14, '-'); // Returns 'hello-this-is-'

_.split

Splits a string based on the specified character and returns it as an Array. Unlike the existing split, it splits the values provided as multiple parameters (array or multiple arguments) at once.

Parameters

  • str::string
  • splitter::string||string[]||...string

Returns

string[]

Examples

javascript
_.split('hello% js world', '% '); // Returns ['hello', 'js world']\n_.split('hello,js,world', ','); // Returns ['hello', 'js', 'world']\n_.split('hello%js,world', ',', '%'); // Returns ['hello', 'js', 'world']\n_.split('hello%js,world', [',', '%']); // Returns ['hello', 'js', 'world']

_.strUnique

Remove duplicate characters from a given string and output only one.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strUnique('aaabbbcc'); // Returns 'abc'

_.strToAscii

Converts the given string to ascii code and returns it as an array.

Parameters

  • str::string

Returns

number[]

Examples

javascript
_.strToAscii('12345'); // Returns [49, 50, 51, 52, 53]

_.urlJoin

Merges the given string argument with the first argument (the beginning of the URL), joining it so that the slash (/) symbol is correctly included.

Parameters

  • args::any[]

Returns

string

Examples

javascript
_.urlJoin('https://example.com', 'hello', 'world'); // Returns 'https://example.com/hello/world'
',138),r=[l];function n(h,p,d,o,k,c){return i(),s("div",null,r)}const g=a(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_string.md.DeKPXuMr.lean.js b/assets/js_api_string.md.DeKPXuMr.lean.js new file mode 100644 index 0000000..54f5bf6 --- /dev/null +++ b/assets/js_api_string.md.DeKPXuMr.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"js/api/string.md","filePath":"en/js/api/string.md","lastUpdated":1725328376000}'),t={name:"js/api/string.md"},l=e("",138),r=[l];function n(h,p,d,o,k,c){return i(),s("div",null,r)}const g=a(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_verify.md.BqArh73l.js b/assets/js_api_verify.md.BqArh73l.js new file mode 100644 index 0000000..015bed1 --- /dev/null +++ b/assets/js_api_verify.md.BqArh73l.js @@ -0,0 +1,27 @@ +import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Verify","description":"","frontmatter":{"title":"Verify","order":5},"headers":[],"relativePath":"js/api/verify.md","filePath":"en/js/api/verify.md","lastUpdated":1725328376000}'),t={name:"js/api/verify.md"},h=e(`

API: Verify

_.isObject

Check whether the given data is of type Object. Returns false for other data types including Array.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.isObject([1, 2, 3]); // Returns false
+_.isObject({ a: 1, b: 2 }); // Returns true

_.isEqual

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqual('Left', 'Left', val1); // Returns true
+_.isEqual(1, [1, '1', 1, val2]); // Returns true
+_.isEqual(val1, ['Right', 'Left', 1]); // Returns false
+_.isEqual(1, 1, 1, 1); // Returns true

_.isEqualStrict

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqualStrict('Left', 'Left', val1); // Returns true
+_.isEqualStrict(1, [1, '1', 1, val2]); // Returns false
+_.isEqualStrict(1, 1, '1', 1); // Returns false

_.isEmpty

Returns true if the passed data is empty or has a length of 0.

Parameters

  • data::any?

Returns

boolean

Examples

javascript
_.isEmpty([]); // Returns true
+_.isEmpty(''); // Returns true
+_.isEmpty('abc'); // Returns false

_.isUrl

Returns true if the given data is in the correct URL format. If withProtocol is true, it is automatically appended to the URL when the protocol does not exist. If strict is true, URLs without commas (.) return false.

Parameters

  • url::string
  • withProtocol::boolean || false
  • strict::boolean || false

Returns

boolean

Examples

javascript
_.isUrl('google.com'); // Returns false
+_.isUrl('google.com', true); // Returns true
+_.isUrl('https://google.com'); // Returns true

_.contains

Returns true if the first string argument contains the second argument "string" or "one or more of the strings listed in the array". If the exact value is true, it returns true only for an exact match.

Parameters

  • str::any[]|string
  • search::any[]|string
  • exact::boolean || false

Returns

boolean

Examples

javascript
_.contains('abc', 'a'); // Returns true
+_.contains('abc', 'd'); // Returns false
+_.contains('abc', ['a', 'd']); // Returns true

_.is2dArray

Returns true if the given array is a two-dimensional array.

Parameters

  • array::any[]

Returns

boolean

Examples

javascript
_.is2dArray([1]); // Returns false
+_.is2dArray([[1], [2]]); // Returns true

_.between

Returns true if the first argument is in the range of the second argument ([min, max]). To allow the minimum and maximum values to be in the range, pass true for the third argument.

Parameters

  • range::[number, number]
  • number::number
  • inclusive::boolean || false

Returns

boolean

Examples

javascript
_.between([10, 20], 10); // Returns false
+_.between([10, 20], 10, true); // Returns true

_.len

Returns the length of any type of data. If the argument value is null or undefined, 0 is returned.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.len('12345'); // Returns 5
+_.len([1, 2, 3]); // Returns 3

_.isEmail

Checks if the given argument value is a valid email.

Parameters

  • email::string

Returns

boolean

Examples

javascript
_.isEmail('abc@def.com'); // Returns true

_.isTrueMinimumNumberOfTimes

Returns true if the values given in the conditions array are true at least minimumCount times.

Parameters

  • conditions::boolean[]
  • minimumCount::number

Returns

boolean

Examples

javascript
const left = 1;
+const right = 1 + 2;
+
+_.isTrueMinimumNumberOfTimes([true, true, false], 2); // Returns true
+_.isTrueMinimumNumberOfTimes([true, true, false], 3); // Returns false
+_.isTrueMinimumNumberOfTimes([true, true, left === right], 3); // Returns false
`,91),n=[h];function l(r,k,p,d,E,o){return a(),i("div",null,n)}const g=s(t,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/js_api_verify.md.BqArh73l.lean.js b/assets/js_api_verify.md.BqArh73l.lean.js new file mode 100644 index 0000000..03a7e06 --- /dev/null +++ b/assets/js_api_verify.md.BqArh73l.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Verify","description":"","frontmatter":{"title":"Verify","order":5},"headers":[],"relativePath":"js/api/verify.md","filePath":"en/js/api/verify.md","lastUpdated":1725328376000}'),t={name:"js/api/verify.md"},h=e("",91),n=[h];function l(r,k,p,d,E,o){return a(),i("div",null,n)}const g=s(t,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/js_installation.md.BLmW6zAx.js b/assets/js_installation.md.BLmW6zAx.js new file mode 100644 index 0000000..c178d79 --- /dev/null +++ b/assets/js_installation.md.BLmW6zAx.js @@ -0,0 +1,17 @@ +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.C94oF1kp.js";const E=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation","order":1},"headers":[],"relativePath":"js/installation.md","filePath":"en/js/installation.md","lastUpdated":1725328376000}'),t={name:"js/installation.md"},l=n(`

Installation

Qsu requires Node.js 18.x or higher, and the repository is serviced through NPM.

Qsu is ESM-only. You must use import instead of require to load the module. There are workarounds available for CommonJS, but we recommend using ESM based on recent JavaScript trends.

After configuring the node environment, you can simply run the following command.

bash
# via npm
+$ npm install qsu
+
+# via yarn
+$ yarn add qsu
+
+# via pnpm
+$ pnpm install qsu

How to Use

Using named import (Multiple utilities in a single require) - Recommend

javascript
import { today, strCount } from 'qsu';
+
+function main() {
+	console.log(today()); // '20xx-xx-xx'
+	console.log(strCount('123412341234', '1')); // 3
+}

Using whole class (multiple utilities simultaneously with one object)

javascript
import _ from 'qsu';
+
+function main() {
+	console.log(_.today()); // '20xx-xx-xx'
+}
`,10),e=[l];function h(p,k,r,o,d,c){return a(),i("div",null,e)}const u=s(t,[["render",h]]);export{E as __pageData,u as default}; diff --git a/assets/js_installation.md.BLmW6zAx.lean.js b/assets/js_installation.md.BLmW6zAx.lean.js new file mode 100644 index 0000000..2edeb29 --- /dev/null +++ b/assets/js_installation.md.BLmW6zAx.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.C94oF1kp.js";const E=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation","order":1},"headers":[],"relativePath":"js/installation.md","filePath":"en/js/installation.md","lastUpdated":1725328376000}'),t={name:"js/installation.md"},l=n("",10),e=[l];function h(p,k,r,o,d,c){return a(),i("div",null,e)}const u=s(t,[["render",h]]);export{E as __pageData,u as default}; diff --git a/assets/js_js.md.DEJf1Edl.js b/assets/js_js.md.DEJf1Edl.js new file mode 100644 index 0000000..6a26986 --- /dev/null +++ b/assets/js_js.md.DEJf1Edl.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"JavaScript/Node.js","description":"","frontmatter":{},"headers":[],"relativePath":"js/js.md","filePath":"en/js/js.md","lastUpdated":1725328376000}'),r={name:"js/js.md"},c=e("h1",{id:"javascript-node-js",tabindex:"-1"},[o("JavaScript/Node.js "),e("a",{class:"header-anchor",href:"#javascript-node-js","aria-label":'Permalink to "JavaScript/Node.js"'},"​")],-1),d=[c];function n(i,p,j,_,l,h){return s(),t("div",null,d)}const v=a(r,[["render",n]]);export{f as __pageData,v as default}; diff --git a/assets/js_js.md.DEJf1Edl.lean.js b/assets/js_js.md.DEJf1Edl.lean.js new file mode 100644 index 0000000..6a26986 --- /dev/null +++ b/assets/js_js.md.DEJf1Edl.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"JavaScript/Node.js","description":"","frontmatter":{},"headers":[],"relativePath":"js/js.md","filePath":"en/js/js.md","lastUpdated":1725328376000}'),r={name:"js/js.md"},c=e("h1",{id:"javascript-node-js",tabindex:"-1"},[o("JavaScript/Node.js "),e("a",{class:"header-anchor",href:"#javascript-node-js","aria-label":'Permalink to "JavaScript/Node.js"'},"​")],-1),d=[c];function n(i,p,j,_,l,h){return s(),t("div",null,d)}const v=a(r,[["render",n]]);export{f as __pageData,v as default}; diff --git a/assets/js_qsu-web_api_index.md.CmwO6iGe.js b/assets/js_qsu-web_api_index.md.CmwO6iGe.js new file mode 100644 index 0000000..5439235 --- /dev/null +++ b/assets/js_qsu-web_api_index.md.CmwO6iGe.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"js/qsu-web/api/index.md","filePath":"en/js/qsu-web/api/index.md","lastUpdated":1725328376000}'),i={name:"js/qsu-web/api/index.md"},n=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),r=e("p",null,"A complete list of utility methods available in QSU.",-1),d=e("p",null,"Explore the APIs for your purpose in the left sidebar.",-1),l=[n,r,d];function c(p,_,h,u,f,m){return s(),a("div",null,l)}const P=t(i,[["render",c]]);export{b as __pageData,P as default}; diff --git a/assets/js_qsu-web_api_index.md.CmwO6iGe.lean.js b/assets/js_qsu-web_api_index.md.CmwO6iGe.lean.js new file mode 100644 index 0000000..5439235 --- /dev/null +++ b/assets/js_qsu-web_api_index.md.CmwO6iGe.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"js/qsu-web/api/index.md","filePath":"en/js/qsu-web/api/index.md","lastUpdated":1725328376000}'),i={name:"js/qsu-web/api/index.md"},n=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),r=e("p",null,"A complete list of utility methods available in QSU.",-1),d=e("p",null,"Explore the APIs for your purpose in the left sidebar.",-1),l=[n,r,d];function c(p,_,h,u,f,m){return s(),a("div",null,l)}const P=t(i,[["render",c]]);export{b as __pageData,P as default}; diff --git a/assets/js_qsu-web_api_web.md.C1UHo3YI.js b/assets/js_qsu-web_api_web.md.C1UHo3YI.js new file mode 100644 index 0000000..9576281 --- /dev/null +++ b/assets/js_qsu-web_api_web.md.C1UHo3YI.js @@ -0,0 +1,7 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Web","description":"","frontmatter":{"title":"Web","order":1},"headers":[],"relativePath":"js/qsu-web/api/web.md","filePath":"en/js/qsu-web/api/web.md","lastUpdated":1725328376000}'),t={name:"js/qsu-web/api/web.md"},n=i(`

Methods: Web

This method is only available in the qsu-web package.

_.isBotAgent

Analyze the user agent value to determine if it's a bot for a search engine. Returns true if it's a bot.

Parameters

  • userAgent::string

Returns

boolean

Examples

javascript
_.isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); // Returns true

_.license

Returns text in a specific license format based on the author information of the given argument. The argument uses the Object type.

Parameters

  • options::LicenseOption{ author: string, email: string?, yearStart: string|number, yearEnd: string?, htmlBr: boolean?, type: 'mit' | 'apache20' }

Returns

string

Examples

javascript
_.license({
+	holder: 'example',
+	email: 'example@example.com',
+	yearStart: 2020,
+	yearEnd: 2021,
+	htmlBr: true
+});
`,18),l=[n];function r(h,o,p,d,c,k){return s(),e("div",null,l)}const b=a(t,[["render",r]]);export{u as __pageData,b as default}; diff --git a/assets/js_qsu-web_api_web.md.C1UHo3YI.lean.js b/assets/js_qsu-web_api_web.md.C1UHo3YI.lean.js new file mode 100644 index 0000000..6f88980 --- /dev/null +++ b/assets/js_qsu-web_api_web.md.C1UHo3YI.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Web","description":"","frontmatter":{"title":"Web","order":1},"headers":[],"relativePath":"js/qsu-web/api/web.md","filePath":"en/js/qsu-web/api/web.md","lastUpdated":1725328376000}'),t={name:"js/qsu-web/api/web.md"},n=i("",18),l=[n];function r(h,o,p,d,c,k){return s(),e("div",null,l)}const b=a(t,[["render",r]]);export{u as __pageData,b as default}; diff --git a/assets/js_qsu-web_installation.md.DHji8q2j.js b/assets/js_qsu-web_installation.md.DHji8q2j.js new file mode 100644 index 0000000..195ecc9 --- /dev/null +++ b/assets/js_qsu-web_installation.md.DHji8q2j.js @@ -0,0 +1,14 @@ +import{_ as s,c as a,o as i,a2 as n}from"./chunks/framework.C94oF1kp.js";const E=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"js/qsu-web/installation.md","filePath":"en/js/qsu-web/installation.md","lastUpdated":1725328376000}'),t={name:"js/qsu-web/installation.md"},l=n(`

Installation

Qsu has utilities organized into separate packages. Currently, there is a package called qsu-web.

The qsu-web package contains a collection of utility functions that are commonly used on web pages.

General installation and use is almost identical to the qsu package.

bash
# via npm
+$ npm install qsu-web
+
+# via yarn
+$ yarn add qsu-web
+
+# via pnpm
+$ pnpm install qsu-web
javascript
import { isBotAgent } from 'qsu-web';
+
+function main() {
+	console.log(
+		isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html')
+	); // true
+}
`,6),e=[l];function p(h,k,o,d,r,c){return i(),a("div",null,e)}const F=s(t,[["render",p]]);export{E as __pageData,F as default}; diff --git a/assets/js_qsu-web_installation.md.DHji8q2j.lean.js b/assets/js_qsu-web_installation.md.DHji8q2j.lean.js new file mode 100644 index 0000000..369bbb8 --- /dev/null +++ b/assets/js_qsu-web_installation.md.DHji8q2j.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as n}from"./chunks/framework.C94oF1kp.js";const E=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"js/qsu-web/installation.md","filePath":"en/js/qsu-web/installation.md","lastUpdated":1725328376000}'),t={name:"js/qsu-web/installation.md"},l=n("",6),e=[l];function p(h,k,o,d,r,c){return i(),a("div",null,e)}const F=s(t,[["render",p]]);export{E as __pageData,F as default}; diff --git a/assets/ko_dart_api_format.md.ChyCeyny.js b/assets/ko_dart_api_format.md.ChyCeyny.js new file mode 100644 index 0000000..6fbc807 --- /dev/null +++ b/assets/ko_dart_api_format.md.ChyCeyny.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as t,a2 as r}from"./chunks/framework.C94oF1kp.js";const k=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"ko/dart/api/format.md","filePath":"ko/dart/api/format.md","lastUpdated":1725328376000}'),s={name:"ko/dart/api/format.md"},i=r('

API: Format

numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

dart
numberFormat(1234567); // Returns 1,234,567
',9),o=[i];function n(l,d,h,m,p,c){return t(),e("div",null,o)}const _=a(s,[["render",n]]);export{k as __pageData,_ as default}; diff --git a/assets/ko_dart_api_format.md.ChyCeyny.lean.js b/assets/ko_dart_api_format.md.ChyCeyny.lean.js new file mode 100644 index 0000000..266d8c5 --- /dev/null +++ b/assets/ko_dart_api_format.md.ChyCeyny.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as t,a2 as r}from"./chunks/framework.C94oF1kp.js";const k=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"ko/dart/api/format.md","filePath":"ko/dart/api/format.md","lastUpdated":1725328376000}'),s={name:"ko/dart/api/format.md"},i=r("",9),o=[i];function n(l,d,h,m,p,c){return t(),e("div",null,o)}const _=a(s,[["render",n]]);export{k as __pageData,_ as default}; diff --git a/assets/ko_dart_api_index.md.DktGqtiu.js b/assets/ko_dart_api_index.md.DktGqtiu.js new file mode 100644 index 0000000..c0b5270 --- /dev/null +++ b/assets/ko_dart_api_index.md.DktGqtiu.js @@ -0,0 +1 @@ +import{_ as a,c as t,o,j as e,a as s}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"ko/dart/api/index.md","filePath":"ko/dart/api/index.md","lastUpdated":1725328376000}'),n={name:"ko/dart/api/index.md"},d=e("h1",{id:"api",tabindex:"-1"},[s("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),r=e("p",null,"Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.",-1),i=e("p",null,"왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.",-1),c=[d,r,i];function p(_,l,h,m,f,x){return o(),t("div",null,c)}const k=a(n,[["render",p]]);export{P as __pageData,k as default}; diff --git a/assets/ko_dart_api_index.md.DktGqtiu.lean.js b/assets/ko_dart_api_index.md.DktGqtiu.lean.js new file mode 100644 index 0000000..c0b5270 --- /dev/null +++ b/assets/ko_dart_api_index.md.DktGqtiu.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o,j as e,a as s}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"ko/dart/api/index.md","filePath":"ko/dart/api/index.md","lastUpdated":1725328376000}'),n={name:"ko/dart/api/index.md"},d=e("h1",{id:"api",tabindex:"-1"},[s("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),r=e("p",null,"Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.",-1),i=e("p",null,"왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.",-1),c=[d,r,i];function p(_,l,h,m,f,x){return o(),t("div",null,c)}const k=a(n,[["render",p]]);export{P as __pageData,k as default}; diff --git a/assets/ko_dart_api_string.md.DkrkSVvN.js b/assets/ko_dart_api_string.md.DkrkSVvN.js new file mode 100644 index 0000000..3c59f12 --- /dev/null +++ b/assets/ko_dart_api_string.md.DkrkSVvN.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"ko/dart/api/string.md","filePath":"ko/dart/api/string.md","lastUpdated":1725328376000}'),t={name:"ko/dart/api/string.md"},r=e('

API: String

capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

dart
capitalizeFirst('abcd'); // Returns 'Abcd'

truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number

Optional Parameters

  • ellipsis::string || ''

Returns

string

Examples

dart
truncate('hello', 3); // Returns 'hel'\ntruncate('hello', 2, ellipsis: '...'); // Returns 'he...'
',19),l=[r];function n(h,p,o,d,k,c){return i(),s("div",null,l)}const E=a(t,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/ko_dart_api_string.md.DkrkSVvN.lean.js b/assets/ko_dart_api_string.md.DkrkSVvN.lean.js new file mode 100644 index 0000000..5f2646f --- /dev/null +++ b/assets/ko_dart_api_string.md.DkrkSVvN.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"ko/dart/api/string.md","filePath":"ko/dart/api/string.md","lastUpdated":1725328376000}'),t={name:"ko/dart/api/string.md"},r=e("",19),l=[r];function n(h,p,o,d,k,c){return i(),s("div",null,l)}const E=a(t,[["render",n]]);export{g as __pageData,E as default}; diff --git a/assets/ko_dart_dart.md.BWgDH20j.js b/assets/ko_dart_dart.md.BWgDH20j.js new file mode 100644 index 0000000..d87f34e --- /dev/null +++ b/assets/ko_dart_dart.md.BWgDH20j.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as r,j as t,a as d}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Dart/Flutter","description":"","frontmatter":{},"headers":[],"relativePath":"ko/dart/dart.md","filePath":"ko/dart/dart.md","lastUpdated":1725328376000}'),o={name:"ko/dart/dart.md"},s=t("h1",{id:"dart-flutter",tabindex:"-1"},[d("Dart/Flutter "),t("a",{class:"header-anchor",href:"#dart-flutter","aria-label":'Permalink to "Dart/Flutter"'},"​")],-1),c=[s];function n(l,i,_,p,f,h){return r(),e("div",null,c)}const k=a(o,[["render",n]]);export{u as __pageData,k as default}; diff --git a/assets/ko_dart_dart.md.BWgDH20j.lean.js b/assets/ko_dart_dart.md.BWgDH20j.lean.js new file mode 100644 index 0000000..d87f34e --- /dev/null +++ b/assets/ko_dart_dart.md.BWgDH20j.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as r,j as t,a as d}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Dart/Flutter","description":"","frontmatter":{},"headers":[],"relativePath":"ko/dart/dart.md","filePath":"ko/dart/dart.md","lastUpdated":1725328376000}'),o={name:"ko/dart/dart.md"},s=t("h1",{id:"dart-flutter",tabindex:"-1"},[d("Dart/Flutter "),t("a",{class:"header-anchor",href:"#dart-flutter","aria-label":'Permalink to "Dart/Flutter"'},"​")],-1),c=[s];function n(l,i,_,p,f,h){return r(),e("div",null,c)}const k=a(o,[["render",n]]);export{u as __pageData,k as default}; diff --git a/assets/ko_dart_installation.md._931pPlw.js b/assets/ko_dart_installation.md._931pPlw.js new file mode 100644 index 0000000..70eb6eb --- /dev/null +++ b/assets/ko_dart_installation.md._931pPlw.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation","order":1},"headers":[],"relativePath":"ko/dart/installation.md","filePath":"ko/dart/installation.md","lastUpdated":1725329036000}'),e={name:"ko/dart/installation.md"},l=i('

설치

Qsu에는 Dart 3.x 이상이 필요합니다. Flutter를 사용 중인 경우 Flutter 버전 3.10.x 이상을 사용 중이어야 합니다.

Dart 환경을 구성한 후 다음 명령을 실행하면 됩니다:

With Dart

bash
$ dart pub add qsu

With Flutter

bash
$flutter pub add qsu

사용 방법

다음 코드를 수동 또는 자동으로 가져와서 QSU 유틸리티를 불러올 수 있습니다.

dart
import 'package:qsu/qsu.dart';

유틸리티 기능에 대해 자세히 알아보려면 API 설명서를 참조하세요.

',11),n=[l];function h(r,d,o,p,c,k){return s(),t("div",null,n)}const g=a(e,[["render",h]]);export{b as __pageData,g as default}; diff --git a/assets/ko_dart_installation.md._931pPlw.lean.js b/assets/ko_dart_installation.md._931pPlw.lean.js new file mode 100644 index 0000000..1652f8a --- /dev/null +++ b/assets/ko_dart_installation.md._931pPlw.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation","order":1},"headers":[],"relativePath":"ko/dart/installation.md","filePath":"ko/dart/installation.md","lastUpdated":1725329036000}'),e={name:"ko/dart/installation.md"},l=i("",11),n=[l];function h(r,d,o,p,c,k){return s(),t("div",null,n)}const g=a(e,[["render",h]]);export{b as __pageData,g as default}; diff --git a/assets/ko_index.md.BOisvvBD.js b/assets/ko_index.md.BOisvvBD.js new file mode 100644 index 0000000..89d69b3 --- /dev/null +++ b/assets/ko_index.md.BOisvvBD.js @@ -0,0 +1 @@ +import{_ as t,c as l,o as e}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"QSU","titleTemplate":"가벼우면서 광범위한 유틸리티 도우미","description":"","frontmatter":{"layout":"home","title":"QSU","titleTemplate":"가벼우면서 광범위한 유틸리티 도우미","hero":{"name":"QSU","text":"가벼우면서 광범위한 유틸리티 도우미","tagline":"QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.","actions":[{"theme":"brand","text":"소개","link":"ko/introduction"},{"theme":"alt","text":"JavaScript/NodeJS","link":"ko/js/installation"},{"theme":"alt","text":"Dart/Flutter","link":"ko/dart/installation"}],"image":{"src":"/icon.png","alt":"Utility"}},"features":[{"icon":"","title":"가볍고 빠릅니다!","details":"작은 설치 공간과 빠른 성능을 목표로 합니다. 최신 Node.js 프로그래밍에 이상적입니다."},{"icon":"","title":"다양한 유틸리티 기능으로 프로그래밍 속도를 높일 수 있습니다.","details":"QSU에서 사용할 수 있는 기능을 만나보세요. 반복적인 유틸리티 작성을 최소화하세요."},{"icon":"","title":"안정적인 유지 관리 지원","details":"실제 사용 사례도 많고 기술 지원도 신속하게 제공합니다."}]},"headers":[],"relativePath":"ko/index.md","filePath":"ko/index.md","lastUpdated":1725328376000}'),i={name:"ko/index.md"};function o(a,c,s,n,p,d){return e(),l("div")}const h=t(i,[["render",o]]);export{f as __pageData,h as default}; diff --git a/assets/ko_index.md.BOisvvBD.lean.js b/assets/ko_index.md.BOisvvBD.lean.js new file mode 100644 index 0000000..89d69b3 --- /dev/null +++ b/assets/ko_index.md.BOisvvBD.lean.js @@ -0,0 +1 @@ +import{_ as t,c as l,o as e}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"QSU","titleTemplate":"가벼우면서 광범위한 유틸리티 도우미","description":"","frontmatter":{"layout":"home","title":"QSU","titleTemplate":"가벼우면서 광범위한 유틸리티 도우미","hero":{"name":"QSU","text":"가벼우면서 광범위한 유틸리티 도우미","tagline":"QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.","actions":[{"theme":"brand","text":"소개","link":"ko/introduction"},{"theme":"alt","text":"JavaScript/NodeJS","link":"ko/js/installation"},{"theme":"alt","text":"Dart/Flutter","link":"ko/dart/installation"}],"image":{"src":"/icon.png","alt":"Utility"}},"features":[{"icon":"","title":"가볍고 빠릅니다!","details":"작은 설치 공간과 빠른 성능을 목표로 합니다. 최신 Node.js 프로그래밍에 이상적입니다."},{"icon":"","title":"다양한 유틸리티 기능으로 프로그래밍 속도를 높일 수 있습니다.","details":"QSU에서 사용할 수 있는 기능을 만나보세요. 반복적인 유틸리티 작성을 최소화하세요."},{"icon":"","title":"안정적인 유지 관리 지원","details":"실제 사용 사례도 많고 기술 지원도 신속하게 제공합니다."}]},"headers":[],"relativePath":"ko/index.md","filePath":"ko/index.md","lastUpdated":1725328376000}'),i={name:"ko/index.md"};function o(a,c,s,n,p,d){return e(),l("div")}const h=t(i,[["render",o]]);export{f as __pageData,h as default}; diff --git a/assets/ko_introduction.md.wUSGH5H2.js b/assets/ko_introduction.md.wUSGH5H2.js new file mode 100644 index 0000000..ac6ed5c --- /dev/null +++ b/assets/ko_introduction.md.wUSGH5H2.js @@ -0,0 +1 @@ +import{_ as e,c as a,o,j as t,a as n}from"./chunks/framework.C94oF1kp.js";const N=JSON.parse('{"title":"소개","description":"","frontmatter":{},"headers":[],"relativePath":"ko/introduction.md","filePath":"ko/introduction.md","lastUpdated":1725328376000}'),r={name:"ko/introduction.md"},s=t("h1",{id:"소개",tabindex:"-1"},[n("소개 "),t("a",{class:"header-anchor",href:"#소개","aria-label":'Permalink to "소개"'},"​")],-1),i=t("p",null,"QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.",-1),l=t("p",null,"원하는 언어로 시작하세요. 각 언어별로 제공되는 유틸리티 함수에는 차이가 있을 수 있습니다.",-1),c=t("ul",null,[t("li",null,[t("a",{href:"/ko/js/installation"},"JavaScript/Node.js")]),t("li",null,[t("a",{href:"/ko/dart/installation"},"Dart/Flutter")])],-1),d=[s,i,l,c];function _(u,p,h,f,m,k){return o(),a("div",null,d)}const j=e(r,[["render",_]]);export{N as __pageData,j as default}; diff --git a/assets/ko_introduction.md.wUSGH5H2.lean.js b/assets/ko_introduction.md.wUSGH5H2.lean.js new file mode 100644 index 0000000..ac6ed5c --- /dev/null +++ b/assets/ko_introduction.md.wUSGH5H2.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o,j as t,a as n}from"./chunks/framework.C94oF1kp.js";const N=JSON.parse('{"title":"소개","description":"","frontmatter":{},"headers":[],"relativePath":"ko/introduction.md","filePath":"ko/introduction.md","lastUpdated":1725328376000}'),r={name:"ko/introduction.md"},s=t("h1",{id:"소개",tabindex:"-1"},[n("소개 "),t("a",{class:"header-anchor",href:"#소개","aria-label":'Permalink to "소개"'},"​")],-1),i=t("p",null,"QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.",-1),l=t("p",null,"원하는 언어로 시작하세요. 각 언어별로 제공되는 유틸리티 함수에는 차이가 있을 수 있습니다.",-1),c=t("ul",null,[t("li",null,[t("a",{href:"/ko/js/installation"},"JavaScript/Node.js")]),t("li",null,[t("a",{href:"/ko/dart/installation"},"Dart/Flutter")])],-1),d=[s,i,l,c];function _(u,p,h,f,m,k){return o(),a("div",null,d)}const j=e(r,[["render",_]]);export{N as __pageData,j as default}; diff --git a/assets/ko_js_api_array.md.BHmeF-S_.js b/assets/ko_js_api_array.md.BHmeF-S_.js new file mode 100644 index 0000000..ed115df --- /dev/null +++ b/assets/ko_js_api_array.md.BHmeF-S_.js @@ -0,0 +1,55 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Array","description":"","frontmatter":{"title":"Array","order":1},"headers":[],"relativePath":"ko/js/api/array.md","filePath":"ko/js/api/array.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/array.md"},n=e(`

API: Array

_.arrShuffle

Shuffle the order of the given array and return.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrShuffle([1, 2, 3, 4]); // Returns [4, 2, 3, 1]

_.arrWithDefault

Initialize an array with a default value of a specific length.

Parameters

  • defaultValue::any
  • length::number || 0

Returns

any[]

Examples

javascript
_.arrWithDefault('abc', 4); // Returns ['abc', 'abc', 'abc', 'abc']
+_.arrWithDefault(null, 3); // Returns [null, null, null]

_.arrWithNumber

Creates and returns an Array in the order of start...end values.

Parameters

  • start::number
  • end::number

Returns

number[]

Examples

javascript
_.arrWithNumber(1, 3); // Returns [1, 2, 3]
+_.arrWithNumber(0, 3); // Returns [0, 1, 2, 3]

_.arrUnique

Remove duplicate values from array and two-dimensional array data. In the case of 2d arrays, json type data duplication is not removed.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrUnique([1, 2, 2, 3]); // Returns [1, 2, 3]
+_.arrUnique([[1], [1], [2]]); // Returns [[1], [2]]

_.average

Returns the average of all numeric values in an array.

Parameters

  • array::number[]

Returns

number

Examples

javascript
_.average([1, 5, 15, 50]); // Returns 17.75

_.arrMove

Moves the position of a specific element in an array to the specified position. (Position starts from 0.)

Parameters

  • array::any[]
  • from::number
  • to::number

Returns

any[]

Examples

javascript
_.arrMove([1, 2, 3, 4], 1, 0); // Returns [2, 1, 3, 4]

_.arrTo1dArray

Merges all elements of a multidimensional array into a one-dimensional array.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrTo1dArray([1, 2, [3, 4]], 5); // Returns [1, 2, 3, 4, 5]

_.arrRepeat

Repeats the data of an Array or Object a specific number of times and returns it as a 1d array.

Parameters

  • array::any[]|object
  • count::number

Returns

any[]

Examples

javascript
_.arrRepeat([1, 2, 3, 4], 3); // Returns [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
+_.arrRepeat({ a: 1, b: 2 }, 2); // Returns [{ a: 1, b: 2 }, { a: 1, b: 2 }]

_.arrCount

Returns the number of duplicates for each unique value in the given array. The array values can only be of type String or Number.

Parameters

  • array::string[]|number[]
  • count::number

Returns

object

Examples

javascript
_.arrCount(['a', 'a', 'a', 'b', 'c', 'b', 'a', 'd']); // Returns { a: 4, b: 2, c: 1, d: 1 }

_.sortByObjectKey

Sort array values by a specific key value in an array containing multiple objects. It does not affect the order or value of elements within an object.

If the numerically option is true, when sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names.

Parameters

  • array::any[]
  • key::string
  • descending::boolean
  • numerically::boolean

Returns

any[]

Examples

javascript
const obj = [
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	}
+];
+
+_.sortByObjectKey(obj, 'aa');
+
+/*
+[
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	}
+]
+*/

_.sortNumeric

When sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names. For example, given the array ['1-a', '100-a', '10-a', '2-a'], it returns ['1-a', '2-a', '10-a', '100-a'] with the smaller numbers at the front.

Parameters

  • array::string[]
  • descending::boolean

Returns

string[]

Examples

javascript
_.sortNumeric(['a1a', 'b2a', 'aa1a', '1', 'a11a', 'a3a', 'a2a', '1a']);
+// Returns ['1', '1a', 'a1a', 'a2a', 'a3a', 'a11a', 'aa1a', 'b2a']

_.arrGroupByMaxCount

Separates the data in the given array into a two-dimensional array containing only the maximum number of elements. For example, if you have an array of 6 data in 2 groups, this function will create a 2-dimensional array with 3 lengths.

Parameters

  • array::any[]
  • maxLengthPerGroup::number

Returns

any[]

Examples

javascript
_.arrGroupByMaxCount(['a', 'b', 'c', 'd', 'e'], 2);
+// Returns [['a', 'b'], ['c', 'd'], ['e']]
`,98),h=[n];function l(r,p,k,d,o,E){return i(),s("div",null,h)}const y=a(t,[["render",l]]);export{u as __pageData,y as default}; diff --git a/assets/ko_js_api_array.md.BHmeF-S_.lean.js b/assets/ko_js_api_array.md.BHmeF-S_.lean.js new file mode 100644 index 0000000..d81e8fc --- /dev/null +++ b/assets/ko_js_api_array.md.BHmeF-S_.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Array","description":"","frontmatter":{"title":"Array","order":1},"headers":[],"relativePath":"ko/js/api/array.md","filePath":"ko/js/api/array.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/array.md"},n=e("",98),h=[n];function l(r,p,k,d,o,E){return i(),s("div",null,h)}const y=a(t,[["render",l]]);export{u as __pageData,y as default}; diff --git a/assets/ko_js_api_crypto.md.ed9Rza2p.js b/assets/ko_js_api_crypto.md.ed9Rza2p.js new file mode 100644 index 0000000..d67f803 --- /dev/null +++ b/assets/ko_js_api_crypto.md.ed9Rza2p.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"Crypto","description":"","frontmatter":{"title":"Crypto","order":6},"headers":[],"relativePath":"ko/js/api/crypto.md","filePath":"ko/js/api/crypto.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/crypto.md"},r=i('

API: Crypto

_.encrypt

Encrypt with the algorithm of your choice (algorithm default: aes-256-cbc, ivSize default: 16) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'
  • ivSize::number || 16

Returns

string

Examples

javascript
_.encrypt('test', 'secret-key');

_.decrypt

Decrypt with the specified algorithm (default: aes-256-cbc) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'

Returns

string

Examples

javascript
_.decrypt('61ba43b65fc...', 'secret-key');

_.objectId

Returns a random string hash of the ObjectId format (primarily utilized by MongoDB).

Parameters

No parameters required

Returns

string

Examples

javascript
_.objectId(); // Returns '651372605b49507aea707488'

_.md5

Converts String data to md5 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.md5('test'); // Returns '098f6bcd4621d373cade4e832627b4f6'

_.sha1

Converts String data to sha1 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha1('test'); // Returns 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'

_.sha256

Converts String data to sha256 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha256('test'); // Returns '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'

_.encodeBase64

Base64-encode the given string.

Parameters

  • str::string

Returns

string

Examples

javascript
_.encodeBase64('this is test'); // Returns 'dGhpcyBpcyB0ZXN0'

_.decodeBase64

Decodes an encoded base64 string to a plain string.

Parameters

  • encodedStr::string

Returns

string

Examples

javascript
_.decodeBase64('dGhpcyBpcyB0ZXN0'); // Returns 'this is test'

_.strToNumberHash

Returns the specified string as a hash value of type number. The return value can also be negative.

Parameters

  • str::string

Returns

number

Examples

javascript
_.strToNumberHash('abc'); // Returns 96354\n_.strToNumberHash('Hello'); // Returns 69609650\n_.strToNumberHash('hello'); // Returns 99162322
',73),h=[r];function l(n,p,o,d,c,k){return s(),e("div",null,h)}const E=a(t,[["render",l]]);export{b as __pageData,E as default}; diff --git a/assets/ko_js_api_crypto.md.ed9Rza2p.lean.js b/assets/ko_js_api_crypto.md.ed9Rza2p.lean.js new file mode 100644 index 0000000..93e498f --- /dev/null +++ b/assets/ko_js_api_crypto.md.ed9Rza2p.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const b=JSON.parse('{"title":"Crypto","description":"","frontmatter":{"title":"Crypto","order":6},"headers":[],"relativePath":"ko/js/api/crypto.md","filePath":"ko/js/api/crypto.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/crypto.md"},r=i("",73),h=[r];function l(n,p,o,d,c,k){return s(),e("div",null,h)}const E=a(t,[["render",l]]);export{b as __pageData,E as default}; diff --git a/assets/ko_js_api_date.md.DDF3M5ki.js b/assets/ko_js_api_date.md.DDF3M5ki.js new file mode 100644 index 0000000..943664d --- /dev/null +++ b/assets/ko_js_api_date.md.DDF3M5ki.js @@ -0,0 +1,14 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Date","description":"","frontmatter":{"title":"Date","order":7},"headers":[],"relativePath":"ko/js/api/date.md","filePath":"ko/js/api/date.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/date.md"},l=e(`

API: Date

_.dayDiff

Calculates the difference between two given dates and returns the number of days.

Parameters

  • date1::Date
  • date2::Date?

Returns

number

Examples

javascript
_.daydiff(new Date('2021-01-01'), new Date('2021-01-03')); // Returns 2

_.today

Returns today's date.

Parameters

  • separator::string = '-'
  • yearFirst::boolean = false

Returns

string

Examples

javascript
_.today(); // Returns YYYY-MM-DD
+_.today('/'); // Returns YYYY/MM/DD
+_.today('/', false); // Returns DD/MM/YYYY

_.isValidDate

Checks if a given date actually exists. Check only in YYYY-MM-DD format.

Parameters

  • date::string

Returns

boolean

Examples

javascript
_.isValidDate('2021-01-01'); // Returns true
+_.isValidDate('2021-02-30'); // Returns false

_.dateToYYYYMMDD

Returns the date data of a Date object in the format YYYY-MM-DD.

Parameters

  • date::Date
  • separator:string

Returns

string

Examples

javascript
_.dateToYYYYMMDD(new Date(2023, 11, 31)); // Returns '2023-12-31'

_.createDateListFromRange

Create an array list of all dates from startDate to endDate in the format YYYY-MM-DD.

Parameters

  • startDate::Date
  • endDate::Date

Returns

string[]

Examples

javascript
_.createDateListFromRange(new Date('2023-01-01T01:00:00Z'), new Date('2023-01-05T01:00:00Z'));
+
+/*
+	 [
+		 '2023-01-01',
+		 '2023-01-02',
+		 '2023-01-03',
+		 '2023-01-04',
+		 '2023-01-05'
+	 ]
+ */
`,41),n=[l];function h(r,p,d,k,o,c){return i(),s("div",null,n)}const g=a(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_date.md.DDF3M5ki.lean.js b/assets/ko_js_api_date.md.DDF3M5ki.lean.js new file mode 100644 index 0000000..98c1ed2 --- /dev/null +++ b/assets/ko_js_api_date.md.DDF3M5ki.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Date","description":"","frontmatter":{"title":"Date","order":7},"headers":[],"relativePath":"ko/js/api/date.md","filePath":"ko/js/api/date.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/date.md"},l=e("",41),n=[l];function h(r,p,d,k,o,c){return i(),s("div",null,n)}const g=a(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_format.md.D0sl5Vi7.js b/assets/ko_js_api_format.md.D0sl5Vi7.js new file mode 100644 index 0000000..c6af0ba --- /dev/null +++ b/assets/ko_js_api_format.md.D0sl5Vi7.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"ko/js/api/format.md","filePath":"ko/js/api/format.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/format.md"},n=e('

API: Format

_.numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

javascript
_.numberFormat(1234567); // Returns 1,234,567

_.fileName

Extract the file name from the path. Include the extension if withExtension is true.

Parameters

  • filePath::string
  • withExtension::boolean || false

Returns

string

Examples

javascript
_.fileName('C:Temphello.txt'); // Returns 'hello.txt'\n_.fileName('C:Temp\\file.mp3', true); // Returns 'file.mp3'

_.fileSize

Converts the file size in bytes to human-readable and returns it. The return value is a String and includes the file units (Bytes, MB, GB...). If the second optional argument value is included, you can display as many decimal places as you like.

Parameters

  • bytes::number
  • decimals::number || 2

Returns

string

Examples

javascript
_.fileSize(2000, 3); // Returns '1.953 KB'\n_.fileSize(250000000); // Returns '238.42 MB'

_.fileExt

Returns only the extensions in the file path. If unknown, returns 'Unknown'.

Parameters

  • filePath::string

Returns

string

Examples

javascript
_.fileExt('C:Temphello.txt'); // Returns 'txt'\n_.fileExt('this-is-file.mp3'); // Returns 'mp3'

_.duration

Displays the given millisecond value in human-readable time. For example, the value of 604800000 (7 days) is displayed as 7 Days.

Parameters

  • milliseconds::number
  • options::DurationOptions | undefined
typescript
const {\n	// Converts to `Days` -> `D`, `Hours` -> `H`,  `Minutes` -> `M`, `Seconds` -> `S`, `Milliseconds` -> `ms`\n	useShortString = false,\n	// Use space (e.g. `1Days` -> `1 Days`)\n	useSpace = true,\n	// Do not include units with a value of 0.\n	withZeroValue = false,\n	// Use Separator (e.g. If separator value is `-`, result is: `1 Hour 10 Minutes` -> `1 Hour-10 Minutes`)\n	separator = ' '\n}: DurationOptions = options;

Returns

string

Examples

javascript
_.duration(1234567890); // 'Returns '14 Days 6 Hours 56 Minutes 7 Seconds 890 Milliseconds'\n_.duration(604800000, {\n	useSpace: false\n}); // Returns '7Days'

_.safeJSONParse

Attempts to parse without returning an error, even if the argument value is of the wrong type or in JSON format. If parsing fails, it will be replaced with the object set in fallback.fallback의 기본값은 빈 오브젝트입니다.

Parameters

  • jsonString::any
  • fallback::object

Returns

object

Examples

javascript
const result1 = _.safeJSONParse('{"a":1,"b":2}');\nconst result2 = _.safeJSONParse(null);\n\nconsole.log(result1); // Returns { a: 1, b: 2 }\nconsole.log(result2); // Returns {}

_.safeParseInt

Any argument value will be attempted to be parsed as a Number type without returning an error. If parsing fails, it is replaced by the number set in fallback. The default value for fallback is 0. You can specify radix (default is decimal: 10) in the third argument.

Parameters

  • value::any
  • fallback::number
  • radix::number

Returns

number

Examples

javascript
const result1 = _.safeParseInt('00010');\nconst result2 = _.safeParseInt('10.1234');\nconst result3 = _.safeParseInt(null, -1);\n\nconsole.log(result1); // Returns 10\nconsole.log(result2); // Returns 10\nconsole.log(result3); // Returns -1
',58),l=[n];function h(r,p,k,d,o,c){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_format.md.D0sl5Vi7.lean.js b/assets/ko_js_api_format.md.D0sl5Vi7.lean.js new file mode 100644 index 0000000..ac14c17 --- /dev/null +++ b/assets/ko_js_api_format.md.D0sl5Vi7.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Format","description":"","frontmatter":{"title":"Format","order":8},"headers":[],"relativePath":"ko/js/api/format.md","filePath":"ko/js/api/format.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/format.md"},n=e("",58),l=[n];function h(r,p,k,d,o,c){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_index.md.B8uIDdkf.js b/assets/ko_js_api_index.md.B8uIDdkf.js new file mode 100644 index 0000000..11e1f01 --- /dev/null +++ b/assets/ko_js_api_index.md.B8uIDdkf.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/api/index.md","filePath":"ko/js/api/index.md","lastUpdated":1725328376000}'),n={name:"ko/js/api/index.md"},i=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),d=e("p",null,"Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.",-1),r=e("p",null,"왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.",-1),c=[i,d,r];function p(_,l,h,m,f,x){return s(),t("div",null,c)}const k=a(n,[["render",p]]);export{P as __pageData,k as default}; diff --git a/assets/ko_js_api_index.md.B8uIDdkf.lean.js b/assets/ko_js_api_index.md.B8uIDdkf.lean.js new file mode 100644 index 0000000..11e1f01 --- /dev/null +++ b/assets/ko_js_api_index.md.B8uIDdkf.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/api/index.md","filePath":"ko/js/api/index.md","lastUpdated":1725328376000}'),n={name:"ko/js/api/index.md"},i=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),d=e("p",null,"Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.",-1),r=e("p",null,"왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.",-1),c=[i,d,r];function p(_,l,h,m,f,x){return s(),t("div",null,c)}const k=a(n,[["render",p]]);export{P as __pageData,k as default}; diff --git a/assets/ko_js_api_math.md.D6cYV6Da.js b/assets/ko_js_api_math.md.D6cYV6Da.js new file mode 100644 index 0000000..5717076 --- /dev/null +++ b/assets/ko_js_api_math.md.D6cYV6Da.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const c=JSON.parse('{"title":"Math","description":"","frontmatter":{"title":"Math","order":4},"headers":[],"relativePath":"ko/js/api/math.md","filePath":"ko/js/api/math.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/math.md"},h=e('

API: Math

_.numRandom

Returns a random number (Between min and max).

Parameters

  • min::number
  • max::number

Returns

number

Examples

javascript
_.numRandom(1, 5); // Returns 1~5\n_.numRandom(10, 20); // Returns 10~20

_.sum

Returns after adding up all the n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sum(1, 2, 3); // Returns 6\n_.sum([1, 2, 3, 4]); // Returns 10

_.mul

Returns after multiplying all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.mul(1, 2, 3); // Returns 6\n_.mul([1, 2, 3, 4]); // Returns 24

_.sub

Returns after subtracting all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sub(10, 1, 5); // Returns 4\n_.sub([1, 2, 3, 4]); // Returns -8

_.div

Returns after dividing all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.div(10, 5, 2); // Returns 1\n_.div([100, 2, 2, 5]); // Returns 5
',41),n=[h];function l(r,k,p,d,E,o){return i(),a("div",null,n)}const g=s(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/ko_js_api_math.md.D6cYV6Da.lean.js b/assets/ko_js_api_math.md.D6cYV6Da.lean.js new file mode 100644 index 0000000..f25d558 --- /dev/null +++ b/assets/ko_js_api_math.md.D6cYV6Da.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const c=JSON.parse('{"title":"Math","description":"","frontmatter":{"title":"Math","order":4},"headers":[],"relativePath":"ko/js/api/math.md","filePath":"ko/js/api/math.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/math.md"},h=e("",41),n=[h];function l(r,k,p,d,E,o){return i(),a("div",null,n)}const g=s(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/ko_js_api_misc.md.DXT2Oy3O.js b/assets/ko_js_api_misc.md.DXT2Oy3O.js new file mode 100644 index 0000000..0949dd5 --- /dev/null +++ b/assets/ko_js_api_misc.md.DXT2Oy3O.js @@ -0,0 +1,29 @@ +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"Misc","description":"","frontmatter":{"title":"Misc","order":9},"headers":[],"relativePath":"ko/js/api/misc.md","filePath":"ko/js/api/misc.md","lastUpdated":1725328376000}'),n={name:"ko/js/api/misc.md"},e=t(`

API: Misc

_.sleep

Sleep function using Promise.

Parameters

  • milliseconds::number

Returns

Promise:boolean

Examples

javascript
await _.sleep(1000); // 1s
+
+_.sleep(5000).then(() => {
+	// continue
+});

_.funcTimes

Repeat iteratee n (times argument value) times. After the return result of each function is stored in the array in order, the final array is returned.

Parameters

  • times::number
  • iteratee::function

Returns

any[]

Examples

javascript
function sayHi(str) {
+	return \`Hi\${str || ''}\`;
+}
+
+_.funcTimes(3, sayHi); // Returns ['Hi', 'Hi', 'Hi']
+_.funcTimes(4, () => sayHi('!')); // Returns ['Hi!', 'Hi!', 'Hi!', 'Hi!']

_.debounce

When the given function is executed repeatedly, the function is called if it has not been called again within the specified timeout. This function is used when a small number of function calls are needed for repetitive input events.

For example, if you have a func variable written as const func = debounce(() => console.log('hello'), 1000) and you repeat the func function 100 times with a wait interval of 100ms, the function will only run once after 1000ms because the function was executed at 100ms intervals. However, if you increase the wait interval from 100ms to 1100ms or more and repeat it 100 times, the function will run all 100 times intended.

Parameters

  • func::function
  • timeout::number

Returns

No return values

Examples

html
<!doctype html>
+<html lang="en">
+	<head>
+		<title>test</title>
+	</head>
+	<body>
+		<input type="text" onkeyup="handleKeyUp()" />
+	</body>
+</html>
+<script>
+	import _ from 'qsu';
+
+	const keyUpDebounce = _.debounce(() => {
+		console.log('handleKeyUp called.');
+	}, 100);
+
+	function handleKeyUp() {
+		keyUpDebounce();
+	}
+</script>
`,26),l=[e];function h(p,k,r,E,d,o){return a(),i("div",null,l)}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/ko_js_api_misc.md.DXT2Oy3O.lean.js b/assets/ko_js_api_misc.md.DXT2Oy3O.lean.js new file mode 100644 index 0000000..2f7f87a --- /dev/null +++ b/assets/ko_js_api_misc.md.DXT2Oy3O.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as t}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"Misc","description":"","frontmatter":{"title":"Misc","order":9},"headers":[],"relativePath":"ko/js/api/misc.md","filePath":"ko/js/api/misc.md","lastUpdated":1725328376000}'),n={name:"ko/js/api/misc.md"},e=t("",26),l=[e];function h(p,k,r,E,d,o){return a(),i("div",null,l)}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/assets/ko_js_api_object.md.Bl6g5yCW.js b/assets/ko_js_api_object.md.Bl6g5yCW.js new file mode 100644 index 0000000..0518aea --- /dev/null +++ b/assets/ko_js_api_object.md.Bl6g5yCW.js @@ -0,0 +1,80 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const y=JSON.parse('{"title":"Object","description":"","frontmatter":{"title":"Object","order":2},"headers":[],"relativePath":"ko/js/api/object.md","filePath":"ko/js/api/object.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/object.md"},n=e(`

API: Object

_.objToQueryString

Converts the given object data to a URL query string.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToQueryString({
+	hello: 'world',
+	test: 1234,
+	arr: [1, 2, 3]
+}); // Returns 'hello=world&test=1234&arr=%5B1%2C2%2C3%5D'

_.objToPrettyStr

Recursively output all the steps of the JSON object (JSON.stringify) and then output the JSON object with newlines and tab characters to make it easier to read in a console function, for example.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToPrettyStr({ a: 1, b: { c: 1, d: 2 } }); // Returns '{\\n\\t"a": 1,\\n\\t"b": {\\n\\t\\t"c": 1,\\n\\t\\t"d": 2\\n\\t}\\n}'

_.objFindItemRecursiveByKey

Returns the object if the key of a specific piece of data in the object's dataset corresponds to a specific value. This function returns only one result, so it is used to search for unique IDs, including all of their children.

Parameters

  • obj::object
  • searchKey::string
  • searchValue::any
  • childKey::string

Returns

object|null

Examples

javascript
_.objFindItemRecursiveByKey(
+	{
+		id: 123,
+		name: 'parent',
+		child: [
+			{
+				id: 456,
+				name: 'childItemA'
+			},
+			{
+				id: 789,
+				name: 'childItemB'
+			}
+		]
+	}, // obj
+	'id', // searchKey
+	456, // searchValue
+	'child' // childKey
+); // Returns '{ id: 456, name: 'childItemA' }'

_.objToArray

Converts the given object to array format. The resulting array is a two-dimensional array with one key value stored as follows: [key, value]. If the recursive option is true, it will convert to a two-dimensional array again when the value is of type object.

Parameters

  • obj::object
  • recursive::boolean

Returns

any[]

Examples

javascript
_.objToArray({
+	a: 1.234,
+	b: 'str',
+	c: [1, 2, 3],
+	d: { a: 1 }
+}); // Returns [['a', 1.234], ['b', 'str'], ['c', [1, 2, 3]], ['d', { a: 1 }]]

_.objTo1d

Merges objects from the given object to the top level of the child items and displays the key names in steps, using a delimiter (. by default) instead of the existing keys. For example, if an object a has keys b, c, and d, the a key is not displayed, and the keys and values a.b, a.c, and a.d are displayed in the parent step.

Parameters

  • obj::object
  • separator::string

Returns

object

Examples

javascript
_.objToArray({
+	a: 1,
+	b: {
+		aa: 1,
+		bb: 2
+	},
+	c: 3
+});
+
+/*
+Returns:
+{
+	a: 1,
+	'b.aa': 1,
+	'b.bb': 2,
+	c: 3
+}
+ */

_.objDeleteKeyByValue

Deletes keys equal to the given value from the object data. If the recursive option is true, also deletes all keys corresponding to the same value in the child items.

Parameters

  • obj::object
  • searchValue::string|number|null|undefined
  • recursive::boolean

Returns

object|null

Examples

javascript
const result = _.objDeleteKeyByValue(
+	{
+		a: 1,
+		b: 2,
+		c: {
+			aa: 2,
+			bb: {
+				aaa: 1,
+				bbb: 2
+			}
+		},
+		d: {
+			aa: 2
+		}
+	},
+	2,
+	true
+);
+
+console.log(result); // Returns { a: 1, c: { bb: { aaa: 1 } }, d: {} }

_.objUpdate

Changes the value matching a specific key name in the given object. If the recursive option is true, it will also search in child object items. This changes the value of the same key found in both the parent and child items. If the upsert option is true, add it as a new attribute to the top-level item when the key is not found.

Parameters

  • obj::object
  • searchKey::string
  • value::any
  • recursive::boolean
  • upsert::boolean

Returns

object|null

Examples

javascript
const result = _.objUpdate(
+	{
+		a: 1,
+		b: {
+			a: 1,
+			b: 2,
+			c: 3
+		},
+		c: 3
+	},
+	'c',
+	5,
+	true,
+	false
+);
+
+console.log(result); // Returns { a: 1, b: { a: 1, b: 2, c: 5 }, c: 5 }
`,57),l=[n];function h(p,k,r,d,o,E){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{y as __pageData,g as default}; diff --git a/assets/ko_js_api_object.md.Bl6g5yCW.lean.js b/assets/ko_js_api_object.md.Bl6g5yCW.lean.js new file mode 100644 index 0000000..f357d6f --- /dev/null +++ b/assets/ko_js_api_object.md.Bl6g5yCW.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const y=JSON.parse('{"title":"Object","description":"","frontmatter":{"title":"Object","order":2},"headers":[],"relativePath":"ko/js/api/object.md","filePath":"ko/js/api/object.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/object.md"},n=e("",57),l=[n];function h(p,k,r,d,o,E){return i(),a("div",null,l)}const g=s(t,[["render",h]]);export{y as __pageData,g as default}; diff --git a/assets/ko_js_api_string.md.BqZM1Zai.js b/assets/ko_js_api_string.md.BqZM1Zai.js new file mode 100644 index 0000000..a17d21e --- /dev/null +++ b/assets/ko_js_api_string.md.BqZM1Zai.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"ko/js/api/string.md","filePath":"ko/js/api/string.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/string.md"},l=e('

API: String

_.trim

Removes all whitespace before and after a string. Unlike JavaScript's trim function, it converts two or more spaces between sentences into a single space.

Parameters

  • str::string

Returns

string

Examples

javascript
_.trim(' Hello Wor  ld  '); // Returns 'Hello Wor ld'\n_.trim('H e l l o     World'); // Returns 'H e l l o World'

_.removeSpecialChar

Returns after removing all special characters, including spaces. If you want to allow any special characters as exceptions, list them in the second argument value without delimiters. For example, if you want to allow spaces and the symbols & and *, the second argument value would be ' &*'.

Parameters

  • str::string
  • exceptionCharacters::string?

Returns

string

Examples

javascript
_.removeSpecialChar('Hello-qsu, World!'); // Returns 'HelloqsuWorld'\n_.removeSpecialChar('Hello-qsu, World!', ' -'); // Returns 'Hello-qsu World'

_.removeNewLine

Removes \\n, \\r characters or replaces them with specified characters.

Parameters

  • str::string
  • replaceTo::string || ''

Returns

string

Examples

javascript
_.removeNewLine('ab\\ncd'); // Returns 'abcd'\n_.removeNewLine('ab\\r\\ncd', '-'); // Returns 'ab-cd'

_.replaceBetween

Replaces text within a range starting and ending with a specific character in a given string with another string. For example, given the string abc<DEF>ghi, to change <DEF> to def, use replaceBetween('abc<DEF>ghi', '<', '>', 'def'). The result would be abcdefghi.

Deletes strings in the range if replaceWith is not specified.

Parameters

  • str::string
  • startChar::string
  • endChar::string
  • replaceWith::string || ''

Returns

string

Examples

javascript
_.replaceBetween('ab[c]d[e]f', '[', ']'); // Returns 'abdf'\n_.replaceBetween('abcd:replace:', ':', ':', 'e'); // Returns 'abcde'

_.capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

javascript
_.capitalizeFirst('abcd'); // Returns 'Abcd'

_.capitalizeEverySentence

Capitalize the first letter of every sentence. Typically, the . characters to separate sentences, but this can be customized via the value of the splitChar argument.

Parameters

  • str::string
  • splitChar::string

Returns

string

Examples

javascript
_.capitalizeEverySentence('hello. world. hi.'); // Returns 'Hello. World. Hi.'\n_.capitalizeEverySentence('hello!world', '!'); // Returns 'Hello!World'

_.capitalizeEachWords

Converts every word with spaces to uppercase. If the naturally argument is true, only some special cases (such as prepositions) are kept lowercase.

Parameters

  • str::string
  • natural::boolean || false

Returns

string

Examples

javascript
_.capitalizeEachWords('abcd'); // Returns 'Abcd'

_.strCount

Returns the number of times the second String argument is contained in the first String argument.

Parameters

  • str::string
  • search::string

Returns

number

Examples

javascript
_.strCount('abcabc', 'a'); // Returns 2

_.strShuffle

Randomly shuffles the received string and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strShuffle('abcdefg'); // Returns 'bgafced'

_.strRandom

Returns a random String containing numbers or uppercase and lowercase letters of the given length. The default return length is 12.

Parameters

  • length::number
  • additionalCharacters::string?

Returns

string

Examples

javascript
_.strRandom(5); // Returns 'CHy2M'

_.strBlindRandom

Replace strings at random locations with a specified number of characters (default 1) with characters (default *).

Parameters

  • str::string
  • blindLength::number
  • blindStr::string || '*'

Returns

string

Examples

javascript
_.strBlindRandom('hello', 2, '#'); // Returns '#el#o'

_.truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number
  • ellipsis::string || ''

Returns

string

Examples

javascript
_.truncate('hello', 3); // Returns 'hel'\n_.truncate('hello', 2, '...'); // Returns 'he...'

_.truncateExpect

The string ignores truncation until the ending character (endStringChar). If the expected length is reached, return the truncated string until after the ending character.

Parameters

  • str::string
  • expectLength::number
  • endStringChar::string || '.'

Returns

string

Examples

javascript
_.truncateExpect('hello. this is test string.', 10, '.'); // Returns 'hello. this is test string.'\n_.truncateExpect('hello-this-is-test-string-bye', 14, '-'); // Returns 'hello-this-is-'

_.split

Splits a string based on the specified character and returns it as an Array. Unlike the existing split, it splits the values provided as multiple parameters (array or multiple arguments) at once.

Parameters

  • str::string
  • splitter::string||string[]||...string

Returns

string[]

Examples

javascript
_.split('hello% js world', '% '); // Returns ['hello', 'js world']\n_.split('hello,js,world', ','); // Returns ['hello', 'js', 'world']\n_.split('hello%js,world', ',', '%'); // Returns ['hello', 'js', 'world']\n_.split('hello%js,world', [',', '%']); // Returns ['hello', 'js', 'world']

_.strUnique

Remove duplicate characters from a given string and output only one.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strUnique('aaabbbcc'); // Returns 'abc'

_.strToAscii

Converts the given string to ascii code and returns it as an array.

Parameters

  • str::string

Returns

number[]

Examples

javascript
_.strToAscii('12345'); // Returns [49, 50, 51, 52, 53]

_.urlJoin

Merges the given string argument with the first argument (the beginning of the URL), joining it so that the slash (/) symbol is correctly included.

Parameters

  • args::any[]

Returns

string

Examples

javascript
_.urlJoin('https://example.com', 'hello', 'world'); // Returns 'https://example.com/hello/world'
',138),r=[l];function n(h,p,d,o,k,c){return i(),s("div",null,r)}const g=a(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_string.md.BqZM1Zai.lean.js b/assets/ko_js_api_string.md.BqZM1Zai.lean.js new file mode 100644 index 0000000..bb93284 --- /dev/null +++ b/assets/ko_js_api_string.md.BqZM1Zai.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as i,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"String","description":"","frontmatter":{"title":"String","order":3},"headers":[],"relativePath":"ko/js/api/string.md","filePath":"ko/js/api/string.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/string.md"},l=e("",138),r=[l];function n(h,p,d,o,k,c){return i(),s("div",null,r)}const g=a(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_verify.md.DTTpOah8.js b/assets/ko_js_api_verify.md.DTTpOah8.js new file mode 100644 index 0000000..3abc835 --- /dev/null +++ b/assets/ko_js_api_verify.md.DTTpOah8.js @@ -0,0 +1,27 @@ +import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Verify","description":"","frontmatter":{"title":"Verify","order":5},"headers":[],"relativePath":"ko/js/api/verify.md","filePath":"ko/js/api/verify.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/verify.md"},h=e(`

API: Verify

_.isObject

Check whether the given data is of type Object. Returns false for other data types including Array.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.isObject([1, 2, 3]); // Returns false
+_.isObject({ a: 1, b: 2 }); // Returns true

_.isEqual

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqual('Left', 'Left', val1); // Returns true
+_.isEqual(1, [1, '1', 1, val2]); // Returns true
+_.isEqual(val1, ['Right', 'Left', 1]); // Returns false
+_.isEqual(1, 1, 1, 1); // Returns true

_.isEqualStrict

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqualStrict('Left', 'Left', val1); // Returns true
+_.isEqualStrict(1, [1, '1', 1, val2]); // Returns false
+_.isEqualStrict(1, 1, '1', 1); // Returns false

_.isEmpty

Returns true if the passed data is empty or has a length of 0.

Parameters

  • data::any?

Returns

boolean

Examples

javascript
_.isEmpty([]); // Returns true
+_.isEmpty(''); // Returns true
+_.isEmpty('abc'); // Returns false

_.isUrl

Returns true if the given data is in the correct URL format. If withProtocol is true, it is automatically appended to the URL when the protocol does not exist. If strict is true, URLs without commas (.) return false.

Parameters

  • url::string
  • withProtocol::boolean || false
  • strict::boolean || false

Returns

boolean

Examples

javascript
_.isUrl('google.com'); // Returns false
+_.isUrl('google.com', true); // Returns true
+_.isUrl('https://google.com'); // Returns true

_.contains

Returns true if the first string argument contains the second argument "string" or "one or more of the strings listed in the array". If the exact value is true, it returns true only for an exact match.

Parameters

  • str::any[]|string
  • search::any[]|string
  • exact::boolean || false

Returns

boolean

Examples

javascript
_.contains('abc', 'a'); // Returns true
+_.contains('abc', 'd'); // Returns false
+_.contains('abc', ['a', 'd']); // Returns true

_.is2dArray

Returns true if the given array is a two-dimensional array.

Parameters

  • array::any[]

Returns

boolean

Examples

javascript
_.is2dArray([1]); // Returns false
+_.is2dArray([[1], [2]]); // Returns true

_.between

Returns true if the first argument is in the range of the second argument ([min, max]). To allow the minimum and maximum values to be in the range, pass true for the third argument.

Parameters

  • range::[number, number]
  • number::number
  • inclusive::boolean || false

Returns

boolean

Examples

javascript
_.between([10, 20], 10); // Returns false
+_.between([10, 20], 10, true); // Returns true

_.len

Returns the length of any type of data. If the argument value is null or undefined, 0 is returned.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.len('12345'); // Returns 5
+_.len([1, 2, 3]); // Returns 3

_.isEmail

Checks if the given argument value is a valid email.

Parameters

  • email::string

Returns

boolean

Examples

javascript
_.isEmail('abc@def.com'); // Returns true

_.isTrueMinimumNumberOfTimes

Returns true if the values given in the conditions array are true at least minimumCount times.

Parameters

  • conditions::boolean[]
  • minimumCount::number

Returns

boolean

Examples

javascript
const left = 1;
+const right = 1 + 2;
+
+_.isTrueMinimumNumberOfTimes([true, true, false], 2); // Returns true
+_.isTrueMinimumNumberOfTimes([true, true, false], 3); // Returns false
+_.isTrueMinimumNumberOfTimes([true, true, left === right], 3); // Returns false
`,91),n=[h];function l(r,k,p,d,E,o){return a(),i("div",null,n)}const g=s(t,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_api_verify.md.DTTpOah8.lean.js b/assets/ko_js_api_verify.md.DTTpOah8.lean.js new file mode 100644 index 0000000..6b68598 --- /dev/null +++ b/assets/ko_js_api_verify.md.DTTpOah8.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as e}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Verify","description":"","frontmatter":{"title":"Verify","order":5},"headers":[],"relativePath":"ko/js/api/verify.md","filePath":"ko/js/api/verify.md","lastUpdated":1725328376000}'),t={name:"ko/js/api/verify.md"},h=e("",91),n=[h];function l(r,k,p,d,E,o){return a(),i("div",null,n)}const g=s(t,[["render",l]]);export{u as __pageData,g as default}; diff --git a/assets/ko_js_installation.md.BNtZcu_d.js b/assets/ko_js_installation.md.BNtZcu_d.js new file mode 100644 index 0000000..3d086f5 --- /dev/null +++ b/assets/ko_js_installation.md.BNtZcu_d.js @@ -0,0 +1,17 @@ +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"설치","description":"","frontmatter":{"title":"설치","order":1},"headers":[],"relativePath":"ko/js/installation.md","filePath":"ko/js/installation.md","lastUpdated":1725328376000}'),t={name:"ko/js/installation.md"},l=n(`

설치

Qsu는 Node.js 18.x 이상이 필요하며, 리포지토리는 NPM 패키지 관리자에서 서비스됩니다.

Qsu는 ESM 전용입니다. 모듈을 로드하려면 require 대신 import를 사용해야 합니다. CommonJS에 사용할 수 있는 해결 방법이 있지만 최근 JavaScript 트렌드에 따라 ESM을 사용하는 것이 좋습니다.

Node.js 환경을 구성한 후 다음 명령을 실행하면 됩니다:

bash
# via npm
+$ npm install qsu
+
+# via yarn
+$ yarn add qsu
+
+# via pnpm
+$ pnpm install qsu

사용 방법

명명된 가져오기 사용(단일 요구 사항에 여러 유틸리티 사용) - 권장 사항

javascript
import { today, strCount } from 'qsu';
+
+function main() {
+	console.log(today()); // '20xx-xx-xx'
+	console.log(strCount('123412341234', '1')); // 3
+}

전체 클래스 사용(하나의 객체에 여러 유틸리티를 동시에 사용)

javascript
import _ from 'qsu';
+
+function main() {
+	console.log(_.today()); // '20xx-xx-xx'
+}
`,10),h=[l];function p(e,k,r,d,o,E){return a(),i("div",null,h)}const F=s(t,[["render",p]]);export{g as __pageData,F as default}; diff --git a/assets/ko_js_installation.md.BNtZcu_d.lean.js b/assets/ko_js_installation.md.BNtZcu_d.lean.js new file mode 100644 index 0000000..2279328 --- /dev/null +++ b/assets/ko_js_installation.md.BNtZcu_d.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.C94oF1kp.js";const g=JSON.parse('{"title":"설치","description":"","frontmatter":{"title":"설치","order":1},"headers":[],"relativePath":"ko/js/installation.md","filePath":"ko/js/installation.md","lastUpdated":1725328376000}'),t={name:"ko/js/installation.md"},l=n("",10),h=[l];function p(e,k,r,d,o,E){return a(),i("div",null,h)}const F=s(t,[["render",p]]);export{g as __pageData,F as default}; diff --git a/assets/ko_js_js.md.BkC8YduL.js b/assets/ko_js_js.md.BkC8YduL.js new file mode 100644 index 0000000..5bb358f --- /dev/null +++ b/assets/ko_js_js.md.BkC8YduL.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"JavaScript/Node.js","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/js.md","filePath":"ko/js/js.md","lastUpdated":1725328376000}'),r={name:"ko/js/js.md"},c=e("h1",{id:"javascript-node-js",tabindex:"-1"},[o("JavaScript/Node.js "),e("a",{class:"header-anchor",href:"#javascript-node-js","aria-label":'Permalink to "JavaScript/Node.js"'},"​")],-1),d=[c];function n(i,p,j,_,l,h){return s(),t("div",null,d)}const v=a(r,[["render",n]]);export{f as __pageData,v as default}; diff --git a/assets/ko_js_js.md.BkC8YduL.lean.js b/assets/ko_js_js.md.BkC8YduL.lean.js new file mode 100644 index 0000000..5bb358f --- /dev/null +++ b/assets/ko_js_js.md.BkC8YduL.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const f=JSON.parse('{"title":"JavaScript/Node.js","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/js.md","filePath":"ko/js/js.md","lastUpdated":1725328376000}'),r={name:"ko/js/js.md"},c=e("h1",{id:"javascript-node-js",tabindex:"-1"},[o("JavaScript/Node.js "),e("a",{class:"header-anchor",href:"#javascript-node-js","aria-label":'Permalink to "JavaScript/Node.js"'},"​")],-1),d=[c];function n(i,p,j,_,l,h){return s(),t("div",null,d)}const v=a(r,[["render",n]]);export{f as __pageData,v as default}; diff --git a/assets/ko_js_qsu-web_api_index.md.lxregmxH.js b/assets/ko_js_qsu-web_api_index.md.lxregmxH.js new file mode 100644 index 0000000..f235d72 --- /dev/null +++ b/assets/ko_js_qsu-web_api_index.md.lxregmxH.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/qsu-web/api/index.md","filePath":"ko/js/qsu-web/api/index.md","lastUpdated":1725328376000}'),n={name:"ko/js/qsu-web/api/index.md"},i=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),d=e("p",null,"Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.",-1),r=e("p",null,"왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.",-1),c=[i,d,r];function p(_,l,h,u,m,f){return s(),t("div",null,c)}const k=a(n,[["render",p]]);export{P as __pageData,k as default}; diff --git a/assets/ko_js_qsu-web_api_index.md.lxregmxH.lean.js b/assets/ko_js_qsu-web_api_index.md.lxregmxH.lean.js new file mode 100644 index 0000000..f235d72 --- /dev/null +++ b/assets/ko_js_qsu-web_api_index.md.lxregmxH.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,o as s,j as e,a as o}from"./chunks/framework.C94oF1kp.js";const P=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/qsu-web/api/index.md","filePath":"ko/js/qsu-web/api/index.md","lastUpdated":1725328376000}'),n={name:"ko/js/qsu-web/api/index.md"},i=e("h1",{id:"api",tabindex:"-1"},[o("API "),e("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1),d=e("p",null,"Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.",-1),r=e("p",null,"왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.",-1),c=[i,d,r];function p(_,l,h,u,m,f){return s(),t("div",null,c)}const k=a(n,[["render",p]]);export{P as __pageData,k as default}; diff --git a/assets/ko_js_qsu-web_api_web.md.BkRW42Q9.js b/assets/ko_js_qsu-web_api_web.md.BkRW42Q9.js new file mode 100644 index 0000000..83e8dec --- /dev/null +++ b/assets/ko_js_qsu-web_api_web.md.BkRW42Q9.js @@ -0,0 +1,7 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Web","description":"","frontmatter":{"title":"Web","order":1},"headers":[],"relativePath":"ko/js/qsu-web/api/web.md","filePath":"ko/js/qsu-web/api/web.md","lastUpdated":1725328376000}'),t={name:"ko/js/qsu-web/api/web.md"},n=i(`

Methods: Web

This method is only available in the qsu-web package.

_.isBotAgent

Analyze the user agent value to determine if it's a bot for a search engine. Returns true if it's a bot.

Parameters

  • userAgent::string

Returns

boolean

Examples

javascript
_.isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); // Returns true

_.license

Returns text in a specific license format based on the author information of the given argument. The argument uses the Object type.

Parameters

  • options::LicenseOption{ author: string, email: string?, yearStart: string|number, yearEnd: string?, htmlBr: boolean?, type: 'mit' | 'apache20' }

Returns

string

Examples

javascript
_.license({
+	holder: 'example',
+	email: 'example@example.com',
+	yearStart: 2020,
+	yearEnd: 2021,
+	htmlBr: true
+});
`,18),l=[n];function r(h,o,p,d,c,k){return s(),e("div",null,l)}const b=a(t,[["render",r]]);export{u as __pageData,b as default}; diff --git a/assets/ko_js_qsu-web_api_web.md.BkRW42Q9.lean.js b/assets/ko_js_qsu-web_api_web.md.BkRW42Q9.lean.js new file mode 100644 index 0000000..47160c1 --- /dev/null +++ b/assets/ko_js_qsu-web_api_web.md.BkRW42Q9.lean.js @@ -0,0 +1 @@ +import{_ as a,c as e,o as s,a2 as i}from"./chunks/framework.C94oF1kp.js";const u=JSON.parse('{"title":"Web","description":"","frontmatter":{"title":"Web","order":1},"headers":[],"relativePath":"ko/js/qsu-web/api/web.md","filePath":"ko/js/qsu-web/api/web.md","lastUpdated":1725328376000}'),t={name:"ko/js/qsu-web/api/web.md"},n=i("",18),l=[n];function r(h,o,p,d,c,k){return s(),e("div",null,l)}const b=a(t,[["render",r]]);export{u as __pageData,b as default}; diff --git a/assets/ko_js_qsu-web_installation.md.mQdEhdcr.js b/assets/ko_js_qsu-web_installation.md.mQdEhdcr.js new file mode 100644 index 0000000..faff308 --- /dev/null +++ b/assets/ko_js_qsu-web_installation.md.mQdEhdcr.js @@ -0,0 +1,14 @@ +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.C94oF1kp.js";const E=JSON.parse('{"title":"설치","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/qsu-web/installation.md","filePath":"ko/js/qsu-web/installation.md","lastUpdated":1725328376000}'),t={name:"ko/js/qsu-web/installation.md"},l=n(`

설치

Qsu에는 유틸리티가 별도의 패키지로 구성되어 있습니다. 현재 qsu-web이라는 패키지가 있습니다.

qsu-web 패키지에는 웹 페이지에서 일반적으로 사용되는 유틸리티 함수 모음이 포함되어 있습니다.

일반적인 설치 및 사용법은 qsu 패키지와 거의 동일합니다.

bash
# via npm
+$ npm install qsu-web
+
+# via yarn
+$ yarn add qsu-web
+
+# via pnpm
+$ pnpm install qsu-web
javascript
import { isBotAgent } from 'qsu-web';
+
+function main() {
+	console.log(
+		isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html')
+	); // true
+}
`,6),p=[l];function e(h,k,d,o,r,c){return a(),i("div",null,p)}const F=s(t,[["render",e]]);export{E as __pageData,F as default}; diff --git a/assets/ko_js_qsu-web_installation.md.mQdEhdcr.lean.js b/assets/ko_js_qsu-web_installation.md.mQdEhdcr.lean.js new file mode 100644 index 0000000..0c99ebf --- /dev/null +++ b/assets/ko_js_qsu-web_installation.md.mQdEhdcr.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a2 as n}from"./chunks/framework.C94oF1kp.js";const E=JSON.parse('{"title":"설치","description":"","frontmatter":{},"headers":[],"relativePath":"ko/js/qsu-web/installation.md","filePath":"ko/js/qsu-web/installation.md","lastUpdated":1725328376000}'),t={name:"ko/js/qsu-web/installation.md"},l=n("",6),p=[l];function e(h,k,d,o,r,c){return a(),i("div",null,p)}const F=s(t,[["render",e]]);export{E as __pageData,F as default}; diff --git a/assets/style.Bf0vIeZ0.css b/assets/style.Bf0vIeZ0.css new file mode 100644 index 0000000..719b907 --- /dev/null +++ b/assets/style.Bf0vIeZ0.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-e98dd255]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-e98dd255]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-e257564d]{margin-top:64px}.edit-info[data-v-e257564d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-e257564d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-e257564d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-e257564d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-e257564d]{margin-right:8px}.prev-next[data-v-e257564d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-e257564d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-e257564d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-e257564d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-e257564d]{margin-left:auto;text-align:right}.desc[data-v-e257564d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-e257564d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-cad61b99]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-cad61b99]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-cad61b99]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-cad61b99]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-cad61b99]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-cad61b99]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-cad61b99]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-cad61b99]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-cad61b99]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-cad61b99]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-cad61b99]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-cad61b99]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-cad61b99]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-303bb580]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-303bb580]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-303bb580]{flex-direction:row}}.main[data-v-303bb580]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-303bb580]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-303bb580]{text-align:left}}@media (min-width: 960px){.main[data-v-303bb580]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-303bb580]{max-width:592px}}.name[data-v-303bb580],.text[data-v-303bb580]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0 auto}.name[data-v-303bb580]{color:var(--vp-home-hero-name-color)}.clip[data-v-303bb580]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-303bb580],.text[data-v-303bb580]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-303bb580],.text[data-v-303bb580]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0}}.tagline[data-v-303bb580]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-303bb580]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-303bb580]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-303bb580]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-303bb580]{margin:0}}.actions[data-v-303bb580]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-303bb580]{justify-content:center}@media (min-width: 640px){.actions[data-v-303bb580]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-303bb580]{justify-content:flex-start}}.action[data-v-303bb580]{flex-shrink:0;padding:6px}.image[data-v-303bb580]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-303bb580]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-303bb580]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-303bb580]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-303bb580]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-303bb580]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-303bb580]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-303bb580]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-303bb580]{width:320px;height:320px}}[data-v-303bb580] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-303bb580] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-303bb580] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-686f80a6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-686f80a6]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-17a5e62e]{color:var(--vp-c-text-1)}.icon[data-v-17a5e62e]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{font-size:14px}.icon[data-v-17a5e62e]{font-size:16px}}.open>.icon[data-v-17a5e62e]{transform:rotate(90deg)}.items[data-v-17a5e62e]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-17a5e62e]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-17a5e62e]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-17a5e62e]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-17a5e62e]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-17a5e62e]{transition:all .2s ease-out}.flyout-leave-active[data-v-17a5e62e]{transition:all .15s ease-in}.flyout-enter-from[data-v-17a5e62e],.flyout-leave-to[data-v-17a5e62e]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-5337faa4]{opacity:1}.moon[data-v-5337faa4],.dark .sun[data-v-5337faa4]{opacity:0}.dark .moon[data-v-5337faa4]{opacity:1}.dark .VPSwitchAppearance[data-v-5337faa4] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-6c893767]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-6c893767]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-43f1e123]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-43f1e123]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-43f1e123]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-43f1e123]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-b98bc113]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-b98bc113] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-b98bc113] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-b98bc113] .group:last-child{padding-bottom:0}.VPMenu[data-v-b98bc113] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-b98bc113] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-b98bc113] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-b98bc113] .action{padding-left:24px}.VPFlyout[data-v-b6c34ac9]{position:relative}.VPFlyout[data-v-b6c34ac9]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-b6c34ac9]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-b6c34ac9]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-b6c34ac9]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-b6c34ac9]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-b6c34ac9],.button[aria-expanded=true]+.menu[data-v-b6c34ac9]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-b6c34ac9]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-b6c34ac9]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-b6c34ac9]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-b6c34ac9]{margin-right:0;font-size:16px}.text-icon[data-v-b6c34ac9]{margin-left:4px;font-size:14px}.icon[data-v-b6c34ac9]{font-size:20px;transition:fill .25s}.menu[data-v-b6c34ac9]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-eee4e7cb]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-eee4e7cb]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-eee4e7cb]>svg,.VPSocialLink[data-v-eee4e7cb]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-bb2aa2f0]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-bb2aa2f0]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-bb2aa2f0]{display:none}}.trans-title[data-v-bb2aa2f0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-bb2aa2f0],.item.social-links[data-v-bb2aa2f0]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-bb2aa2f0]{min-width:176px}.appearance-action[data-v-bb2aa2f0]{margin-right:-2px}.social-links-list[data-v-bb2aa2f0]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-9c663999]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-9c663999],.VPNavBarMenuLink[data-v-9c663999]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-dc692963]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-dc692963]{display:flex}}/*! @docsearch/css 3.6.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-ab179fa1]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-ab179fa1]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-ab179fa1]{border-bottom-color:var(--vp-c-divider)}}[data-v-ab179fa1] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-6aa21345]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-6aa21345]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-6aa21345]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-6aa21345]:not(.home){background-color:transparent}.VPNavBar[data-v-6aa21345]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-6aa21345]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-6aa21345]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-6aa21345]{padding:0}}.container[data-v-6aa21345]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-6aa21345],.container>.content[data-v-6aa21345]{pointer-events:none}.container[data-v-6aa21345] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-6aa21345]{max-width:100%}}.title[data-v-6aa21345]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-6aa21345]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-6aa21345]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-6aa21345]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-6aa21345]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-6aa21345]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-6aa21345]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-6aa21345]{column-gap:.5rem}}.menu+.translations[data-v-6aa21345]:before,.menu+.appearance[data-v-6aa21345]:before,.menu+.social-links[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before,.appearance+.social-links[data-v-6aa21345]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-6aa21345]:before,.translations+.appearance[data-v-6aa21345]:before{margin-right:16px}.appearance+.social-links[data-v-6aa21345]:before{margin-left:16px}.social-links[data-v-6aa21345]{margin-right:-8px}.divider[data-v-6aa21345]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-6aa21345]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-6aa21345]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-6aa21345]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-6aa21345]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-b44890b2]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-b44890b2]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-7f31e1f6]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-7f31e1f6]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-19976ae1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-19976ae1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-b9ab8c58]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-b9ab8c58]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-b9ab8c58]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-b9ab8c58]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-b9ab8c58]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-b9ab8c58]{transform:rotate(45deg)}.button[data-v-b9ab8c58]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-b9ab8c58]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-b9ab8c58]{transition:transform .25s}.group[data-v-b9ab8c58]:first-child{padding-top:0}.group+.group[data-v-b9ab8c58],.group+.item[data-v-b9ab8c58]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-f2779853]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-f2779853],.VPNavScreen.fade-leave-active[data-v-f2779853]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-f2779853],.VPNavScreen.fade-leave-active .container[data-v-f2779853]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-f2779853],.VPNavScreen.fade-leave-to[data-v-f2779853]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-f2779853],.VPNavScreen.fade-leave-to .container[data-v-f2779853]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-f2779853]{display:none}}.container[data-v-f2779853]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-f2779853],.menu+.appearance[data-v-f2779853],.translations+.appearance[data-v-f2779853]{margin-top:24px}.menu+.social-links[data-v-f2779853]{margin-top:16px}.appearance+.social-links[data-v-f2779853]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b7550ba0]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b7550ba0]{padding-bottom:10px}.item[data-v-b7550ba0]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b7550ba0]{cursor:pointer}.indicator[data-v-b7550ba0]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b7550ba0]{background-color:var(--vp-c-brand-1)}.link[data-v-b7550ba0]{display:flex;align-items:center;flex-grow:1}.text[data-v-b7550ba0]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b7550ba0]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b7550ba0],.VPSidebarItem.level-2 .text[data-v-b7550ba0],.VPSidebarItem.level-3 .text[data-v-b7550ba0],.VPSidebarItem.level-4 .text[data-v-b7550ba0],.VPSidebarItem.level-5 .text[data-v-b7550ba0]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b7550ba0],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b7550ba0],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b7550ba0]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b7550ba0],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b7550ba0]{color:var(--vp-c-brand-1)}.caret[data-v-b7550ba0]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b7550ba0]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b7550ba0]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b7550ba0]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b7550ba0]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b7550ba0],.VPSidebarItem.level-2 .items[data-v-b7550ba0],.VPSidebarItem.level-3 .items[data-v-b7550ba0],.VPSidebarItem.level-4 .items[data-v-b7550ba0],.VPSidebarItem.level-5 .items[data-v-b7550ba0]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b7550ba0]{display:none}.no-transition[data-v-c40bc020] .caret-icon{transition:none}.group+.group[data-v-c40bc020]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-c40bc020]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-319d5ca6]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-319d5ca6]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-319d5ca6]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-319d5ca6]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-319d5ca6]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-319d5ca6]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-319d5ca6]{outline:0}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px} diff --git a/changelog.html b/changelog.html new file mode 100644 index 0000000..1ab26c1 --- /dev/null +++ b/changelog.html @@ -0,0 +1,27 @@ + + + + + + Change Log | QSU + + + + + + + + + + + + + + + + +
Skip to content

Change Log

1.4.2 (2024-06-25)

  • isObject: use more accurate detect logic

1.4.1 (2024-05-05)

  • safeJSONParse: Add safeJSONParse method
  • safeParseInt: Add safeParseInt method

1.4.0 (2024-04-14)

  • BREAKING CHANGES: Removed the msToTime and secToTime methods, which are unstable and have been replaced with the duration method to provide a more stable utility.
  • duration: Add duration method

1.3.8 (2024-04-12)

  • objectTo1d: Add objectTo1d method
  • Strictly check object types on some methods

1.3.7 (2024-04-07)

  • trim: handle error when value is null

1.3.6 (2024-04-07)

  • BREAKING CHANGES: The trim, Now there is no second argument, and the default behavior is to remove leading and trailing spaces, and change spaces in more than two letters to spaces in the sentence
  • BREAKING CHANGES: The getPlatform method has been deleted

1.3.5 (2024-03-31)

  • numberFormat: allow string type parameter
  • isTrueMinimumNumberOfTimes: Add isTrueMinimumNumberOfTimes method

1.3.4 (2024-03-19)

  • objDeleteKeyByValue: Add objDeleteKeyByValue method
  • objUpdate: Add objUpdate method
  • arrGroupByMaxCount: Add arrGroupByMaxCount method

1.3.3 (2024-03-05)

  • objFindItemRecursiveByKey: Add objFindItemRecursiveByKey method
  • urlJoin: Add urlJoin method
  • objToArray: Add objToArray method

1.3.2 (2023-12-28)

  • strToNumberHash: Add strToNumberHash method
  • objToQueryString: Add objToQueryString method
  • objToPrettyStr: Add objToPrettyStr method

1.3.1 (2023-11-08)

  • encrypt, decrypt: Add toBase64 params for result string encoding
  • createDateListFromRange: Use regex instead of string check
  • getPlatform: Android is not linux os (This method has now been removed in version 1.3.6)

1.3.0 (2023-09-27)

  • objectId: Add objectId method
  • sortByObjectKey: Add sortByObjectKey method
  • sortNumeric: Add sortNumeric method
  • Documentation improvements

1.2.3 (2023-09-15)

  • truncateExpect: do not add a closing character to the last character for sentences without a closing character

1.2.2 (2023-08-15)

  • replaceBetween: Add replaceBetween method

1.2.1 (2023-08-07)

  • capitalizeEverySentence: Add capitalizeEverySentence method
  • arrUnique: Use fast algorithm for 2d array unique
  • debounce: Add debounce method

1.2.0 (2023-06-29)

BREAKING CHANGES: The isBotAgent, license methods were separated from qsu to the qsu-web package. These methods are no longer available after version 1.2.0.

1.1.8 (2023-05-13)

  • strToAscii: Add strToAscii method
  • truncateExpect: Add truncateExpect method

1.1.7 (2023-03-17)

  • NodeJS 12 version deprecation
  • removeSpecialChar: Using exceptionCharacters instead of withoutSpace

1.1.6 (2023-02-28)

  • isValidDate: Only the yyyy-mm-dd format can be verified
  • dateToYYYYMMDD: Add dateToYYYYMMDD method
  • createDateListFromRange: Add createDateListFromRange method
  • arrCount: Add arrCount method

1.1.5 (2023-02-07)

  • isEmail: Add isEmail method
  • sub: Add sub method
  • div: Add div method

1.1.4 (2022-12-22)

  • arrTo1dArray: Add arrTo1dArray method
  • isObject: Add isObject method
  • arrRepeat: Add arrRepeat method
  • isValidDate: Rename isRealDate to isValidDate

1.1.3 (2022-10-23)

  • funcTimes: Add funcTimes method
  • getPlatform: Add getPlatform method (This method has now been removed in version 1.3.6)
  • sum, mul, split: Fix type error
  • arrUnique, capitalizeEachWords, strBlindRandom: Fix correct use static method
  • Support named import
  • Change test script to TypeScript

1.1.2 (2022-10-20)

  • trim: Add new trim method
  • fileSize: When byte is null, returns 0 bytes
  • strCount: Use indexOf instead of regular expression to use better performance
  • strNumberOf: Rename method name to strCount
  • Add prettier and reformat all codes
  • Change require nodejs version to >= 12
  • Remove unused ts-node package
  • Upgrade package dependencies

1.1.1 (2022-10-08)

  • Upgrade package dependencies

1.1.0 (2022-09-03)

  • Reduced bundle size due to minify executable code
  • isBotAgent: Remove duplicate string

1.0.9 (2022-08-15)

  • str: Handling of null str values

1.0.8 (2022-08-15)

  • Add GitHub workflows
  • truncate: Return empty string when str is null
  • fileName: Resolves windows path regardless of system environment

1.0.7 (2022-07-24)

  • Add CHANGELOG.md to .npmignore

1.0.6 (2022-07-24)

  • isBotAgent: Add chrome-lighthouse in bot lists
  • split: Fix incorrect return type
  • isEqual: Add new isEqual method
  • isEqualStrict: Add new isEqualStrict method
  • Import only the methods needed in the path and crypto module

1.0.5 (2022-06-23)

  • contains: When the length of the str parameter value of string type is 0, no error is thrown and false is returned

1.0.4 (2022-06-16)

BREAKING CHANGES: convertDate is no longer supported due to the removal of moment as a dependent module.

The today method has changed its usage. We no longer support custom date formats.

  • split: Add new split method
  • today: Remove dependent modules, change parameters to use pure code
  • convertDate: Remove method
  • encrypt, decrypt: Add basic validation check (more fix)

1.0.3 (2022-05-24)

  • encrypt, decrypt: Add basic validation check

1.0.2 (2022-05-23)

  • encrypt decrypt: Add basic validation check
  • strBlindRandom: Override the deprecated substr method

1.0.1 (2022-05-12)

  • Minimize bundle size and clean up code

1.0.0 (2022-05-09)

  • First version release

0.0.1 ~ 0.5.5 (2021-03-16 ~ 2022-04-09)

  • This is for the Alpha release and is not recommended for use

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/dart/api/format.html b/dart/api/format.html new file mode 100644 index 0000000..fb52043 --- /dev/null +++ b/dart/api/format.html @@ -0,0 +1,27 @@ + + + + + + Format | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Format

numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

dart
numberFormat(1234567); // Returns 1,234,567

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/dart/api/index.html b/dart/api/index.html new file mode 100644 index 0000000..927302f --- /dev/null +++ b/dart/api/index.html @@ -0,0 +1,27 @@ + + + + + + API | QSU + + + + + + + + + + + + + + + + +
Skip to content

API

A complete list of utility methods available in QSU.

Explore the APIs for your purpose in the left sidebar.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/dart/api/string.html b/dart/api/string.html new file mode 100644 index 0000000..18dd055 --- /dev/null +++ b/dart/api/string.html @@ -0,0 +1,28 @@ + + + + + + String | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: String

capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

dart
capitalizeFirst('abcd'); // Returns 'Abcd'

truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number

Optional Parameters

  • ellipsis::string || ''

Returns

string

Examples

dart
truncate('hello', 3); // Returns 'hel'
+truncate('hello', 2, ellipsis: '...'); // Returns 'he...'

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/dart/dart.html b/dart/dart.html new file mode 100644 index 0000000..7d86a5d --- /dev/null +++ b/dart/dart.html @@ -0,0 +1,27 @@ + + + + + + Dart/Flutter | QSU + + + + + + + + + + + + + + + + +
Skip to content

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/dart/installation.html b/dart/installation.html new file mode 100644 index 0000000..4dde1f1 --- /dev/null +++ b/dart/installation.html @@ -0,0 +1,27 @@ + + + + + + Installation | QSU + + + + + + + + + + + + + + + + +
Skip to content

Installation

Qsu requires Dart 3.x or higher. If you are using Flutter, you must be using Flutter version 3.10.x or later.

After configuring the dart environment, you can simply run the following command:

With Dart

bash
$ dart pub add qsu

With Flutter

bash
$flutter pub add qsu

How to Use

You can import the following code manually or automatically to bring up the QSU utility

dart
import 'package:qsu/qsu.dart';

To learn more about utility functions, browse the API documentation.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..75c6482 Binary files /dev/null and b/favicon.ico differ diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 0000000..12cb9d0 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"changelog.md":"DzTTOHiP","dart_api_format.md":"DR-edXt0","dart_api_index.md":"DM_mNYW9","dart_api_string.md":"Bb_91aIp","dart_dart.md":"CjYHPzEJ","dart_installation.md":"40B1wVko","index.md":"DJBof6uu","introduction.md":"C5L9HcfQ","js_api_array.md":"MuUQaxvs","js_api_crypto.md":"DWDCP7x5","js_api_date.md":"D0dBBDiO","js_api_format.md":"BEODkbmw","js_api_index.md":"CAPv2HYo","js_api_math.md":"CEKd2KuL","js_api_misc.md":"BqNcZivJ","js_api_object.md":"CPHo2EZ3","js_api_string.md":"DeKPXuMr","js_api_verify.md":"BqArh73l","js_installation.md":"BLmW6zAx","js_js.md":"DEJf1Edl","js_qsu-web_api_index.md":"CmwO6iGe","js_qsu-web_api_web.md":"C1UHo3YI","js_qsu-web_installation.md":"DHji8q2j","ko_dart_api_format.md":"ChyCeyny","ko_dart_api_index.md":"DktGqtiu","ko_dart_api_string.md":"DkrkSVvN","ko_dart_dart.md":"BWgDH20j","ko_dart_installation.md":"_931pPlw","ko_index.md":"BOisvvBD","ko_introduction.md":"wUSGH5H2","ko_js_api_array.md":"BHmeF-S_","ko_js_api_crypto.md":"ed9Rza2p","ko_js_api_date.md":"DDF3M5ki","ko_js_api_format.md":"D0sl5Vi7","ko_js_api_index.md":"B8uIDdkf","ko_js_api_math.md":"D6cYV6Da","ko_js_api_misc.md":"DXT2Oy3O","ko_js_api_object.md":"Bl6g5yCW","ko_js_api_string.md":"BqZM1Zai","ko_js_api_verify.md":"DTTpOah8","ko_js_installation.md":"BNtZcu_d","ko_js_js.md":"BkC8YduL","ko_js_qsu-web_api_index.md":"lxregmxH","ko_js_qsu-web_api_web.md":"BkRW42Q9","ko_js_qsu-web_installation.md":"mQdEhdcr"} diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..fa4921b Binary files /dev/null and b/icon.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..b7eec74 --- /dev/null +++ b/index.html @@ -0,0 +1,27 @@ + + + + + + QSU | Lightweight and extensive utility helpers + + + + + + + + + + + + + + + + +
Skip to content

QSU

Lightweight and extensive utility helpers

QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.

Utility

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/introduction.html b/introduction.html new file mode 100644 index 0000000..1167504 --- /dev/null +++ b/introduction.html @@ -0,0 +1,27 @@ + + + + + + Introduction | QSU + + + + + + + + + + + + + + + + +
Skip to content

Introduction

QSU is a package of utilities to energize your programming. It is available for JavaScript/Node.js and Dart/Flutter environments.

Start with your favorite language; there may be differences in the utility functions provided for each language.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/array.html b/js/api/array.html new file mode 100644 index 0000000..666bac1 --- /dev/null +++ b/js/api/array.html @@ -0,0 +1,81 @@ + + + + + + Array | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Array

_.arrShuffle

Shuffle the order of the given array and return.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrShuffle([1, 2, 3, 4]); // Returns [4, 2, 3, 1]

_.arrWithDefault

Initialize an array with a default value of a specific length.

Parameters

  • defaultValue::any
  • length::number || 0

Returns

any[]

Examples

javascript
_.arrWithDefault('abc', 4); // Returns ['abc', 'abc', 'abc', 'abc']
+_.arrWithDefault(null, 3); // Returns [null, null, null]

_.arrWithNumber

Creates and returns an Array in the order of start...end values.

Parameters

  • start::number
  • end::number

Returns

number[]

Examples

javascript
_.arrWithNumber(1, 3); // Returns [1, 2, 3]
+_.arrWithNumber(0, 3); // Returns [0, 1, 2, 3]

_.arrUnique

Remove duplicate values from array and two-dimensional array data. In the case of 2d arrays, json type data duplication is not removed.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrUnique([1, 2, 2, 3]); // Returns [1, 2, 3]
+_.arrUnique([[1], [1], [2]]); // Returns [[1], [2]]

_.average

Returns the average of all numeric values in an array.

Parameters

  • array::number[]

Returns

number

Examples

javascript
_.average([1, 5, 15, 50]); // Returns 17.75

_.arrMove

Moves the position of a specific element in an array to the specified position. (Position starts from 0.)

Parameters

  • array::any[]
  • from::number
  • to::number

Returns

any[]

Examples

javascript
_.arrMove([1, 2, 3, 4], 1, 0); // Returns [2, 1, 3, 4]

_.arrTo1dArray

Merges all elements of a multidimensional array into a one-dimensional array.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrTo1dArray([1, 2, [3, 4]], 5); // Returns [1, 2, 3, 4, 5]

_.arrRepeat

Repeats the data of an Array or Object a specific number of times and returns it as a 1d array.

Parameters

  • array::any[]|object
  • count::number

Returns

any[]

Examples

javascript
_.arrRepeat([1, 2, 3, 4], 3); // Returns [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
+_.arrRepeat({ a: 1, b: 2 }, 2); // Returns [{ a: 1, b: 2 }, { a: 1, b: 2 }]

_.arrCount

Returns the number of duplicates for each unique value in the given array. The array values can only be of type String or Number.

Parameters

  • array::string[]|number[]
  • count::number

Returns

object

Examples

javascript
_.arrCount(['a', 'a', 'a', 'b', 'c', 'b', 'a', 'd']); // Returns { a: 4, b: 2, c: 1, d: 1 }

_.sortByObjectKey

Sort array values by a specific key value in an array containing multiple objects. It does not affect the order or value of elements within an object.

If the numerically option is true, when sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names.

Parameters

  • array::any[]
  • key::string
  • descending::boolean
  • numerically::boolean

Returns

any[]

Examples

javascript
const obj = [
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	}
+];
+
+_.sortByObjectKey(obj, 'aa');
+
+/*
+[
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	}
+]
+*/

_.sortNumeric

When sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names. For example, given the array ['1-a', '100-a', '10-a', '2-a'], it returns ['1-a', '2-a', '10-a', '100-a'] with the smaller numbers at the front.

Parameters

  • array::string[]
  • descending::boolean

Returns

string[]

Examples

javascript
_.sortNumeric(['a1a', 'b2a', 'aa1a', '1', 'a11a', 'a3a', 'a2a', '1a']);
+// Returns ['1', '1a', 'a1a', 'a2a', 'a3a', 'a11a', 'aa1a', 'b2a']

_.arrGroupByMaxCount

Separates the data in the given array into a two-dimensional array containing only the maximum number of elements. For example, if you have an array of 6 data in 2 groups, this function will create a 2-dimensional array with 3 lengths.

Parameters

  • array::any[]
  • maxLengthPerGroup::number

Returns

any[]

Examples

javascript
_.arrGroupByMaxCount(['a', 'b', 'c', 'd', 'e'], 2);
+// Returns [['a', 'b'], ['c', 'd'], ['e']]

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/crypto.html b/js/api/crypto.html new file mode 100644 index 0000000..e7f3987 --- /dev/null +++ b/js/api/crypto.html @@ -0,0 +1,29 @@ + + + + + + Crypto | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Crypto

_.encrypt

Encrypt with the algorithm of your choice (algorithm default: aes-256-cbc, ivSize default: 16) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'
  • ivSize::number || 16

Returns

string

Examples

javascript
_.encrypt('test', 'secret-key');

_.decrypt

Decrypt with the specified algorithm (default: aes-256-cbc) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'

Returns

string

Examples

javascript
_.decrypt('61ba43b65fc...', 'secret-key');

_.objectId

Returns a random string hash of the ObjectId format (primarily utilized by MongoDB).

Parameters

No parameters required

Returns

string

Examples

javascript
_.objectId(); // Returns '651372605b49507aea707488'

_.md5

Converts String data to md5 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.md5('test'); // Returns '098f6bcd4621d373cade4e832627b4f6'

_.sha1

Converts String data to sha1 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha1('test'); // Returns 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'

_.sha256

Converts String data to sha256 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha256('test'); // Returns '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'

_.encodeBase64

Base64-encode the given string.

Parameters

  • str::string

Returns

string

Examples

javascript
_.encodeBase64('this is test'); // Returns 'dGhpcyBpcyB0ZXN0'

_.decodeBase64

Decodes an encoded base64 string to a plain string.

Parameters

  • encodedStr::string

Returns

string

Examples

javascript
_.decodeBase64('dGhpcyBpcyB0ZXN0'); // Returns 'this is test'

_.strToNumberHash

Returns the specified string as a hash value of type number. The return value can also be negative.

Parameters

  • str::string

Returns

number

Examples

javascript
_.strToNumberHash('abc'); // Returns 96354
+_.strToNumberHash('Hello'); // Returns 69609650
+_.strToNumberHash('hello'); // Returns 99162322

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/date.html b/js/api/date.html new file mode 100644 index 0000000..00e5e1c --- /dev/null +++ b/js/api/date.html @@ -0,0 +1,40 @@ + + + + + + Date | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Date

_.dayDiff

Calculates the difference between two given dates and returns the number of days.

Parameters

  • date1::Date
  • date2::Date?

Returns

number

Examples

javascript
_.daydiff(new Date('2021-01-01'), new Date('2021-01-03')); // Returns 2

_.today

Returns today's date.

Parameters

  • separator::string = '-'
  • yearFirst::boolean = false

Returns

string

Examples

javascript
_.today(); // Returns YYYY-MM-DD
+_.today('/'); // Returns YYYY/MM/DD
+_.today('/', false); // Returns DD/MM/YYYY

_.isValidDate

Checks if a given date actually exists. Check only in YYYY-MM-DD format.

Parameters

  • date::string

Returns

boolean

Examples

javascript
_.isValidDate('2021-01-01'); // Returns true
+_.isValidDate('2021-02-30'); // Returns false

_.dateToYYYYMMDD

Returns the date data of a Date object in the format YYYY-MM-DD.

Parameters

  • date::Date
  • separator:string

Returns

string

Examples

javascript
_.dateToYYYYMMDD(new Date(2023, 11, 31)); // Returns '2023-12-31'

_.createDateListFromRange

Create an array list of all dates from startDate to endDate in the format YYYY-MM-DD.

Parameters

  • startDate::Date
  • endDate::Date

Returns

string[]

Examples

javascript
_.createDateListFromRange(new Date('2023-01-01T01:00:00Z'), new Date('2023-01-05T01:00:00Z'));
+
+/*
+	 [
+		 '2023-01-01',
+		 '2023-01-02',
+		 '2023-01-03',
+		 '2023-01-04',
+		 '2023-01-05'
+	 ]
+ */

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/format.html b/js/api/format.html new file mode 100644 index 0000000..2e23037 --- /dev/null +++ b/js/api/format.html @@ -0,0 +1,52 @@ + + + + + + Format | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Format

_.numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

javascript
_.numberFormat(1234567); // Returns 1,234,567

_.fileName

Extract the file name from the path. Include the extension if withExtension is true.

Parameters

  • filePath::string
  • withExtension::boolean || false

Returns

string

Examples

javascript
_.fileName('C:Temphello.txt'); // Returns 'hello.txt'
+_.fileName('C:Temp\file.mp3', true); // Returns 'file.mp3'

_.fileSize

Converts the file size in bytes to human-readable and returns it. The return value is a String and includes the file units (Bytes, MB, GB...). If the second optional argument value is included, you can display as many decimal places as you like.

Parameters

  • bytes::number
  • decimals::number || 2

Returns

string

Examples

javascript
_.fileSize(2000, 3); // Returns '1.953 KB'
+_.fileSize(250000000); // Returns '238.42 MB'

_.fileExt

Returns only the extensions in the file path. If unknown, returns 'Unknown'.

Parameters

  • filePath::string

Returns

string

Examples

javascript
_.fileExt('C:Temphello.txt'); // Returns 'txt'
+_.fileExt('this-is-file.mp3'); // Returns 'mp3'

_.duration

Displays the given millisecond value in human-readable time. For example, the value of 604800000 (7 days) is displayed as 7 Days.

Parameters

  • milliseconds::number
  • options::DurationOptions | undefined
typescript
const {
+	// Converts to `Days` -> `D`, `Hours` -> `H`,  `Minutes` -> `M`, `Seconds` -> `S`, `Milliseconds` -> `ms`
+	useShortString = false,
+	// Use space (e.g. `1Days` -> `1 Days`)
+	useSpace = true,
+	// Do not include units with a value of 0.
+	withZeroValue = false,
+	// Use Separator (e.g. If separator value is `-`, result is: `1 Hour 10 Minutes` -> `1 Hour-10 Minutes`)
+	separator = ' '
+}: DurationOptions = options;

Returns

string

Examples

javascript
_.duration(1234567890); // 'Returns '14 Days 6 Hours 56 Minutes 7 Seconds 890 Milliseconds'
+_.duration(604800000, {
+	useSpace: false
+}); // Returns '7Days'

_.safeJSONParse

Attempts to parse without returning an error, even if the argument value is of the wrong type or in JSON format. If parsing fails, it will be replaced with the object set in fallback.fallback의 기본값은 빈 오브젝트입니다.

Parameters

  • jsonString::any
  • fallback::object

Returns

object

Examples

javascript
const result1 = _.safeJSONParse('{"a":1,"b":2}');
+const result2 = _.safeJSONParse(null);
+
+console.log(result1); // Returns { a: 1, b: 2 }
+console.log(result2); // Returns {}

_.safeParseInt

Any argument value will be attempted to be parsed as a Number type without returning an error. If parsing fails, it is replaced by the number set in fallback. The default value for fallback is 0. You can specify radix (default is decimal: 10) in the third argument.

Parameters

  • value::any
  • fallback::number
  • radix::number

Returns

number

Examples

javascript
const result1 = _.safeParseInt('00010');
+const result2 = _.safeParseInt('10.1234');
+const result3 = _.safeParseInt(null, -1);
+
+console.log(result1); // Returns 10
+console.log(result2); // Returns 10
+console.log(result3); // Returns -1

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/index.html b/js/api/index.html new file mode 100644 index 0000000..8625589 --- /dev/null +++ b/js/api/index.html @@ -0,0 +1,27 @@ + + + + + + API | QSU + + + + + + + + + + + + + + + + +
Skip to content

API

A complete list of utility methods available in QSU.

Explore the APIs for your purpose in the left sidebar.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/math.html b/js/api/math.html new file mode 100644 index 0000000..5c40541 --- /dev/null +++ b/js/api/math.html @@ -0,0 +1,32 @@ + + + + + + Math | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Math

_.numRandom

Returns a random number (Between min and max).

Parameters

  • min::number
  • max::number

Returns

number

Examples

javascript
_.numRandom(1, 5); // Returns 1~5
+_.numRandom(10, 20); // Returns 10~20

_.sum

Returns after adding up all the n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sum(1, 2, 3); // Returns 6
+_.sum([1, 2, 3, 4]); // Returns 10

_.mul

Returns after multiplying all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.mul(1, 2, 3); // Returns 6
+_.mul([1, 2, 3, 4]); // Returns 24

_.sub

Returns after subtracting all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sub(10, 1, 5); // Returns 4
+_.sub([1, 2, 3, 4]); // Returns -8

_.div

Returns after dividing all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.div(10, 5, 2); // Returns 1
+_.div([100, 2, 2, 5]); // Returns 5

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/misc.html b/js/api/misc.html new file mode 100644 index 0000000..16f2446 --- /dev/null +++ b/js/api/misc.html @@ -0,0 +1,55 @@ + + + + + + Misc | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Misc

_.sleep

Sleep function using Promise.

Parameters

  • milliseconds::number

Returns

Promise:boolean

Examples

javascript
await _.sleep(1000); // 1s
+
+_.sleep(5000).then(() => {
+	// continue
+});

_.funcTimes

Repeat iteratee n (times argument value) times. After the return result of each function is stored in the array in order, the final array is returned.

Parameters

  • times::number
  • iteratee::function

Returns

any[]

Examples

javascript
function sayHi(str) {
+	return `Hi${str || ''}`;
+}
+
+_.funcTimes(3, sayHi); // Returns ['Hi', 'Hi', 'Hi']
+_.funcTimes(4, () => sayHi('!')); // Returns ['Hi!', 'Hi!', 'Hi!', 'Hi!']

_.debounce

When the given function is executed repeatedly, the function is called if it has not been called again within the specified timeout. This function is used when a small number of function calls are needed for repetitive input events.

For example, if you have a func variable written as const func = debounce(() => console.log('hello'), 1000) and you repeat the func function 100 times with a wait interval of 100ms, the function will only run once after 1000ms because the function was executed at 100ms intervals. However, if you increase the wait interval from 100ms to 1100ms or more and repeat it 100 times, the function will run all 100 times intended.

Parameters

  • func::function
  • timeout::number

Returns

No return values

Examples

html
<!doctype html>
+<html lang="en">
+	<head>
+		<title>test</title>
+	</head>
+	<body>
+		<input type="text" onkeyup="handleKeyUp()" />
+	</body>
+</html>
+<script>
+	import _ from 'qsu';
+
+	const keyUpDebounce = _.debounce(() => {
+		console.log('handleKeyUp called.');
+	}, 100);
+
+	function handleKeyUp() {
+		keyUpDebounce();
+	}
+</script>

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/object.html b/js/api/object.html new file mode 100644 index 0000000..d467c6b --- /dev/null +++ b/js/api/object.html @@ -0,0 +1,106 @@ + + + + + + Object | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Object

_.objToQueryString

Converts the given object data to a URL query string.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToQueryString({
+	hello: 'world',
+	test: 1234,
+	arr: [1, 2, 3]
+}); // Returns 'hello=world&test=1234&arr=%5B1%2C2%2C3%5D'

_.objToPrettyStr

Recursively output all the steps of the JSON object (JSON.stringify) and then output the JSON object with newlines and tab characters to make it easier to read in a console function, for example.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToPrettyStr({ a: 1, b: { c: 1, d: 2 } }); // Returns '{\n\t"a": 1,\n\t"b": {\n\t\t"c": 1,\n\t\t"d": 2\n\t}\n}'

_.objFindItemRecursiveByKey

Returns the object if the key of a specific piece of data in the object's dataset corresponds to a specific value. This function returns only one result, so it is used to search for unique IDs, including all of their children.

Parameters

  • obj::object
  • searchKey::string
  • searchValue::any
  • childKey::string

Returns

object|null

Examples

javascript
_.objFindItemRecursiveByKey(
+	{
+		id: 123,
+		name: 'parent',
+		child: [
+			{
+				id: 456,
+				name: 'childItemA'
+			},
+			{
+				id: 789,
+				name: 'childItemB'
+			}
+		]
+	}, // obj
+	'id', // searchKey
+	456, // searchValue
+	'child' // childKey
+); // Returns '{ id: 456, name: 'childItemA' }'

_.objToArray

Converts the given object to array format. The resulting array is a two-dimensional array with one key value stored as follows: [key, value]. If the recursive option is true, it will convert to a two-dimensional array again when the value is of type object.

Parameters

  • obj::object
  • recursive::boolean

Returns

any[]

Examples

javascript
_.objToArray({
+	a: 1.234,
+	b: 'str',
+	c: [1, 2, 3],
+	d: { a: 1 }
+}); // Returns [['a', 1.234], ['b', 'str'], ['c', [1, 2, 3]], ['d', { a: 1 }]]

_.objTo1d

Merges objects from the given object to the top level of the child items and displays the key names in steps, using a delimiter (. by default) instead of the existing keys. For example, if an object a has keys b, c, and d, the a key is not displayed, and the keys and values a.b, a.c, and a.d are displayed in the parent step.

Parameters

  • obj::object
  • separator::string

Returns

object

Examples

javascript
_.objToArray({
+	a: 1,
+	b: {
+		aa: 1,
+		bb: 2
+	},
+	c: 3
+});
+
+/*
+Returns:
+{
+	a: 1,
+	'b.aa': 1,
+	'b.bb': 2,
+	c: 3
+}
+ */

_.objDeleteKeyByValue

Deletes keys equal to the given value from the object data. If the recursive option is true, also deletes all keys corresponding to the same value in the child items.

Parameters

  • obj::object
  • searchValue::string|number|null|undefined
  • recursive::boolean

Returns

object|null

Examples

javascript
const result = _.objDeleteKeyByValue(
+	{
+		a: 1,
+		b: 2,
+		c: {
+			aa: 2,
+			bb: {
+				aaa: 1,
+				bbb: 2
+			}
+		},
+		d: {
+			aa: 2
+		}
+	},
+	2,
+	true
+);
+
+console.log(result); // Returns { a: 1, c: { bb: { aaa: 1 } }, d: {} }

_.objUpdate

Changes the value matching a specific key name in the given object. If the recursive option is true, it will also search in child object items. This changes the value of the same key found in both the parent and child items. If the upsert option is true, add it as a new attribute to the top-level item when the key is not found.

Parameters

  • obj::object
  • searchKey::string
  • value::any
  • recursive::boolean
  • upsert::boolean

Returns

object|null

Examples

javascript
const result = _.objUpdate(
+	{
+		a: 1,
+		b: {
+			a: 1,
+			b: 2,
+			c: 3
+		},
+		c: 3
+	},
+	'c',
+	5,
+	true,
+	false
+);
+
+console.log(result); // Returns { a: 1, b: { a: 1, b: 2, c: 5 }, c: 5 }

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/string.html b/js/api/string.html new file mode 100644 index 0000000..c1e80dd --- /dev/null +++ b/js/api/string.html @@ -0,0 +1,37 @@ + + + + + + String | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: String

_.trim

Removes all whitespace before and after a string. Unlike JavaScript's trim function, it converts two or more spaces between sentences into a single space.

Parameters

  • str::string

Returns

string

Examples

javascript
_.trim(' Hello Wor  ld  '); // Returns 'Hello Wor ld'
+_.trim('H e l l o     World'); // Returns 'H e l l o World'

_.removeSpecialChar

Returns after removing all special characters, including spaces. If you want to allow any special characters as exceptions, list them in the second argument value without delimiters. For example, if you want to allow spaces and the symbols & and *, the second argument value would be ' &*'.

Parameters

  • str::string
  • exceptionCharacters::string?

Returns

string

Examples

javascript
_.removeSpecialChar('Hello-qsu, World!'); // Returns 'HelloqsuWorld'
+_.removeSpecialChar('Hello-qsu, World!', ' -'); // Returns 'Hello-qsu World'

_.removeNewLine

Removes \n, \r characters or replaces them with specified characters.

Parameters

  • str::string
  • replaceTo::string || ''

Returns

string

Examples

javascript
_.removeNewLine('ab\ncd'); // Returns 'abcd'
+_.removeNewLine('ab\r\ncd', '-'); // Returns 'ab-cd'

_.replaceBetween

Replaces text within a range starting and ending with a specific character in a given string with another string. For example, given the string abc<DEF>ghi, to change <DEF> to def, use replaceBetween('abc<DEF>ghi', '<', '>', 'def'). The result would be abcdefghi.

Deletes strings in the range if replaceWith is not specified.

Parameters

  • str::string
  • startChar::string
  • endChar::string
  • replaceWith::string || ''

Returns

string

Examples

javascript
_.replaceBetween('ab[c]d[e]f', '[', ']'); // Returns 'abdf'
+_.replaceBetween('abcd:replace:', ':', ':', 'e'); // Returns 'abcde'

_.capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

javascript
_.capitalizeFirst('abcd'); // Returns 'Abcd'

_.capitalizeEverySentence

Capitalize the first letter of every sentence. Typically, the . characters to separate sentences, but this can be customized via the value of the splitChar argument.

Parameters

  • str::string
  • splitChar::string

Returns

string

Examples

javascript
_.capitalizeEverySentence('hello. world. hi.'); // Returns 'Hello. World. Hi.'
+_.capitalizeEverySentence('hello!world', '!'); // Returns 'Hello!World'

_.capitalizeEachWords

Converts every word with spaces to uppercase. If the naturally argument is true, only some special cases (such as prepositions) are kept lowercase.

Parameters

  • str::string
  • natural::boolean || false

Returns

string

Examples

javascript
_.capitalizeEachWords('abcd'); // Returns 'Abcd'

_.strCount

Returns the number of times the second String argument is contained in the first String argument.

Parameters

  • str::string
  • search::string

Returns

number

Examples

javascript
_.strCount('abcabc', 'a'); // Returns 2

_.strShuffle

Randomly shuffles the received string and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strShuffle('abcdefg'); // Returns 'bgafced'

_.strRandom

Returns a random String containing numbers or uppercase and lowercase letters of the given length. The default return length is 12.

Parameters

  • length::number
  • additionalCharacters::string?

Returns

string

Examples

javascript
_.strRandom(5); // Returns 'CHy2M'

_.strBlindRandom

Replace strings at random locations with a specified number of characters (default 1) with characters (default *).

Parameters

  • str::string
  • blindLength::number
  • blindStr::string || '*'

Returns

string

Examples

javascript
_.strBlindRandom('hello', 2, '#'); // Returns '#el#o'

_.truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number
  • ellipsis::string || ''

Returns

string

Examples

javascript
_.truncate('hello', 3); // Returns 'hel'
+_.truncate('hello', 2, '...'); // Returns 'he...'

_.truncateExpect

The string ignores truncation until the ending character (endStringChar). If the expected length is reached, return the truncated string until after the ending character.

Parameters

  • str::string
  • expectLength::number
  • endStringChar::string || '.'

Returns

string

Examples

javascript
_.truncateExpect('hello. this is test string.', 10, '.'); // Returns 'hello. this is test string.'
+_.truncateExpect('hello-this-is-test-string-bye', 14, '-'); // Returns 'hello-this-is-'

_.split

Splits a string based on the specified character and returns it as an Array. Unlike the existing split, it splits the values provided as multiple parameters (array or multiple arguments) at once.

Parameters

  • str::string
  • splitter::string||string[]||...string

Returns

string[]

Examples

javascript
_.split('hello% js world', '% '); // Returns ['hello', 'js world']
+_.split('hello,js,world', ','); // Returns ['hello', 'js', 'world']
+_.split('hello%js,world', ',', '%'); // Returns ['hello', 'js', 'world']
+_.split('hello%js,world', [',', '%']); // Returns ['hello', 'js', 'world']

_.strUnique

Remove duplicate characters from a given string and output only one.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strUnique('aaabbbcc'); // Returns 'abc'

_.strToAscii

Converts the given string to ascii code and returns it as an array.

Parameters

  • str::string

Returns

number[]

Examples

javascript
_.strToAscii('12345'); // Returns [49, 50, 51, 52, 53]

_.urlJoin

Merges the given string argument with the first argument (the beginning of the URL), joining it so that the slash (/) symbol is correctly included.

Parameters

  • args::any[]

Returns

string

Examples

javascript
_.urlJoin('https://example.com', 'hello', 'world'); // Returns 'https://example.com/hello/world'

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/api/verify.html b/js/api/verify.html new file mode 100644 index 0000000..7da8af6 --- /dev/null +++ b/js/api/verify.html @@ -0,0 +1,53 @@ + + + + + + Verify | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Verify

_.isObject

Check whether the given data is of type Object. Returns false for other data types including Array.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.isObject([1, 2, 3]); // Returns false
+_.isObject({ a: 1, b: 2 }); // Returns true

_.isEqual

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqual('Left', 'Left', val1); // Returns true
+_.isEqual(1, [1, '1', 1, val2]); // Returns true
+_.isEqual(val1, ['Right', 'Left', 1]); // Returns false
+_.isEqual(1, 1, 1, 1); // Returns true

_.isEqualStrict

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqualStrict('Left', 'Left', val1); // Returns true
+_.isEqualStrict(1, [1, '1', 1, val2]); // Returns false
+_.isEqualStrict(1, 1, '1', 1); // Returns false

_.isEmpty

Returns true if the passed data is empty or has a length of 0.

Parameters

  • data::any?

Returns

boolean

Examples

javascript
_.isEmpty([]); // Returns true
+_.isEmpty(''); // Returns true
+_.isEmpty('abc'); // Returns false

_.isUrl

Returns true if the given data is in the correct URL format. If withProtocol is true, it is automatically appended to the URL when the protocol does not exist. If strict is true, URLs without commas (.) return false.

Parameters

  • url::string
  • withProtocol::boolean || false
  • strict::boolean || false

Returns

boolean

Examples

javascript
_.isUrl('google.com'); // Returns false
+_.isUrl('google.com', true); // Returns true
+_.isUrl('https://google.com'); // Returns true

_.contains

Returns true if the first string argument contains the second argument "string" or "one or more of the strings listed in the array". If the exact value is true, it returns true only for an exact match.

Parameters

  • str::any[]|string
  • search::any[]|string
  • exact::boolean || false

Returns

boolean

Examples

javascript
_.contains('abc', 'a'); // Returns true
+_.contains('abc', 'd'); // Returns false
+_.contains('abc', ['a', 'd']); // Returns true

_.is2dArray

Returns true if the given array is a two-dimensional array.

Parameters

  • array::any[]

Returns

boolean

Examples

javascript
_.is2dArray([1]); // Returns false
+_.is2dArray([[1], [2]]); // Returns true

_.between

Returns true if the first argument is in the range of the second argument ([min, max]). To allow the minimum and maximum values to be in the range, pass true for the third argument.

Parameters

  • range::[number, number]
  • number::number
  • inclusive::boolean || false

Returns

boolean

Examples

javascript
_.between([10, 20], 10); // Returns false
+_.between([10, 20], 10, true); // Returns true

_.len

Returns the length of any type of data. If the argument value is null or undefined, 0 is returned.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.len('12345'); // Returns 5
+_.len([1, 2, 3]); // Returns 3

_.isEmail

Checks if the given argument value is a valid email.

Parameters

  • email::string

Returns

boolean

Examples

javascript
_.isEmail('abc@def.com'); // Returns true

_.isTrueMinimumNumberOfTimes

Returns true if the values given in the conditions array are true at least minimumCount times.

Parameters

  • conditions::boolean[]
  • minimumCount::number

Returns

boolean

Examples

javascript
const left = 1;
+const right = 1 + 2;
+
+_.isTrueMinimumNumberOfTimes([true, true, false], 2); // Returns true
+_.isTrueMinimumNumberOfTimes([true, true, false], 3); // Returns false
+_.isTrueMinimumNumberOfTimes([true, true, left === right], 3); // Returns false

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/installation.html b/js/installation.html new file mode 100644 index 0000000..87694fe --- /dev/null +++ b/js/installation.html @@ -0,0 +1,43 @@ + + + + + + Installation | QSU + + + + + + + + + + + + + + + + +
Skip to content

Installation

Qsu requires Node.js 18.x or higher, and the repository is serviced through NPM.

Qsu is ESM-only. You must use import instead of require to load the module. There are workarounds available for CommonJS, but we recommend using ESM based on recent JavaScript trends.

After configuring the node environment, you can simply run the following command.

bash
# via npm
+$ npm install qsu
+
+# via yarn
+$ yarn add qsu
+
+# via pnpm
+$ pnpm install qsu

How to Use

Using named import (Multiple utilities in a single require) - Recommend

javascript
import { today, strCount } from 'qsu';
+
+function main() {
+	console.log(today()); // '20xx-xx-xx'
+	console.log(strCount('123412341234', '1')); // 3
+}

Using whole class (multiple utilities simultaneously with one object)

javascript
import _ from 'qsu';
+
+function main() {
+	console.log(_.today()); // '20xx-xx-xx'
+}

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/js.html b/js/js.html new file mode 100644 index 0000000..d61a903 --- /dev/null +++ b/js/js.html @@ -0,0 +1,27 @@ + + + + + + JavaScript/Node.js | QSU + + + + + + + + + + + + + + + + +
Skip to content

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/qsu-web/api/index.html b/js/qsu-web/api/index.html new file mode 100644 index 0000000..1d1a8b2 --- /dev/null +++ b/js/qsu-web/api/index.html @@ -0,0 +1,27 @@ + + + + + + API | QSU + + + + + + + + + + + + + + + + +
Skip to content

API

A complete list of utility methods available in QSU.

Explore the APIs for your purpose in the left sidebar.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/qsu-web/api/web.html b/js/qsu-web/api/web.html new file mode 100644 index 0000000..3b1aaa2 --- /dev/null +++ b/js/qsu-web/api/web.html @@ -0,0 +1,33 @@ + + + + + + Web | QSU + + + + + + + + + + + + + + + + +
Skip to content

Methods: Web

This method is only available in the qsu-web package.

_.isBotAgent

Analyze the user agent value to determine if it's a bot for a search engine. Returns true if it's a bot.

Parameters

  • userAgent::string

Returns

boolean

Examples

javascript
_.isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); // Returns true

_.license

Returns text in a specific license format based on the author information of the given argument. The argument uses the Object type.

Parameters

  • options::LicenseOption{ author: string, email: string?, yearStart: string|number, yearEnd: string?, htmlBr: boolean?, type: 'mit' | 'apache20' }

Returns

string

Examples

javascript
_.license({
+	holder: 'example',
+	email: 'example@example.com',
+	yearStart: 2020,
+	yearEnd: 2021,
+	htmlBr: true
+});

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/js/qsu-web/installation.html b/js/qsu-web/installation.html new file mode 100644 index 0000000..41ae847 --- /dev/null +++ b/js/qsu-web/installation.html @@ -0,0 +1,40 @@ + + + + + + Installation | QSU + + + + + + + + + + + + + + + + +
Skip to content

Installation

Qsu has utilities organized into separate packages. Currently, there is a package called qsu-web.

The qsu-web package contains a collection of utility functions that are commonly used on web pages.

General installation and use is almost identical to the qsu package.

bash
# via npm
+$ npm install qsu-web
+
+# via yarn
+$ yarn add qsu-web
+
+# via pnpm
+$ pnpm install qsu-web
javascript
import { isBotAgent } from 'qsu-web';
+
+function main() {
+	console.log(
+		isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html')
+	); // true
+}

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/dart/api/format.html b/ko/dart/api/format.html new file mode 100644 index 0000000..abb07e0 --- /dev/null +++ b/ko/dart/api/format.html @@ -0,0 +1,27 @@ + + + + + + Format | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Format

numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

dart
numberFormat(1234567); // Returns 1,234,567

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/dart/api/index.html b/ko/dart/api/index.html new file mode 100644 index 0000000..fe43858 --- /dev/null +++ b/ko/dart/api/index.html @@ -0,0 +1,27 @@ + + + + + + API | QSU + + + + + + + + + + + + + + + + +
Skip to content

API

Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.

왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/dart/api/string.html b/ko/dart/api/string.html new file mode 100644 index 0000000..c26630f --- /dev/null +++ b/ko/dart/api/string.html @@ -0,0 +1,28 @@ + + + + + + String | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: String

capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

dart
capitalizeFirst('abcd'); // Returns 'Abcd'

truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number

Optional Parameters

  • ellipsis::string || ''

Returns

string

Examples

dart
truncate('hello', 3); // Returns 'hel'
+truncate('hello', 2, ellipsis: '...'); // Returns 'he...'

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/dart/dart.html b/ko/dart/dart.html new file mode 100644 index 0000000..0362da9 --- /dev/null +++ b/ko/dart/dart.html @@ -0,0 +1,27 @@ + + + + + + Dart/Flutter | QSU + + + + + + + + + + + + + + + + +
Skip to content

Dart/Flutter

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/dart/installation.html b/ko/dart/installation.html new file mode 100644 index 0000000..7fb899e --- /dev/null +++ b/ko/dart/installation.html @@ -0,0 +1,27 @@ + + + + + + Installation | QSU + + + + + + + + + + + + + + + + +
Skip to content

설치

Qsu에는 Dart 3.x 이상이 필요합니다. Flutter를 사용 중인 경우 Flutter 버전 3.10.x 이상을 사용 중이어야 합니다.

Dart 환경을 구성한 후 다음 명령을 실행하면 됩니다:

With Dart

bash
$ dart pub add qsu

With Flutter

bash
$flutter pub add qsu

사용 방법

다음 코드를 수동 또는 자동으로 가져와서 QSU 유틸리티를 불러올 수 있습니다.

dart
import 'package:qsu/qsu.dart';

유틸리티 기능에 대해 자세히 알아보려면 API 설명서를 참조하세요.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/index.html b/ko/index.html new file mode 100644 index 0000000..eb2f654 --- /dev/null +++ b/ko/index.html @@ -0,0 +1,27 @@ + + + + + + QSU | 가벼우면서 광범위한 유틸리티 도우미 + + + + + + + + + + + + + + + + +
Skip to content

QSU

가벼우면서 광범위한 유틸리티 도우미

QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.

Utility

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/introduction.html b/ko/introduction.html new file mode 100644 index 0000000..cc6077b --- /dev/null +++ b/ko/introduction.html @@ -0,0 +1,27 @@ + + + + + + 소개 | QSU + + + + + + + + + + + + + + + + +
Skip to content

소개

QSU는 프로그래밍에 활력을 주는 유틸리티를 모은 패키지입니다. JavaScript/Node.js와 Dart/Flutter 환경에서 사용할 수 있습니다.

원하는 언어로 시작하세요. 각 언어별로 제공되는 유틸리티 함수에는 차이가 있을 수 있습니다.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/array.html b/ko/js/api/array.html new file mode 100644 index 0000000..4855f08 --- /dev/null +++ b/ko/js/api/array.html @@ -0,0 +1,81 @@ + + + + + + Array | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Array

_.arrShuffle

Shuffle the order of the given array and return.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrShuffle([1, 2, 3, 4]); // Returns [4, 2, 3, 1]

_.arrWithDefault

Initialize an array with a default value of a specific length.

Parameters

  • defaultValue::any
  • length::number || 0

Returns

any[]

Examples

javascript
_.arrWithDefault('abc', 4); // Returns ['abc', 'abc', 'abc', 'abc']
+_.arrWithDefault(null, 3); // Returns [null, null, null]

_.arrWithNumber

Creates and returns an Array in the order of start...end values.

Parameters

  • start::number
  • end::number

Returns

number[]

Examples

javascript
_.arrWithNumber(1, 3); // Returns [1, 2, 3]
+_.arrWithNumber(0, 3); // Returns [0, 1, 2, 3]

_.arrUnique

Remove duplicate values from array and two-dimensional array data. In the case of 2d arrays, json type data duplication is not removed.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrUnique([1, 2, 2, 3]); // Returns [1, 2, 3]
+_.arrUnique([[1], [1], [2]]); // Returns [[1], [2]]

_.average

Returns the average of all numeric values in an array.

Parameters

  • array::number[]

Returns

number

Examples

javascript
_.average([1, 5, 15, 50]); // Returns 17.75

_.arrMove

Moves the position of a specific element in an array to the specified position. (Position starts from 0.)

Parameters

  • array::any[]
  • from::number
  • to::number

Returns

any[]

Examples

javascript
_.arrMove([1, 2, 3, 4], 1, 0); // Returns [2, 1, 3, 4]

_.arrTo1dArray

Merges all elements of a multidimensional array into a one-dimensional array.

Parameters

  • array::any[]

Returns

any[]

Examples

javascript
_.arrTo1dArray([1, 2, [3, 4]], 5); // Returns [1, 2, 3, 4, 5]

_.arrRepeat

Repeats the data of an Array or Object a specific number of times and returns it as a 1d array.

Parameters

  • array::any[]|object
  • count::number

Returns

any[]

Examples

javascript
_.arrRepeat([1, 2, 3, 4], 3); // Returns [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
+_.arrRepeat({ a: 1, b: 2 }, 2); // Returns [{ a: 1, b: 2 }, { a: 1, b: 2 }]

_.arrCount

Returns the number of duplicates for each unique value in the given array. The array values can only be of type String or Number.

Parameters

  • array::string[]|number[]
  • count::number

Returns

object

Examples

javascript
_.arrCount(['a', 'a', 'a', 'b', 'c', 'b', 'a', 'd']); // Returns { a: 4, b: 2, c: 1, d: 1 }

_.sortByObjectKey

Sort array values by a specific key value in an array containing multiple objects. It does not affect the order or value of elements within an object.

If the numerically option is true, when sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names.

Parameters

  • array::any[]
  • key::string
  • descending::boolean
  • numerically::boolean

Returns

any[]

Examples

javascript
const obj = [
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	}
+];
+
+_.sortByObjectKey(obj, 'aa');
+
+/*
+[
+	{
+		aa: 1,
+		bb: 'aaa',
+		cc: 'hi1'
+	},
+	{
+		aa: 2,
+		bb: 'ddd',
+		cc: 'hi2'
+	},
+	{
+		aa: 3,
+		bb: 'bbb',
+		cc: 'hi11'
+	},
+	{
+		aa: 4,
+		bb: 'ccc',
+		cc: 'hi10'
+	}
+]
+*/

_.sortNumeric

When sorting an array consisting of strings, it sorts first by the numbers contained in the strings, not by their names. For example, given the array ['1-a', '100-a', '10-a', '2-a'], it returns ['1-a', '2-a', '10-a', '100-a'] with the smaller numbers at the front.

Parameters

  • array::string[]
  • descending::boolean

Returns

string[]

Examples

javascript
_.sortNumeric(['a1a', 'b2a', 'aa1a', '1', 'a11a', 'a3a', 'a2a', '1a']);
+// Returns ['1', '1a', 'a1a', 'a2a', 'a3a', 'a11a', 'aa1a', 'b2a']

_.arrGroupByMaxCount

Separates the data in the given array into a two-dimensional array containing only the maximum number of elements. For example, if you have an array of 6 data in 2 groups, this function will create a 2-dimensional array with 3 lengths.

Parameters

  • array::any[]
  • maxLengthPerGroup::number

Returns

any[]

Examples

javascript
_.arrGroupByMaxCount(['a', 'b', 'c', 'd', 'e'], 2);
+// Returns [['a', 'b'], ['c', 'd'], ['e']]

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/crypto.html b/ko/js/api/crypto.html new file mode 100644 index 0000000..643f516 --- /dev/null +++ b/ko/js/api/crypto.html @@ -0,0 +1,29 @@ + + + + + + Crypto | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Crypto

_.encrypt

Encrypt with the algorithm of your choice (algorithm default: aes-256-cbc, ivSize default: 16) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'
  • ivSize::number || 16

Returns

string

Examples

javascript
_.encrypt('test', 'secret-key');

_.decrypt

Decrypt with the specified algorithm (default: aes-256-cbc) using a string and a secret (secret).

Parameters

  • str::string
  • secret::string
  • algorithm::string || 'aes-256-cbc'

Returns

string

Examples

javascript
_.decrypt('61ba43b65fc...', 'secret-key');

_.objectId

Returns a random string hash of the ObjectId format (primarily utilized by MongoDB).

Parameters

No parameters required

Returns

string

Examples

javascript
_.objectId(); // Returns '651372605b49507aea707488'

_.md5

Converts String data to md5 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.md5('test'); // Returns '098f6bcd4621d373cade4e832627b4f6'

_.sha1

Converts String data to sha1 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha1('test'); // Returns 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'

_.sha256

Converts String data to sha256 hash value and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.sha256('test'); // Returns '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'

_.encodeBase64

Base64-encode the given string.

Parameters

  • str::string

Returns

string

Examples

javascript
_.encodeBase64('this is test'); // Returns 'dGhpcyBpcyB0ZXN0'

_.decodeBase64

Decodes an encoded base64 string to a plain string.

Parameters

  • encodedStr::string

Returns

string

Examples

javascript
_.decodeBase64('dGhpcyBpcyB0ZXN0'); // Returns 'this is test'

_.strToNumberHash

Returns the specified string as a hash value of type number. The return value can also be negative.

Parameters

  • str::string

Returns

number

Examples

javascript
_.strToNumberHash('abc'); // Returns 96354
+_.strToNumberHash('Hello'); // Returns 69609650
+_.strToNumberHash('hello'); // Returns 99162322

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/date.html b/ko/js/api/date.html new file mode 100644 index 0000000..9fe59b0 --- /dev/null +++ b/ko/js/api/date.html @@ -0,0 +1,40 @@ + + + + + + Date | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Date

_.dayDiff

Calculates the difference between two given dates and returns the number of days.

Parameters

  • date1::Date
  • date2::Date?

Returns

number

Examples

javascript
_.daydiff(new Date('2021-01-01'), new Date('2021-01-03')); // Returns 2

_.today

Returns today's date.

Parameters

  • separator::string = '-'
  • yearFirst::boolean = false

Returns

string

Examples

javascript
_.today(); // Returns YYYY-MM-DD
+_.today('/'); // Returns YYYY/MM/DD
+_.today('/', false); // Returns DD/MM/YYYY

_.isValidDate

Checks if a given date actually exists. Check only in YYYY-MM-DD format.

Parameters

  • date::string

Returns

boolean

Examples

javascript
_.isValidDate('2021-01-01'); // Returns true
+_.isValidDate('2021-02-30'); // Returns false

_.dateToYYYYMMDD

Returns the date data of a Date object in the format YYYY-MM-DD.

Parameters

  • date::Date
  • separator:string

Returns

string

Examples

javascript
_.dateToYYYYMMDD(new Date(2023, 11, 31)); // Returns '2023-12-31'

_.createDateListFromRange

Create an array list of all dates from startDate to endDate in the format YYYY-MM-DD.

Parameters

  • startDate::Date
  • endDate::Date

Returns

string[]

Examples

javascript
_.createDateListFromRange(new Date('2023-01-01T01:00:00Z'), new Date('2023-01-05T01:00:00Z'));
+
+/*
+	 [
+		 '2023-01-01',
+		 '2023-01-02',
+		 '2023-01-03',
+		 '2023-01-04',
+		 '2023-01-05'
+	 ]
+ */

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/format.html b/ko/js/api/format.html new file mode 100644 index 0000000..46a5b1b --- /dev/null +++ b/ko/js/api/format.html @@ -0,0 +1,52 @@ + + + + + + Format | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Format

_.numberFormat

Return number format including comma symbol.

Parameters

  • number::number

Returns

string

Examples

javascript
_.numberFormat(1234567); // Returns 1,234,567

_.fileName

Extract the file name from the path. Include the extension if withExtension is true.

Parameters

  • filePath::string
  • withExtension::boolean || false

Returns

string

Examples

javascript
_.fileName('C:Temphello.txt'); // Returns 'hello.txt'
+_.fileName('C:Temp\file.mp3', true); // Returns 'file.mp3'

_.fileSize

Converts the file size in bytes to human-readable and returns it. The return value is a String and includes the file units (Bytes, MB, GB...). If the second optional argument value is included, you can display as many decimal places as you like.

Parameters

  • bytes::number
  • decimals::number || 2

Returns

string

Examples

javascript
_.fileSize(2000, 3); // Returns '1.953 KB'
+_.fileSize(250000000); // Returns '238.42 MB'

_.fileExt

Returns only the extensions in the file path. If unknown, returns 'Unknown'.

Parameters

  • filePath::string

Returns

string

Examples

javascript
_.fileExt('C:Temphello.txt'); // Returns 'txt'
+_.fileExt('this-is-file.mp3'); // Returns 'mp3'

_.duration

Displays the given millisecond value in human-readable time. For example, the value of 604800000 (7 days) is displayed as 7 Days.

Parameters

  • milliseconds::number
  • options::DurationOptions | undefined
typescript
const {
+	// Converts to `Days` -> `D`, `Hours` -> `H`,  `Minutes` -> `M`, `Seconds` -> `S`, `Milliseconds` -> `ms`
+	useShortString = false,
+	// Use space (e.g. `1Days` -> `1 Days`)
+	useSpace = true,
+	// Do not include units with a value of 0.
+	withZeroValue = false,
+	// Use Separator (e.g. If separator value is `-`, result is: `1 Hour 10 Minutes` -> `1 Hour-10 Minutes`)
+	separator = ' '
+}: DurationOptions = options;

Returns

string

Examples

javascript
_.duration(1234567890); // 'Returns '14 Days 6 Hours 56 Minutes 7 Seconds 890 Milliseconds'
+_.duration(604800000, {
+	useSpace: false
+}); // Returns '7Days'

_.safeJSONParse

Attempts to parse without returning an error, even if the argument value is of the wrong type or in JSON format. If parsing fails, it will be replaced with the object set in fallback.fallback의 기본값은 빈 오브젝트입니다.

Parameters

  • jsonString::any
  • fallback::object

Returns

object

Examples

javascript
const result1 = _.safeJSONParse('{"a":1,"b":2}');
+const result2 = _.safeJSONParse(null);
+
+console.log(result1); // Returns { a: 1, b: 2 }
+console.log(result2); // Returns {}

_.safeParseInt

Any argument value will be attempted to be parsed as a Number type without returning an error. If parsing fails, it is replaced by the number set in fallback. The default value for fallback is 0. You can specify radix (default is decimal: 10) in the third argument.

Parameters

  • value::any
  • fallback::number
  • radix::number

Returns

number

Examples

javascript
const result1 = _.safeParseInt('00010');
+const result2 = _.safeParseInt('10.1234');
+const result3 = _.safeParseInt(null, -1);
+
+console.log(result1); // Returns 10
+console.log(result2); // Returns 10
+console.log(result3); // Returns -1

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/index.html b/ko/js/api/index.html new file mode 100644 index 0000000..22f3790 --- /dev/null +++ b/ko/js/api/index.html @@ -0,0 +1,27 @@ + + + + + + API | QSU + + + + + + + + + + + + + + + + +
Skip to content

API

Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.

왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/math.html b/ko/js/api/math.html new file mode 100644 index 0000000..5bdc25a --- /dev/null +++ b/ko/js/api/math.html @@ -0,0 +1,32 @@ + + + + + + Math | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Math

_.numRandom

Returns a random number (Between min and max).

Parameters

  • min::number
  • max::number

Returns

number

Examples

javascript
_.numRandom(1, 5); // Returns 1~5
+_.numRandom(10, 20); // Returns 10~20

_.sum

Returns after adding up all the n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sum(1, 2, 3); // Returns 6
+_.sum([1, 2, 3, 4]); // Returns 10

_.mul

Returns after multiplying all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.mul(1, 2, 3); // Returns 6
+_.mul([1, 2, 3, 4]); // Returns 24

_.sub

Returns after subtracting all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.sub(10, 1, 5); // Returns 4
+_.sub([1, 2, 3, 4]); // Returns -8

_.div

Returns after dividing all n arguments of numbers or the values of a single array of numbers.

Parameters

  • numbers::...number[]

Returns

number

Examples

javascript
_.div(10, 5, 2); // Returns 1
+_.div([100, 2, 2, 5]); // Returns 5

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/misc.html b/ko/js/api/misc.html new file mode 100644 index 0000000..19e10dd --- /dev/null +++ b/ko/js/api/misc.html @@ -0,0 +1,55 @@ + + + + + + Misc | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Misc

_.sleep

Sleep function using Promise.

Parameters

  • milliseconds::number

Returns

Promise:boolean

Examples

javascript
await _.sleep(1000); // 1s
+
+_.sleep(5000).then(() => {
+	// continue
+});

_.funcTimes

Repeat iteratee n (times argument value) times. After the return result of each function is stored in the array in order, the final array is returned.

Parameters

  • times::number
  • iteratee::function

Returns

any[]

Examples

javascript
function sayHi(str) {
+	return `Hi${str || ''}`;
+}
+
+_.funcTimes(3, sayHi); // Returns ['Hi', 'Hi', 'Hi']
+_.funcTimes(4, () => sayHi('!')); // Returns ['Hi!', 'Hi!', 'Hi!', 'Hi!']

_.debounce

When the given function is executed repeatedly, the function is called if it has not been called again within the specified timeout. This function is used when a small number of function calls are needed for repetitive input events.

For example, if you have a func variable written as const func = debounce(() => console.log('hello'), 1000) and you repeat the func function 100 times with a wait interval of 100ms, the function will only run once after 1000ms because the function was executed at 100ms intervals. However, if you increase the wait interval from 100ms to 1100ms or more and repeat it 100 times, the function will run all 100 times intended.

Parameters

  • func::function
  • timeout::number

Returns

No return values

Examples

html
<!doctype html>
+<html lang="en">
+	<head>
+		<title>test</title>
+	</head>
+	<body>
+		<input type="text" onkeyup="handleKeyUp()" />
+	</body>
+</html>
+<script>
+	import _ from 'qsu';
+
+	const keyUpDebounce = _.debounce(() => {
+		console.log('handleKeyUp called.');
+	}, 100);
+
+	function handleKeyUp() {
+		keyUpDebounce();
+	}
+</script>

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/object.html b/ko/js/api/object.html new file mode 100644 index 0000000..4140507 --- /dev/null +++ b/ko/js/api/object.html @@ -0,0 +1,106 @@ + + + + + + Object | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Object

_.objToQueryString

Converts the given object data to a URL query string.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToQueryString({
+	hello: 'world',
+	test: 1234,
+	arr: [1, 2, 3]
+}); // Returns 'hello=world&test=1234&arr=%5B1%2C2%2C3%5D'

_.objToPrettyStr

Recursively output all the steps of the JSON object (JSON.stringify) and then output the JSON object with newlines and tab characters to make it easier to read in a console function, for example.

Parameters

  • obj::object

Returns

string

Examples

javascript
_.objToPrettyStr({ a: 1, b: { c: 1, d: 2 } }); // Returns '{\n\t"a": 1,\n\t"b": {\n\t\t"c": 1,\n\t\t"d": 2\n\t}\n}'

_.objFindItemRecursiveByKey

Returns the object if the key of a specific piece of data in the object's dataset corresponds to a specific value. This function returns only one result, so it is used to search for unique IDs, including all of their children.

Parameters

  • obj::object
  • searchKey::string
  • searchValue::any
  • childKey::string

Returns

object|null

Examples

javascript
_.objFindItemRecursiveByKey(
+	{
+		id: 123,
+		name: 'parent',
+		child: [
+			{
+				id: 456,
+				name: 'childItemA'
+			},
+			{
+				id: 789,
+				name: 'childItemB'
+			}
+		]
+	}, // obj
+	'id', // searchKey
+	456, // searchValue
+	'child' // childKey
+); // Returns '{ id: 456, name: 'childItemA' }'

_.objToArray

Converts the given object to array format. The resulting array is a two-dimensional array with one key value stored as follows: [key, value]. If the recursive option is true, it will convert to a two-dimensional array again when the value is of type object.

Parameters

  • obj::object
  • recursive::boolean

Returns

any[]

Examples

javascript
_.objToArray({
+	a: 1.234,
+	b: 'str',
+	c: [1, 2, 3],
+	d: { a: 1 }
+}); // Returns [['a', 1.234], ['b', 'str'], ['c', [1, 2, 3]], ['d', { a: 1 }]]

_.objTo1d

Merges objects from the given object to the top level of the child items and displays the key names in steps, using a delimiter (. by default) instead of the existing keys. For example, if an object a has keys b, c, and d, the a key is not displayed, and the keys and values a.b, a.c, and a.d are displayed in the parent step.

Parameters

  • obj::object
  • separator::string

Returns

object

Examples

javascript
_.objToArray({
+	a: 1,
+	b: {
+		aa: 1,
+		bb: 2
+	},
+	c: 3
+});
+
+/*
+Returns:
+{
+	a: 1,
+	'b.aa': 1,
+	'b.bb': 2,
+	c: 3
+}
+ */

_.objDeleteKeyByValue

Deletes keys equal to the given value from the object data. If the recursive option is true, also deletes all keys corresponding to the same value in the child items.

Parameters

  • obj::object
  • searchValue::string|number|null|undefined
  • recursive::boolean

Returns

object|null

Examples

javascript
const result = _.objDeleteKeyByValue(
+	{
+		a: 1,
+		b: 2,
+		c: {
+			aa: 2,
+			bb: {
+				aaa: 1,
+				bbb: 2
+			}
+		},
+		d: {
+			aa: 2
+		}
+	},
+	2,
+	true
+);
+
+console.log(result); // Returns { a: 1, c: { bb: { aaa: 1 } }, d: {} }

_.objUpdate

Changes the value matching a specific key name in the given object. If the recursive option is true, it will also search in child object items. This changes the value of the same key found in both the parent and child items. If the upsert option is true, add it as a new attribute to the top-level item when the key is not found.

Parameters

  • obj::object
  • searchKey::string
  • value::any
  • recursive::boolean
  • upsert::boolean

Returns

object|null

Examples

javascript
const result = _.objUpdate(
+	{
+		a: 1,
+		b: {
+			a: 1,
+			b: 2,
+			c: 3
+		},
+		c: 3
+	},
+	'c',
+	5,
+	true,
+	false
+);
+
+console.log(result); // Returns { a: 1, b: { a: 1, b: 2, c: 5 }, c: 5 }

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/string.html b/ko/js/api/string.html new file mode 100644 index 0000000..db0f1cf --- /dev/null +++ b/ko/js/api/string.html @@ -0,0 +1,37 @@ + + + + + + String | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: String

_.trim

Removes all whitespace before and after a string. Unlike JavaScript's trim function, it converts two or more spaces between sentences into a single space.

Parameters

  • str::string

Returns

string

Examples

javascript
_.trim(' Hello Wor  ld  '); // Returns 'Hello Wor ld'
+_.trim('H e l l o     World'); // Returns 'H e l l o World'

_.removeSpecialChar

Returns after removing all special characters, including spaces. If you want to allow any special characters as exceptions, list them in the second argument value without delimiters. For example, if you want to allow spaces and the symbols & and *, the second argument value would be ' &*'.

Parameters

  • str::string
  • exceptionCharacters::string?

Returns

string

Examples

javascript
_.removeSpecialChar('Hello-qsu, World!'); // Returns 'HelloqsuWorld'
+_.removeSpecialChar('Hello-qsu, World!', ' -'); // Returns 'Hello-qsu World'

_.removeNewLine

Removes \n, \r characters or replaces them with specified characters.

Parameters

  • str::string
  • replaceTo::string || ''

Returns

string

Examples

javascript
_.removeNewLine('ab\ncd'); // Returns 'abcd'
+_.removeNewLine('ab\r\ncd', '-'); // Returns 'ab-cd'

_.replaceBetween

Replaces text within a range starting and ending with a specific character in a given string with another string. For example, given the string abc<DEF>ghi, to change <DEF> to def, use replaceBetween('abc<DEF>ghi', '<', '>', 'def'). The result would be abcdefghi.

Deletes strings in the range if replaceWith is not specified.

Parameters

  • str::string
  • startChar::string
  • endChar::string
  • replaceWith::string || ''

Returns

string

Examples

javascript
_.replaceBetween('ab[c]d[e]f', '[', ']'); // Returns 'abdf'
+_.replaceBetween('abcd:replace:', ':', ':', 'e'); // Returns 'abcde'

_.capitalizeFirst

Converts the first letter of the entire string to uppercase and returns.

Parameters

  • str::string

Returns

string

Examples

javascript
_.capitalizeFirst('abcd'); // Returns 'Abcd'

_.capitalizeEverySentence

Capitalize the first letter of every sentence. Typically, the . characters to separate sentences, but this can be customized via the value of the splitChar argument.

Parameters

  • str::string
  • splitChar::string

Returns

string

Examples

javascript
_.capitalizeEverySentence('hello. world. hi.'); // Returns 'Hello. World. Hi.'
+_.capitalizeEverySentence('hello!world', '!'); // Returns 'Hello!World'

_.capitalizeEachWords

Converts every word with spaces to uppercase. If the naturally argument is true, only some special cases (such as prepositions) are kept lowercase.

Parameters

  • str::string
  • natural::boolean || false

Returns

string

Examples

javascript
_.capitalizeEachWords('abcd'); // Returns 'Abcd'

_.strCount

Returns the number of times the second String argument is contained in the first String argument.

Parameters

  • str::string
  • search::string

Returns

number

Examples

javascript
_.strCount('abcabc', 'a'); // Returns 2

_.strShuffle

Randomly shuffles the received string and returns it.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strShuffle('abcdefg'); // Returns 'bgafced'

_.strRandom

Returns a random String containing numbers or uppercase and lowercase letters of the given length. The default return length is 12.

Parameters

  • length::number
  • additionalCharacters::string?

Returns

string

Examples

javascript
_.strRandom(5); // Returns 'CHy2M'

_.strBlindRandom

Replace strings at random locations with a specified number of characters (default 1) with characters (default *).

Parameters

  • str::string
  • blindLength::number
  • blindStr::string || '*'

Returns

string

Examples

javascript
_.strBlindRandom('hello', 2, '#'); // Returns '#el#o'

_.truncate

Truncates a long string to a specified length, optionally appending an ellipsis after the string.

Parameters

  • str::string
  • length::number
  • ellipsis::string || ''

Returns

string

Examples

javascript
_.truncate('hello', 3); // Returns 'hel'
+_.truncate('hello', 2, '...'); // Returns 'he...'

_.truncateExpect

The string ignores truncation until the ending character (endStringChar). If the expected length is reached, return the truncated string until after the ending character.

Parameters

  • str::string
  • expectLength::number
  • endStringChar::string || '.'

Returns

string

Examples

javascript
_.truncateExpect('hello. this is test string.', 10, '.'); // Returns 'hello. this is test string.'
+_.truncateExpect('hello-this-is-test-string-bye', 14, '-'); // Returns 'hello-this-is-'

_.split

Splits a string based on the specified character and returns it as an Array. Unlike the existing split, it splits the values provided as multiple parameters (array or multiple arguments) at once.

Parameters

  • str::string
  • splitter::string||string[]||...string

Returns

string[]

Examples

javascript
_.split('hello% js world', '% '); // Returns ['hello', 'js world']
+_.split('hello,js,world', ','); // Returns ['hello', 'js', 'world']
+_.split('hello%js,world', ',', '%'); // Returns ['hello', 'js', 'world']
+_.split('hello%js,world', [',', '%']); // Returns ['hello', 'js', 'world']

_.strUnique

Remove duplicate characters from a given string and output only one.

Parameters

  • str::string

Returns

string

Examples

javascript
_.strUnique('aaabbbcc'); // Returns 'abc'

_.strToAscii

Converts the given string to ascii code and returns it as an array.

Parameters

  • str::string

Returns

number[]

Examples

javascript
_.strToAscii('12345'); // Returns [49, 50, 51, 52, 53]

_.urlJoin

Merges the given string argument with the first argument (the beginning of the URL), joining it so that the slash (/) symbol is correctly included.

Parameters

  • args::any[]

Returns

string

Examples

javascript
_.urlJoin('https://example.com', 'hello', 'world'); // Returns 'https://example.com/hello/world'

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/api/verify.html b/ko/js/api/verify.html new file mode 100644 index 0000000..1f14859 --- /dev/null +++ b/ko/js/api/verify.html @@ -0,0 +1,53 @@ + + + + + + Verify | QSU + + + + + + + + + + + + + + + + +
Skip to content

API: Verify

_.isObject

Check whether the given data is of type Object. Returns false for other data types including Array.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.isObject([1, 2, 3]); // Returns false
+_.isObject({ a: 1, b: 2 }); // Returns true

_.isEqual

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqual('Left', 'Left', val1); // Returns true
+_.isEqual(1, [1, '1', 1, val2]); // Returns true
+_.isEqual(val1, ['Right', 'Left', 1]); // Returns false
+_.isEqual(1, 1, 1, 1); // Returns true

_.isEqualStrict

It compares the first argument value as the left operand and the argument values given thereafter as the right operand, and returns true if the values are all the same.

isEqual returns true even if the data types do not match, but isEqualStrict returns true only when the data types of all argument values match.

Parameters

  • leftOperand::any
  • rightOperand::any||any[]||...any

Returns

boolean

Examples

javascript
const val1 = 'Left';
+const val2 = 1;
+
+_.isEqualStrict('Left', 'Left', val1); // Returns true
+_.isEqualStrict(1, [1, '1', 1, val2]); // Returns false
+_.isEqualStrict(1, 1, '1', 1); // Returns false

_.isEmpty

Returns true if the passed data is empty or has a length of 0.

Parameters

  • data::any?

Returns

boolean

Examples

javascript
_.isEmpty([]); // Returns true
+_.isEmpty(''); // Returns true
+_.isEmpty('abc'); // Returns false

_.isUrl

Returns true if the given data is in the correct URL format. If withProtocol is true, it is automatically appended to the URL when the protocol does not exist. If strict is true, URLs without commas (.) return false.

Parameters

  • url::string
  • withProtocol::boolean || false
  • strict::boolean || false

Returns

boolean

Examples

javascript
_.isUrl('google.com'); // Returns false
+_.isUrl('google.com', true); // Returns true
+_.isUrl('https://google.com'); // Returns true

_.contains

Returns true if the first string argument contains the second argument "string" or "one or more of the strings listed in the array". If the exact value is true, it returns true only for an exact match.

Parameters

  • str::any[]|string
  • search::any[]|string
  • exact::boolean || false

Returns

boolean

Examples

javascript
_.contains('abc', 'a'); // Returns true
+_.contains('abc', 'd'); // Returns false
+_.contains('abc', ['a', 'd']); // Returns true

_.is2dArray

Returns true if the given array is a two-dimensional array.

Parameters

  • array::any[]

Returns

boolean

Examples

javascript
_.is2dArray([1]); // Returns false
+_.is2dArray([[1], [2]]); // Returns true

_.between

Returns true if the first argument is in the range of the second argument ([min, max]). To allow the minimum and maximum values to be in the range, pass true for the third argument.

Parameters

  • range::[number, number]
  • number::number
  • inclusive::boolean || false

Returns

boolean

Examples

javascript
_.between([10, 20], 10); // Returns false
+_.between([10, 20], 10, true); // Returns true

_.len

Returns the length of any type of data. If the argument value is null or undefined, 0 is returned.

Parameters

  • data::any

Returns

boolean

Examples

javascript
_.len('12345'); // Returns 5
+_.len([1, 2, 3]); // Returns 3

_.isEmail

Checks if the given argument value is a valid email.

Parameters

  • email::string

Returns

boolean

Examples

javascript
_.isEmail('abc@def.com'); // Returns true

_.isTrueMinimumNumberOfTimes

Returns true if the values given in the conditions array are true at least minimumCount times.

Parameters

  • conditions::boolean[]
  • minimumCount::number

Returns

boolean

Examples

javascript
const left = 1;
+const right = 1 + 2;
+
+_.isTrueMinimumNumberOfTimes([true, true, false], 2); // Returns true
+_.isTrueMinimumNumberOfTimes([true, true, false], 3); // Returns false
+_.isTrueMinimumNumberOfTimes([true, true, left === right], 3); // Returns false

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/installation.html b/ko/js/installation.html new file mode 100644 index 0000000..ca0fb20 --- /dev/null +++ b/ko/js/installation.html @@ -0,0 +1,43 @@ + + + + + + 설치 | QSU + + + + + + + + + + + + + + + + +
Skip to content

설치

Qsu는 Node.js 18.x 이상이 필요하며, 리포지토리는 NPM 패키지 관리자에서 서비스됩니다.

Qsu는 ESM 전용입니다. 모듈을 로드하려면 require 대신 import를 사용해야 합니다. CommonJS에 사용할 수 있는 해결 방법이 있지만 최근 JavaScript 트렌드에 따라 ESM을 사용하는 것이 좋습니다.

Node.js 환경을 구성한 후 다음 명령을 실행하면 됩니다:

bash
# via npm
+$ npm install qsu
+
+# via yarn
+$ yarn add qsu
+
+# via pnpm
+$ pnpm install qsu

사용 방법

명명된 가져오기 사용(단일 요구 사항에 여러 유틸리티 사용) - 권장 사항

javascript
import { today, strCount } from 'qsu';
+
+function main() {
+	console.log(today()); // '20xx-xx-xx'
+	console.log(strCount('123412341234', '1')); // 3
+}

전체 클래스 사용(하나의 객체에 여러 유틸리티를 동시에 사용)

javascript
import _ from 'qsu';
+
+function main() {
+	console.log(_.today()); // '20xx-xx-xx'
+}

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/js.html b/ko/js/js.html new file mode 100644 index 0000000..7d4d5bc --- /dev/null +++ b/ko/js/js.html @@ -0,0 +1,27 @@ + + + + + + JavaScript/Node.js | QSU + + + + + + + + + + + + + + + + +
Skip to content

JavaScript/Node.js

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/qsu-web/api/index.html b/ko/js/qsu-web/api/index.html new file mode 100644 index 0000000..5f5439d --- /dev/null +++ b/ko/js/qsu-web/api/index.html @@ -0,0 +1,27 @@ + + + + + + API | QSU + + + + + + + + + + + + + + + + +
Skip to content

API

Qsu에서 사용할 수 있는 유틸리티 메서드의 전체 목록입니다.

왼쪽 사이드바에서 목적에 맞는 API를 살펴보세요.

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/qsu-web/api/web.html b/ko/js/qsu-web/api/web.html new file mode 100644 index 0000000..1c25f15 --- /dev/null +++ b/ko/js/qsu-web/api/web.html @@ -0,0 +1,33 @@ + + + + + + Web | QSU + + + + + + + + + + + + + + + + +
Skip to content

Methods: Web

This method is only available in the qsu-web package.

_.isBotAgent

Analyze the user agent value to determine if it's a bot for a search engine. Returns true if it's a bot.

Parameters

  • userAgent::string

Returns

boolean

Examples

javascript
_.isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); // Returns true

_.license

Returns text in a specific license format based on the author information of the given argument. The argument uses the Object type.

Parameters

  • options::LicenseOption{ author: string, email: string?, yearStart: string|number, yearEnd: string?, htmlBr: boolean?, type: 'mit' | 'apache20' }

Returns

string

Examples

javascript
_.license({
+	holder: 'example',
+	email: 'example@example.com',
+	yearStart: 2020,
+	yearEnd: 2021,
+	htmlBr: true
+});

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/ko/js/qsu-web/installation.html b/ko/js/qsu-web/installation.html new file mode 100644 index 0000000..ee1c6be --- /dev/null +++ b/ko/js/qsu-web/installation.html @@ -0,0 +1,40 @@ + + + + + + 설치 | QSU + + + + + + + + + + + + + + + + +
Skip to content

설치

Qsu에는 유틸리티가 별도의 패키지로 구성되어 있습니다. 현재 qsu-web이라는 패키지가 있습니다.

qsu-web 패키지에는 웹 페이지에서 일반적으로 사용되는 유틸리티 함수 모음이 포함되어 있습니다.

일반적인 설치 및 사용법은 qsu 패키지와 거의 동일합니다.

bash
# via npm
+$ npm install qsu-web
+
+# via yarn
+$ yarn add qsu-web
+
+# via pnpm
+$ pnpm install qsu-web
javascript
import { isBotAgent } from 'qsu-web';
+
+function main() {
+	console.log(
+		isBotAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html')
+	); // true
+}

Released under the MIT License

+ + + + \ No newline at end of file diff --git a/logo-16.png b/logo-16.png new file mode 100644 index 0000000..d419caa Binary files /dev/null and b/logo-16.png differ diff --git a/logo-32.png b/logo-32.png new file mode 100644 index 0000000..c168d8d Binary files /dev/null and b/logo-32.png differ diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..709a908 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://qsu.cdget.com/changeloghttps://qsu.cdget.com/dart/api/format2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/dart/api/format2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/dart/api/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/dart/api/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/dart/api/string2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/dart/api/string2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/dart/dart2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/dart/dart2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/dart/installation2024-09-03T02:03:56.000Zhttps://qsu.cdget.com/ko/dart/installation2024-09-03T02:03:56.000Zhttps://qsu.cdget.com/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/introduction2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/introduction2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/array2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/array2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/crypto2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/crypto2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/date2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/date2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/format2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/format2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/math2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/math2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/misc2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/misc2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/object2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/object2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/string2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/string2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/api/verify2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/api/verify2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/installation2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/installation2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/js2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/js2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/qsu-web/api/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/qsu-web/api/2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/qsu-web/api/web2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/qsu-web/api/web2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/js/qsu-web/installation2024-09-03T01:52:56.000Zhttps://qsu.cdget.com/ko/js/qsu-web/installation2024-09-03T01:52:56.000Z \ No newline at end of file