diff --git a/.gitignore b/.gitignore index 8a586f33b..63273ce95 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ composer.lock composer.phar phpunit.phar phpunit.xml +/docs/node_modules \ No newline at end of file diff --git a/docs/.prettierrc b/docs/.prettierrc new file mode 100644 index 000000000..8c763f4f0 --- /dev/null +++ b/docs/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 4, + "printWidth": 120 +} \ No newline at end of file diff --git a/docs/.vitepress/cache/deps/@vue_devtools-api.js b/docs/.vitepress/cache/deps/@vue_devtools-api.js new file mode 100644 index 000000000..a492868af --- /dev/null +++ b/docs/.vitepress/cache/deps/@vue_devtools-api.js @@ -0,0 +1,162 @@ +// node_modules/@vue/devtools-api/lib/esm/env.js +function getDevtoolsGlobalHook() { + return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__; +} +function getTarget() { + return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}; +} +var isProxyAvailable = typeof Proxy === "function"; + +// node_modules/@vue/devtools-api/lib/esm/const.js +var HOOK_SETUP = "devtools-plugin:setup"; +var HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set"; + +// node_modules/@vue/devtools-api/lib/esm/time.js +var supported; +var perf; +function isPerformanceSupported() { + var _a; + if (supported !== void 0) { + return supported; + } + if (typeof window !== "undefined" && window.performance) { + supported = true; + perf = window.performance; + } else if (typeof global !== "undefined" && ((_a = global.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) { + supported = true; + perf = global.perf_hooks.performance; + } else { + supported = false; + } + return supported; +} +function now() { + return isPerformanceSupported() ? perf.now() : Date.now(); +} + +// node_modules/@vue/devtools-api/lib/esm/proxy.js +var ApiProxy = class { + constructor(plugin, hook) { + this.target = null; + this.targetQueue = []; + this.onQueue = []; + this.plugin = plugin; + this.hook = hook; + const defaultSettings = {}; + if (plugin.settings) { + for (const id in plugin.settings) { + const item = plugin.settings[id]; + defaultSettings[id] = item.defaultValue; + } + } + const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`; + let currentSettings = Object.assign({}, defaultSettings); + try { + const raw = localStorage.getItem(localSettingsSaveId); + const data = JSON.parse(raw); + Object.assign(currentSettings, data); + } catch (e) { + } + this.fallbacks = { + getSettings() { + return currentSettings; + }, + setSettings(value) { + try { + localStorage.setItem(localSettingsSaveId, JSON.stringify(value)); + } catch (e) { + } + currentSettings = value; + }, + now() { + return now(); + } + }; + if (hook) { + hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => { + if (pluginId === this.plugin.id) { + this.fallbacks.setSettings(value); + } + }); + } + this.proxiedOn = new Proxy({}, { + get: (_target, prop) => { + if (this.target) { + return this.target.on[prop]; + } else { + return (...args) => { + this.onQueue.push({ + method: prop, + args + }); + }; + } + } + }); + this.proxiedTarget = new Proxy({}, { + get: (_target, prop) => { + if (this.target) { + return this.target[prop]; + } else if (prop === "on") { + return this.proxiedOn; + } else if (Object.keys(this.fallbacks).includes(prop)) { + return (...args) => { + this.targetQueue.push({ + method: prop, + args, + resolve: () => { + } + }); + return this.fallbacks[prop](...args); + }; + } else { + return (...args) => { + return new Promise((resolve) => { + this.targetQueue.push({ + method: prop, + args, + resolve + }); + }); + }; + } + } + }); + } + async setRealTarget(target) { + this.target = target; + for (const item of this.onQueue) { + this.target.on[item.method](...item.args); + } + for (const item of this.targetQueue) { + item.resolve(await this.target[item.method](...item.args)); + } + } +}; + +// node_modules/@vue/devtools-api/lib/esm/index.js +function setupDevtoolsPlugin(pluginDescriptor, setupFn) { + const descriptor = pluginDescriptor; + const target = getTarget(); + const hook = getDevtoolsGlobalHook(); + const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy; + if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) { + hook.emit(HOOK_SETUP, pluginDescriptor, setupFn); + } else { + const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null; + const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || []; + list.push({ + pluginDescriptor: descriptor, + setupFn, + proxy + }); + if (proxy) + setupFn(proxy.proxiedTarget); + } +} +export { + isPerformanceSupported, + now, + setupDevtoolsPlugin +}; +//# sourceMappingURL=@vue_devtools-api.js.map diff --git a/docs/.vitepress/cache/deps/@vue_devtools-api.js.map b/docs/.vitepress/cache/deps/@vue_devtools-api.js.map new file mode 100644 index 000000000..82348787a --- /dev/null +++ b/docs/.vitepress/cache/deps/@vue_devtools-api.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../node_modules/@vue/devtools-api/lib/esm/env.js", "../../../node_modules/@vue/devtools-api/lib/esm/const.js", "../../../node_modules/@vue/devtools-api/lib/esm/time.js", "../../../node_modules/@vue/devtools-api/lib/esm/proxy.js", "../../../node_modules/@vue/devtools-api/lib/esm/index.js"], + "sourcesContent": ["export function getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nexport function getTarget() {\n // @ts-ignore\n return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n}\nexport const isProxyAvailable = typeof Proxy === 'function';\n", "export const HOOK_SETUP = 'devtools-plugin:setup';\nexport const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n", "let supported;\nlet perf;\nexport function isPerformanceSupported() {\n var _a;\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else if (typeof global !== 'undefined' && ((_a = global.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n supported = true;\n perf = global.perf_hooks.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\nexport function now() {\n return isPerformanceSupported() ? perf.now() : Date.now();\n}\n", "import { HOOK_PLUGIN_SETTINGS_SET } from './const.js';\nimport { now } from './time.js';\nexport class ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n }\n catch (e) {\n // noop\n }\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n }\n catch (e) {\n // noop\n }\n currentSettings = value;\n },\n now() {\n return now();\n },\n };\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n }\n else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args,\n });\n };\n }\n },\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n }\n else if (prop === 'on') {\n return this.proxiedOn;\n }\n else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => { },\n });\n return this.fallbacks[prop](...args);\n };\n }\n else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve,\n });\n });\n };\n }\n },\n });\n }\n async setRealTarget(target) {\n this.target = target;\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n}\n", "import { getTarget, getDevtoolsGlobalHook, isProxyAvailable } from './env.js';\nimport { HOOK_SETUP } from './const.js';\nimport { ApiProxy } from './proxy.js';\nexport * from './api/index.js';\nexport * from './plugin.js';\nexport * from './time.js';\nexport function setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n }\n else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy,\n });\n if (proxy)\n setupFn(proxy.proxiedTarget);\n }\n}\n"], + "mappings": ";AAAO,SAAS,wBAAwB;AACpC,SAAO,UAAU,EAAE;AACvB;AACO,SAAS,YAAY;AAExB,SAAQ,OAAO,cAAc,eAAe,OAAO,WAAW,cACxD,SACA,OAAO,WAAW,cACd,SACA,CAAC;AACf;AACO,IAAM,mBAAmB,OAAO,UAAU;;;ACX1C,IAAM,aAAa;AACnB,IAAM,2BAA2B;;;ACDxC,IAAI;AACJ,IAAI;AACG,SAAS,yBAAyB;AACrC,MAAI;AACJ,MAAI,cAAc,QAAW;AACzB,WAAO;AAAA,EACX;AACA,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa;AACrD,gBAAY;AACZ,WAAO,OAAO;AAAA,EAClB,WACS,OAAO,WAAW,iBAAiB,KAAK,OAAO,gBAAgB,QAAQ,OAAO,SAAS,SAAS,GAAG,cAAc;AACtH,gBAAY;AACZ,WAAO,OAAO,WAAW;AAAA,EAC7B,OACK;AACD,gBAAY;AAAA,EAChB;AACA,SAAO;AACX;AACO,SAAS,MAAM;AAClB,SAAO,uBAAuB,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI;AAC5D;;;ACpBO,IAAM,WAAN,MAAe;AAAA,EAClB,YAAY,QAAQ,MAAM;AACtB,SAAK,SAAS;AACd,SAAK,cAAc,CAAC;AACpB,SAAK,UAAU,CAAC;AAChB,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,UAAM,kBAAkB,CAAC;AACzB,QAAI,OAAO,UAAU;AACjB,iBAAW,MAAM,OAAO,UAAU;AAC9B,cAAM,OAAO,OAAO,SAAS,EAAE;AAC/B,wBAAgB,EAAE,IAAI,KAAK;AAAA,MAC/B;AAAA,IACJ;AACA,UAAM,sBAAsB,mCAAmC,OAAO;AACtE,QAAI,kBAAkB,OAAO,OAAO,CAAC,GAAG,eAAe;AACvD,QAAI;AACA,YAAM,MAAM,aAAa,QAAQ,mBAAmB;AACpD,YAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,aAAO,OAAO,iBAAiB,IAAI;AAAA,IACvC,SACO,GAAP;AAAA,IAEA;AACA,SAAK,YAAY;AAAA,MACb,cAAc;AACV,eAAO;AAAA,MACX;AAAA,MACA,YAAY,OAAO;AACf,YAAI;AACA,uBAAa,QAAQ,qBAAqB,KAAK,UAAU,KAAK,CAAC;AAAA,QACnE,SACO,GAAP;AAAA,QAEA;AACA,0BAAkB;AAAA,MACtB;AAAA,MACA,MAAM;AACF,eAAO,IAAI;AAAA,MACf;AAAA,IACJ;AACA,QAAI,MAAM;AACN,WAAK,GAAG,0BAA0B,CAAC,UAAU,UAAU;AACnD,YAAI,aAAa,KAAK,OAAO,IAAI;AAC7B,eAAK,UAAU,YAAY,KAAK;AAAA,QACpC;AAAA,MACJ,CAAC;AAAA,IACL;AACA,SAAK,YAAY,IAAI,MAAM,CAAC,GAAG;AAAA,MAC3B,KAAK,CAAC,SAAS,SAAS;AACpB,YAAI,KAAK,QAAQ;AACb,iBAAO,KAAK,OAAO,GAAG,IAAI;AAAA,QAC9B,OACK;AACD,iBAAO,IAAI,SAAS;AAChB,iBAAK,QAAQ,KAAK;AAAA,cACd,QAAQ;AAAA,cACR;AAAA,YACJ,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,SAAK,gBAAgB,IAAI,MAAM,CAAC,GAAG;AAAA,MAC/B,KAAK,CAAC,SAAS,SAAS;AACpB,YAAI,KAAK,QAAQ;AACb,iBAAO,KAAK,OAAO,IAAI;AAAA,QAC3B,WACS,SAAS,MAAM;AACpB,iBAAO,KAAK;AAAA,QAChB,WACS,OAAO,KAAK,KAAK,SAAS,EAAE,SAAS,IAAI,GAAG;AACjD,iBAAO,IAAI,SAAS;AAChB,iBAAK,YAAY,KAAK;AAAA,cAClB,QAAQ;AAAA,cACR;AAAA,cACA,SAAS,MAAM;AAAA,cAAE;AAAA,YACrB,CAAC;AACD,mBAAO,KAAK,UAAU,IAAI,EAAE,GAAG,IAAI;AAAA,UACvC;AAAA,QACJ,OACK;AACD,iBAAO,IAAI,SAAS;AAChB,mBAAO,IAAI,QAAQ,aAAW;AAC1B,mBAAK,YAAY,KAAK;AAAA,gBAClB,QAAQ;AAAA,gBACR;AAAA,gBACA;AAAA,cACJ,CAAC;AAAA,YACL,CAAC;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,MAAM,cAAc,QAAQ;AACxB,SAAK,SAAS;AACd,eAAW,QAAQ,KAAK,SAAS;AAC7B,WAAK,OAAO,GAAG,KAAK,MAAM,EAAE,GAAG,KAAK,IAAI;AAAA,IAC5C;AACA,eAAW,QAAQ,KAAK,aAAa;AACjC,WAAK,QAAQ,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;AAAA,IAC7D;AAAA,EACJ;AACJ;;;ACpGO,SAAS,oBAAoB,kBAAkB,SAAS;AAC3D,QAAM,aAAa;AACnB,QAAM,SAAS,UAAU;AACzB,QAAM,OAAO,sBAAsB;AACnC,QAAM,cAAc,oBAAoB,WAAW;AACnD,MAAI,SAAS,OAAO,yCAAyC,CAAC,cAAc;AACxE,SAAK,KAAK,YAAY,kBAAkB,OAAO;AAAA,EACnD,OACK;AACD,UAAM,QAAQ,cAAc,IAAI,SAAS,YAAY,IAAI,IAAI;AAC7D,UAAM,OAAO,OAAO,2BAA2B,OAAO,4BAA4B,CAAC;AACnF,SAAK,KAAK;AAAA,MACN,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,IACJ,CAAC;AACD,QAAI;AACA,cAAQ,MAAM,aAAa;AAAA,EACnC;AACJ;", + "names": [] +} diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json new file mode 100644 index 000000000..751f5c1c2 --- /dev/null +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -0,0 +1,19 @@ +{ + "hash": "a5c00531", + "browserHash": "c60899ae", + "optimized": { + "vue": { + "src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "e3408f94", + "needsInterop": false + }, + "@vue/devtools-api": { + "src": "../../../node_modules/@vue/devtools-api/lib/esm/index.js", + "file": "@vue_devtools-api.js", + "fileHash": "f9242a12", + "needsInterop": false + } + }, + "chunks": {} +} \ No newline at end of file diff --git a/docs/.vitepress/cache/deps/package.json b/docs/.vitepress/cache/deps/package.json new file mode 100644 index 000000000..7c34deb58 --- /dev/null +++ b/docs/.vitepress/cache/deps/package.json @@ -0,0 +1 @@ +{"type":"module"} \ No newline at end of file diff --git a/docs/.vitepress/cache/deps/vue.js b/docs/.vitepress/cache/deps/vue.js new file mode 100644 index 000000000..48ca9ba58 --- /dev/null +++ b/docs/.vitepress/cache/deps/vue.js @@ -0,0 +1,9516 @@ +// node_modules/@vue/shared/dist/shared.esm-bundler.js +function makeMap(str, expectsLowerCase) { + const map2 = /* @__PURE__ */ Object.create(null); + const list = str.split(","); + for (let i = 0; i < list.length; i++) { + map2[list[i]] = true; + } + return expectsLowerCase ? (val) => !!map2[val.toLowerCase()] : (val) => !!map2[val]; +} +var GLOBALS_WHITE_LISTED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"; +var isGloballyWhitelisted = makeMap(GLOBALS_WHITE_LISTED); +function normalizeStyle(value) { + if (isArray(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString(value)) { + return value; + } else if (isObject(value)) { + return value; + } +} +var listDelimiterRE = /;(?![^(]*\))/g; +var propertyDelimiterRE = /:([^]+)/; +var styleCommentRE = /\/\*.*?\*\//gs; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +function normalizeClass(value) { + let res = ""; + if (isString(value)) { + res = value; + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject(value)) { + for (const name in value) { + if (value[name]) { + res += name + " "; + } + } + } + return res.trim(); +} +function normalizeProps(props) { + if (!props) + return null; + let { class: klass, style } = props; + if (klass && !isString(klass)) { + props.class = normalizeClass(klass); + } + if (style) { + props.style = normalizeStyle(style); + } + return props; +} +var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; +var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; +var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; +var isHTMLTag = makeMap(HTML_TAGS); +var isSVGTag = makeMap(SVG_TAGS); +var isVoidTag = makeMap(VOID_TAGS); +var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +var isSpecialBooleanAttr = makeMap(specialBooleanAttrs); +var isBooleanAttr = makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`); +function includeBooleanAttr(value) { + return !!value || value === ""; +} +var isKnownHtmlAttr = makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`); +var isKnownSvgAttr = makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`); +function looseCompareArrays(a, b) { + if (a.length !== b.length) + return false; + let equal = true; + for (let i = 0; equal && i < a.length; i++) { + equal = looseEqual(a[i], b[i]); + } + return equal; +} +function looseEqual(a, b) { + if (a === b) + return true; + let aValidType = isDate(a); + let bValidType = isDate(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? a.getTime() === b.getTime() : false; + } + aValidType = isSymbol(a); + bValidType = isSymbol(b); + if (aValidType || bValidType) { + return a === b; + } + aValidType = isArray(a); + bValidType = isArray(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? looseCompareArrays(a, b) : false; + } + aValidType = isObject(a); + bValidType = isObject(b); + if (aValidType || bValidType) { + if (!aValidType || !bValidType) { + return false; + } + const aKeysCount = Object.keys(a).length; + const bKeysCount = Object.keys(b).length; + if (aKeysCount !== bKeysCount) { + return false; + } + for (const key in a) { + const aHasKey = a.hasOwnProperty(key); + const bHasKey = b.hasOwnProperty(key); + if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { + return false; + } + } + } + return String(a) === String(b); +} +function looseIndexOf(arr, val) { + return arr.findIndex((item) => looseEqual(item, val)); +} +var toDisplayString = (val) => { + return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val); +}; +var replacer = (_key, val) => { + if (val && val.__v_isRef) { + return replacer(_key, val.value); + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => { + entries[`${key} =>`] = val2; + return entries; + }, {}) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()] + }; + } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + return String(val); + } + return val; +}; +var EMPTY_OBJ = true ? Object.freeze({}) : {}; +var EMPTY_ARR = true ? Object.freeze([]) : []; +var NOOP = () => { +}; +var NO = () => false; +var onRE = /^on[^a-z]/; +var isOn = (key) => onRE.test(key); +var isModelListener = (key) => key.startsWith("onUpdate:"); +var extend = Object.assign; +var remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } +}; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var hasOwn = (val, key) => hasOwnProperty.call(val, key); +var isArray = Array.isArray; +var isMap = (val) => toTypeString(val) === "[object Map]"; +var isSet = (val) => toTypeString(val) === "[object Set]"; +var isDate = (val) => toTypeString(val) === "[object Date]"; +var isRegExp = (val) => toTypeString(val) === "[object RegExp]"; +var isFunction = (val) => typeof val === "function"; +var isString = (val) => typeof val === "string"; +var isSymbol = (val) => typeof val === "symbol"; +var isObject = (val) => val !== null && typeof val === "object"; +var isPromise = (val) => { + return isObject(val) && isFunction(val.then) && isFunction(val.catch); +}; +var objectToString = Object.prototype.toString; +var toTypeString = (value) => objectToString.call(value); +var toRawType = (value) => { + return toTypeString(value).slice(8, -1); +}; +var isPlainObject = (val) => toTypeString(val) === "[object Object]"; +var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; +var isReservedProp = makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +var isBuiltInDirective = makeMap("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"); +var cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; +}; +var camelizeRE = /-(\w)/g; +var camelize = cacheStringFunction((str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); +}); +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); +var capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1)); +var toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``); +var hasChanged = (value, oldValue) => !Object.is(value, oldValue); +var invokeArrayFns = (fns, arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](arg); + } +}; +var def = (obj, key, value) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + value + }); +}; +var looseToNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; +}; +var toNumber = (val) => { + const n = isString(val) ? Number(val) : NaN; + return isNaN(n) ? val : n; +}; +var _globalThis; +var getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}; + +// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js +function warn(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args); +} +var activeEffectScope; +var EffectScope = class { + constructor(detached = false) { + this.detached = detached; + this._active = true; + this.effects = []; + this.cleanups = []; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; + } + } + get active() { + return this._active; + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } else if (true) { + warn(`cannot run an inactive effect scope.`); + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + this._active = false; + } + } +}; +function effectScope(detached) { + return new EffectScope(detached); +} +function recordEffectScope(effect2, scope = activeEffectScope) { + if (scope && scope.active) { + scope.effects.push(effect2); + } +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } else if (true) { + warn(`onScopeDispose() is called when there is no active effect scope to be associated with.`); + } +} +var createDep = (effects) => { + const dep = new Set(effects); + dep.w = 0; + dep.n = 0; + return dep; +}; +var wasTracked = (dep) => (dep.w & trackOpBit) > 0; +var newTracked = (dep) => (dep.n & trackOpBit) > 0; +var initDepMarkers = ({ deps }) => { + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].w |= trackOpBit; + } + } +}; +var finalizeDepMarkers = (effect2) => { + const { deps } = effect2; + if (deps.length) { + let ptr = 0; + for (let i = 0; i < deps.length; i++) { + const dep = deps[i]; + if (wasTracked(dep) && !newTracked(dep)) { + dep.delete(effect2); + } else { + deps[ptr++] = dep; + } + dep.w &= ~trackOpBit; + dep.n &= ~trackOpBit; + } + deps.length = ptr; + } +}; +var targetMap = /* @__PURE__ */ new WeakMap(); +var effectTrackDepth = 0; +var trackOpBit = 1; +var maxMarkerBits = 30; +var activeEffect; +var ITERATE_KEY = Symbol(true ? "iterate" : ""); +var MAP_KEY_ITERATE_KEY = Symbol(true ? "Map key iterate" : ""); +var ReactiveEffect = class { + constructor(fn, scheduler = null, scope) { + this.fn = fn; + this.scheduler = scheduler; + this.active = true; + this.deps = []; + this.parent = void 0; + recordEffectScope(this, scope); + } + run() { + if (!this.active) { + return this.fn(); + } + let parent = activeEffect; + let lastShouldTrack = shouldTrack; + while (parent) { + if (parent === this) { + return; + } + parent = parent.parent; + } + try { + this.parent = activeEffect; + activeEffect = this; + shouldTrack = true; + trackOpBit = 1 << ++effectTrackDepth; + if (effectTrackDepth <= maxMarkerBits) { + initDepMarkers(this); + } else { + cleanupEffect(this); + } + return this.fn(); + } finally { + if (effectTrackDepth <= maxMarkerBits) { + finalizeDepMarkers(this); + } + trackOpBit = 1 << --effectTrackDepth; + activeEffect = this.parent; + shouldTrack = lastShouldTrack; + this.parent = void 0; + if (this.deferStop) { + this.stop(); + } + } + } + stop() { + if (activeEffect === this) { + this.deferStop = true; + } else if (this.active) { + cleanupEffect(this); + if (this.onStop) { + this.onStop(); + } + this.active = false; + } + } +}; +function cleanupEffect(effect2) { + const { deps } = effect2; + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].delete(effect2); + } + deps.length = 0; + } +} +function effect(fn, options) { + if (fn.effect) { + fn = fn.effect.fn; + } + const _effect = new ReactiveEffect(fn); + if (options) { + extend(_effect, options); + if (options.scope) + recordEffectScope(_effect, options.scope); + } + if (!options || !options.lazy) { + _effect.run(); + } + const runner = _effect.run.bind(_effect); + runner.effect = _effect; + return runner; +} +function stop(runner) { + runner.effect.stop(); +} +var shouldTrack = true; +var trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function track(target, type, key) { + if (shouldTrack && activeEffect) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = createDep()); + } + const eventInfo = true ? { effect: activeEffect, target, type, key } : void 0; + trackEffects(dep, eventInfo); + } +} +function trackEffects(dep, debuggerEventExtraInfo) { + let shouldTrack2 = false; + if (effectTrackDepth <= maxMarkerBits) { + if (!newTracked(dep)) { + dep.n |= trackOpBit; + shouldTrack2 = !wasTracked(dep); + } + } else { + shouldTrack2 = !dep.has(activeEffect); + } + if (shouldTrack2) { + dep.add(activeEffect); + activeEffect.deps.push(dep); + if (activeEffect.onTrack) { + activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo)); + } + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + return; + } + let deps = []; + if (type === "clear") { + deps = [...depsMap.values()]; + } else if (key === "length" && isArray(target)) { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 >= newLength) { + deps.push(dep); + } + }); + } else { + if (key !== void 0) { + deps.push(depsMap.get(key)); + } + switch (type) { + case "add": + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isIntegerKey(key)) { + deps.push(depsMap.get("length")); + } + break; + case "delete": + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + } + break; + } + } + const eventInfo = true ? { target, type, key, newValue, oldValue, oldTarget } : void 0; + if (deps.length === 1) { + if (deps[0]) { + if (true) { + triggerEffects(deps[0], eventInfo); + } else { + triggerEffects(deps[0]); + } + } + } else { + const effects = []; + for (const dep of deps) { + if (dep) { + effects.push(...dep); + } + } + if (true) { + triggerEffects(createDep(effects), eventInfo); + } else { + triggerEffects(createDep(effects)); + } + } +} +function triggerEffects(dep, debuggerEventExtraInfo) { + const effects = isArray(dep) ? dep : [...dep]; + for (const effect2 of effects) { + if (effect2.computed) { + triggerEffect(effect2, debuggerEventExtraInfo); + } + } + for (const effect2 of effects) { + if (!effect2.computed) { + triggerEffect(effect2, debuggerEventExtraInfo); + } + } +} +function triggerEffect(effect2, debuggerEventExtraInfo) { + if (effect2 !== activeEffect || effect2.allowRecurse) { + if (effect2.onTrigger) { + effect2.onTrigger(extend({ effect: effect2 }, debuggerEventExtraInfo)); + } + if (effect2.scheduler) { + effect2.scheduler(); + } else { + effect2.run(); + } + } +} +function getDepFromReactive(object, key) { + var _a2; + return (_a2 = targetMap.get(object)) === null || _a2 === void 0 ? void 0 : _a2.get(key); +} +var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); +var builtInSymbols = new Set( + Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) +); +var get$1 = createGetter(); +var shallowGet = createGetter(false, true); +var readonlyGet = createGetter(true); +var shallowReadonlyGet = createGetter(true, true); +var arrayInstrumentations = createArrayInstrumentations(); +function createArrayInstrumentations() { + const instrumentations = {}; + ["includes", "indexOf", "lastIndexOf"].forEach((key) => { + instrumentations[key] = function(...args) { + const arr = toRaw(this); + for (let i = 0, l = this.length; i < l; i++) { + track(arr, "get", i + ""); + } + const res = arr[key](...args); + if (res === -1 || res === false) { + return arr[key](...args.map(toRaw)); + } else { + return res; + } + }; + }); + ["push", "pop", "shift", "unshift", "splice"].forEach((key) => { + instrumentations[key] = function(...args) { + pauseTracking(); + const res = toRaw(this)[key].apply(this, args); + resetTracking(); + return res; + }; + }); + return instrumentations; +} +function hasOwnProperty2(key) { + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +function createGetter(isReadonly2 = false, shallow = false) { + return function get2(target, key, receiver) { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return shallow; + } else if (key === "__v_raw" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) { + return target; + } + const targetIsArray = isArray(target); + if (!isReadonly2) { + if (targetIsArray && hasOwn(arrayInstrumentations, key)) { + return Reflect.get(arrayInstrumentations, key, receiver); + } + if (key === "hasOwnProperty") { + return hasOwnProperty2; + } + } + const res = Reflect.get(target, key, receiver); + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (shallow) { + return res; + } + if (isRef(res)) { + return targetIsArray && isIntegerKey(key) ? res : res.value; + } + if (isObject(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + }; +} +var set$1 = createSetter(); +var shallowSet = createSetter(true); +function createSetter(shallow = false) { + return function set2(target, key, value, receiver) { + let oldValue = target[key]; + if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) { + return false; + } + if (!shallow) { + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!isArray(target) && isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } + } + const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); + const result = Reflect.set(target, key, value, receiver); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + } + return result; + }; +} +function deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; +} +function has$1(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; +} +function ownKeys(target) { + track(target, "iterate", isArray(target) ? "length" : ITERATE_KEY); + return Reflect.ownKeys(target); +} +var mutableHandlers = { + get: get$1, + set: set$1, + deleteProperty, + has: has$1, + ownKeys +}; +var readonlyHandlers = { + get: readonlyGet, + set(target, key) { + if (true) { + warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target); + } + return true; + }, + deleteProperty(target, key) { + if (true) { + warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target); + } + return true; + } +}; +var shallowReactiveHandlers = extend({}, mutableHandlers, { + get: shallowGet, + set: shallowSet +}); +var shallowReadonlyHandlers = extend({}, readonlyHandlers, { + get: shallowReadonlyGet +}); +var toShallow = (value) => value; +var getProto = (v) => Reflect.getPrototypeOf(v); +function get(target, key, isReadonly2 = false, isShallow3 = false) { + target = target[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly2) { + if (key !== rawKey) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has: has2 } = getProto(rawTarget); + const wrap = isShallow3 ? toShallow : isReadonly2 ? toReadonly : toReactive; + if (has2.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has2.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } +} +function has(key, isReadonly2 = false) { + const target = this[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly2) { + if (key !== rawKey) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); +} +function size(target, isReadonly2 = false) { + target = target[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]; + !isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); +} +function add(value) { + value = toRaw(value); + const target = toRaw(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger(target, "add", value, value); + } + return this; +} +function set(key, value) { + value = toRaw(value); + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + return this; +} +function deleteEntry(key) { + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2 ? get2.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; +} +function clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0; + const result = target.clear(); + if (hadItems) { + trigger(target, "clear", void 0, void 0, oldTarget); + } + return result; +} +function createForEach(isReadonly2, isShallow3) { + return function forEach(callback, thisArg) { + const observed = this; + const target = observed[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]; + const rawTarget = toRaw(target); + const wrap = isShallow3 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + }; +} +function createIterableMethod(method, isReadonly2, isShallow3) { + return function(...args) { + const target = this[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]; + const rawTarget = toRaw(target); + const targetIsMap = isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow3 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track(rawTarget, "iterate", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY); + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function createReadonlyMethod(type) { + return function(...args) { + if (true) { + const key = args[0] ? `on key "${args[0]}" ` : ``; + console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this)); + } + return type === "delete" ? false : this; + }; +} +function createInstrumentations() { + const mutableInstrumentations2 = { + get(key) { + return get(this, key); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, false) + }; + const shallowInstrumentations2 = { + get(key) { + return get(this, key, false, true); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, true) + }; + const readonlyInstrumentations2 = { + get(key) { + return get(this, key, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod( + "add" + /* TriggerOpTypes.ADD */ + ), + set: createReadonlyMethod( + "set" + /* TriggerOpTypes.SET */ + ), + delete: createReadonlyMethod( + "delete" + /* TriggerOpTypes.DELETE */ + ), + clear: createReadonlyMethod( + "clear" + /* TriggerOpTypes.CLEAR */ + ), + forEach: createForEach(true, false) + }; + const shallowReadonlyInstrumentations2 = { + get(key) { + return get(this, key, true, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod( + "add" + /* TriggerOpTypes.ADD */ + ), + set: createReadonlyMethod( + "set" + /* TriggerOpTypes.SET */ + ), + delete: createReadonlyMethod( + "delete" + /* TriggerOpTypes.DELETE */ + ), + clear: createReadonlyMethod( + "clear" + /* TriggerOpTypes.CLEAR */ + ), + forEach: createForEach(true, true) + }; + const iteratorMethods = ["keys", "values", "entries", Symbol.iterator]; + iteratorMethods.forEach((method) => { + mutableInstrumentations2[method] = createIterableMethod(method, false, false); + readonlyInstrumentations2[method] = createIterableMethod(method, true, false); + shallowInstrumentations2[method] = createIterableMethod(method, false, true); + shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true); + }); + return [ + mutableInstrumentations2, + readonlyInstrumentations2, + shallowInstrumentations2, + shallowReadonlyInstrumentations2 + ]; +} +var [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = createInstrumentations(); +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations; + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver); + }; +} +var mutableCollectionHandlers = { + get: createInstrumentationGetter(false, false) +}; +var shallowCollectionHandlers = { + get: createInstrumentationGetter(false, true) +}; +var readonlyCollectionHandlers = { + get: createInstrumentationGetter(true, false) +}; +var shallowReadonlyCollectionHandlers = { + get: createInstrumentationGetter(true, true) +}; +function checkIdentityKeys(target, has2, key) { + const rawKey = toRaw(key); + if (rawKey !== key && has2.call(target, rawKey)) { + const type = toRawType(target); + console.warn(`Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`); + } +} +var reactiveMap = /* @__PURE__ */ new WeakMap(); +var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +var readonlyMap = /* @__PURE__ */ new WeakMap(); +var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function getTargetType(value) { + return value[ + "__v_skip" + /* ReactiveFlags.SKIP */ + ] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap); +} +function shallowReactive(target) { + return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap); +} +function readonly(target) { + return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap); +} +function shallowReadonly(target) { + return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject(target)) { + if (true) { + console.warn(`value cannot be made reactive: ${String(target)}`); + } + return target; + } + if (target[ + "__v_raw" + /* ReactiveFlags.RAW */ + ] && !(isReadonly2 && target[ + "__v_isReactive" + /* ReactiveFlags.IS_REACTIVE */ + ])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]); + } + return !!(value && value[ + "__v_isReactive" + /* ReactiveFlags.IS_REACTIVE */ + ]); +} +function isReadonly(value) { + return !!(value && value[ + "__v_isReadonly" + /* ReactiveFlags.IS_READONLY */ + ]); +} +function isShallow(value) { + return !!(value && value[ + "__v_isShallow" + /* ReactiveFlags.IS_SHALLOW */ + ]); +} +function isProxy(value) { + return isReactive(value) || isReadonly(value); +} +function toRaw(observed) { + const raw = observed && observed[ + "__v_raw" + /* ReactiveFlags.RAW */ + ]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + def(value, "__v_skip", true); + return value; +} +var toReactive = (value) => isObject(value) ? reactive(value) : value; +var toReadonly = (value) => isObject(value) ? readonly(value) : value; +function trackRefValue(ref2) { + if (shouldTrack && activeEffect) { + ref2 = toRaw(ref2); + if (true) { + trackEffects(ref2.dep || (ref2.dep = createDep()), { + target: ref2, + type: "get", + key: "value" + }); + } else { + trackEffects(ref2.dep || (ref2.dep = createDep())); + } + } +} +function triggerRefValue(ref2, newVal) { + ref2 = toRaw(ref2); + const dep = ref2.dep; + if (dep) { + if (true) { + triggerEffects(dep, { + target: ref2, + type: "set", + key: "value", + newValue: newVal + }); + } else { + triggerEffects(dep); + } + } +} +function isRef(r) { + return !!(r && r.__v_isRef === true); +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +var RefImpl = class { + constructor(value, __v_isShallow) { + this.__v_isShallow = __v_isShallow; + this.dep = void 0; + this.__v_isRef = true; + this._rawValue = __v_isShallow ? value : toRaw(value); + this._value = __v_isShallow ? value : toReactive(value); + } + get value() { + trackRefValue(this); + return this._value; + } + set value(newVal) { + const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal); + newVal = useDirectValue ? newVal : toRaw(newVal); + if (hasChanged(newVal, this._rawValue)) { + this._rawValue = newVal; + this._value = useDirectValue ? newVal : toReactive(newVal); + triggerRefValue(this, newVal); + } + } +}; +function triggerRef(ref2) { + triggerRefValue(ref2, true ? ref2.value : void 0); +} +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; +} +var shallowUnwrapHandlers = { + get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +var CustomRefImpl = class { + constructor(factory) { + this.dep = void 0; + this.__v_isRef = true; + const { get: get2, set: set2 } = factory(() => trackRefValue(this), () => triggerRefValue(this)); + this._get = get2; + this._set = set2; + } + get value() { + return this._get(); + } + set value(newVal) { + this._set(newVal); + } +}; +function customRef(factory) { + return new CustomRefImpl(factory); +} +function toRefs(object) { + if (!isProxy(object)) { + console.warn(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = isArray(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = toRef(object, key); + } + return ret; +} +var ObjectRefImpl = class { + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this.__v_isRef = true; + } + get value() { + const val = this._object[this._key]; + return val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +}; +function toRef(object, key, defaultValue) { + const val = object[key]; + return isRef(val) ? val : new ObjectRefImpl(object, key, defaultValue); +} +var _a$1; +var ComputedRefImpl = class { + constructor(getter, _setter, isReadonly2, isSSR) { + this._setter = _setter; + this.dep = void 0; + this.__v_isRef = true; + this[_a$1] = false; + this._dirty = true; + this.effect = new ReactiveEffect(getter, () => { + if (!this._dirty) { + this._dirty = true; + triggerRefValue(this); + } + }); + this.effect.computed = this; + this.effect.active = this._cacheable = !isSSR; + this[ + "__v_isReadonly" + /* ReactiveFlags.IS_READONLY */ + ] = isReadonly2; + } + get value() { + const self2 = toRaw(this); + trackRefValue(self2); + if (self2._dirty || !self2._cacheable) { + self2._dirty = false; + self2._value = self2.effect.run(); + } + return self2._value; + } + set value(newValue) { + this._setter(newValue); + } +}; +_a$1 = "__v_isReadonly"; +function computed(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + const onlyGetter = isFunction(getterOrOptions); + if (onlyGetter) { + getter = getterOrOptions; + setter = true ? () => { + console.warn("Write operation failed: computed value is readonly"); + } : NOOP; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR); + if (debugOptions && !isSSR) { + cRef.effect.onTrack = debugOptions.onTrack; + cRef.effect.onTrigger = debugOptions.onTrigger; + } + return cRef; +} +var _a; +var tick = Promise.resolve(); +_a = "__v_isReadonly"; + +// node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +var stack = []; +function pushWarningContext(vnode) { + stack.push(vnode); +} +function popWarningContext() { + stack.pop(); +} +function warn2(msg, ...args) { + if (false) + return; + pauseTracking(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling(appWarnHandler, instance, 11, [ + msg + args.join(""), + instance && instance.proxy, + trace.map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`).join("\n"), + trace + ]); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`; + const close = `>` + postfix; + return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if (isString(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if (isRef(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if (isFunction(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = toRaw(value); + return raw ? value : [`${key}=`, value]; + } +} +function assertNumber(val, type) { + if (false) + return; + if (val === void 0) { + return; + } else if (typeof val !== "number") { + warn2(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + } else if (isNaN(val)) { + warn2(`${type} is NaN - the duration expression might be incorrect.`); + } +} +var ErrorTypeStrings = { + [ + "sp" + /* LifecycleHooks.SERVER_PREFETCH */ + ]: "serverPrefetch hook", + [ + "bc" + /* LifecycleHooks.BEFORE_CREATE */ + ]: "beforeCreate hook", + [ + "c" + /* LifecycleHooks.CREATED */ + ]: "created hook", + [ + "bm" + /* LifecycleHooks.BEFORE_MOUNT */ + ]: "beforeMount hook", + [ + "m" + /* LifecycleHooks.MOUNTED */ + ]: "mounted hook", + [ + "bu" + /* LifecycleHooks.BEFORE_UPDATE */ + ]: "beforeUpdate hook", + [ + "u" + /* LifecycleHooks.UPDATED */ + ]: "updated", + [ + "bum" + /* LifecycleHooks.BEFORE_UNMOUNT */ + ]: "beforeUnmount hook", + [ + "um" + /* LifecycleHooks.UNMOUNTED */ + ]: "unmounted hook", + [ + "a" + /* LifecycleHooks.ACTIVATED */ + ]: "activated hook", + [ + "da" + /* LifecycleHooks.DEACTIVATED */ + ]: "deactivated hook", + [ + "ec" + /* LifecycleHooks.ERROR_CAPTURED */ + ]: "errorCaptured hook", + [ + "rtc" + /* LifecycleHooks.RENDER_TRACKED */ + ]: "renderTracked hook", + [ + "rtg" + /* LifecycleHooks.RENDER_TRIGGERED */ + ]: "renderTriggered hook", + [ + 0 + /* ErrorCodes.SETUP_FUNCTION */ + ]: "setup function", + [ + 1 + /* ErrorCodes.RENDER_FUNCTION */ + ]: "render function", + [ + 2 + /* ErrorCodes.WATCH_GETTER */ + ]: "watcher getter", + [ + 3 + /* ErrorCodes.WATCH_CALLBACK */ + ]: "watcher callback", + [ + 4 + /* ErrorCodes.WATCH_CLEANUP */ + ]: "watcher cleanup function", + [ + 5 + /* ErrorCodes.NATIVE_EVENT_HANDLER */ + ]: "native event handler", + [ + 6 + /* ErrorCodes.COMPONENT_EVENT_HANDLER */ + ]: "component event handler", + [ + 7 + /* ErrorCodes.VNODE_HOOK */ + ]: "vnode hook", + [ + 8 + /* ErrorCodes.DIRECTIVE_HOOK */ + ]: "directive hook", + [ + 9 + /* ErrorCodes.TRANSITION_HOOK */ + ]: "transition hook", + [ + 10 + /* ErrorCodes.APP_ERROR_HANDLER */ + ]: "app errorHandler", + [ + 11 + /* ErrorCodes.APP_WARN_HANDLER */ + ]: "app warnHandler", + [ + 12 + /* ErrorCodes.FUNCTION_REF */ + ]: "ref function", + [ + 13 + /* ErrorCodes.ASYNC_COMPONENT_LOADER */ + ]: "async component loader", + [ + 14 + /* ErrorCodes.SCHEDULER */ + ]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core" +}; +function callWithErrorHandling(fn, instance, type, args) { + let res; + try { + res = args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } + return res; +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = true ? ErrorTypeStrings[type] : type; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + const appErrorHandler = instance.appContext.config.errorHandler; + if (appErrorHandler) { + callWithErrorHandling(appErrorHandler, null, 10, [err, exposedInstance, errorInfo]); + return; + } + } + logError(err, type, contextVNode, throwInDev); +} +function logError(err, type, contextVNode, throwInDev = true) { + if (true) { + const info = ErrorTypeStrings[type]; + if (contextVNode) { + pushWarningContext(contextVNode); + } + warn2(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + if (contextVNode) { + popWarningContext(); + } + if (throwInDev) { + throw err; + } else { + console.error(err); + } + } else { + console.error(err); + } +} +var isFlushing = false; +var isFlushPending = false; +var queue = []; +var flushIndex = 0; +var pendingPostFlushCbs = []; +var activePostFlushCbs = null; +var postFlushIndex = 0; +var resolvedPromise = Promise.resolve(); +var currentFlushPromise = null; +var RECURSION_LIMIT = 100; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +function findInsertionIndex(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJobId = getId(queue[middle]); + middleJobId < id ? start = middle + 1 : end = middle; + } + return start; +} +function queueJob(job) { + if (!queue.length || !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) { + if (job.id == null) { + queue.push(job); + } else { + queue.splice(findInsertionIndex(job.id), 0, job); + } + queueFlush(); + } +} +function queueFlush() { + if (!isFlushing && !isFlushPending) { + isFlushPending = true; + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function invalidateJob(job) { + const i = queue.indexOf(job); + if (i > flushIndex) { + queue.splice(i, 1); + } +} +function queuePostFlushCb(cb) { + if (!isArray(cb)) { + if (!activePostFlushCbs || !activePostFlushCbs.includes(cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex)) { + pendingPostFlushCbs.push(cb); + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(seen, i = isFlushing ? flushIndex + 1 : 0) { + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.pre) { + if (checkRecursiveUpdates(seen, cb)) { + continue; + } + queue.splice(i, 1); + i--; + cb(); + } + } +} +function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)]; + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + activePostFlushCbs.sort((a, b) => getId(a) - getId(b)); + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) { + continue; + } + activePostFlushCbs[postFlushIndex](); + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +var getId = (job) => job.id == null ? Infinity : job.id; +var comparator = (a, b) => { + const diff = getId(a) - getId(b); + if (diff === 0) { + if (a.pre && !b.pre) + return -1; + if (b.pre && !a.pre) + return 1; + } + return diff; +}; +function flushJobs(seen) { + isFlushPending = false; + isFlushing = true; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + queue.sort(comparator); + const check = true ? (job) => checkRecursiveUpdates(seen, job) : NOOP; + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && job.active !== false) { + if (check(job)) { + continue; + } + callWithErrorHandling( + job, + null, + 14 + /* ErrorCodes.SCHEDULER */ + ); + } + } + } finally { + flushIndex = 0; + queue.length = 0; + flushPostFlushCbs(seen); + isFlushing = false; + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen); + } + } +} +function checkRecursiveUpdates(seen, fn) { + if (!seen.has(fn)) { + seen.set(fn, 1); + } else { + const count = seen.get(fn); + if (count > RECURSION_LIMIT) { + const instance = fn.ownerInstance; + const componentName = instance && getComponentName(instance.type); + warn2(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`); + return true; + } else { + seen.set(fn, count + 1); + } + } +} +var isHmrUpdating = false; +var hmrDirtyComponents = /* @__PURE__ */ new Set(); +if (true) { + getGlobalThis().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + }; +} +var map = /* @__PURE__ */ new Map(); +function registerHMR(instance) { + const id = instance.type.__hmrId; + let record = map.get(id); + if (!record) { + createRecord(id, instance.type); + record = map.get(id); + } + record.instances.add(instance); +} +function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance); +} +function createRecord(id, initialDef) { + if (map.has(id)) { + return false; + } + map.set(id, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }); + return true; +} +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component; +} +function rerender(id, newRender) { + const record = map.get(id); + if (!record) { + return; + } + record.initialDef.render = newRender; + [...record.instances].forEach((instance) => { + if (newRender) { + instance.render = newRender; + normalizeClassComponent(instance.type).render = newRender; + } + instance.renderCache = []; + isHmrUpdating = true; + instance.update(); + isHmrUpdating = false; + }); +} +function reload(id, newComp) { + const record = map.get(id); + if (!record) + return; + newComp = normalizeClassComponent(newComp); + updateComponentDef(record.initialDef, newComp); + const instances = [...record.instances]; + for (const instance of instances) { + const oldComp = normalizeClassComponent(instance.type); + if (!hmrDirtyComponents.has(oldComp)) { + if (oldComp !== record.initialDef) { + updateComponentDef(oldComp, newComp); + } + hmrDirtyComponents.add(oldComp); + } + instance.appContext.optionsCache.delete(instance.type); + if (instance.ceReload) { + hmrDirtyComponents.add(oldComp); + instance.ceReload(newComp.styles); + hmrDirtyComponents.delete(oldComp); + } else if (instance.parent) { + queueJob(instance.parent.update); + } else if (instance.appContext.reload) { + instance.appContext.reload(); + } else if (typeof window !== "undefined") { + window.location.reload(); + } else { + console.warn("[HMR] Root or manually mounted instance modified. Full reload required."); + } + } + queuePostFlushCb(() => { + for (const instance of instances) { + hmrDirtyComponents.delete(normalizeClassComponent(instance.type)); + } + }); +} +function updateComponentDef(oldComp, newComp) { + extend(oldComp, newComp); + for (const key in oldComp) { + if (key !== "__file" && !(key in newComp)) { + delete oldComp[key]; + } + } +} +function tryWrap(fn) { + return (id, arg) => { + try { + return fn(id, arg); + } catch (e) { + console.error(e); + console.warn(`[HMR] Something went wrong during Vue component hot-reload. Full reload required.`); + } + }; +} +var devtools; +var buffer = []; +var devtoolsNotInstalled = false; +function emit$1(event, ...args) { + if (devtools) { + devtools.emit(event, ...args); + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }); + } +} +function setDevtoolsHook(hook, target) { + var _a2, _b; + devtools = hook; + if (devtools) { + devtools.enabled = true; + buffer.forEach(({ event, args }) => devtools.emit(event, ...args)); + buffer = []; + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== "undefined" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + !((_b = (_a2 = window.navigator) === null || _a2 === void 0 ? void 0 : _a2.userAgent) === null || _b === void 0 ? void 0 : _b.includes("jsdom")) + ) { + const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; + replay.push((newHook) => { + setDevtoolsHook(newHook, target); + }); + setTimeout(() => { + if (!devtools) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; + devtoolsNotInstalled = true; + buffer = []; + } + }, 3e3); + } else { + devtoolsNotInstalled = true; + buffer = []; + } +} +function devtoolsInitApp(app, version2) { + emit$1("app:init", app, version2, { + Fragment, + Text, + Comment, + Static + }); +} +function devtoolsUnmountApp(app) { + emit$1("app:unmount", app); +} +var devtoolsComponentAdded = createDevtoolsComponentHook( + "component:added" + /* DevtoolsHooks.COMPONENT_ADDED */ +); +var devtoolsComponentUpdated = createDevtoolsComponentHook( + "component:updated" + /* DevtoolsHooks.COMPONENT_UPDATED */ +); +var _devtoolsComponentRemoved = createDevtoolsComponentHook( + "component:removed" + /* DevtoolsHooks.COMPONENT_REMOVED */ +); +var devtoolsComponentRemoved = (component) => { + if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered + !devtools.cleanupBuffer(component)) { + _devtoolsComponentRemoved(component); + } +}; +function createDevtoolsComponentHook(hook) { + return (component) => { + emit$1(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : void 0, component); + }; +} +var devtoolsPerfStart = createDevtoolsPerformanceHook( + "perf:start" + /* DevtoolsHooks.PERFORMANCE_START */ +); +var devtoolsPerfEnd = createDevtoolsPerformanceHook( + "perf:end" + /* DevtoolsHooks.PERFORMANCE_END */ +); +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit$1(hook, component.appContext.app, component.uid, component, type, time); + }; +} +function devtoolsComponentEmit(component, event, params) { + emit$1("component:emit", component.appContext.app, component, event, params); +} +function emit(instance, event, ...rawArgs) { + if (instance.isUnmounted) + return; + const props = instance.vnode.props || EMPTY_OBJ; + if (true) { + const { emitsOptions, propsOptions: [propsOptions] } = instance; + if (emitsOptions) { + if (!(event in emitsOptions) && true) { + if (!propsOptions || !(toHandlerKey(event) in propsOptions)) { + warn2(`Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`); + } + } else { + const validator = emitsOptions[event]; + if (isFunction(validator)) { + const isValid = validator(...rawArgs); + if (!isValid) { + warn2(`Invalid event arguments: event validation failed for event "${event}".`); + } + } + } + } + } + let args = rawArgs; + const isModelListener2 = event.startsWith("update:"); + const modelArg = isModelListener2 && event.slice(7); + if (modelArg && modelArg in props) { + const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`; + const { number, trim } = props[modifiersKey] || EMPTY_OBJ; + if (trim) { + args = rawArgs.map((a) => isString(a) ? a.trim() : a); + } + if (number) { + args = rawArgs.map(looseToNumber); + } + } + if (true) { + devtoolsComponentEmit(instance, event, args); + } + if (true) { + const lowerCaseEvent = event.toLowerCase(); + if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) { + warn2(`Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(instance, instance.type)} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(event)}" instead of "${event}".`); + } + } + let handlerName; + let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249) + props[handlerName = toHandlerKey(camelize(event))]; + if (!handler && isModelListener2) { + handler = props[handlerName = toHandlerKey(hyphenate(event))]; + } + if (handler) { + callWithAsyncErrorHandling(handler, instance, 6, args); + } + const onceHandler = props[handlerName + `Once`]; + if (onceHandler) { + if (!instance.emitted) { + instance.emitted = {}; + } else if (instance.emitted[handlerName]) { + return; + } + instance.emitted[handlerName] = true; + callWithAsyncErrorHandling(onceHandler, instance, 6, args); + } +} +function normalizeEmitsOptions(comp, appContext, asMixin = false) { + const cache = appContext.emitsCache; + const cached = cache.get(comp); + if (cached !== void 0) { + return cached; + } + const raw = comp.emits; + let normalized = {}; + let hasExtends = false; + if (__VUE_OPTIONS_API__ && !isFunction(comp)) { + const extendEmits = (raw2) => { + const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true); + if (normalizedFromExtend) { + hasExtends = true; + extend(normalized, normalizedFromExtend); + } + }; + if (!asMixin && appContext.mixins.length) { + appContext.mixins.forEach(extendEmits); + } + if (comp.extends) { + extendEmits(comp.extends); + } + if (comp.mixins) { + comp.mixins.forEach(extendEmits); + } + } + if (!raw && !hasExtends) { + if (isObject(comp)) { + cache.set(comp, null); + } + return null; + } + if (isArray(raw)) { + raw.forEach((key) => normalized[key] = null); + } else { + extend(normalized, raw); + } + if (isObject(comp)) { + cache.set(comp, normalized); + } + return normalized; +} +function isEmitListener(options, key) { + if (!options || !isOn(key)) { + return false; + } + key = key.slice(2).replace(/Once$/, ""); + return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key); +} +var currentRenderingInstance = null; +var currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function pushScopeId(id) { + currentScopeId = id; +} +function popScopeId() { + currentScopeId = null; +} +var withScopeId = (_id) => withCtx; +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) + return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + if (true) { + devtoolsComponentUpdated(ctx); + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +var accessedAttrs = false; +function markAttrsAccessed() { + accessedAttrs = true; +} +function renderComponentRoot(instance) { + const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit: emit2, render: render2, renderCache, data, setupState, ctx, inheritAttrs } = instance; + let result; + let fallthroughAttrs; + const prev = setCurrentRenderingInstance(instance); + if (true) { + accessedAttrs = false; + } + try { + if (vnode.shapeFlag & 4) { + const proxyToUse = withProxy || proxy; + result = normalizeVNode(render2.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx)); + fallthroughAttrs = attrs; + } else { + const render3 = Component; + if (attrs === props) { + markAttrsAccessed(); + } + result = normalizeVNode(render3.length > 1 ? render3(props, true ? { + get attrs() { + markAttrsAccessed(); + return attrs; + }, + slots, + emit: emit2 + } : { attrs, slots, emit: emit2 }) : render3( + props, + null + /* we know it doesn't need it */ + )); + fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); + } + } catch (err) { + blockStack.length = 0; + handleError( + err, + instance, + 1 + /* ErrorCodes.RENDER_FUNCTION */ + ); + result = createVNode(Comment); + } + let root = result; + let setRoot = void 0; + if (result.patchFlag > 0 && result.patchFlag & 2048) { + [root, setRoot] = getChildRoot(result); + } + if (fallthroughAttrs && inheritAttrs !== false) { + const keys = Object.keys(fallthroughAttrs); + const { shapeFlag } = root; + if (keys.length) { + if (shapeFlag & (1 | 6)) { + if (propsOptions && keys.some(isModelListener)) { + fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions); + } + root = cloneVNode(root, fallthroughAttrs); + } else if (!accessedAttrs && root.type !== Comment) { + const allAttrs = Object.keys(attrs); + const eventAttrs = []; + const extraAttrs = []; + for (let i = 0, l = allAttrs.length; i < l; i++) { + const key = allAttrs[i]; + if (isOn(key)) { + if (!isModelListener(key)) { + eventAttrs.push(key[2].toLowerCase() + key.slice(3)); + } + } else { + extraAttrs.push(key); + } + } + if (extraAttrs.length) { + warn2(`Extraneous non-props attributes (${extraAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.`); + } + if (eventAttrs.length) { + warn2(`Extraneous non-emits event listeners (${eventAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.`); + } + } + } + } + if (vnode.dirs) { + if (!isElementRoot(root)) { + warn2(`Runtime directive used on component with non-element root node. The directives will not function as intended.`); + } + root = cloneVNode(root); + root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; + } + if (vnode.transition) { + if (!isElementRoot(root)) { + warn2(`Component inside renders non-element root node that cannot be animated.`); + } + root.transition = vnode.transition; + } + if (setRoot) { + setRoot(root); + } else { + result = root; + } + setCurrentRenderingInstance(prev); + return result; +} +var getChildRoot = (vnode) => { + const rawChildren = vnode.children; + const dynamicChildren = vnode.dynamicChildren; + const childRoot = filterSingleRoot(rawChildren); + if (!childRoot) { + return [vnode, void 0]; + } + const index = rawChildren.indexOf(childRoot); + const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1; + const setRoot = (updatedRoot) => { + rawChildren[index] = updatedRoot; + if (dynamicChildren) { + if (dynamicIndex > -1) { + dynamicChildren[dynamicIndex] = updatedRoot; + } else if (updatedRoot.patchFlag > 0) { + vnode.dynamicChildren = [...dynamicChildren, updatedRoot]; + } + } + }; + return [normalizeVNode(childRoot), setRoot]; +}; +function filterSingleRoot(children) { + let singleRoot; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (isVNode(child)) { + if (child.type !== Comment || child.children === "v-if") { + if (singleRoot) { + return; + } else { + singleRoot = child; + } + } + } else { + return; + } + } + return singleRoot; +} +var getFunctionalFallthrough = (attrs) => { + let res; + for (const key in attrs) { + if (key === "class" || key === "style" || isOn(key)) { + (res || (res = {}))[key] = attrs[key]; + } + } + return res; +}; +var filterModelListeners = (attrs, props) => { + const res = {}; + for (const key in attrs) { + if (!isModelListener(key) || !(key.slice(9) in props)) { + res[key] = attrs[key]; + } + } + return res; +}; +var isElementRoot = (vnode) => { + return vnode.shapeFlag & (6 | 1) || vnode.type === Comment; +}; +function shouldUpdateComponent(prevVNode, nextVNode, optimized) { + const { props: prevProps, children: prevChildren, component } = prevVNode; + const { props: nextProps, children: nextChildren, patchFlag } = nextVNode; + const emits = component.emitsOptions; + if ((prevChildren || nextChildren) && isHmrUpdating) { + return true; + } + if (nextVNode.dirs || nextVNode.transition) { + return true; + } + if (optimized && patchFlag >= 0) { + if (patchFlag & 1024) { + return true; + } + if (patchFlag & 16) { + if (!prevProps) { + return !!nextProps; + } + return hasPropsChanged(prevProps, nextProps, emits); + } else if (patchFlag & 8) { + const dynamicProps = nextVNode.dynamicProps; + for (let i = 0; i < dynamicProps.length; i++) { + const key = dynamicProps[i]; + if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { + return true; + } + } + } + } else { + if (prevChildren || nextChildren) { + if (!nextChildren || !nextChildren.$stable) { + return true; + } + } + if (prevProps === nextProps) { + return false; + } + if (!prevProps) { + return !!nextProps; + } + if (!nextProps) { + return true; + } + return hasPropsChanged(prevProps, nextProps, emits); + } + return false; +} +function hasPropsChanged(prevProps, nextProps, emitsOptions) { + const nextKeys = Object.keys(nextProps); + if (nextKeys.length !== Object.keys(prevProps).length) { + return true; + } + for (let i = 0; i < nextKeys.length; i++) { + const key = nextKeys[i]; + if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { + return true; + } + } + return false; +} +function updateHOCHostEl({ vnode, parent }, el) { + while (parent && parent.subTree === vnode) { + (vnode = parent.vnode).el = el; + parent = parent.parent; + } +} +var isSuspense = (type) => type.__isSuspense; +var SuspenseImpl = { + name: "Suspense", + // In order to make Suspense tree-shakable, we need to avoid importing it + // directly in the renderer. The renderer checks for the __isSuspense flag + // on a vnode's type and calls the `process` method, passing in renderer + // internals. + __isSuspense: true, + process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) { + if (n1 == null) { + mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals); + } else { + patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals); + } + }, + hydrate: hydrateSuspense, + create: createSuspenseBoundary, + normalize: normalizeSuspenseChildren +}; +var Suspense = SuspenseImpl; +function triggerEvent(vnode, name) { + const eventListener = vnode.props && vnode.props[name]; + if (isFunction(eventListener)) { + eventListener(); + } +} +function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) { + const { p: patch, o: { createElement } } = rendererInternals; + const hiddenContainer = createElement("div"); + const suspense = vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals); + patch(null, suspense.pendingBranch = vnode.ssContent, hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds); + if (suspense.deps > 0) { + triggerEvent(vnode, "onPending"); + triggerEvent(vnode, "onFallback"); + patch( + null, + vnode.ssFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds + ); + setActiveBranch(suspense, vnode.ssFallback); + } else { + suspense.resolve(); + } +} +function patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) { + const suspense = n2.suspense = n1.suspense; + suspense.vnode = n2; + n2.el = n1.el; + const newBranch = n2.ssContent; + const newFallback = n2.ssFallback; + const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense; + if (pendingBranch) { + suspense.pendingBranch = newBranch; + if (isSameVNodeType(newBranch, pendingBranch)) { + patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); + if (suspense.deps <= 0) { + suspense.resolve(); + } else if (isInFallback) { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newFallback); + } + } else { + suspense.pendingId++; + if (isHydrating) { + suspense.isHydrating = false; + suspense.activeBranch = pendingBranch; + } else { + unmount(pendingBranch, parentComponent, suspense); + } + suspense.deps = 0; + suspense.effects.length = 0; + suspense.hiddenContainer = createElement("div"); + if (isInFallback) { + patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); + if (suspense.deps <= 0) { + suspense.resolve(); + } else { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newFallback); + } + } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized); + suspense.resolve(true); + } else { + patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); + if (suspense.deps <= 0) { + suspense.resolve(); + } + } + } + } else { + if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized); + setActiveBranch(suspense, newBranch); + } else { + triggerEvent(n2, "onPending"); + suspense.pendingBranch = newBranch; + suspense.pendingId++; + patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); + if (suspense.deps <= 0) { + suspense.resolve(); + } else { + const { timeout, pendingId } = suspense; + if (timeout > 0) { + setTimeout(() => { + if (suspense.pendingId === pendingId) { + suspense.fallback(newFallback); + } + }, timeout); + } else if (timeout === 0) { + suspense.fallback(newFallback); + } + } + } + } +} +var hasWarned = false; +function createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) { + if (!hasWarned) { + hasWarned = true; + console[console.info ? "info" : "log"](` is an experimental feature and its API will likely change.`); + } + const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove: remove2 } } = rendererInternals; + const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0; + if (true) { + assertNumber(timeout, `Suspense timeout`); + } + const suspense = { + vnode, + parent, + parentComponent, + isSVG, + container, + hiddenContainer, + anchor, + deps: 0, + pendingId: 0, + timeout: typeof timeout === "number" ? timeout : -1, + activeBranch: null, + pendingBranch: null, + isInFallback: true, + isHydrating, + isUnmounted: false, + effects: [], + resolve(resume = false) { + if (true) { + if (!resume && !suspense.pendingBranch) { + throw new Error(`suspense.resolve() is called without a pending branch.`); + } + if (suspense.isUnmounted) { + throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`); + } + } + const { vnode: vnode2, activeBranch, pendingBranch, pendingId, effects, parentComponent: parentComponent2, container: container2 } = suspense; + if (suspense.isHydrating) { + suspense.isHydrating = false; + } else if (!resume) { + const delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === "out-in"; + if (delayEnter) { + activeBranch.transition.afterLeave = () => { + if (pendingId === suspense.pendingId) { + move( + pendingBranch, + container2, + anchor2, + 0 + /* MoveType.ENTER */ + ); + } + }; + } + let { anchor: anchor2 } = suspense; + if (activeBranch) { + anchor2 = next(activeBranch); + unmount(activeBranch, parentComponent2, suspense, true); + } + if (!delayEnter) { + move( + pendingBranch, + container2, + anchor2, + 0 + /* MoveType.ENTER */ + ); + } + } + setActiveBranch(suspense, pendingBranch); + suspense.pendingBranch = null; + suspense.isInFallback = false; + let parent2 = suspense.parent; + let hasUnresolvedAncestor = false; + while (parent2) { + if (parent2.pendingBranch) { + parent2.effects.push(...effects); + hasUnresolvedAncestor = true; + break; + } + parent2 = parent2.parent; + } + if (!hasUnresolvedAncestor) { + queuePostFlushCb(effects); + } + suspense.effects = []; + triggerEvent(vnode2, "onResolve"); + }, + fallback(fallbackVNode) { + if (!suspense.pendingBranch) { + return; + } + const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, isSVG: isSVG2 } = suspense; + triggerEvent(vnode2, "onFallback"); + const anchor2 = next(activeBranch); + const mountFallback = () => { + if (!suspense.isInFallback) { + return; + } + patch( + null, + fallbackVNode, + container2, + anchor2, + parentComponent2, + null, + // fallback tree will not have suspense context + isSVG2, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, fallbackVNode); + }; + const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === "out-in"; + if (delayEnter) { + activeBranch.transition.afterLeave = mountFallback; + } + suspense.isInFallback = true; + unmount( + activeBranch, + parentComponent2, + null, + // no suspense so unmount hooks fire now + true + // shouldRemove + ); + if (!delayEnter) { + mountFallback(); + } + }, + move(container2, anchor2, type) { + suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type); + suspense.container = container2; + }, + next() { + return suspense.activeBranch && next(suspense.activeBranch); + }, + registerDep(instance, setupRenderEffect) { + const isInPendingSuspense = !!suspense.pendingBranch; + if (isInPendingSuspense) { + suspense.deps++; + } + const hydratedEl = instance.vnode.el; + instance.asyncDep.catch((err) => { + handleError( + err, + instance, + 0 + /* ErrorCodes.SETUP_FUNCTION */ + ); + }).then((asyncSetupResult) => { + if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) { + return; + } + instance.asyncResolved = true; + const { vnode: vnode2 } = instance; + if (true) { + pushWarningContext(vnode2); + } + handleSetupResult(instance, asyncSetupResult, false); + if (hydratedEl) { + vnode2.el = hydratedEl; + } + const placeholder = !hydratedEl && instance.subTree.el; + setupRenderEffect( + instance, + vnode2, + // component may have been moved before resolve. + // if this is not a hydration, instance.subTree will be the comment + // placeholder. + parentNode(hydratedEl || instance.subTree.el), + // anchor will not be used if this is hydration, so only need to + // consider the comment placeholder case. + hydratedEl ? null : next(instance.subTree), + suspense, + isSVG, + optimized + ); + if (placeholder) { + remove2(placeholder); + } + updateHOCHostEl(instance, vnode2.el); + if (true) { + popWarningContext(); + } + if (isInPendingSuspense && --suspense.deps === 0) { + suspense.resolve(); + } + }); + }, + unmount(parentSuspense, doRemove) { + suspense.isUnmounted = true; + if (suspense.activeBranch) { + unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove); + } + if (suspense.pendingBranch) { + unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove); + } + } + }; + return suspense; +} +function hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) { + const suspense = vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + node.parentNode, + document.createElement("div"), + null, + isSVG, + slotScopeIds, + optimized, + rendererInternals, + true + /* hydrating */ + ); + const result = hydrateNode(node, suspense.pendingBranch = vnode.ssContent, parentComponent, suspense, slotScopeIds, optimized); + if (suspense.deps === 0) { + suspense.resolve(); + } + return result; +} +function normalizeSuspenseChildren(vnode) { + const { shapeFlag, children } = vnode; + const isSlotChildren = shapeFlag & 32; + vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children); + vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment); +} +function normalizeSuspenseSlot(s) { + let block; + if (isFunction(s)) { + const trackBlock = isBlockTreeEnabled && s._c; + if (trackBlock) { + s._d = false; + openBlock(); + } + s = s(); + if (trackBlock) { + s._d = true; + block = currentBlock; + closeBlock(); + } + } + if (isArray(s)) { + const singleChild = filterSingleRoot(s); + if (!singleChild) { + warn2(` slots expect a single root node.`); + } + s = singleChild; + } + s = normalizeVNode(s); + if (block && !s.dynamicChildren) { + s.dynamicChildren = block.filter((c) => c !== s); + } + return s; +} +function queueEffectWithSuspense(fn, suspense) { + if (suspense && suspense.pendingBranch) { + if (isArray(fn)) { + suspense.effects.push(...fn); + } else { + suspense.effects.push(fn); + } + } else { + queuePostFlushCb(fn); + } +} +function setActiveBranch(suspense, branch) { + suspense.activeBranch = branch; + const { vnode, parentComponent } = suspense; + const el = vnode.el = branch.el; + if (parentComponent && parentComponent.subTree === vnode) { + parentComponent.vnode.el = el; + updateHOCHostEl(parentComponent, el); + } +} +function provide(key, value) { + if (!currentInstance) { + if (true) { + warn2(`provide() can only be used inside setup().`); + } + } else { + let provides = currentInstance.provides; + const parentProvides = currentInstance.parent && currentInstance.parent.provides; + if (parentProvides === provides) { + provides = currentInstance.provides = Object.create(parentProvides); + } + provides[key] = value; + } +} +function inject(key, defaultValue, treatDefaultAsFactory = false) { + const instance = currentInstance || currentRenderingInstance; + if (instance) { + const provides = instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides; + if (provides && key in provides) { + return provides[key]; + } else if (arguments.length > 1) { + return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance.proxy) : defaultValue; + } else if (true) { + warn2(`injection "${String(key)}" not found.`); + } + } else if (true) { + warn2(`inject() can only be used inside setup() or functional components.`); + } +} +function watchEffect(effect2, options) { + return doWatch(effect2, null, options); +} +function watchPostEffect(effect2, options) { + return doWatch(effect2, null, true ? Object.assign(Object.assign({}, options), { flush: "post" }) : { flush: "post" }); +} +function watchSyncEffect(effect2, options) { + return doWatch(effect2, null, true ? Object.assign(Object.assign({}, options), { flush: "sync" }) : { flush: "sync" }); +} +var INITIAL_WATCHER_VALUE = {}; +function watch(source, cb, options) { + if (!isFunction(cb)) { + warn2(`\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`); + } + return doWatch(source, cb, options); +} +function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) { + if (!cb) { + if (immediate !== void 0) { + warn2(`watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`); + } + if (deep !== void 0) { + warn2(`watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`); + } + } + const warnInvalidSource = (s) => { + warn2(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`); + }; + const instance = getCurrentScope() === (currentInstance === null || currentInstance === void 0 ? void 0 : currentInstance.scope) ? currentInstance : null; + let getter; + let forceTrigger = false; + let isMultiSource = false; + if (isRef(source)) { + getter = () => source.value; + forceTrigger = isShallow(source); + } else if (isReactive(source)) { + getter = () => source; + deep = true; + } else if (isArray(source)) { + isMultiSource = true; + forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); + getter = () => source.map((s) => { + if (isRef(s)) { + return s.value; + } else if (isReactive(s)) { + return traverse(s); + } else if (isFunction(s)) { + return callWithErrorHandling( + s, + instance, + 2 + /* ErrorCodes.WATCH_GETTER */ + ); + } else { + warnInvalidSource(s); + } + }); + } else if (isFunction(source)) { + if (cb) { + getter = () => callWithErrorHandling( + source, + instance, + 2 + /* ErrorCodes.WATCH_GETTER */ + ); + } else { + getter = () => { + if (instance && instance.isUnmounted) { + return; + } + if (cleanup) { + cleanup(); + } + return callWithAsyncErrorHandling(source, instance, 3, [onCleanup]); + }; + } + } else { + getter = NOOP; + warnInvalidSource(source); + } + if (cb && deep) { + const baseGetter = getter; + getter = () => traverse(baseGetter()); + } + let cleanup; + let onCleanup = (fn) => { + cleanup = effect2.onStop = () => { + callWithErrorHandling( + fn, + instance, + 4 + /* ErrorCodes.WATCH_CLEANUP */ + ); + }; + }; + let ssrCleanup; + if (isInSSRComponentSetup) { + onCleanup = NOOP; + if (!cb) { + getter(); + } else if (immediate) { + callWithAsyncErrorHandling(cb, instance, 3, [ + getter(), + isMultiSource ? [] : void 0, + onCleanup + ]); + } + if (flush === "sync") { + const ctx = useSSRContext(); + ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []); + } else { + return NOOP; + } + } + let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = () => { + if (!effect2.active) { + return; + } + if (cb) { + const newValue = effect2.run(); + if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) { + if (cleanup) { + cleanup(); + } + callWithAsyncErrorHandling(cb, instance, 3, [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, + onCleanup + ]); + oldValue = newValue; + } + } else { + effect2.run(); + } + }; + job.allowRecurse = !!cb; + let scheduler; + if (flush === "sync") { + scheduler = job; + } else if (flush === "post") { + scheduler = () => queuePostRenderEffect(job, instance && instance.suspense); + } else { + job.pre = true; + if (instance) + job.id = instance.uid; + scheduler = () => queueJob(job); + } + const effect2 = new ReactiveEffect(getter, scheduler); + if (true) { + effect2.onTrack = onTrack; + effect2.onTrigger = onTrigger; + } + if (cb) { + if (immediate) { + job(); + } else { + oldValue = effect2.run(); + } + } else if (flush === "post") { + queuePostRenderEffect(effect2.run.bind(effect2), instance && instance.suspense); + } else { + effect2.run(); + } + const unwatch = () => { + effect2.stop(); + if (instance && instance.scope) { + remove(instance.scope.effects, effect2); + } + }; + if (ssrCleanup) + ssrCleanup.push(unwatch); + return unwatch; +} +function instanceWatch(source, value, options) { + const publicThis = this.proxy; + const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis); + let cb; + if (isFunction(value)) { + cb = value; + } else { + cb = value.handler; + options = value; + } + const cur = currentInstance; + setCurrentInstance(this); + const res = doWatch(getter, cb.bind(publicThis), options); + if (cur) { + setCurrentInstance(cur); + } else { + unsetCurrentInstance(); + } + return res; +} +function createPathGetter(ctx, path) { + const segments = path.split("."); + return () => { + let cur = ctx; + for (let i = 0; i < segments.length && cur; i++) { + cur = cur[segments[i]]; + } + return cur; + }; +} +function traverse(value, seen) { + if (!isObject(value) || value[ + "__v_skip" + /* ReactiveFlags.SKIP */ + ]) { + return value; + } + seen = seen || /* @__PURE__ */ new Set(); + if (seen.has(value)) { + return value; + } + seen.add(value); + if (isRef(value)) { + traverse(value.value, seen); + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], seen); + } + } else if (isSet(value) || isMap(value)) { + value.forEach((v) => { + traverse(v, seen); + }); + } else if (isPlainObject(value)) { + for (const key in value) { + traverse(value[key], seen); + } + } + return value; +} +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state.isMounted = true; + }); + onBeforeUnmount(() => { + state.isUnmounting = true; + }); + return state; +} +var TransitionHookValidator = [Function, Array]; +var BaseTransitionImpl = { + name: `BaseTransition`, + props: { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state = useTransitionState(); + let prevTransitionKey; + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + let child = children[0]; + if (children.length > 1) { + let hasFound = false; + for (const c of children) { + if (c.type !== Comment) { + if (hasFound) { + warn2(" can only be used on a single element or component. Use for lists."); + break; + } + child = c; + hasFound = true; + if (false) + break; + } + } + } + const rawProps = toRaw(props); + const { mode } = rawProps; + if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { + warn2(`invalid mode: ${mode}`); + } + if (state.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getKeepAliveChild(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance); + setTransitionHooks(innerChild, enterHooks); + const oldChild = instance.subTree; + const oldInnerChild = oldChild && getKeepAliveChild(oldChild); + let transitionKeyChanged = false; + const { getTransitionKey } = innerChild.type; + if (getTransitionKey) { + const key = getTransitionKey(); + if (prevTransitionKey === void 0) { + prevTransitionKey = key; + } else if (key !== prevTransitionKey) { + prevTransitionKey = key; + transitionKeyChanged = true; + } + } + if (oldInnerChild && oldInnerChild.type !== Comment && (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) { + const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode === "out-in") { + state.isLeaving = true; + leavingHooks.afterLeave = () => { + state.isLeaving = false; + if (instance.update.active !== false) { + instance.update(); + } + }; + return emptyPlaceholder(child); + } else if (mode === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el._leaveCb = () => { + earlyRemove(); + el._leaveCb = void 0; + delete enterHooks.delayedLeave; + }; + enterHooks.delayedLeave = delayedLeave; + }; + } + } + return child; + }; + } +}; +var BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state; + let leavingVNodesCache = leavingVNodes.get(vnode.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +function resolveTransitionHooks(vnode, props, state, instance) { + const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props; + const key = String(vnode.key); + const leavingVNodesCache = getLeavingNodesForType(state, vnode); + const callHook3 = (hook, args) => { + hook && callWithAsyncErrorHandling(hook, instance, 9, args); + }; + const callAsyncHook = (hook, args) => { + const done = args[1]; + callHook3(hook, args); + if (isArray(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) + done(); + } else if (hook.length <= 1) { + done(); + } + }; + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter; + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter; + } else { + return; + } + } + if (el._leaveCb) { + el._leaveCb( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el._leaveCb) { + leavingVNode.el._leaveCb(); + } + callHook3(hook, [el]); + }, + enter(el) { + let hook = onEnter; + let afterHook = onAfterEnter; + let cancelHook = onEnterCancelled; + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter; + afterHook = onAfterAppear || onAfterEnter; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + const done = el._enterCb = (cancelled) => { + if (called) + return; + called = true; + if (cancelled) { + callHook3(cancelHook, [el]); + } else { + callHook3(afterHook, [el]); + } + if (hooks.delayedLeave) { + hooks.delayedLeave(); + } + el._enterCb = void 0; + }; + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove2) { + const key2 = String(vnode.key); + if (el._enterCb) { + el._enterCb( + true + /* cancelled */ + ); + } + if (state.isUnmounting) { + return remove2(); + } + callHook3(onBeforeLeave, [el]); + let called = false; + const done = el._leaveCb = (cancelled) => { + if (called) + return; + called = true; + remove2(); + if (cancelled) { + callHook3(onLeaveCancelled, [el]); + } else { + callHook3(onAfterLeave, [el]); + } + el._leaveCb = void 0; + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2]; + } + }; + leavingVNodesCache[key2] = vnode; + if (onLeave) { + callAsyncHook(onLeave, [el, done]); + } else { + done(); + } + }, + clone(vnode2) { + return resolveTransitionHooks(vnode2, props, state, instance); + } + }; + return hooks; +} +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode); + vnode.children = null; + return vnode; + } +} +function getKeepAliveChild(vnode) { + return isKeepAlive(vnode) ? vnode.children ? vnode.children[0] : void 0 : vnode; +} +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + setTransitionHooks(vnode.component.subTree, hooks); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); + } else { + vnode.transition = hooks; + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); + if (child.type === Fragment) { + if (child.patchFlag & 128) + keyedFragmentCount++; + ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key)); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2; + } + } + return ret; +} +function defineComponent(options) { + return isFunction(options) ? { setup: options, name: options.name } : options; +} +var isAsyncWrapper = (i) => !!i.type.__asyncLoader; +function defineAsyncComponent(source) { + if (isFunction(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = () => { + retries++; + pendingRequest = null; + return load(); + }; + const load = () => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve2, reject) => { + const userRetry = () => resolve2(retry()); + const userFail = () => reject(err); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (!comp) { + warn2(`Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`); + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + if (comp && !isObject(comp) && !isFunction(comp)) { + throw new Error(`Invalid async component load result: ${comp}`); + } + resolvedComp = comp; + return comp; + })); + }; + return defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = (err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + /* do not throw in dev if user provided error component */ + ); + }; + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = ref(false); + const error = ref(); + const delayed = ref(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error(`Async component timed out after ${timeout}ms.`); + onError(err); + error.value = err; + } + }, timeout); + } + load().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + queueJob(instance.parent.update); + } + }).catch((err) => { + onError(err); + error.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }); + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent); + } + }; + } + }); +} +function createInnerComp(comp, parent) { + const { ref: ref2, props, children, ce } = parent.vnode; + const vnode = createVNode(comp, props, children); + vnode.ref = ref2; + vnode.ce = ce; + delete parent.vnode.ce; + return vnode; +} +var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; +var KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache = /* @__PURE__ */ new Map(); + const keys = /* @__PURE__ */ new Set(); + let current = null; + if (true) { + instance.__v_cache = cache; + } + const parentSuspense = instance.suspense; + const { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext; + const storageContainer = createElement("div"); + sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => { + const instance2 = vnode.component; + move(vnode, container, anchor, 0, parentSuspense); + patch(instance2.vnode, vnode, container, anchor, instance2, parentSuspense, isSVG, vnode.slotScopeIds, optimized); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + invokeArrayFns(instance2.a); + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + sharedContext.deactivate = (vnode) => { + const instance2 = vnode.component; + move(vnode, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da); + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + instance2.isDeactivated = true; + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + function unmount(vnode) { + resetShapeFlag(vnode); + _unmount(vnode, instance, parentSuspense, true); + } + function pruneCache(filter) { + cache.forEach((vnode, key) => { + const name = getComponentName(vnode.type); + if (name && (!filter || !filter(name))) { + pruneCacheEntry(key); + } + }); + } + function pruneCacheEntry(key) { + const cached = cache.get(key); + if (!current || !isSameVNodeType(cached, current)) { + unmount(cached); + } else if (current) { + resetShapeFlag(current); + } + cache.delete(key); + keys.delete(key); + } + watch( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name) => matches(include, name)); + exclude && pruneCache((name) => !matches(exclude, name)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = () => { + if (pendingCacheKey != null) { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + }; + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode = getInnerChild(subTree); + if (cached.type === vnode.type && cached.key === vnode.key) { + resetShapeFlag(vnode); + const da = vnode.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + if (true) { + warn2(`KeepAlive should contain exactly one component child.`); + } + current = null; + return children; + } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode = getInnerChild(rawVNode); + const comp = vnode.type; + const name = getComponentName(isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp); + const { include, exclude, max } = props; + if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { + current = vnode; + return rawVNode; + } + const key = vnode.key == null ? comp : vnode.key; + const cachedVNode = cache.get(key); + if (vnode.el) { + vnode = cloneVNode(vnode); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode.el = cachedVNode.el; + vnode.component = cachedVNode.component; + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition); + } + vnode.shapeFlag |= 512; + keys.delete(key); + keys.add(key); + } else { + keys.add(key); + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value); + } + } + vnode.shapeFlag |= 256; + current = vnode; + return isSuspense(rawVNode.type) ? rawVNode : vnode; + }; + } +}; +var KeepAlive = KeepAliveImpl; +function matches(pattern, name) { + if (isArray(pattern)) { + return pattern.some((p2) => matches(p2, name)); + } else if (isString(pattern)) { + return pattern.split(",").includes(name); + } else if (isRegExp(pattern)) { + return pattern.test(name); + } + return false; +} +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove(keepAliveRoot[type], injected); + }, target); +} +function resetShapeFlag(vnode) { + vnode.shapeFlag &= ~256; + vnode.shapeFlag &= ~512; +} +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + if (target.isUnmounted) { + return; + } + pauseTracking(); + setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + unsetCurrentInstance(); + resetTracking(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } else if (true) { + const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, "")); + warn2(`${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`); + } +} +var createHook = (lifecycle) => (hook, target = currentInstance) => ( + // post-create lifecycle registrations are noops during SSR (except for serverPrefetch) + (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target) +); +var onBeforeMount = createHook( + "bm" + /* LifecycleHooks.BEFORE_MOUNT */ +); +var onMounted = createHook( + "m" + /* LifecycleHooks.MOUNTED */ +); +var onBeforeUpdate = createHook( + "bu" + /* LifecycleHooks.BEFORE_UPDATE */ +); +var onUpdated = createHook( + "u" + /* LifecycleHooks.UPDATED */ +); +var onBeforeUnmount = createHook( + "bum" + /* LifecycleHooks.BEFORE_UNMOUNT */ +); +var onUnmounted = createHook( + "um" + /* LifecycleHooks.UNMOUNTED */ +); +var onServerPrefetch = createHook( + "sp" + /* LifecycleHooks.SERVER_PREFETCH */ +); +var onRenderTriggered = createHook( + "rtg" + /* LifecycleHooks.RENDER_TRIGGERED */ +); +var onRenderTracked = createHook( + "rtc" + /* LifecycleHooks.RENDER_TRACKED */ +); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} +function validateDirectiveName(name) { + if (isBuiltInDirective(name)) { + warn2("Do not use built-in directive ids as custom directive id: " + name); + } +} +function withDirectives(vnode, directives) { + const internalInstance = currentRenderingInstance; + if (internalInstance === null) { + warn2(`withDirectives can only be used inside render functions.`); + return vnode; + } + const instance = getExposeProxy(internalInstance) || internalInstance.proxy; + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; + if (dir) { + if (isFunction(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode; +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + resetTracking(); + } + } +} +var COMPONENTS = "components"; +var DIRECTIVES = "directives"; +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; +} +var NULL_DYNAMIC_COMPONENT = Symbol(); +function resolveDynamicComponent(component) { + if (isString(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name); +} +function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + /* do not include inferred name to avoid breaking existing code */ + ); + if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + ); + if (!res && maybeSelfReference) { + return Component; + } + if (warnMissing && !res) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn2(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + } + return res; + } else if (true) { + warn2(`resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`); + } +} +function resolve(registry, name) { + return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); +} +function renderList(source, renderItem, cache, index) { + let ret; + const cached = cache && cache[index]; + if (isArray(source) || isString(source)) { + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem(source[i], i, void 0, cached && cached[i]); + } + } else if (typeof source === "number") { + if (!Number.isInteger(source)) { + warn2(`The v-for range expect an integer value but got ${source}.`); + } + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); + } + } else if (isObject(source)) { + if (source[Symbol.iterator]) { + ret = Array.from(source, (item, i) => renderItem(item, i, void 0, cached && cached[i])); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached && cached[i]); + } + } + } else { + ret = []; + } + if (cache) { + cache[index] = ret; + } + return ret; +} +function createSlots(slots, dynamicSlots) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i]; + if (isArray(slot)) { + for (let j = 0; j < slot.length; j++) { + slots[slot[j].name] = slot[j].fn; + } + } else if (slot) { + slots[slot.name] = slot.key ? (...args) => { + const res = slot.fn(...args); + if (res) + res.key = slot.key; + return res; + } : slot.fn; + } + } + return slots; +} +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) { + if (name !== "default") + props.name = name; + return createVNode("slot", props, fallback && fallback()); + } + let slot = slots[name]; + if (slot && slot.length > 1) { + warn2(`SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`); + slot = () => []; + } + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const rendered = createBlock( + Fragment, + { + key: props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key || `_${name}` + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + /* PatchFlags.BAIL */ + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) + return true; + if (child.type === Comment) + return false; + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {}; + if (!isObject(obj)) { + warn2(`v-on with no argument expects an object value.`); + return ret; + } + for (const key in obj) { + ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; + } + return ret; +} +var getPublicInstance = (i) => { + if (!i) + return null; + if (isStatefulComponent(i)) + return getExposeProxy(i) || i.proxy; + return getPublicInstance(i.parent); +}; +var publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + extend(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => true ? shallowReadonly(i.props) : i.props, + $attrs: (i) => true ? shallowReadonly(i.attrs) : i.attrs, + $slots: (i) => true ? shallowReadonly(i.slots) : i.slots, + $refs: (i) => true ? shallowReadonly(i.refs) : i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $emit: (i) => i.emit, + $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type, + $forceUpdate: (i) => i.f || (i.f = () => queueJob(i.update)), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP + }) +); +var isReservedPrefix = (key) => key === "_" || key === "$"; +var hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); +var PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + if (key === "__isVue") { + return true; + } + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key]; + case 2: + return data[key]; + case 4: + return ctx[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2; + return data[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) + ) { + accessCache[key] = 3; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance, "get", key); + markAttrsAccessed(); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + key.indexOf("__v") !== 0)) { + if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { + warn2(`Property ${JSON.stringify(key)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`); + } else if (instance === currentRenderingInstance) { + warn2(`Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`); + } + } + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { + warn2(`Cannot mutate + + + + +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/assets/app.4568d692.js b/docs/.vitepress/dist/assets/app.4568d692.js new file mode 100644 index 000000000..db0cfea5f --- /dev/null +++ b/docs/.vitepress/dist/assets/app.4568d692.js @@ -0,0 +1 @@ +import{a1 as p,d as u,I as s,a2 as c,u as l,h as d,l as f,a3 as m,a4 as h,a5 as A,a6 as y,a7 as g,a8 as P,a9 as v,aa as w,ab as C,ac as R,ad as _,ae as b,af as D}from"./chunks/framework.8a749e37.js";import{t as r}from"./chunks/theme.e502f980.js";const E={...r,Layout:()=>p(r.Layout,null,{}),enhanceApp({app:e,router:a,siteData:t}){}};function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=i(E),L=u({name:"VitePressApp",setup(){const{site:e}=l();return d(()=>{f(()=>{document.documentElement.lang=e.value.lang,document.documentElement.dir=e.value.dir})}),m(),h(),A(),n.setup&&n.setup(),()=>p(n.Layout)}});async function T(){const e=S(),a=O();a.provide(y,e);const t=g(e.route);return a.provide(P,t),a.component("Content",v),a.component("ClientOnly",w),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:C}),{app:a,router:e,data:t}}function O(){return R(L)}function S(){let e=s,a;return _(t=>{let o=b(t);return e&&(a=o),(e||a===o)&&(o=o.replace(/\.js$/,".lean.js")),s&&(e=!1),D(()=>import(o),[])},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{c(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/docs/.vitepress/dist/assets/chunks/framework.8a749e37.js b/docs/.vitepress/dist/assets/chunks/framework.8a749e37.js new file mode 100644 index 000000000..1dcc2efda --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/framework.8a749e37.js @@ -0,0 +1,2 @@ +function Wn(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r!!n[r.toLowerCase()]:r=>!!n[r]}function Vn(e){if(N(e)){const t={};for(let n=0;n{if(n){const s=n.split(yi);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function qn(e){let t="";if(re(e))t=e;else if(N(e))for(let n=0;nre(e)?e:e==null?"":N(e)||ee(e)&&(e.toString===cr||!U(e.toString))?JSON.stringify(e,ir,2):String(e),ir=(e,t)=>t&&t.__v_isRef?ir(e,t.value):ut(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:or(t)?{[`Set(${t.size})`]:[...t.values()]}:ee(t)&&!N(t)&&!fr(t)?String(t):t,te={},ft=[],Re=()=>{},Ti=()=>!1,vi=/^on[^a-z]/,Lt=e=>vi.test(e),zn=e=>e.startsWith("onUpdate:"),le=Object.assign,Yn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ai=Object.prototype.hasOwnProperty,q=(e,t)=>Ai.call(e,t),N=Array.isArray,ut=e=>on(e)==="[object Map]",or=e=>on(e)==="[object Set]",U=e=>typeof e=="function",re=e=>typeof e=="string",Jn=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",lr=e=>ee(e)&&U(e.then)&&U(e.catch),cr=Object.prototype.toString,on=e=>cr.call(e),Oi=e=>on(e).slice(8,-1),fr=e=>on(e)==="[object Object]",Xn=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Tt=Wn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ln=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ri=/-(\w)/g,Se=ln(e=>e.replace(Ri,(t,n)=>n?n.toUpperCase():"")),Ii=/\B([A-Z])/g,it=ln(e=>e.replace(Ii,"-$1").toLowerCase()),cn=ln(e=>e.charAt(0).toUpperCase()+e.slice(1)),Yt=ln(e=>e?`on${cn(e)}`:""),Rt=(e,t)=>!Object.is(e,t),wn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Pi=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Fi=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let _s;const Mi=()=>_s||(_s=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let _e;class Si{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=_e;try{return _e=this,t()}finally{_e=n}}}on(){_e=this}off(){_e=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},ur=e=>(e.w&Ve)>0,ar=e=>(e.n&Ve)>0,$i=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s{(d==="length"||d>=f)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":N(e)?Xn(n)&&l.push(o.get("length")):(l.push(o.get(st)),ut(e)&&l.push(o.get(Fn)));break;case"delete":N(e)||(l.push(o.get(st)),ut(e)&&l.push(o.get(Fn)));break;case"set":ut(e)&&l.push(o.get(st));break}if(l.length===1)l[0]&&Mn(l[0]);else{const f=[];for(const a of l)a&&f.push(...a);Mn(Zn(f))}}function Mn(e,t){const n=N(e)?e:[...e];for(const s of n)s.computed&&ys(s);for(const s of n)s.computed||ys(s)}function ys(e,t){(e!==Ae||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Bi=Wn("__proto__,__v_isRef,__isVue"),pr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Jn)),Ui=Gn(),ji=Gn(!1,!0),Di=Gn(!0),ws=Ki();function Ki(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=Y(this);for(let i=0,o=this.length;i{e[t]=function(...n){yt();const s=Y(this)[t].apply(this,n);return wt(),s}}),e}function ki(e){const t=Y(this);return pe(t,"has",e),t.hasOwnProperty(e)}function Gn(e=!1,t=!1){return function(s,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&i===(e?t?io:yr:t?br:_r).get(s))return s;const o=N(s);if(!e){if(o&&q(ws,r))return Reflect.get(ws,r,i);if(r==="hasOwnProperty")return ki}const l=Reflect.get(s,r,i);return(Jn(r)?pr.has(r):Bi(r))||(e||pe(s,"get",r),t)?l:fe(l)?o&&Xn(r)?l:l.value:ee(l)?e?wr(l):un(l):l}}const Wi=gr(),Vi=gr(!0);function gr(e=!1){return function(n,s,r,i){let o=n[s];if(mt(o)&&fe(o)&&!fe(r))return!1;if(!e&&(!Gt(r)&&!mt(r)&&(o=Y(o),r=Y(r)),!N(n)&&fe(o)&&!fe(r)))return o.value=r,!0;const l=N(n)&&Xn(s)?Number(s)e,fn=e=>Reflect.getPrototypeOf(e);function Ut(e,t,n=!1,s=!1){e=e.__v_raw;const r=Y(e),i=Y(t);n||(t!==i&&pe(r,"get",t),pe(r,"get",i));const{has:o}=fn(r),l=s?es:n?ss:It;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 jt(e,t=!1){const n=this.__v_raw,s=Y(n),r=Y(e);return t||(e!==r&&pe(s,"has",e),pe(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Dt(e,t=!1){return e=e.__v_raw,!t&&pe(Y(e),"iterate",st),Reflect.get(e,"size",e)}function Cs(e){e=Y(e);const t=Y(this);return fn(t).has.call(t,e)||(t.add(e),$e(t,"add",e,e)),this}function xs(e,t){t=Y(t);const n=Y(this),{has:s,get:r}=fn(n);let i=s.call(n,e);i||(e=Y(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?Rt(t,o)&&$e(n,"set",e,t):$e(n,"add",e,t),this}function Es(e){const t=Y(this),{has:n,get:s}=fn(t);let r=n.call(t,e);r||(e=Y(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 Ts(){const e=Y(this),t=e.size!==0,n=e.clear();return t&&$e(e,"clear",void 0,void 0),n}function Kt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=Y(o),f=t?es:e?ss:It;return!e&&pe(l,"iterate",st),o.forEach((a,d)=>s.call(r,f(a),f(d),i))}}function kt(e,t,n){return function(...s){const r=this.__v_raw,i=Y(r),o=ut(i),l=e==="entries"||e===Symbol.iterator&&o,f=e==="keys"&&o,a=r[e](...s),d=n?es:t?ss:It;return!t&&pe(i,"iterate",f?Fn:st),{next(){const{value:p,done:y}=a.next();return y?{value:p,done:y}:{value:l?[d(p[0]),d(p[1])]:d(p),done:y}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:this}}function Zi(){const e={get(i){return Ut(this,i)},get size(){return Dt(this)},has:jt,add:Cs,set:xs,delete:Es,clear:Ts,forEach:Kt(!1,!1)},t={get(i){return Ut(this,i,!1,!0)},get size(){return Dt(this)},has:jt,add:Cs,set:xs,delete:Es,clear:Ts,forEach:Kt(!1,!0)},n={get(i){return Ut(this,i,!0)},get size(){return Dt(this,!0)},has(i){return jt.call(this,i,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Kt(!0,!1)},s={get(i){return Ut(this,i,!0,!0)},get size(){return Dt(this,!0)},has(i){return jt.call(this,i,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Kt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=kt(i,!1,!1),n[i]=kt(i,!0,!1),t[i]=kt(i,!1,!0),s[i]=kt(i,!0,!0)}),[e,n,t,s]}const[Qi,Gi,eo,to]=Zi();function ts(e,t){const n=t?e?to:eo:e?Gi:Qi;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(q(n,r)&&r in s?n:s,r,i)}const no={get:ts(!1,!1)},so={get:ts(!1,!0)},ro={get:ts(!0,!1)},_r=new WeakMap,br=new WeakMap,yr=new WeakMap,io=new WeakMap;function oo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function lo(e){return e.__v_skip||!Object.isExtensible(e)?0:oo(Oi(e))}function un(e){return mt(e)?e:ns(e,!1,mr,no,_r)}function co(e){return ns(e,!1,Xi,so,br)}function wr(e){return ns(e,!0,Ji,ro,yr)}function ns(e,t,n,s,r){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=lo(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function at(e){return mt(e)?at(e.__v_raw):!!(e&&e.__v_isReactive)}function mt(e){return!!(e&&e.__v_isReadonly)}function Gt(e){return!!(e&&e.__v_isShallow)}function Cr(e){return at(e)||mt(e)}function Y(e){const t=e&&e.__v_raw;return t?Y(t):e}function vt(e){return Qt(e,"__v_skip",!0),e}const It=e=>ee(e)?un(e):e,ss=e=>ee(e)?wr(e):e;function xr(e){ke&&Ae&&(e=Y(e),hr(e.dep||(e.dep=Zn())))}function Er(e,t){e=Y(e);const n=e.dep;n&&Mn(n)}function fe(e){return!!(e&&e.__v_isRef===!0)}function Tr(e){return vr(e,!1)}function fo(e){return vr(e,!0)}function vr(e,t){return fe(e)?e:new uo(e,t)}class uo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Y(t),this._value=n?t:It(t)}get value(){return xr(this),this._value}set value(t){const n=this.__v_isShallow||Gt(t)||mt(t);t=n?t:Y(t),Rt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:It(t),Er(this))}}function ao(e){return fe(e)?e.value:e}const ho={get:(e,t,n)=>ao(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return fe(r)&&!fe(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ar(e){return at(e)?e:new Proxy(e,ho)}var Or;class po{constructor(t,n,s,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[Or]=!1,this._dirty=!0,this.effect=new Qn(t,()=>{this._dirty||(this._dirty=!0,Er(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=Y(this);return xr(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}Or="__v_isReadonly";function go(e,t,n=!1){let s,r;const i=U(e);return i?(s=e,r=Re):(s=e.get,r=e.set),new po(s,r,i||!r,n)}function We(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){an(i,t,n)}return r}function xe(e,t,n,s){if(U(e)){const i=We(e,t,n,s);return i&&lr(i)&&i.catch(o=>{an(o,t,n)}),i}const r=[];for(let i=0;i>>1;Ft(ce[s])Me&&ce.splice(t,1)}function yo(e){N(e)?dt.push(...e):(!Ne||!Ne.includes(e,e.allowRecurse?Ge+1:Ge))&&dt.push(e),Pr()}function vs(e,t=Pt?Me+1:0){for(;tFt(n)-Ft(s)),Ge=0;Gee.id==null?1/0:e.id,wo=(e,t)=>{const n=Ft(e)-Ft(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Fr(e){Sn=!1,Pt=!0,ce.sort(wo);const t=Re;try{for(Me=0;Mere(O)?O.trim():O)),p&&(r=n.map(Pi))}let l,f=s[l=Yt(t)]||s[l=Yt(Se(t))];!f&&i&&(f=s[l=Yt(it(t))]),f&&xe(f,e,6,r);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,xe(a,e,6,r)}}function Mr(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(!U(e)){const f=a=>{const d=Mr(a,t,!0);d&&(l=!0,le(o,d))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!i&&!l?(ee(e)&&s.set(e,null),null):(N(i)?i.forEach(f=>o[f]=null):le(o,i),ee(e)&&s.set(e,o),o)}function dn(e,t){return!e||!Lt(t)?!1:(t=t.slice(2).replace(/Once$/,""),q(e,t[0].toLowerCase()+t.slice(1))||q(e,it(t))||q(e,t))}let ue=null,hn=null;function tn(e){const t=ue;return ue=e,hn=e&&e.type.__scopeId||null,t}function Tc(e){hn=e}function vc(){hn=null}function xo(e,t=ue,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&Ns(-1);const i=tn(t);let o;try{o=e(...r)}finally{tn(i),s._d&&Ns(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Cn(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[o],slots:l,attrs:f,emit:a,render:d,renderCache:p,data:y,setupState:O,ctx:L,inheritAttrs:P}=e;let W,_;const E=tn(e);try{if(n.shapeFlag&4){const H=r||s;W=ve(d.call(H,H,p,i,O,y,L)),_=f}else{const H=t;W=ve(H.length>1?H(i,{attrs:f,slots:l,emit:a}):H(i,null)),_=t.props?f:Eo(f)}}catch(H){Ot.length=0,an(H,e,1),W=oe(be)}let A=W;if(_&&P!==!1){const H=Object.keys(_),{shapeFlag:D}=A;H.length&&D&7&&(o&&H.some(zn)&&(_=To(_,o)),A=qe(A,_))}return n.dirs&&(A=qe(A),A.dirs=A.dirs?A.dirs.concat(n.dirs):n.dirs),n.transition&&(A.transition=n.transition),W=A,tn(E),W}const Eo=e=>{let t;for(const n in e)(n==="class"||n==="style"||Lt(n))&&((t||(t={}))[n]=e[n]);return t},To=(e,t)=>{const n={};for(const s in e)(!zn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function vo(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:f}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?As(s,o,a):!!o;if(f&8){const d=t.dynamicProps;for(let p=0;pe.__isSuspense;function Sr(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):yo(e)}function Ro(e,t){if(se){let n=se.provides;const s=se.parent&&se.parent.provides;s===n&&(n=se.provides=Object.create(s)),n[e]=t}}function ht(e,t,n=!1){const s=se||ue;if(s){const r=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&U(t)?t.call(s.proxy):t}}function Io(e,t){return pn(e,null,t)}function Po(e,t){return pn(e,null,{flush:"post"})}const Wt={};function Jt(e,t,n){return pn(e,t,n)}function pn(e,t,{immediate:n,deep:s,flush:r,onTrack:i,onTrigger:o}=te){const l=Ni()===(se==null?void 0:se.scope)?se:null;let f,a=!1,d=!1;if(fe(e)?(f=()=>e.value,a=Gt(e)):at(e)?(f=()=>e,s=!0):N(e)?(d=!0,a=e.some(A=>at(A)||Gt(A)),f=()=>e.map(A=>{if(fe(A))return A.value;if(at(A))return ct(A);if(U(A))return We(A,l,2)})):U(e)?t?f=()=>We(e,l,2):f=()=>{if(!(l&&l.isUnmounted))return p&&p(),xe(e,l,3,[y])}:f=Re,t&&s){const A=f;f=()=>ct(A())}let p,y=A=>{p=_.onStop=()=>{We(A,l,4)}},O;if(St)if(y=Re,t?n&&xe(t,l,3,[f(),d?[]:void 0,y]):f(),r==="sync"){const A=xl();O=A.__watcherHandles||(A.__watcherHandles=[])}else return Re;let L=d?new Array(e.length).fill(Wt):Wt;const P=()=>{if(_.active)if(t){const A=_.run();(s||a||(d?A.some((H,D)=>Rt(H,L[D])):Rt(A,L)))&&(p&&p(),xe(t,l,3,[A,L===Wt?void 0:d&&L[0]===Wt?[]:L,y]),L=A)}else _.run()};P.allowRecurse=!!t;let W;r==="sync"?W=P:r==="post"?W=()=>he(P,l&&l.suspense):(P.pre=!0,l&&(P.id=l.uid),W=()=>is(P));const _=new Qn(f,W);t?n?P():L=_.run():r==="post"?he(_.run.bind(_),l&&l.suspense):_.run();const E=()=>{_.stop(),l&&l.scope&&Yn(l.scope.effects,_)};return O&&O.push(E),E}function Fo(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?Lr(s,e):()=>s[e]:e.bind(s,s);let i;U(t)?i=t:(i=t.handler,n=t);const o=se;bt(this);const l=pn(r,i.bind(s),n);return o?bt(o):rt(),l}function Lr(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r{ct(n,t)});else if(fr(e))for(const n in e)ct(e[n],t);return e}function Mo(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Nt(()=>{e.isMounted=!0}),jr(()=>{e.isUnmounting=!0}),e}const ye=[Function,Array],So={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ye,onEnter:ye,onAfterEnter:ye,onEnterCancelled:ye,onBeforeLeave:ye,onLeave:ye,onAfterLeave:ye,onLeaveCancelled:ye,onBeforeAppear:ye,onAppear:ye,onAfterAppear:ye,onAppearCancelled:ye},setup(e,{slots:t}){const n=us(),s=Mo();let r;return()=>{const i=t.default&&Hr(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const P of i)if(P.type!==be){o=P;break}}const l=Y(e),{mode:f}=l;if(s.isLeaving)return xn(o);const a=Os(o);if(!a)return xn(o);const d=Ln(a,l,s,n);Nn(a,d);const p=n.subTree,y=p&&Os(p);let O=!1;const{getTransitionKey:L}=a.type;if(L){const P=L();r===void 0?r=P:P!==r&&(r=P,O=!0)}if(y&&y.type!==be&&(!et(a,y)||O)){const P=Ln(y,l,s,n);if(Nn(y,P),f==="out-in")return s.isLeaving=!0,P.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},xn(o);f==="in-out"&&a.type!==be&&(P.delayLeave=(W,_,E)=>{const A=$r(s,y);A[String(y.key)]=y,W._leaveCb=()=>{_(),W._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=E})}return o}}},Nr=So;function $r(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 Ln(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:f,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:p,onLeave:y,onAfterLeave:O,onLeaveCancelled:L,onBeforeAppear:P,onAppear:W,onAfterAppear:_,onAppearCancelled:E}=t,A=String(e.key),H=$r(n,e),D=(v,j)=>{v&&xe(v,s,9,j)},Z=(v,j)=>{const B=j[1];D(v,j),N(v)?v.every(z=>z.length<=1)&&B():v.length<=1&&B()},V={mode:i,persisted:o,beforeEnter(v){let j=l;if(!n.isMounted)if(r)j=P||l;else return;v._leaveCb&&v._leaveCb(!0);const B=H[A];B&&et(e,B)&&B.el._leaveCb&&B.el._leaveCb(),D(j,[v])},enter(v){let j=f,B=a,z=d;if(!n.isMounted)if(r)j=W||f,B=_||a,z=E||d;else return;let R=!1;const K=v._enterCb=F=>{R||(R=!0,F?D(z,[v]):D(B,[v]),V.delayedLeave&&V.delayedLeave(),v._enterCb=void 0)};j?Z(j,[v,K]):K()},leave(v,j){const B=String(e.key);if(v._enterCb&&v._enterCb(!0),n.isUnmounting)return j();D(p,[v]);let z=!1;const R=v._leaveCb=K=>{z||(z=!0,j(),K?D(L,[v]):D(O,[v]),v._leaveCb=void 0,H[B]===e&&delete H[B])};H[B]=e,y?Z(y,[v,R]):R()},clone(v){return Ln(v,t,n,s)}};return V}function xn(e){if(gn(e))return e=qe(e),e.children=null,e}function Os(e){return gn(e)?e.children?e.children[0]:void 0:e}function Nn(e,t){e.shapeFlag&6&&e.component?Nn(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 Hr(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,gn=e=>e.type.__isKeepAlive;function Lo(e,t){Ur(e,"a",t)}function No(e,t){Ur(e,"da",t)}function Ur(e,t,n=se){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(mn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)gn(r.parent.vnode)&&$o(s,t,n,r),r=r.parent}}function $o(e,t,n,s){const r=mn(t,e,s,!0);$t(()=>{Yn(s[t],r)},n)}function mn(e,t,n=se,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;yt(),bt(n);const l=xe(t,n,e,o);return rt(),wt(),l});return s?r.unshift(i):r.push(i),i}}const He=e=>(t,n=se)=>(!St||e==="sp")&&mn(e,(...s)=>t(...s),n),Ho=He("bm"),Nt=He("m"),Bo=He("bu"),Uo=He("u"),jr=He("bum"),$t=He("um"),jo=He("sp"),Do=He("rtg"),Ko=He("rtc");function ko(e,t=se){mn("ec",e,t)}function Fe(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;ot(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,f=o.length;lrn(t)?!(t.type===be||t.type===de&&!kr(t.children)):!0)?e:null}function Pc(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:Yt(s)]=e[s];return n}const $n=e=>e?ri(e)?as(e)||e.proxy:$n(e.parent):null,At=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=>$n(e.parent),$root:e=>$n(e.root),$emit:e=>e.emit,$options:e=>ls(e),$forceUpdate:e=>e.f||(e.f=()=>is(e.update)),$nextTick:e=>e.n||(e.n=Ir.bind(e.proxy)),$watch:e=>Fo.bind(e)}),En=(e,t)=>e!==te&&!e.__isScriptSetup&&q(e,t),Wo={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:f}=e;let a;if(t[0]!=="$"){const O=o[t];if(O!==void 0)switch(O){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(En(s,t))return o[t]=1,s[t];if(r!==te&&q(r,t))return o[t]=2,r[t];if((a=e.propsOptions[0])&&q(a,t))return o[t]=3,i[t];if(n!==te&&q(n,t))return o[t]=4,n[t];Hn&&(o[t]=0)}}const d=At[t];let p,y;if(d)return t==="$attrs"&&pe(e,"get",t),d(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(n!==te&&q(n,t))return o[t]=4,n[t];if(y=f.config.globalProperties,q(y,t))return y[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return En(r,t)?(r[t]=n,!0):s!==te&&q(s,t)?(s[t]=n,!0):q(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!==te&&q(e,o)||En(t,o)||(l=i[0])&&q(l,o)||q(s,o)||q(At,o)||q(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:q(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let Hn=!0;function Vo(e){const t=ls(e),n=e.proxy,s=e.ctx;Hn=!1,t.beforeCreate&&Is(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:f,inject:a,created:d,beforeMount:p,mounted:y,beforeUpdate:O,updated:L,activated:P,deactivated:W,beforeDestroy:_,beforeUnmount:E,destroyed:A,unmounted:H,render:D,renderTracked:Z,renderTriggered:V,errorCaptured:v,serverPrefetch:j,expose:B,inheritAttrs:z,components:R,directives:K,filters:F}=t;if(a&&qo(a,s,null,e.appContext.config.unwrapInjectedRef),o)for(const ne in o){const Q=o[ne];U(Q)&&(s[ne]=Q.bind(n))}if(r){const ne=r.call(n,n);ee(ne)&&(e.data=un(ne))}if(Hn=!0,i)for(const ne in i){const Q=i[ne],ze=U(Q)?Q.bind(n,n):U(Q.get)?Q.get.bind(n,n):Re,Ht=!U(Q)&&U(Q.set)?Q.set.bind(n):Re,Ye=Te({get:ze,set:Ht});Object.defineProperty(s,ne,{enumerable:!0,configurable:!0,get:()=>Ye.value,set:Ie=>Ye.value=Ie})}if(l)for(const ne in l)Wr(l[ne],s,n,ne);if(f){const ne=U(f)?f.call(n):f;Reflect.ownKeys(ne).forEach(Q=>{Ro(Q,ne[Q])})}d&&Is(d,e,"c");function J(ne,Q){N(Q)?Q.forEach(ze=>ne(ze.bind(n))):Q&&ne(Q.bind(n))}if(J(Ho,p),J(Nt,y),J(Bo,O),J(Uo,L),J(Lo,P),J(No,W),J(ko,v),J(Ko,Z),J(Do,V),J(jr,E),J($t,H),J(jo,j),N(B))if(B.length){const ne=e.exposed||(e.exposed={});B.forEach(Q=>{Object.defineProperty(ne,Q,{get:()=>n[Q],set:ze=>n[Q]=ze})})}else e.exposed||(e.exposed={});D&&e.render===Re&&(e.render=D),z!=null&&(e.inheritAttrs=z),R&&(e.components=R),K&&(e.directives=K)}function qo(e,t,n=Re,s=!1){N(e)&&(e=Bn(e));for(const r in e){const i=e[r];let o;ee(i)?"default"in i?o=ht(i.from||r,i.default,!0):o=ht(i.from||r):o=ht(i),fe(o)&&s?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:l=>o.value=l}):t[r]=o}}function Is(e,t,n){xe(N(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Wr(e,t,n,s){const r=s.includes(".")?Lr(n,s):()=>n[s];if(re(e)){const i=t[e];U(i)&&Jt(r,i)}else if(U(e))Jt(r,e.bind(n));else if(ee(e))if(N(e))e.forEach(i=>Wr(i,t,n,s));else{const i=U(e.handler)?e.handler.bind(n):t[e.handler];U(i)&&Jt(r,i,e)}}function ls(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let f;return l?f=l:!r.length&&!n&&!s?f=t:(f={},r.length&&r.forEach(a=>nn(f,a,o,!0)),nn(f,t,o)),ee(t)&&i.set(t,f),f}function nn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&nn(e,i,n,!0),r&&r.forEach(o=>nn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=zo[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const zo={data:Ps,props:Qe,emits:Qe,methods:Qe,computed:Qe,beforeCreate:ae,created:ae,beforeMount:ae,mounted:ae,beforeUpdate:ae,updated:ae,beforeDestroy:ae,beforeUnmount:ae,destroyed:ae,unmounted:ae,activated:ae,deactivated:ae,errorCaptured:ae,serverPrefetch:ae,components:Qe,directives:Qe,watch:Jo,provide:Ps,inject:Yo};function Ps(e,t){return t?e?function(){return le(U(e)?e.call(this,this):e,U(t)?t.call(this,this):t)}:t:e}function Yo(e,t){return Qe(Bn(e),Bn(t))}function Bn(e){if(N(e)){const t={};for(let n=0;n0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let p=0;p{f=!0;const[y,O]=qr(p,t,!0);le(o,y),O&&l.push(...O)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!f)return ee(e)&&s.set(e,ft),ft;if(N(i))for(let d=0;d-1,O[1]=P<0||L-1||q(O,"default"))&&l.push(p)}}}const a=[o,l];return ee(e)&&s.set(e,a),a}function Fs(e){return e[0]!=="$"}function Ms(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Ss(e,t){return Ms(e)===Ms(t)}function Ls(e,t){return N(t)?t.findIndex(n=>Ss(n,e)):U(t)&&Ss(t,e)?0:-1}const zr=e=>e[0]==="_"||e==="$stable",cs=e=>N(e)?e.map(ve):[ve(e)],Qo=(e,t,n)=>{if(t._n)return t;const s=xo((...r)=>cs(t(...r)),n);return s._c=!1,s},Yr=(e,t,n)=>{const s=e._ctx;for(const r in e){if(zr(r))continue;const i=e[r];if(U(i))t[r]=Qo(r,i,s);else if(i!=null){const o=cs(i);t[r]=()=>o}}},Jr=(e,t)=>{const n=cs(t);e.slots.default=()=>n},Go=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Y(t),Qt(t,"_",n)):Yr(t,e.slots={})}else e.slots={},t&&Jr(e,t);Qt(e.slots,_n,1)},el=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(le(r,t),!n&&l===1&&delete r._):(i=!t.$stable,Yr(t,r)),o=t}else t&&(Jr(e,t),o={default:1});if(i)for(const l in r)!zr(l)&&!(l in o)&&delete r[l]};function Xr(){return{app:null,config:{isNativeTag:Ti,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let tl=0;function nl(e,t){return function(s,r=null){U(s)||(s=Object.assign({},s)),r!=null&&!ee(r)&&(r=null);const i=Xr(),o=new Set;let l=!1;const f=i.app={_uid:tl++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:El,get config(){return i.config},set config(a){},use(a,...d){return o.has(a)||(a&&U(a.install)?(o.add(a),a.install(f,...d)):U(a)&&(o.add(a),a(f,...d))),f},mixin(a){return i.mixins.includes(a)||i.mixins.push(a),f},component(a,d){return d?(i.components[a]=d,f):i.components[a]},directive(a,d){return d?(i.directives[a]=d,f):i.directives[a]},mount(a,d,p){if(!l){const y=oe(s,r);return y.appContext=i,d&&t?t(y,a):e(y,a,p),l=!0,f._container=a,a.__vue_app__=f,as(y.component)||y.component.proxy}},unmount(){l&&(e(null,f._container),delete f._container.__vue_app__)},provide(a,d){return i.provides[a]=d,f}};return f}}function sn(e,t,n,s,r=!1){if(N(e)){e.forEach((y,O)=>sn(y,t&&(N(t)?t[O]:t),n,s,r));return}if(pt(s)&&!r)return;const i=s.shapeFlag&4?as(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:f}=e,a=t&&t.r,d=l.refs===te?l.refs={}:l.refs,p=l.setupState;if(a!=null&&a!==f&&(re(a)?(d[a]=null,q(p,a)&&(p[a]=null)):fe(a)&&(a.value=null)),U(f))We(f,l,12,[o,d]);else{const y=re(f),O=fe(f);if(y||O){const L=()=>{if(e.f){const P=y?q(p,f)?p[f]:d[f]:f.value;r?N(P)&&Yn(P,i):N(P)?P.includes(i)||P.push(i):y?(d[f]=[i],q(p,f)&&(p[f]=d[f])):(f.value=[i],e.k&&(d[e.k]=f.value))}else y?(d[f]=o,q(p,f)&&(p[f]=o)):O&&(f.value=o,e.k&&(d[e.k]=o))};o?(L.id=-1,he(L,n)):L()}}}let Ue=!1;const Vt=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",qt=e=>e.nodeType===8;function sl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:f,createComment:a}}=e,d=(_,E)=>{if(!E.hasChildNodes()){n(null,_,E),en(),E._vnode=_;return}Ue=!1,p(E.firstChild,_,null,null,null),en(),E._vnode=_,Ue&&console.error("Hydration completed but contains mismatches.")},p=(_,E,A,H,D,Z=!1)=>{const V=qt(_)&&_.data==="[",v=()=>P(_,E,A,H,D,V),{type:j,ref:B,shapeFlag:z,patchFlag:R}=E;let K=_.nodeType;E.el=_,R===-2&&(Z=!1,E.dynamicChildren=null);let F=null;switch(j){case _t:K!==3?E.children===""?(f(E.el=r(""),o(_),_),F=_):F=v():(_.data!==E.children&&(Ue=!0,_.data=E.children),F=i(_));break;case be:K!==8||V?F=v():F=i(_);break;case gt:if(V&&(_=i(_),K=_.nodeType),K===1||K===3){F=_;const ge=!E.children.length;for(let J=0;J{Z=Z||!!E.dynamicChildren;const{type:V,props:v,patchFlag:j,shapeFlag:B,dirs:z}=E,R=V==="input"&&z||V==="option";if(R||j!==-1){if(z&&Fe(E,null,A,"created"),v)if(R||!Z||j&48)for(const F in v)(R&&F.endsWith("value")||Lt(F)&&!Tt(F))&&s(_,F,null,v[F],!1,void 0,A);else v.onClick&&s(_,"onClick",null,v.onClick,!1,void 0,A);let K;if((K=v&&v.onVnodeBeforeMount)&&we(K,A,E),z&&Fe(E,null,A,"beforeMount"),((K=v&&v.onVnodeMounted)||z)&&Sr(()=>{K&&we(K,A,E),z&&Fe(E,null,A,"mounted")},H),B&16&&!(v&&(v.innerHTML||v.textContent))){let F=O(_.firstChild,E,_,A,H,D,Z);for(;F;){Ue=!0;const ge=F;F=F.nextSibling,l(ge)}}else B&8&&_.textContent!==E.children&&(Ue=!0,_.textContent=E.children)}return _.nextSibling},O=(_,E,A,H,D,Z,V)=>{V=V||!!E.dynamicChildren;const v=E.children,j=v.length;for(let B=0;B{const{slotScopeIds:V}=E;V&&(D=D?D.concat(V):V);const v=o(_),j=O(i(_),E,v,A,H,D,Z);return j&&qt(j)&&j.data==="]"?i(E.anchor=j):(Ue=!0,f(E.anchor=a("]"),v,j),j)},P=(_,E,A,H,D,Z)=>{if(Ue=!0,E.el=null,Z){const j=W(_);for(;;){const B=i(_);if(B&&B!==j)l(B);else break}}const V=i(_),v=o(_);return l(_),n(null,E,v,V,A,H,Vt(v),D),V},W=_=>{let E=0;for(;_;)if(_=i(_),_&&qt(_)&&(_.data==="["&&E++,_.data==="]")){if(E===0)return i(_);E--}return _};return[d,p]}const he=Sr;function rl(e){return il(e,sl)}function il(e,t){const n=Mi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:f,setText:a,setElementText:d,parentNode:p,nextSibling:y,setScopeId:O=Re,insertStaticContent:L}=e,P=(c,u,h,m=null,g=null,C=null,T=!1,w=null,x=!!u.dynamicChildren)=>{if(c===u)return;c&&!et(c,u)&&(m=Bt(c),Ie(c,g,C,!0),c=null),u.patchFlag===-2&&(x=!1,u.dynamicChildren=null);const{type:b,ref:M,shapeFlag:I}=u;switch(b){case _t:W(c,u,h,m);break;case be:_(c,u,h,m);break;case gt:c==null&&E(u,h,m,T);break;case de:R(c,u,h,m,g,C,T,w,x);break;default:I&1?D(c,u,h,m,g,C,T,w,x):I&6?K(c,u,h,m,g,C,T,w,x):(I&64||I&128)&&b.process(c,u,h,m,g,C,T,w,x,ot)}M!=null&&g&&sn(M,c&&c.ref,C,u||c,!u)},W=(c,u,h,m)=>{if(c==null)s(u.el=l(u.children),h,m);else{const g=u.el=c.el;u.children!==c.children&&a(g,u.children)}},_=(c,u,h,m)=>{c==null?s(u.el=f(u.children||""),h,m):u.el=c.el},E=(c,u,h,m)=>{[c.el,c.anchor]=L(c.children,u,h,m,c.el,c.anchor)},A=({el:c,anchor:u},h,m)=>{let g;for(;c&&c!==u;)g=y(c),s(c,h,m),c=g;s(u,h,m)},H=({el:c,anchor:u})=>{let h;for(;c&&c!==u;)h=y(c),r(c),c=h;r(u)},D=(c,u,h,m,g,C,T,w,x)=>{T=T||u.type==="svg",c==null?Z(u,h,m,g,C,T,w,x):j(c,u,g,C,T,w,x)},Z=(c,u,h,m,g,C,T,w)=>{let x,b;const{type:M,props:I,shapeFlag:S,transition:$,dirs:k}=c;if(x=c.el=o(c.type,C,I&&I.is,I),S&8?d(x,c.children):S&16&&v(c.children,x,null,m,g,C&&M!=="foreignObject",T,w),k&&Fe(c,null,m,"created"),V(x,c,c.scopeId,T,m),I){for(const X in I)X!=="value"&&!Tt(X)&&i(x,X,null,I[X],C,c.children,m,g,Le);"value"in I&&i(x,"value",null,I.value),(b=I.onVnodeBeforeMount)&&we(b,m,c)}k&&Fe(c,null,m,"beforeMount");const G=(!g||g&&!g.pendingBranch)&&$&&!$.persisted;G&&$.beforeEnter(x),s(x,u,h),((b=I&&I.onVnodeMounted)||G||k)&&he(()=>{b&&we(b,m,c),G&&$.enter(x),k&&Fe(c,null,m,"mounted")},g)},V=(c,u,h,m,g)=>{if(h&&O(c,h),m)for(let C=0;C{for(let b=x;b{const w=u.el=c.el;let{patchFlag:x,dynamicChildren:b,dirs:M}=u;x|=c.patchFlag&16;const I=c.props||te,S=u.props||te;let $;h&&Je(h,!1),($=S.onVnodeBeforeUpdate)&&we($,h,u,c),M&&Fe(u,c,h,"beforeUpdate"),h&&Je(h,!0);const k=g&&u.type!=="foreignObject";if(b?B(c.dynamicChildren,b,w,h,m,k,C):T||Q(c,u,w,null,h,m,k,C,!1),x>0){if(x&16)z(w,u,I,S,h,m,g);else if(x&2&&I.class!==S.class&&i(w,"class",null,S.class,g),x&4&&i(w,"style",I.style,S.style,g),x&8){const G=u.dynamicProps;for(let X=0;X{$&&we($,h,u,c),M&&Fe(u,c,h,"updated")},m)},B=(c,u,h,m,g,C,T)=>{for(let w=0;w{if(h!==m){if(h!==te)for(const w in h)!Tt(w)&&!(w in m)&&i(c,w,h[w],null,T,u.children,g,C,Le);for(const w in m){if(Tt(w))continue;const x=m[w],b=h[w];x!==b&&w!=="value"&&i(c,w,b,x,T,u.children,g,C,Le)}"value"in m&&i(c,"value",h.value,m.value)}},R=(c,u,h,m,g,C,T,w,x)=>{const b=u.el=c?c.el:l(""),M=u.anchor=c?c.anchor:l("");let{patchFlag:I,dynamicChildren:S,slotScopeIds:$}=u;$&&(w=w?w.concat($):$),c==null?(s(b,h,m),s(M,h,m),v(u.children,h,M,g,C,T,w,x)):I>0&&I&64&&S&&c.dynamicChildren?(B(c.dynamicChildren,S,h,g,C,T,w),(u.key!=null||g&&u===g.subTree)&&Zr(c,u,!0)):Q(c,u,h,M,g,C,T,w,x)},K=(c,u,h,m,g,C,T,w,x)=>{u.slotScopeIds=w,c==null?u.shapeFlag&512?g.ctx.activate(u,h,m,T,x):F(u,h,m,g,C,T,x):ge(c,u,x)},F=(c,u,h,m,g,C,T)=>{const w=c.component=pl(c,m,g);if(gn(c)&&(w.ctx.renderer=ot),gl(w),w.asyncDep){if(g&&g.registerDep(w,J),!c.el){const x=w.subTree=oe(be);_(null,x,u,h)}return}J(w,c,u,h,g,C,T)},ge=(c,u,h)=>{const m=u.component=c.component;if(vo(c,u,h))if(m.asyncDep&&!m.asyncResolved){ne(m,u,h);return}else m.next=u,bo(m.update),m.update();else u.el=c.el,m.vnode=u},J=(c,u,h,m,g,C,T)=>{const w=()=>{if(c.isMounted){let{next:M,bu:I,u:S,parent:$,vnode:k}=c,G=M,X;Je(c,!1),M?(M.el=k.el,ne(c,M,T)):M=k,I&&wn(I),(X=M.props&&M.props.onVnodeBeforeUpdate)&&we(X,$,M,k),Je(c,!0);const ie=Cn(c),Ee=c.subTree;c.subTree=ie,P(Ee,ie,p(Ee.el),Bt(Ee),c,g,C),M.el=ie.el,G===null&&Ao(c,ie.el),S&&he(S,g),(X=M.props&&M.props.onVnodeUpdated)&&he(()=>we(X,$,M,k),g)}else{let M;const{el:I,props:S}=u,{bm:$,m:k,parent:G}=c,X=pt(u);if(Je(c,!1),$&&wn($),!X&&(M=S&&S.onVnodeBeforeMount)&&we(M,G,u),Je(c,!0),I&&yn){const ie=()=>{c.subTree=Cn(c),yn(I,c.subTree,c,g,null)};X?u.type.__asyncLoader().then(()=>!c.isUnmounted&&ie()):ie()}else{const ie=c.subTree=Cn(c);P(null,ie,h,m,c,g,C),u.el=ie.el}if(k&&he(k,g),!X&&(M=S&&S.onVnodeMounted)){const ie=u;he(()=>we(M,G,ie),g)}(u.shapeFlag&256||G&&pt(G.vnode)&&G.vnode.shapeFlag&256)&&c.a&&he(c.a,g),c.isMounted=!0,u=h=m=null}},x=c.effect=new Qn(w,()=>is(b),c.scope),b=c.update=()=>x.run();b.id=c.uid,Je(c,!0),b()},ne=(c,u,h)=>{u.component=c;const m=c.vnode.props;c.vnode=u,c.next=null,Zo(c,u.props,m,h),el(c,u.children,h),yt(),vs(),wt()},Q=(c,u,h,m,g,C,T,w,x=!1)=>{const b=c&&c.children,M=c?c.shapeFlag:0,I=u.children,{patchFlag:S,shapeFlag:$}=u;if(S>0){if(S&128){Ht(b,I,h,m,g,C,T,w,x);return}else if(S&256){ze(b,I,h,m,g,C,T,w,x);return}}$&8?(M&16&&Le(b,g,C),I!==b&&d(h,I)):M&16?$&16?Ht(b,I,h,m,g,C,T,w,x):Le(b,g,C,!0):(M&8&&d(h,""),$&16&&v(I,h,m,g,C,T,w,x))},ze=(c,u,h,m,g,C,T,w,x)=>{c=c||ft,u=u||ft;const b=c.length,M=u.length,I=Math.min(b,M);let S;for(S=0;SM?Le(c,g,C,!0,!1,I):v(u,h,m,g,C,T,w,x,I)},Ht=(c,u,h,m,g,C,T,w,x)=>{let b=0;const M=u.length;let I=c.length-1,S=M-1;for(;b<=I&&b<=S;){const $=c[b],k=u[b]=x?Ke(u[b]):ve(u[b]);if(et($,k))P($,k,h,null,g,C,T,w,x);else break;b++}for(;b<=I&&b<=S;){const $=c[I],k=u[S]=x?Ke(u[S]):ve(u[S]);if(et($,k))P($,k,h,null,g,C,T,w,x);else break;I--,S--}if(b>I){if(b<=S){const $=S+1,k=$S)for(;b<=I;)Ie(c[b],g,C,!0),b++;else{const $=b,k=b,G=new Map;for(b=k;b<=S;b++){const me=u[b]=x?Ke(u[b]):ve(u[b]);me.key!=null&&G.set(me.key,b)}let X,ie=0;const Ee=S-k+1;let lt=!1,ps=0;const Ct=new Array(Ee);for(b=0;b=Ee){Ie(me,g,C,!0);continue}let Pe;if(me.key!=null)Pe=G.get(me.key);else for(X=k;X<=S;X++)if(Ct[X-k]===0&&et(me,u[X])){Pe=X;break}Pe===void 0?Ie(me,g,C,!0):(Ct[Pe-k]=b+1,Pe>=ps?ps=Pe:lt=!0,P(me,u[Pe],h,null,g,C,T,w,x),ie++)}const gs=lt?ol(Ct):ft;for(X=gs.length-1,b=Ee-1;b>=0;b--){const me=k+b,Pe=u[me],ms=me+1{const{el:C,type:T,transition:w,children:x,shapeFlag:b}=c;if(b&6){Ye(c.component.subTree,u,h,m);return}if(b&128){c.suspense.move(u,h,m);return}if(b&64){T.move(c,u,h,ot);return}if(T===de){s(C,u,h);for(let I=0;Iw.enter(C),g);else{const{leave:I,delayLeave:S,afterLeave:$}=w,k=()=>s(C,u,h),G=()=>{I(C,()=>{k(),$&&$()})};S?S(C,k,G):G()}else s(C,u,h)},Ie=(c,u,h,m=!1,g=!1)=>{const{type:C,props:T,ref:w,children:x,dynamicChildren:b,shapeFlag:M,patchFlag:I,dirs:S}=c;if(w!=null&&sn(w,null,h,c,!0),M&256){u.ctx.deactivate(c);return}const $=M&1&&S,k=!pt(c);let G;if(k&&(G=T&&T.onVnodeBeforeUnmount)&&we(G,u,c),M&6)_i(c.component,h,m);else{if(M&128){c.suspense.unmount(h,m);return}$&&Fe(c,null,u,"beforeUnmount"),M&64?c.type.remove(c,u,h,g,ot,m):b&&(C!==de||I>0&&I&64)?Le(b,u,h,!1,!0):(C===de&&I&384||!g&&M&16)&&Le(x,u,h),m&&ds(c)}(k&&(G=T&&T.onVnodeUnmounted)||$)&&he(()=>{G&&we(G,u,c),$&&Fe(c,null,u,"unmounted")},h)},ds=c=>{const{type:u,el:h,anchor:m,transition:g}=c;if(u===de){mi(h,m);return}if(u===gt){H(c);return}const C=()=>{r(h),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(c.shapeFlag&1&&g&&!g.persisted){const{leave:T,delayLeave:w}=g,x=()=>T(h,C);w?w(c.el,C,x):x()}else C()},mi=(c,u)=>{let h;for(;c!==u;)h=y(c),r(c),c=h;r(u)},_i=(c,u,h)=>{const{bum:m,scope:g,update:C,subTree:T,um:w}=c;m&&wn(m),g.stop(),C&&(C.active=!1,Ie(T,c,u,h)),w&&he(w,u),he(()=>{c.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&c.asyncDep&&!c.asyncResolved&&c.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},Le=(c,u,h,m=!1,g=!1,C=0)=>{for(let T=C;Tc.shapeFlag&6?Bt(c.component.subTree):c.shapeFlag&128?c.suspense.next():y(c.anchor||c.el),hs=(c,u,h)=>{c==null?u._vnode&&Ie(u._vnode,null,null,!0):P(u._vnode||null,c,u,null,null,null,h),vs(),en(),u._vnode=c},ot={p:P,um:Ie,m:Ye,r:ds,mt:F,mc:v,pc:Q,pbc:B,n:Bt,o:e};let bn,yn;return t&&([bn,yn]=t(ot)),{render:hs,hydrate:bn,createApp:nl(hs,bn)}}function Je({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Zr(e,t,n=!1){const s=e.children,r=t.children;if(N(s)&&N(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}const ll=e=>e.__isTeleport,de=Symbol(void 0),_t=Symbol(void 0),be=Symbol(void 0),gt=Symbol(void 0),Ot=[];let Oe=null;function Qr(e=!1){Ot.push(Oe=e?null:[])}function cl(){Ot.pop(),Oe=Ot[Ot.length-1]||null}let Mt=1;function Ns(e){Mt+=e}function Gr(e){return e.dynamicChildren=Mt>0?Oe||ft:null,cl(),Mt>0&&Oe&&Oe.push(e),e}function Fc(e,t,n,s,r,i){return Gr(ni(e,t,n,s,r,i,!0))}function ei(e,t,n,s,r){return Gr(oe(e,t,n,s,r,!0))}function rn(e){return e?e.__v_isVNode===!0:!1}function et(e,t){return e.type===t.type&&e.key===t.key}const _n="__vInternal",ti=({key:e})=>e??null,Xt=({ref:e,ref_key:t,ref_for:n})=>e!=null?re(e)||fe(e)||U(e)?{i:ue,r:e,k:t,f:!!n}:e:null;function ni(e,t=null,n=null,s=0,r=null,i=e===de?0:1,o=!1,l=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ti(t),ref:t&&Xt(t),scopeId:hn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ue};return l?(fs(f,n),i&128&&e.normalize(f)):n&&(f.shapeFlag|=re(n)?8:16),Mt>0&&!o&&Oe&&(f.patchFlag>0||i&6)&&f.patchFlag!==32&&Oe.push(f),f}const oe=fl;function fl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Dr)&&(e=be),rn(e)){const l=qe(e,t,!0);return n&&fs(l,n),Mt>0&&!i&&Oe&&(l.shapeFlag&6?Oe[Oe.indexOf(e)]=l:Oe.push(l)),l.patchFlag|=-2,l}if(yl(e)&&(e=e.__vccOpts),t){t=ul(t);let{class:l,style:f}=t;l&&!re(l)&&(t.class=qn(l)),ee(f)&&(Cr(f)&&!N(f)&&(f=le({},f)),t.style=Vn(f))}const o=re(e)?1:Oo(e)?128:ll(e)?64:ee(e)?4:U(e)?2:0;return ni(e,t,n,s,r,o,i,!0)}function ul(e){return e?Cr(e)||_n in e?le({},e):e:null}function qe(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?al(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&ti(l),ref:t&&t.ref?n&&r?N(r)?r.concat(Xt(t)):[r,Xt(t)]:Xt(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==de?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qe(e.ssContent),ssFallback:e.ssFallback&&qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function si(e=" ",t=0){return oe(_t,null,e,t)}function Mc(e,t){const n=oe(gt,null,e);return n.staticCount=t,n}function Sc(e="",t=!1){return t?(Qr(),ei(be,null,e)):oe(be,null,e)}function ve(e){return e==null||typeof e=="boolean"?oe(be):N(e)?oe(de,null,e.slice()):typeof e=="object"?Ke(e):oe(_t,null,String(e))}function Ke(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:qe(e)}function fs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(N(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),fs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(_n in t)?t._ctx=ue:r===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else U(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),s&64?(n=16,t=[si(t)]):n=8);e.children=t,e.shapeFlag|=n}function al(...e){const t={};for(let n=0;nse||ue,bt=e=>{se=e,e.scope.on()},rt=()=>{se&&se.scope.off(),se=null};function ri(e){return e.vnode.shapeFlag&4}let St=!1;function gl(e,t=!1){St=t;const{props:n,children:s}=e.vnode,r=ri(e);Xo(e,n,r,t),Go(e,s);const i=r?ml(e,t):void 0;return St=!1,i}function ml(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=vt(new Proxy(e.ctx,Wo));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?oi(e):null;bt(e),yt();const i=We(s,e,0,[e.props,r]);if(wt(),rt(),lr(i)){if(i.then(rt,rt),t)return i.then(o=>{$s(e,o,t)}).catch(o=>{an(o,e,0)});e.asyncDep=i}else $s(e,i,t)}else ii(e,t)}function $s(e,t,n){U(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Ar(t)),ii(e,n)}let Hs;function ii(e,t,n){const s=e.type;if(!e.render){if(!t&&Hs&&!s.render){const r=s.template||ls(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:f}=s,a=le(le({isCustomElement:i,delimiters:l},o),f);s.render=Hs(r,a)}}e.render=s.render||Re}bt(e),yt(),Vo(e),wt(),rt()}function _l(e){return new Proxy(e.attrs,{get(t,n){return pe(e,"get","$attrs"),t[n]}})}function oi(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=_l(e))},slots:e.slots,emit:e.emit,expose:t}}function as(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ar(vt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in At)return At[n](e)},has(t,n){return n in t||n in At}}))}function bl(e,t=!0){return U(e)?e.displayName||e.name:e.name||t&&e.__name}function yl(e){return U(e)&&"__vccOpts"in e}const Te=(e,t)=>go(e,t,St);function Lc(){return wl().slots}function wl(){const e=us();return e.setupContext||(e.setupContext=oi(e))}function jn(e,t,n){const s=arguments.length;return s===2?ee(t)&&!N(t)?rn(t)?oe(e,null,[t]):oe(e,t):oe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&rn(n)&&(n=[n]),oe(e,t,n))}const Cl=Symbol(""),xl=()=>ht(Cl),El="3.2.47",Tl="http://www.w3.org/2000/svg",tt=typeof document<"u"?document:null,Bs=tt&&tt.createElement("template"),vl={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?tt.createElementNS(Tl,e):tt.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>tt.createTextNode(e),createComment:e=>tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>tt.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{Bs.innerHTML=s?`${e}`:e;const l=Bs.content;if(s){const f=l.firstChild;for(;f.firstChild;)l.appendChild(f.firstChild);l.removeChild(f)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Al(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Ol(e,t,n){const s=e.style,r=re(n);if(n&&!r){if(t&&!re(t))for(const i in t)n[i]==null&&Dn(s,i,"");for(const i in n)Dn(s,i,n[i])}else{const i=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const Us=/\s*!important$/;function Dn(e,t,n){if(N(n))n.forEach(s=>Dn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Rl(e,t);Us.test(n)?e.setProperty(it(s),n.replace(Us,""),"important"):e[s]=n}}const js=["Webkit","Moz","ms"],Tn={};function Rl(e,t){const n=Tn[t];if(n)return n;let s=Se(t);if(s!=="filter"&&s in e)return Tn[t]=s;s=cn(s);for(let r=0;rvn||(Nl.then(()=>vn=0),vn=Date.now());function Hl(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;xe(Bl(s,n.value),t,5,[s])};return n.value=e,n.attached=$l(),n}function Bl(e,t){if(N(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 ks=/^on[a-z]/,Ul=(e,t,n,s,r=!1,i,o,l,f)=>{t==="class"?Al(e,s,r):t==="style"?Ol(e,n,s):Lt(t)?zn(t)||Sl(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):jl(e,t,s,r))?Pl(e,t,s,i,o,l,f):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Il(e,t,s,r))};function jl(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&ks.test(t)&&U(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ks.test(t)&&re(n)?!1:t in e}function Nc(e){const t=us();if(!t)return;const n=t.ut=(r=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>kn(i,r))},s=()=>{const r=e(t.proxy);Kn(t.subTree,r),n(r)};Po(s),Nt(()=>{const r=new MutationObserver(s);r.observe(t.subTree.el.parentNode,{childList:!0}),$t(()=>r.disconnect())})}function Kn(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Kn(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)kn(e.el,t);else if(e.type===de)e.children.forEach(n=>Kn(n,t));else if(e.type===gt){let{el:n,anchor:s}=e;for(;n&&(kn(n,t),n!==s);)n=n.nextSibling}}function kn(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const je="transition",xt="animation",li=(e,{slots:t})=>jn(Nr,Dl(e),t);li.displayName="Transition";const ci={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};li.props=le({},Nr.props,ci);const Xe=(e,t=[])=>{N(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ws=e=>e?N(e)?e.some(t=>t.length>1):e.length>1:!1;function Dl(e){const t={};for(const R in e)R in ci||(t[R]=e[R]);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:f=i,appearActiveClass:a=o,appearToClass:d=l,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:y=`${n}-leave-active`,leaveToClass:O=`${n}-leave-to`}=e,L=Kl(r),P=L&&L[0],W=L&&L[1],{onBeforeEnter:_,onEnter:E,onEnterCancelled:A,onLeave:H,onLeaveCancelled:D,onBeforeAppear:Z=_,onAppear:V=E,onAppearCancelled:v=A}=t,j=(R,K,F)=>{Ze(R,K?d:l),Ze(R,K?a:o),F&&F()},B=(R,K)=>{R._isLeaving=!1,Ze(R,p),Ze(R,O),Ze(R,y),K&&K()},z=R=>(K,F)=>{const ge=R?V:E,J=()=>j(K,R,F);Xe(ge,[K,J]),Vs(()=>{Ze(K,R?f:i),De(K,R?d:l),Ws(ge)||qs(K,s,P,J)})};return le(t,{onBeforeEnter(R){Xe(_,[R]),De(R,i),De(R,o)},onBeforeAppear(R){Xe(Z,[R]),De(R,f),De(R,a)},onEnter:z(!1),onAppear:z(!0),onLeave(R,K){R._isLeaving=!0;const F=()=>B(R,K);De(R,p),Vl(),De(R,y),Vs(()=>{R._isLeaving&&(Ze(R,p),De(R,O),Ws(H)||qs(R,s,W,F))}),Xe(H,[R,F])},onEnterCancelled(R){j(R,!1),Xe(A,[R])},onAppearCancelled(R){j(R,!0),Xe(v,[R])},onLeaveCancelled(R){B(R),Xe(D,[R])}})}function Kl(e){if(e==null)return null;if(ee(e))return[An(e.enter),An(e.leave)];{const t=An(e);return[t,t]}}function An(e){return Fi(e)}function De(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Ze(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Vs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let kl=0;function qs(e,t,n,s){const r=e._endId=++kl,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:f}=Wl(e,t);if(!o)return s();const a=o+"end";let d=0;const p=()=>{e.removeEventListener(a,y),i()},y=O=>{O.target===e&&++d>=f&&p()};setTimeout(()=>{d(n[L]||"").split(", "),r=s(`${je}Delay`),i=s(`${je}Duration`),o=zs(r,i),l=s(`${xt}Delay`),f=s(`${xt}Duration`),a=zs(l,f);let d=null,p=0,y=0;t===je?o>0&&(d=je,p=o,y=i.length):t===xt?a>0&&(d=xt,p=a,y=f.length):(p=Math.max(o,a),d=p>0?o>a?je:xt:null,y=d?d===je?i.length:f.length:0);const O=d===je&&/\b(transform|all)(,|$)/.test(s(`${je}Property`).toString());return{type:d,timeout:p,propCount:y,hasTransform:O}}function zs(e,t){for(;e.lengthYs(n)+Ys(e[s])))}function Ys(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Vl(){return document.body.offsetHeight}const ql=["ctrl","shift","alt","meta"],zl={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)=>ql.some(n=>e[`${n}Key`]&&!t.includes(n))},$c=(e,t)=>(n,...s)=>{for(let r=0;rn=>{if(!("key"in n))return;const s=it(n.key);if(t.some(r=>r===s||Yl[r]===s))return e(n)},Jl=le({patchProp:Ul},vl);let On,Js=!1;function Xl(){return On=Js?On:rl(Jl),Js=!0,On}const Bc=(...e)=>{const t=Xl().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Zl(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function Zl(e){return re(e)?document.querySelector(e):e}const Uc=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ql="modulepreload",Gl=function(e){return"/"+e},Xs={},jc=function(t,n,s){if(!n||n.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=Gl(i),i in Xs)return;Xs[i]=!0;const o=i.endsWith(".css"),l=o?'[rel="stylesheet"]':"";if(!!s)for(let d=r.length-1;d>=0;d--){const p=r[d];if(p.href===i&&(!o||p.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const a=document.createElement("link");if(a.rel=o?"stylesheet":Ql,o||(a.as="script",a.crossOrigin=""),a.href=i,document.head.appendChild(a),o)return new Promise((d,p)=>{a.addEventListener("load",d),a.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())},ec=window.__VP_SITE_DATA__,fi=/^[a-z]+:/i,Dc=/^pathname:\/\//,Kc="vitepress-theme-appearance",ui=/#.*$/,tc=/(index)?\.(md|html)$/,Ce=typeof document<"u",ai={relativePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function nc(e,t,n=!1){if(t===void 0)return!1;if(e=Zs(`/${e}`),n)return new RegExp(t).test(e);if(Zs(t)!==e)return!1;const s=t.match(ui);return s?(Ce?location.hash:"")===s[0]:!0}function Zs(e){return decodeURI(e).replace(ui,"").replace(tc,"")}function sc(e){return fi.test(e)}function rc(e,t){var s,r,i,o,l,f,a;const n=Object.keys(e.locales).find(d=>d!=="root"&&!sc(d)&&nc(t,`/${d}/`,!0))||"root";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:hi(e.head,((f=e.locales[n])==null?void 0:f.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function di(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=ic(e.title,s);return`${n}${r}`}function ic(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function oc(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 hi(e,t){return[...e.filter(n=>!oc(t,n)),...t]}const lc=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,cc=/^[a-z]:/i;function Qs(e){const t=cc.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(lc,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const fc=Symbol(),nt=fo(ec);function kc(e){const t=Te(()=>rc(nt.value,e.data.relativePath));return{site:t,theme:Te(()=>t.value.themeConfig),page:Te(()=>e.data),frontmatter:Te(()=>e.data.frontmatter),params:Te(()=>e.data.params),lang:Te(()=>t.value.lang),dir:Te(()=>t.value.dir),localeIndex:Te(()=>t.value.localeIndex||"root"),title:Te(()=>di(t.value,e.data)),description:Te(()=>e.data.description||t.value.description),isDark:Tr(!1)}}function Wc(){const e=ht(fc);if(!e)throw new Error("vitepress data not properly injected in app");return e}function uc(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Gs(e){return fi.test(e)||e.startsWith(".")?e:uc(nt.value.base,e)}function ac(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/";t=Qs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),t=`${n}assets/${t}.${s}.js`}else t=`./${Qs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let Zt=[];function Vc(e){Zt.push(e),$t(()=>{Zt=Zt.filter(t=>t!==e)})}const dc=Symbol(),er="http://a.com",hc=()=>({path:"/",component:null,data:ai});function qc(e,t){const n=un(hc()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var a,d;await((a=s.onBeforeRouteChange)==null?void 0:a.call(s,l));const f=new URL(l,er);nt.value.cleanUrls||!f.pathname.endsWith("/")&&!f.pathname.endsWith(".html")&&(f.pathname+=".html",l=f.pathname+f.search+f.hash),Ce&&l!==location.href&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",l)),await o(l),await((d=s.onAfterRouteChanged)==null?void 0:d.call(s,l))}let i=null;async function o(l,f=0,a=!1){const d=new URL(l,er),p=i=d.pathname;try{let y=await e(p);if(i===p){i=null;const{default:O,__pageData:L}=y;if(!O)throw new Error(`Invalid route component: ${O}`);n.path=Ce?p:Gs(p),n.component=vt(O),n.data=vt(L),Ce&&Ir(()=>{let P=nt.value.base+L.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!nt.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==d.pathname&&(d.pathname=P,l=P+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!f){let W=null;try{W=document.querySelector(decodeURIComponent(d.hash))}catch(_){console.warn(_)}if(W){tr(W,d.hash);return}}window.scrollTo(0,f)})}}catch(y){if(!/fetch/.test(y.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(y),!a)try{const O=await fetch(nt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await O.json(),await o(l,f,!0);return}catch{}i===p&&(i=null,n.path=Ce?p:Gs(p),n.component=t?vt(t):null,n.data=ai)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:d}=a,{href:p,origin:y,pathname:O,hash:L,search:P}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),W=window.location,_=O.match(/\.\w+$/);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&d!=="_blank"&&y===W.origin&&!(_&&_[0]!==".html")&&(l.preventDefault(),O===W.pathname&&P===W.search?L&&L!==W.hash&&(history.pushState(null,"",L),window.dispatchEvent(new Event("hashchange")),tr(a,L,a.classList.contains("header-anchor"))):r(p))}},{capture:!0}),window.addEventListener("popstate",l=>{o(location.href,l.state&&l.state.scrollPosition||0)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function pc(){const e=ht(dc);if(!e)throw new Error("useRouter() is called without provider.");return e}function pi(){return pc().route}function tr(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.querySelector(decodeURIComponent(t))}catch(r){console.warn(r)}if(s){const r=nt.value.scrollOffset;let i=0;if(typeof r=="number")i=r;else if(typeof r=="string")i=nr(r);else if(Array.isArray(r))for(const f of r){const a=nr(f);if(a){i=a;break}}const o=parseInt(window.getComputedStyle(s).paddingTop,10),l=window.scrollY+s.getBoundingClientRect().top-i+o;!n||Math.abs(l-window.scrollY)>window.innerHeight?window.scrollTo(0,l):window.scrollTo({left:0,top:l,behavior:"smooth"})}}function nr(e){const t=document.querySelector(e);if(!t)return 0;const n=t.getBoundingClientRect().bottom;return n<0?0:n+24}const sr=()=>Zt.forEach(e=>e()),zc=Br({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=pi();return()=>jn(e.as,{style:{position:"relative"}},[t.component?jn(t.component,{onVnodeMounted:sr,onVnodeUpdated:sr}):"404 Page Not Found"])}});function Yc(e,t){let n=[],s=!0;const r=i=>{if(s){s=!1;return}n.forEach(o=>document.head.removeChild(o)),n=[],i.forEach(o=>{const l=gc(o);document.head.appendChild(l),n.push(l)})};Io(()=>{const i=e.data,o=t.value,l=i&&i.description,f=i&&i.frontmatter.head||[];document.title=di(o,i),document.querySelector("meta[name=description]").setAttribute("content",l||o.description),r(hi(o.head,_c(f)))})}function gc([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),s}function mc(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function _c(e){return e.filter(t=>!mc(t))}const Rn=new Set,gi=()=>document.createElement("link"),bc=e=>{const t=gi();t.rel="prefetch",t.href=e,document.head.appendChild(t)},yc=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let zt;const wc=Ce&&(zt=gi())&&zt.relList&&zt.relList.supports&&zt.relList.supports("prefetch")?bc:yc;function Jc(){if(!Ce||!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:f}=l;if(!Rn.has(f)){Rn.add(f);const a=ac(f);wc(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{target:o}=i,{hostname:l,pathname:f}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),a=f.match(/\.\w+$/);a&&a[0]!==".html"||o!=="_blank"&&l===location.hostname&&(f!==location.pathname?n.observe(i):Rn.add(f))})})};Nt(s);const r=pi();Jt(()=>r.path,s),$t(()=>{n&&n.disconnect()})}const Xc=Br({setup(e,{slots:t}){const n=Tr(!1);return Nt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Zc(){if(Ce){const e=new Map;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);let l="";i.querySelectorAll("span.line:not(.diff.remove)").forEach(f=>l+=(f.textContent||"")+` +`),l=l.slice(0,-1),o&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),Cc(l).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Cc(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 Qc(){Ce&&window.addEventListener("click",e=>{var n,s;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement,i=Array.from((r==null?void 0:r.querySelectorAll("input"))||[]).indexOf(t),o=r==null?void 0:r.querySelector('div[class*="language-"].active'),l=(s=r==null?void 0:r.querySelectorAll('div[class*="language-"]:not(.language-id)'))==null?void 0:s[i];o&&l&&o!==l&&(o.classList.remove("active"),l.classList.add("active"))}})}export{fo as $,Sc as A,al as B,oe as C,Ac as D,Nc as E,de as F,Oc as G,fi as H,Ce as I,wr as J,Rc as K,Tc as L,vc as M,Mc as N,Kc as O,Dc as P,ht as Q,Ro as R,Uo as S,li as T,Vc as U,Vn as V,Hc as W,Pc as X,Po as Y,$c as Z,Uc as _,si as a,Lc as a0,jn as a1,Yc as a2,Jc as a3,Zc as a4,Qc as a5,dc as a6,kc as a7,fc as a8,zc as a9,Xc as aa,nt as ab,Bc as ac,qc as ad,ac as ae,jc as af,ao as b,Fc as c,Br as d,Te as e,Tr as f,us as g,Nt as h,Ir as i,Ni as j,Ec as k,Io as l,sc as m,qn as n,Qr as o,Gs as p,nc as q,Ic as r,pi as s,xc as t,Wc as u,$t as v,Jt as w,ni as x,ei as y,xo as z}; diff --git a/docs/.vitepress/dist/assets/chunks/theme.e502f980.js b/docs/.vitepress/dist/assets/chunks/theme.e502f980.js new file mode 100644 index 000000000..0729f355a --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/theme.e502f980.js @@ -0,0 +1,7 @@ +import{d as g,o as a,c as i,r as u,n as I,a as C,t as P,_ as p,u as et,b as c,e as b,f as S,g as tt,h as G,i as Oe,j as nt,k as st,w as q,l as Y,m as ot,P as at,p as _e,q as K,s as J,v as ae,x as r,F as M,y,z as v,T as ve,A as m,B as ee,C as h,D as R,E as ct,G as U,H as ze,I as lt,J as it,K as B,L as E,M as H,N as rt,O as Me,Q as fe,R as te,S as ut,U as he,V as dt,W as _t,X as vt,Y as ft,Z as ht,$ as pt,a0 as mt}from"./framework.8a749e37.js";const gt=g({__name:"VPBadge",props:{text:null,type:null},setup(e){return(t,n)=>(a(),i("span",{class:I(["VPBadge",e.type??"tip"])},[u(t.$slots,"default",{},()=>[C(P(e.text),1)],!0)],2))}});const yt=p(gt,[["__scopeId","data-v-ce917cfb"]]),w=et;var Ie;const De=typeof window<"u",bt=e=>typeof e=="string",kt=()=>{};De&&((Ie=window==null?void 0:window.navigator)!=null&&Ie.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Fe(e){return typeof e=="function"?e():c(e)}function $t(e){return e}function Ge(e){return nt()?(st(e),!0):!1}function Pt(e){return typeof e=="function"?b(e):S(e)}function wt(e,t=!0){tt()?G(e):t?e():Oe(e)}function Vt(e){var t;const n=Fe(e);return(t=n==null?void 0:n.$el)!=null?t:n}const pe=De?window:void 0;function xt(...e){let t,n,s,o;if(bt(e[0])||Array.isArray(e[0])?([n,s,o]=e,t=pe):[t,n,s,o]=e,!t)return kt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const l=[],d=()=>{l.forEach($=>$()),l.length=0},f=($,L,V,x)=>($.addEventListener(L,V,x),()=>$.removeEventListener(L,V,x)),_=q(()=>[Vt(t),Fe(o)],([$,L])=>{d(),$&&l.push(...n.flatMap(V=>s.map(x=>f($,V,x,L))))},{immediate:!0,flush:"post"}),k=()=>{_(),d()};return Ge(k),k}function St(e,t=!1){const n=S(),s=()=>n.value=!!e();return s(),wt(s,t),n}function re(e,t={}){const{window:n=pe}=t,s=St(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const l=S(!1),d=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",f):o.removeListener(f))},f=()=>{s.value&&(d(),o=n.matchMedia(Pt(e).value),l.value=o.matches,"addEventListener"in o?o.addEventListener("change",f):o.addListener(f))};return Y(f),Ge(()=>d()),l}const Ce=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Be="__vueuse_ssr_handlers__";Ce[Be]=Ce[Be]||{};var Ne;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Ne||(Ne={}));var Lt=Object.defineProperty,Te=Object.getOwnPropertySymbols,Mt=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable,Ae=(e,t,n)=>t in e?Lt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ct=(e,t)=>{for(var n in t||(t={}))Mt.call(t,n)&&Ae(e,n,t[n]);if(Te)for(var n of Te(t))It.call(t,n)&&Ae(e,n,t[n]);return e};const Bt={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};Ct({linear:$t},Bt);function Nt({window:e=pe}={}){if(!e)return{x:S(0),y:S(0)};const t=S(e.scrollX),n=S(e.scrollY);return xt(e,"scroll",()=>{t.value=e.scrollX,n.value=e.scrollY},{capture:!1,passive:!0}),{x:t,y:n}}function Tt(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),s=!0,setTimeout(()=>{s=!1},t))}}function ue(e){return/^\//.test(e)?e:`/${e}`}function X(e){if(ot(e))return e.replace(at,"");const{site:t}=w(),{pathname:n,search:s,hash:o}=new URL(e,"http://example.com"),l=n.endsWith("/")||n.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${n.replace(/(\.md)?$/,t.value.cleanUrls?"":".html")}${s}${o}`);return _e(l)}function Re(e,t){if(Array.isArray(e))return e;if(e==null)return[];t=ue(t);const n=Object.keys(e).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>t.startsWith(ue(s)));return n?e[n]:[]}function At(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function Et(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link}),o.items&&n(o.items)}return n(e),t}function de(e,t){return Array.isArray(t)?t.some(n=>de(e,n)):K(e,t.link)?!0:t.items?de(e,t.items):!1}function O(){const e=J(),{theme:t,frontmatter:n}=w(),s=re("(min-width: 960px)"),o=S(!1),l=b(()=>{const x=t.value.sidebar,N=e.data.relativePath;return x?Re(x,N):[]}),d=b(()=>n.value.sidebar!==!1&&l.value.length>0&&n.value.layout!=="home"),f=b(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),_=b(()=>d.value&&s.value),k=b(()=>d.value?At(l.value):[]);function $(){o.value=!0}function L(){o.value=!1}function V(){o.value?L():$()}return{isOpen:o,sidebar:l,sidebarGroups:k,hasSidebar:d,hasAside:f,isSidebarEnabled:_,open:$,close:L,toggle:V}}function Ht(e,t){let n;Y(()=>{n=e.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",s)}),ae(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function Ot(e){const{page:t}=w(),n=S(!1),s=b(()=>e.value.collapsed!=null),o=b(()=>!!e.value.link),l=b(()=>K(t.value.relativePath,e.value.link)),d=b(()=>l.value?!0:e.value.items?de(t.value.relativePath,e.value.items):!1),f=b(()=>!!(e.value.items&&e.value.items.length));Y(()=>{n.value=!!(s.value&&e.value.collapsed)}),Y(()=>{(l.value||d.value)&&(n.value=!1)});function _(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:o,isActiveLink:l,hasActiveLink:d,hasChildren:f,toggle:_}}const zt=g({__name:"VPSkipLink",setup(e){const t=J(),n=S();q(()=>t.path,()=>n.value.focus());function s({target:o}){const l=document.querySelector(decodeURIComponent(o.hash));if(l){const d=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",d)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",d),l.focus(),window.scrollTo(0,0)}}return(o,l)=>(a(),i(M,null,[r("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),r("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}});const Dt=p(zt,[["__scopeId","data-v-73e3a132"]]),Ft={key:0,class:"VPBackdrop"},Gt=g({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(a(),y(ve,{name:"fade"},{default:v(()=>[e.show?(a(),i("div",Ft)):m("",!0)]),_:1}))}});const Rt=p(Gt,[["__scopeId","data-v-54a304ca"]]);function Ut(){const e=S(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const l=J();return q(()=>l.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}function Z({removeCurrent:e=!0,correspondingLink:t=!1}={}){const{site:n,localeIndex:s,page:o,theme:l}=w(),d=b(()=>{var _,k;return{label:(_=n.value.locales[s.value])==null?void 0:_.label,link:((k=n.value.locales[s.value])==null?void 0:k.link)||(s.value==="root"?"/":`/${s.value}/`)}});return{localeLinks:b(()=>Object.entries(n.value.locales).flatMap(([_,k])=>e&&d.value.label===k.label?[]:{text:k.label,link:jt(k.link||(_==="root"?"/":`/${_}/`),l.value.i18nRouting!==!1&&t,o.value.relativePath.slice(d.value.link.length-1),!n.value.cleanUrls)})),currentLang:d}}function jt(e,t,n,s){return t?e.replace(/\/$/,"")+ue(n.replace(/(^|\/)?index.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const qt=["src","alt"],Kt={inheritAttrs:!1},Wt=g({...Kt,__name:"VPImage",props:{image:null,alt:null},setup(e){return(t,n)=>{const s=R("VPImage",!0);return e.image?(a(),i(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),i("img",ee({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:c(_e)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,qt)):(a(),i(M,{key:1},[h(s,ee({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),h(s,ee({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}});const me=p(Wt,[["__scopeId","data-v-dc109a54"]]),Qt=["href"],Yt=g({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=w(),{hasSidebar:s}=O(),{currentLang:o}=Z();return(l,d)=>(a(),i("div",{class:I(["VPNavBarTitle",{"has-sidebar":c(s)}])},[r("a",{class:"title",href:c(X)(c(o).link)},[u(l.$slots,"nav-bar-title-before",{},void 0,!0),c(n).logo?(a(),y(me,{key:0,class:"logo",image:c(n).logo},null,8,["image"])):m("",!0),c(n).siteTitle?(a(),i(M,{key:1},[C(P(c(n).siteTitle),1)],64)):c(n).siteTitle===void 0?(a(),i(M,{key:2},[C(P(c(t).title),1)],64)):m("",!0),u(l.$slots,"nav-bar-title-after",{},void 0,!0)],8,Qt)],2))}});const Xt=p(Yt,[["__scopeId","data-v-1ab7b21f"]]);const Jt={key:0,class:"VPNavBarSearch"},Zt={key:1,id:"docsearch"},en={class:"DocSearch-Button-Container"},tn=r("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[r("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),nn={class:"DocSearch-Button-Placeholder"},sn=r("span",{class:"DocSearch-Button-Keys"},[r("kbd",{class:"DocSearch-Button-Key"}),r("kbd",{class:"DocSearch-Button-Key"},"K")],-1),on=g({__name:"VPNavBarSearch",setup(e){ct($=>({"428e98e8":l.value}));const t=()=>null,{theme:n,localeIndex:s}=w(),o=S(!1),l=S("'Meta'"),d=b(()=>{var $,L,V,x,N,A,T,z;return((N=(x=(V=(L=($=n.value.algolia)==null?void 0:$.locales)==null?void 0:L[s.value])==null?void 0:V.translations)==null?void 0:x.button)==null?void 0:N.buttonText)||((z=(T=(A=n.value.algolia)==null?void 0:A.translations)==null?void 0:T.button)==null?void 0:z.buttonText)||"Search"}),f=()=>{const $="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{const V=document.createElement("link");V.id=$,V.rel="preconnect",V.href=`https://${n.value.algolia.appId}-dsn.algolia.net`,V.crossOrigin="",document.head.appendChild(V)})};G(()=>{if(!n.value.algolia)return;f(),l.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"'⌘'":"'Ctrl'";const $=V=>{V.key==="k"&&(V.ctrlKey||V.metaKey)&&(V.preventDefault(),_(),L())},L=()=>{window.removeEventListener("keydown",$)};window.addEventListener("keydown",$),ae(L)});function _(){o.value||(o.value=!0,setTimeout(k,16))}function k(){const $=new Event("keydown");$.key="k",$.metaKey=!0,window.dispatchEvent($),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||k()},16)}return($,L)=>c(n).algolia?(a(),i("div",Jt,[o.value?(a(),y(c(t),{key:0,algolia:c(n).algolia},null,8,["algolia"])):(a(),i("div",Zt,[r("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":"Search",onClick:_},[r("span",en,[tn,r("span",nn,P(c(d)),1)]),sn])]))])):m("",!0)}});const an={},cn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",height:"24px",viewBox:"0 0 24 24",width:"24px"},ln=r("path",{d:"M0 0h24v24H0V0z",fill:"none"},null,-1),rn=r("path",{d:"M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"},null,-1),un=[ln,rn];function dn(e,t){return a(),i("svg",cn,un)}const _n=p(an,[["render",dn]]),vn=g({__name:"VPLink",props:{tag:null,href:null,noIcon:{type:Boolean},target:null,rel:null},setup(e){const t=e,n=b(()=>t.tag??t.href?"a":"span"),s=b(()=>t.href&&ze.test(t.href));return(o,l)=>(a(),y(U(c(n)),{class:I(["VPLink",{link:e.href}]),href:e.href?c(X)(e.href):void 0,target:e.target||(c(s)?"_blank":void 0),rel:e.rel||(c(s)?"noreferrer":void 0)},{default:v(()=>[u(o.$slots,"default",{},void 0,!0),c(s)&&!e.noIcon?(a(),y(_n,{key:0,class:"icon"})):m("",!0)]),_:3},8,["class","href","target","rel"]))}});const D=p(vn,[["__scopeId","data-v-f3ed0000"]]),fn=g({__name:"VPNavBarMenuLink",props:{item:null},setup(e){const{page:t}=w();return(n,s)=>(a(),y(D,{class:I({VPNavBarMenuLink:!0,active:c(K)(c(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,tabindex:"0"},{default:v(()=>[C(P(e.item.text),1)]),_:1},8,["class","href","target","rel"]))}});const hn=p(fn,[["__scopeId","data-v-b7aed9c7"]]),ge=S();let Ue=!1,ie=0;function pn(e){const t=S(!1);if(lt){!Ue&&mn(),ie++;const n=q(ge,s=>{var o,l,d;s===e.el.value||(o=e.el.value)!=null&&o.contains(s)?(t.value=!0,(l=e.onFocus)==null||l.call(e)):(t.value=!1,(d=e.onBlur)==null||d.call(e))});ae(()=>{n(),ie--,ie||gn()})}return it(t)}function mn(){document.addEventListener("focusin",je),Ue=!0,ge.value=document.activeElement}function gn(){document.removeEventListener("focusin",je)}function je(){ge.value=document.activeElement}const yn={},bn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},kn=r("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),$n=[kn];function Pn(e,t){return a(),i("svg",bn,$n)}const qe=p(yn,[["render",Pn]]),wn={},Vn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},xn=r("circle",{cx:"12",cy:"12",r:"2"},null,-1),Sn=r("circle",{cx:"19",cy:"12",r:"2"},null,-1),Ln=r("circle",{cx:"5",cy:"12",r:"2"},null,-1),Mn=[xn,Sn,Ln];function In(e,t){return a(),i("svg",Vn,Mn)}const Cn=p(wn,[["render",In]]),Bn={class:"VPMenuLink"},Nn=g({__name:"VPMenuLink",props:{item:null},setup(e){const{page:t}=w();return(n,s)=>(a(),i("div",Bn,[h(D,{class:I({active:c(K)(c(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel},{default:v(()=>[C(P(e.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const ce=p(Nn,[["__scopeId","data-v-fd8d5e7a"]]),Tn={class:"VPMenuGroup"},An={key:0,class:"title"},En=g({__name:"VPMenuGroup",props:{text:null,items:null},setup(e){return(t,n)=>(a(),i("div",Tn,[e.text?(a(),i("p",An,P(e.text),1)):m("",!0),(a(!0),i(M,null,B(e.items,s=>(a(),i(M,null,["link"in s?(a(),y(ce,{key:0,item:s},null,8,["item"])):m("",!0)],64))),256))]))}});const Hn=p(En,[["__scopeId","data-v-a6b0397c"]]),On={class:"VPMenu"},zn={key:0,class:"items"},Dn=g({__name:"VPMenu",props:{items:null},setup(e){return(t,n)=>(a(),i("div",On,[e.items?(a(),i("div",zn,[(a(!0),i(M,null,B(e.items,s=>(a(),i(M,{key:s.text},["link"in s?(a(),y(ce,{key:0,item:s},null,8,["item"])):(a(),y(Hn,{key:1,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):m("",!0),u(t.$slots,"default",{},void 0,!0)]))}});const Fn=p(Dn,[["__scopeId","data-v-e42ed9b3"]]),Gn=["aria-expanded","aria-label"],Rn={key:0,class:"text"},Un={class:"menu"},jn=g({__name:"VPFlyout",props:{icon:null,button:null,label:null,items:null},setup(e){const t=S(!1),n=S();pn({el:n,onBlur:s});function s(){t.value=!1}return(o,l)=>(a(),i("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:l[1]||(l[1]=d=>t.value=!0),onMouseleave:l[2]||(l[2]=d=>t.value=!1)},[r("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:l[0]||(l[0]=d=>t.value=!t.value)},[e.button||e.icon?(a(),i("span",Rn,[e.icon?(a(),y(U(e.icon),{key:0,class:"option-icon"})):m("",!0),C(" "+P(e.button)+" ",1),h(qe,{class:"text-icon"})])):(a(),y(Cn,{key:1,class:"icon"}))],8,Gn),r("div",Un,[h(Fn,{items:e.items},{default:v(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const ye=p(jn,[["__scopeId","data-v-6afe904b"]]),qn=g({__name:"VPNavBarMenuGroup",props:{item:null},setup(e){const{page:t}=w();return(n,s)=>(a(),y(ye,{class:I({VPNavBarMenuGroup:!0,active:c(K)(c(t).relativePath,e.item.activeMatch,!!e.item.activeMatch)}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),Kn=e=>(E("data-v-f732b5d0"),e=e(),H(),e),Wn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Qn=Kn(()=>r("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Yn=g({__name:"VPNavBarMenu",setup(e){const{theme:t}=w();return(n,s)=>c(t).nav?(a(),i("nav",Wn,[Qn,(a(!0),i(M,null,B(c(t).nav,o=>(a(),i(M,{key:o.text},["link"in o?(a(),y(hn,{key:0,item:o},null,8,["item"])):(a(),y(qn,{key:1,item:o},null,8,["item"]))],64))),128))])):m("",!0)}});const Xn=p(Yn,[["__scopeId","data-v-f732b5d0"]]),Jn={},Zn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},es=r("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),ts=r("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),ns=[es,ts];function ss(e,t){return a(),i("svg",Zn,ns)}const Ke=p(Jn,[["render",ss]]),os={class:"items"},as={class:"title"},cs=g({__name:"VPNavBarTranslations",setup(e){const{theme:t}=w(),{localeLinks:n,currentLang:s}=Z({correspondingLink:!0});return(o,l)=>c(n).length&&c(s).label?(a(),y(ye,{key:0,class:"VPNavBarTranslations",icon:Ke,label:c(t).langMenuLabel||"Change language"},{default:v(()=>[r("div",os,[r("p",as,P(c(s).label),1),(a(!0),i(M,null,B(c(n),d=>(a(),y(ce,{key:d.link,item:d},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}});const ls=p(cs,[["__scopeId","data-v-ff4524ae"]]);const is={},rs={class:"VPSwitch",type:"button",role:"switch"},us={class:"check"},ds={key:0,class:"icon"};function _s(e,t){return a(),i("button",rs,[r("span",us,[e.$slots.default?(a(),i("span",ds,[u(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const vs=p(is,[["render",_s],["__scopeId","data-v-92d8f6fb"]]),fs={},hs={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ps=rt('',9),ms=[ps];function gs(e,t){return a(),i("svg",hs,ms)}const ys=p(fs,[["render",gs]]),bs={},ks={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},$s=r("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Ps=[$s];function ws(e,t){return a(),i("svg",ks,Ps)}const Vs=p(bs,[["render",ws]]),xs={title:"toggle dark mode"},Ss=g({__name:"VPSwitchAppearance",setup(e){const{site:t,isDark:n}=w(),s=S(!1),o=typeof localStorage<"u"?l():()=>{};G(()=>{s.value=document.documentElement.classList.contains("dark")});function l(){const d=window.matchMedia("(prefers-color-scheme: dark)"),f=document.documentElement.classList;let _=localStorage.getItem(Me),k=t.value.appearance==="dark"&&_==null||(_==="auto"||_==null?d.matches:_==="dark");d.onchange=V=>{_==="auto"&&L(k=V.matches)};function $(){L(k=!k),_=k?d.matches?"auto":"dark":d.matches?"light":"auto",localStorage.setItem(Me,_)}function L(V){const x=document.createElement("style");x.type="text/css",x.appendChild(document.createTextNode(`:not(.VPSwitchAppearance):not(.VPSwitchAppearance *) { + -webkit-transition: none !important; + -moz-transition: none !important; + -o-transition: none !important; + -ms-transition: none !important; + transition: none !important; +}`)),document.head.appendChild(x),s.value=V,f[V?"add":"remove"]("dark"),window.getComputedStyle(x).opacity,document.head.removeChild(x)}return $}return q(s,d=>{n.value=d}),(d,f)=>(a(),i("label",xs,[h(vs,{class:"VPSwitchAppearance","aria-checked":s.value,onClick:c(o)},{default:v(()=>[h(ys,{class:"sun"}),h(Vs,{class:"moon"})]),_:1},8,["aria-checked","onClick"])]))}});const be=p(Ss,[["__scopeId","data-v-67878c63"]]),Ls={key:0,class:"VPNavBarAppearance"},Ms=g({__name:"VPNavBarAppearance",setup(e){const{site:t}=w();return(n,s)=>c(t).appearance?(a(),i("div",Ls,[h(be)])):m("",!0)}});const Is=p(Ms,[["__scopeId","data-v-5e9f0637"]]),Cs={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',youtube:'YouTube'},Bs=["href","aria-label","innerHTML"],Ns=g({__name:"VPSocialLink",props:{icon:null,link:null},setup(e){const t=e,n=b(()=>typeof t.icon=="object"?t.icon.svg:Cs[t.icon]);return(s,o)=>(a(),i("a",{class:"VPSocialLink",href:e.link,"aria-label":typeof e.icon=="string"?e.icon:"",target:"_blank",rel:"noopener",innerHTML:c(n)},null,8,Bs))}});const Ts=p(Ns,[["__scopeId","data-v-dbecf575"]]),As={class:"VPSocialLinks"},Es=g({__name:"VPSocialLinks",props:{links:null},setup(e){return(t,n)=>(a(),i("div",As,[(a(!0),i(M,null,B(e.links,({link:s,icon:o})=>(a(),y(Ts,{key:s,icon:o,link:s},null,8,["icon","link"]))),128))]))}});const ke=p(Es,[["__scopeId","data-v-b8f6762d"]]),Hs=g({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=w();return(n,s)=>c(t).socialLinks?(a(),y(ke,{key:0,class:"VPNavBarSocialLinks",links:c(t).socialLinks},null,8,["links"])):m("",!0)}});const Os=p(Hs,[["__scopeId","data-v-ef6192dc"]]),zs={key:0,class:"group translations"},Ds={class:"trans-title"},Fs={key:1,class:"group"},Gs={class:"item appearance"},Rs={class:"label"},Us={class:"appearance-action"},js={key:2,class:"group"},qs={class:"item social-links"},Ks=g({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=w(),{localeLinks:s,currentLang:o}=Z({correspondingLink:!0}),l=b(()=>s.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(d,f)=>c(l)?(a(),y(ye,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[c(s).length&&c(o).label?(a(),i("div",zs,[r("p",Ds,P(c(o).label),1),(a(!0),i(M,null,B(c(s),_=>(a(),y(ce,{key:_.link,item:_},null,8,["item"]))),128))])):m("",!0),c(t).appearance?(a(),i("div",Fs,[r("div",Gs,[r("p",Rs,P(c(n).darkModeSwitchLabel||"Appearance"),1),r("div",Us,[h(be)])])])):m("",!0),c(n).socialLinks?(a(),i("div",js,[r("div",qs,[h(ke,{class:"social-links-list",links:c(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}});const Ws=p(Ks,[["__scopeId","data-v-c8c2ae4b"]]),Qs=e=>(E("data-v-6bee1efd"),e=e(),H(),e),Ys=["aria-expanded"],Xs=Qs(()=>r("span",{class:"container"},[r("span",{class:"top"}),r("span",{class:"middle"}),r("span",{class:"bottom"})],-1)),Js=[Xs],Zs=g({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(a(),i("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},Js,10,Ys))}});const eo=p(Zs,[["__scopeId","data-v-6bee1efd"]]),to=e=>(E("data-v-d747baf3"),e=e(),H(),e),no={class:"container"},so={class:"title"},oo={class:"content"},ao=to(()=>r("div",{class:"curtain"},null,-1)),co={class:"content-body"},lo=g({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const{y:t}=Nt(),{hasSidebar:n}=O(),s=b(()=>({"has-sidebar":n.value,fill:t.value>0}));return(o,l)=>(a(),i("div",{class:I(["VPNavBar",c(s)])},[r("div",no,[r("div",so,[h(Xt,null,{"nav-bar-title-before":v(()=>[u(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(o.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),r("div",oo,[ao,r("div",co,[u(o.$slots,"nav-bar-content-before",{},void 0,!0),h(on,{class:"search"}),h(Xn,{class:"menu"}),h(ls,{class:"translations"}),h(Is,{class:"appearance"}),h(Os,{class:"social-links"}),h(Ws,{class:"extra"}),u(o.$slots,"nav-bar-content-after",{},void 0,!0),h(eo,{class:"hamburger",active:e.isScreenOpen,onClick:l[0]||(l[0]=d=>o.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const io=p(lo,[["__scopeId","data-v-d747baf3"]]);function ro(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1),j=[],se=!1,Pe=-1,W=void 0,F=void 0,Q=void 0,We=function(t){return j.some(function(n){return!!(n.options.allowTouchMove&&n.options.allowTouchMove(t))})},oe=function(t){var n=t||window.event;return We(n.target)||n.touches.length>1?!0:(n.preventDefault&&n.preventDefault(),!1)},uo=function(t){if(Q===void 0){var n=!!t&&t.reserveScrollBarGap===!0,s=window.innerWidth-document.documentElement.clientWidth;if(n&&s>0){var o=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);Q=document.body.style.paddingRight,document.body.style.paddingRight=o+s+"px"}}W===void 0&&(W=document.body.style.overflow,document.body.style.overflow="hidden")},_o=function(){Q!==void 0&&(document.body.style.paddingRight=Q,Q=void 0),W!==void 0&&(document.body.style.overflow=W,W=void 0)},vo=function(){return window.requestAnimationFrame(function(){if(F===void 0){F={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left};var t=window,n=t.scrollY,s=t.scrollX,o=t.innerHeight;document.body.style.position="fixed",document.body.style.top=-n,document.body.style.left=-s,setTimeout(function(){return window.requestAnimationFrame(function(){var l=o-window.innerHeight;l&&n>=o&&(document.body.style.top=-(n+l))})},300)}})},fo=function(){if(F!==void 0){var t=-parseInt(document.body.style.top,10),n=-parseInt(document.body.style.left,10);document.body.style.position=F.position,document.body.style.top=F.top,document.body.style.left=F.left,window.scrollTo(n,t),F=void 0}},ho=function(t){return t?t.scrollHeight-t.scrollTop<=t.clientHeight:!1},po=function(t,n){var s=t.targetTouches[0].clientY-Pe;return We(t.target)?!1:n&&n.scrollTop===0&&s>0||ho(n)&&s<0?oe(t):(t.stopPropagation(),!0)},Qe=function(t,n){if(!t){console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");return}if(!j.some(function(o){return o.targetElement===t})){var s={targetElement:t,options:n||{}};j=[].concat(ro(j),[s]),ne?vo():uo(n),ne&&(t.ontouchstart=function(o){o.targetTouches.length===1&&(Pe=o.targetTouches[0].clientY)},t.ontouchmove=function(o){o.targetTouches.length===1&&po(o,t)},se||(document.addEventListener("touchmove",oe,$e?{passive:!1}:void 0),se=!0))}},Ye=function(){ne&&(j.forEach(function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null}),se&&(document.removeEventListener("touchmove",oe,$e?{passive:!1}:void 0),se=!1),Pe=-1),ne?fo():_o(),j=[]};const mo=g({__name:"VPNavScreenMenuLink",props:{text:null,link:null},setup(e){const t=fe("close-screen");return(n,s)=>(a(),y(D,{class:"VPNavScreenMenuLink",href:e.link,onClick:c(t)},{default:v(()=>[C(P(e.text),1)]),_:1},8,["href","onClick"]))}});const go=p(mo,[["__scopeId","data-v-a3572c96"]]),yo={},bo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ko=r("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),$o=[ko];function Po(e,t){return a(),i("svg",bo,$o)}const wo=p(yo,[["render",Po]]),Vo=g({__name:"VPNavScreenMenuGroupLink",props:{text:null,link:null},setup(e){const t=fe("close-screen");return(n,s)=>(a(),y(D,{class:"VPNavScreenMenuGroupLink",href:e.link,onClick:c(t)},{default:v(()=>[C(P(e.text),1)]),_:1},8,["href","onClick"]))}});const Xe=p(Vo,[["__scopeId","data-v-d67c9e09"]]),xo={class:"VPNavScreenMenuGroupSection"},So={key:0,class:"title"},Lo=g({__name:"VPNavScreenMenuGroupSection",props:{text:null,items:null},setup(e){return(t,n)=>(a(),i("div",xo,[e.text?(a(),i("p",So,P(e.text),1)):m("",!0),(a(!0),i(M,null,B(e.items,s=>(a(),y(Xe,{key:s.text,text:s.text,link:s.link},null,8,["text","link"]))),128))]))}});const Mo=p(Lo,[["__scopeId","data-v-1f191989"]]),Io=["aria-controls","aria-expanded"],Co={class:"button-text"},Bo=["id"],No={key:1,class:"group"},To=g({__name:"VPNavScreenMenuGroup",props:{text:null,items:null},setup(e){const t=e,n=S(!1),s=b(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(l,d)=>(a(),i("div",{class:I(["VPNavScreenMenuGroup",{open:n.value}])},[r("button",{class:"button","aria-controls":c(s),"aria-expanded":n.value,onClick:o},[r("span",Co,P(e.text),1),h(wo,{class:"button-icon"})],8,Io),r("div",{id:c(s),class:"items"},[(a(!0),i(M,null,B(e.items,f=>(a(),i(M,{key:f.text},["link"in f?(a(),i("div",{key:f.text,class:"item"},[h(Xe,{text:f.text,link:f.link},null,8,["text","link"])])):(a(),i("div",No,[h(Mo,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,Bo)],2))}});const Ao=p(To,[["__scopeId","data-v-76b97020"]]),Eo={key:0,class:"VPNavScreenMenu"},Ho=g({__name:"VPNavScreenMenu",setup(e){const{theme:t}=w();return(n,s)=>c(t).nav?(a(),i("nav",Eo,[(a(!0),i(M,null,B(c(t).nav,o=>(a(),i(M,{key:o.text},["link"in o?(a(),y(go,{key:0,text:o.text,link:o.link},null,8,["text","link"])):(a(),y(Ao,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),Oo={key:0,class:"VPNavScreenAppearance"},zo={class:"text"},Do=g({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=w();return(s,o)=>c(t).appearance?(a(),i("div",Oo,[r("p",zo,P(c(n).darkModeSwitchLabel||"Appearance"),1),h(be)])):m("",!0)}});const Fo=p(Do,[["__scopeId","data-v-0dc5cf49"]]),Go={class:"list"},Ro=g({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=Z({correspondingLink:!0}),s=S(!1);function o(){s.value=!s.value}return(l,d)=>c(t).length&&c(n).label?(a(),i("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[r("button",{class:"title",onClick:o},[h(Ke,{class:"icon lang"}),C(" "+P(c(n).label)+" ",1),h(qe,{class:"icon chevron"})]),r("ul",Go,[(a(!0),i(M,null,B(c(t),f=>(a(),i("li",{key:f.link,class:"item"},[h(D,{class:"link",href:f.link},{default:v(()=>[C(P(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}});const Uo=p(Ro,[["__scopeId","data-v-41505286"]]),jo=g({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=w();return(n,s)=>c(t).socialLinks?(a(),y(ke,{key:0,class:"VPNavScreenSocialLinks",links:c(t).socialLinks},null,8,["links"])):m("",!0)}}),qo={class:"container"},Ko=g({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=S(null);function n(){Qe(t.value,{reserveScrollBarGap:!0})}function s(){Ye()}return(o,l)=>(a(),y(ve,{name:"fade",onEnter:n,onAfterLeave:s},{default:v(()=>[e.open?(a(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t},[r("div",qo,[u(o.$slots,"nav-screen-content-before",{},void 0,!0),h(Ho,{class:"menu"}),h(Uo,{class:"translations"}),h(Fo,{class:"appearance"}),h(jo,{class:"social-links"}),u(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}});const Wo=p(Ko,[["__scopeId","data-v-183ec3ec"]]),Qo={class:"VPNav"},Yo=g({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=Ut();return te("close-screen",n),(o,l)=>(a(),i("header",Qo,[h(io,{"is-screen-open":c(t),onToggleScreen:c(s)},{"nav-bar-title-before":v(()=>[u(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(o.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(o.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(o.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(Wo,{open:c(t)},{"nav-screen-content-before":v(()=>[u(o.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(o.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])]))}});const Xo=p(Yo,[["__scopeId","data-v-5bdc5df3"]]),Jo={},Zo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ea=r("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),ta=r("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),na=r("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),sa=r("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),oa=[ea,ta,na,sa];function aa(e,t){return a(),i("svg",Zo,oa)}const ca=p(Jo,[["render",aa]]);function la(){const{hasSidebar:e}=O(),t=re("(min-width: 960px)"),n=re("(min-width: 1280px)");return{isAsideEnabled:b(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const ia=71;function we(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function Ve(e){const t=[...document.querySelectorAll(".VPDoc h2,h3,h4,h5,h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{title:ra(n),link:"#"+n.id,level:s}});return ua(t,e)}function ra(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(n.classList.contains("VPBadge")||n.classList.contains("header-anchor"))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function ua(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;e=e.filter(d=>d.level>=s&&d.level<=o);const l=[];e:for(let d=0;d=0;_--){const k=e[_];if(k.level{requestAnimationFrame(l),window.addEventListener("scroll",s)}),ut(()=>{d(location.hash)}),ae(()=>{window.removeEventListener("scroll",s)});function l(){if(!n.value)return;const f=[].slice.call(e.value.querySelectorAll(".outline-link")),_=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(x=>f.some(N=>N.hash===x.hash&&x.offsetParent!==null)),k=window.scrollY,$=window.innerHeight,L=document.body.offsetHeight,V=Math.abs(k+$-L)<1;if(_.length&&V){d(_[_.length-1].hash);return}for(let x=0;x<_.length;x++){const N=_[x],A=_[x+1],[T,z]=_a(x,N,A);if(T){d(z);return}}}function d(f){o&&o.classList.remove("active"),f!==null&&(o=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`));const _=o;_?(_.classList.add("active"),t.value.style.top=_.offsetTop+33+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function He(e){return e.parentElement.offsetTop-ia}function _a(e,t,n){const s=window.scrollY;return e===0&&s===0?[!0,null]:s{const o=R("VPDocOutlineItem",!0);return a(),i("ul",{class:I(e.root?"root":"nested")},[(a(!0),i(M,null,B(e.headers,({children:l,link:d,title:f})=>(a(),i("li",null,[r("a",{class:"outline-link",href:d,onClick:t},P(f),9,va),l!=null&&l.length?(a(),y(o,{key:0,headers:l},null,8,["headers"])):m("",!0)]))),256))],2)}}});const xe=p(fa,[["__scopeId","data-v-e3c7877a"]]),ha={},pa={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ma=r("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),ga=[ma];function ya(e,t){return a(),i("svg",pa,ga)}const Se=p(ha,[["render",ya]]),ba=g({__name:"VPLocalNavOutlineDropdown",setup(e){const{frontmatter:t,theme:n}=w(),s=S(!1),o=S(0),l=S();he(()=>{s.value=!1});function d(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-64,0)}function f(k){k.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Oe(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,$)=>(a(),i("div",{class:"VPLocalNavOutlineDropdown",style:dt({"--vp-vh":o.value+"px"})},[r("button",{onClick:d,class:I({open:s.value})},[C(P(c(we)(c(n)))+" ",1),h(Se,{class:"icon"})],2),h(ve,{name:"flyout"},{default:v(()=>[s.value?(a(),i("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:f},[r("a",{class:"top-link",href:"#",onClick:_},P(c(n).returnToTopLabel||"Return to top"),1),h(xe,{headers:c(Ve)(c(t).outline??c(n).outline)},null,8,["headers"])],512)):m("",!0)]),_:1})],4))}});const ka=p(ba,[["__scopeId","data-v-fb01aae2"]]),$a={key:0,class:"VPLocalNav"},Pa=["aria-expanded"],wa={class:"menu-text"},Va=g({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=w(),{hasSidebar:n}=O();return(s,o)=>c(n)?(a(),i("div",$a,[r("button",{class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:o[0]||(o[0]=l=>s.$emit("open-menu"))},[h(ca,{class:"menu-icon"}),r("span",wa,P(c(t).sidebarMenuLabel||"Menu"),1)],8,Pa),h(ka)])):m("",!0)}});const xa=p(Va,[["__scopeId","data-v-4092cf71"]]),Sa=e=>(E("data-v-0bb349fd"),e=e(),H(),e),La=["role","tabindex"],Ma=Sa(()=>r("div",{class:"indicator"},null,-1)),Ia=["onKeydown"],Ca={key:1,class:"items"},Ba=g({__name:"VPSidebarItem",props:{item:null,depth:null},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:o,isActiveLink:l,hasActiveLink:d,hasChildren:f,toggle:_}=Ot(b(()=>t.item)),k=b(()=>f.value?"section":"div"),$=b(()=>o.value?"a":"div"),L=b(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),V=b(()=>o.value?void 0:"button"),x=b(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":o.value},{"is-active":l.value},{"has-active":d.value}]);function N(T){"key"in T&&T.key!=="Enter"||!t.item.link&&_()}function A(){t.item.link&&_()}return(T,z)=>{const Ze=R("VPSidebarItem",!0);return a(),y(U(c(k)),{class:I(["VPSidebarItem",c(x)])},{default:v(()=>[e.item.text?(a(),i("div",ee({key:0,class:"item",role:c(V)},vt(e.item.items?{click:N,keydown:N}:{},!0),{tabindex:e.item.items&&0}),[Ma,e.item.link?(a(),y(D,{key:0,tag:c($),class:"link",href:e.item.link},{default:v(()=>[(a(),y(U(c(L)),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href"])):(a(),y(U(c(L)),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null?(a(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:_t(A,["enter"]),tabindex:"0"},[h(Se,{class:"caret-icon"})],40,Ia)):m("",!0)],16,La)):m("",!0),e.item.items&&e.item.items.length?(a(),i("div",Ca,[e.depth<5?(a(!0),i(M,{key:0},B(e.item.items,Le=>(a(),y(Ze,{key:Le.text,item:Le,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}});const Na=p(Ba,[["__scopeId","data-v-0bb349fd"]]),Je=e=>(E("data-v-d2bf8cfc"),e=e(),H(),e),Ta=Je(()=>r("div",{class:"curtain"},null,-1)),Aa={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ea=Je(()=>r("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Ha=g({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const t=e,{sidebarGroups:n,hasSidebar:s}=O();let o=S(null);function l(){Qe(o.value,{reserveScrollBarGap:!0})}function d(){Ye()}return ft(async()=>{var f;t.open?(l(),(f=o.value)==null||f.focus()):d()}),(f,_)=>c(s)?(a(),i("aside",{key:0,class:I(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:_[0]||(_[0]=ht(()=>{},["stop"]))},[Ta,r("nav",Aa,[Ea,u(f.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),i(M,null,B(c(n),k=>(a(),i("div",{key:k.text,class:"group"},[h(Na,{item:k,depth:0},null,8,["item"])]))),128)),u(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}});const Oa=p(Ha,[["__scopeId","data-v-d2bf8cfc"]]),za={},Da={class:"VPPage"};function Fa(e,t){const n=R("Content");return a(),i("div",Da,[h(n)])}const Ga=p(za,[["render",Fa]]),Ra=g({__name:"VPButton",props:{tag:null,size:null,theme:null,text:null,href:null},setup(e){const t=e,n=b(()=>[t.size??"medium",t.theme??"brand"]),s=b(()=>t.href&&ze.test(t.href)),o=b(()=>t.tag?t.tag:t.href?"a":"button");return(l,d)=>(a(),y(U(c(o)),{class:I(["VPButton",c(n)]),href:e.href?c(X)(e.href):void 0,target:c(s)?"_blank":void 0,rel:c(s)?"noreferrer":void 0},{default:v(()=>[C(P(e.text),1)]),_:1},8,["class","href","target","rel"]))}});const Ua=p(Ra,[["__scopeId","data-v-fa1633a1"]]),ja=e=>(E("data-v-73fffaef"),e=e(),H(),e),qa={class:"container"},Ka={class:"main"},Wa={key:0,class:"name"},Qa={class:"clip"},Ya={key:1,class:"text"},Xa={key:2,class:"tagline"},Ja={key:0,class:"actions"},Za={key:0,class:"image"},ec={class:"image-container"},tc=ja(()=>r("div",{class:"image-bg"},null,-1)),nc=g({__name:"VPHero",props:{name:null,text:null,tagline:null,image:null,actions:null},setup(e){const t=fe("hero-image-slot-exists");return(n,s)=>(a(),i("div",{class:I(["VPHero",{"has-image":e.image||c(t)}])},[r("div",qa,[r("div",Ka,[u(n.$slots,"home-hero-info",{},()=>[e.name?(a(),i("h1",Wa,[r("span",Qa,P(e.name),1)])):m("",!0),e.text?(a(),i("p",Ya,P(e.text),1)):m("",!0),e.tagline?(a(),i("p",Xa,P(e.tagline),1)):m("",!0)],!0),e.actions?(a(),i("div",Ja,[(a(!0),i(M,null,B(e.actions,o=>(a(),i("div",{key:o.link,class:"action"},[h(Ua,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):m("",!0)]),e.image||c(t)?(a(),i("div",Za,[r("div",ec,[tc,u(n.$slots,"home-hero-image",{},()=>[e.image?(a(),y(me,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}});const sc=p(nc,[["__scopeId","data-v-73fffaef"]]),oc=g({__name:"VPHomeHero",setup(e){const{frontmatter:t}=w();return(n,s)=>c(t).hero?(a(),y(sc,{key:0,class:"VPHomeHero",name:c(t).hero.name,text:c(t).hero.text,tagline:c(t).hero.tagline,image:c(t).hero.image,actions:c(t).hero.actions},{"home-hero-info":v(()=>[u(n.$slots,"home-hero-info")]),"home-hero-image":v(()=>[u(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),ac={},cc={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},lc=r("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),ic=[lc];function rc(e,t){return a(),i("svg",cc,ic)}const uc=p(ac,[["render",rc]]),dc={class:"box"},_c={key:1,class:"icon"},vc=["innerHTML"],fc=["innerHTML"],hc={key:3,class:"link-text"},pc={class:"link-text-value"},mc=g({__name:"VPFeature",props:{icon:null,title:null,details:null,link:null,linkText:null},setup(e){return(t,n)=>(a(),y(D,{class:"VPFeature",href:e.link,"no-icon":!0},{default:v(()=>[r("article",dc,[typeof e.icon=="object"?(a(),y(me,{key:0,image:e.icon,alt:e.icon.alt,height:e.icon.height,width:e.icon.width},null,8,["image","alt","height","width"])):e.icon?(a(),i("div",_c,P(e.icon),1)):m("",!0),r("h2",{class:"title",innerHTML:e.title},null,8,vc),e.details?(a(),i("p",{key:2,class:"details",innerHTML:e.details},null,8,fc)):m("",!0),e.linkText?(a(),i("div",hc,[r("p",pc,[C(P(e.linkText)+" ",1),h(uc,{class:"link-text-icon"})])])):m("",!0)])]),_:1},8,["href"]))}});const gc=p(mc,[["__scopeId","data-v-cf6a8baf"]]),yc={key:0,class:"VPFeatures"},bc={class:"container"},kc={class:"items"},$c=g({__name:"VPFeatures",props:{features:null},setup(e){const t=e,n=b(()=>{const s=t.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%2===0)return"grid-4"}else return});return(s,o)=>e.features?(a(),i("div",yc,[r("div",bc,[r("div",kc,[(a(!0),i(M,null,B(e.features,l=>(a(),i("div",{key:l.title,class:I(["item",[c(n)]])},[h(gc,{icon:l.icon,title:l.title,details:l.details,link:l.link,"link-text":l.linkText},null,8,["icon","title","details","link","link-text"])],2))),128))])])])):m("",!0)}});const Pc=p($c,[["__scopeId","data-v-5df66ecb"]]),wc=g({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=w();return(n,s)=>c(t).features?(a(),y(Pc,{key:0,class:"VPHomeFeatures",features:c(t).features},null,8,["features"])):m("",!0)}}),Vc={class:"VPHome"},xc=g({__name:"VPHome",setup(e){return(t,n)=>{const s=R("Content");return a(),i("div",Vc,[u(t.$slots,"home-hero-before",{},void 0,!0),h(oc,null,{"home-hero-info":v(()=>[u(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(t.$slots,"home-hero-after",{},void 0,!0),u(t.$slots,"home-features-before",{},void 0,!0),h(wc),u(t.$slots,"home-features-after",{},void 0,!0),h(s)])}}});const Sc=p(xc,[["__scopeId","data-v-20eabd3a"]]),Lc=e=>(E("data-v-c834746b"),e=e(),H(),e),Mc={class:"content"},Ic={class:"outline-title"},Cc={"aria-labelledby":"doc-outline-aria-label"},Bc=Lc(()=>r("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Nc=g({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=w(),s=pt([]);he(()=>{s.value=Ve(t.value.outline??n.value.outline)});const o=S(),l=S();return da(o,l),(d,f)=>(a(),i("div",{class:I(["VPDocAsideOutline",{"has-outline":c(s).length>0}]),ref_key:"container",ref:o},[r("div",Mc,[r("div",{class:"outline-marker",ref_key:"marker",ref:l},null,512),r("div",Ic,P(c(we)(c(n))),1),r("nav",Cc,[Bc,h(xe,{headers:c(s),root:!0},null,8,["headers"])])])],2))}});const Tc=p(Nc,[["__scopeId","data-v-c834746b"]]),Ac={class:"VPDocAsideCarbonAds"},Ec=g({__name:"VPDocAsideCarbonAds",props:{carbonAds:null},setup(e){const t=()=>null;return(n,s)=>(a(),i("div",Ac,[h(c(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Hc=e=>(E("data-v-cb998dce"),e=e(),H(),e),Oc={class:"VPDocAside"},zc=Hc(()=>r("div",{class:"spacer"},null,-1)),Dc=g({__name:"VPDocAside",setup(e){const{theme:t}=w();return(n,s)=>(a(),i("div",Oc,[u(n.$slots,"aside-top",{},void 0,!0),u(n.$slots,"aside-outline-before",{},void 0,!0),h(Tc),u(n.$slots,"aside-outline-after",{},void 0,!0),zc,u(n.$slots,"aside-ads-before",{},void 0,!0),c(t).carbonAds?(a(),y(Ec,{key:0,"carbon-ads":c(t).carbonAds},null,8,["carbon-ads"])):m("",!0),u(n.$slots,"aside-ads-after",{},void 0,!0),u(n.$slots,"aside-bottom",{},void 0,!0)]))}});const Fc=p(Dc,[["__scopeId","data-v-cb998dce"]]);function Gc(){const{theme:e,page:t}=w();return b(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{},{relativePath:o}=t.value;let l;return typeof s=="function"?l=s({relativePath:o}):l=s.replace(/:path/g,o),{url:l,text:n}})}function Rc(){const{page:e,theme:t,frontmatter:n}=w();return b(()=>{var d,f,_,k;const s=Re(t.value.sidebar,e.value.relativePath),o=Et(s),l=o.findIndex($=>K(e.value.relativePath,$.link));return{prev:n.value.prev===!1?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((d=o[l-1])==null?void 0:d.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((f=o[l-1])==null?void 0:f.link)},next:n.value.next===!1?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((_=o[l+1])==null?void 0:_.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((k=o[l+1])==null?void 0:k.link)}}})}const Uc={},jc={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},qc=r("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),Kc=r("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),Wc=[qc,Kc];function Qc(e,t){return a(),i("svg",jc,Wc)}const Yc=p(Uc,[["render",Qc]]),Xc={class:"VPLastUpdated"},Jc=["datetime"],Zc=g({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n}=w(),s=b(()=>new Date(n.value.lastUpdated)),o=b(()=>s.value.toISOString()),l=S("");return G(()=>{Y(()=>{l.value=s.value.toLocaleString(window.navigator.language)})}),(d,f)=>(a(),i("p",Xc,[C(P(c(t).lastUpdatedText||"Last updated")+": ",1),r("time",{datetime:c(o)},P(l.value),9,Jc)]))}});const el=p(Zc,[["__scopeId","data-v-4699487c"]]),tl={key:0,class:"VPDocFooter"},nl={key:0,class:"edit-info"},sl={key:0,class:"edit-link"},ol={key:1,class:"last-updated"},al={key:1,class:"prev-next"},cl={class:"pager"},ll=["href"],il=["innerHTML"],rl=["innerHTML"],ul=["href"],dl=["innerHTML"],_l=["innerHTML"],vl=g({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=w(),o=Gc(),l=Rc(),d=b(()=>t.value.editLink&&s.value.editLink!==!1),f=b(()=>n.value.lastUpdated&&s.value.lastUpdated!==!1),_=b(()=>d.value||f.value||l.value.prev||l.value.next);return(k,$)=>{var L,V,x,N,A,T,z;return c(_)?(a(),i("footer",tl,[u(k.$slots,"doc-footer-before",{},void 0,!0),c(d)||c(f)?(a(),i("div",nl,[c(d)?(a(),i("div",sl,[h(D,{class:"edit-link-button",href:c(o).url,"no-icon":!0},{default:v(()=>[h(Yc,{class:"edit-link-icon","aria-label":"edit icon"}),C(" "+P(c(o).text),1)]),_:1},8,["href"])])):m("",!0),c(f)?(a(),i("div",ol,[h(el)])):m("",!0)])):m("",!0),(L=c(l).prev)!=null&&L.link||(V=c(l).next)!=null&&V.link?(a(),i("div",al,[r("div",cl,[(x=c(l).prev)!=null&&x.link?(a(),i("a",{key:0,class:"pager-link prev",href:c(X)(c(l).prev.link)},[r("span",{class:"desc",innerHTML:((N=c(t).docFooter)==null?void 0:N.prev)||"Previous page"},null,8,il),r("span",{class:"title",innerHTML:c(l).prev.text},null,8,rl)],8,ll)):m("",!0)]),r("div",{class:I(["pager",{"has-prev":(A=c(l).prev)==null?void 0:A.link}])},[(T=c(l).next)!=null&&T.link?(a(),i("a",{key:0,class:"pager-link next",href:c(X)(c(l).next.link)},[r("span",{class:"desc",innerHTML:((z=c(t).docFooter)==null?void 0:z.next)||"Next page"},null,8,dl),r("span",{class:"title",innerHTML:c(l).next.text},null,8,_l)],8,ul)):m("",!0)],2)])):m("",!0)])):m("",!0)}}});const fl=p(vl,[["__scopeId","data-v-fc0d1b73"]]),hl={class:"VPDocOutlineDropdown"},pl={key:0,class:"items"},ml=g({__name:"VPDocOutlineDropdown",setup(e){const{frontmatter:t,theme:n}=w(),s=S(!1);return he(()=>{s.value=!1}),(o,l)=>(a(),i("div",hl,[r("button",{onClick:l[0]||(l[0]=d=>s.value=!s.value),class:I({open:s.value})},[C(P(c(we)(c(n)))+" ",1),h(Se,{class:"icon"})],2),s.value?(a(),i("div",pl,[h(xe,{headers:c(Ve)(c(t).outline??c(n).outline)},null,8,["headers"])])):m("",!0)]))}});const gl=p(ml,[["__scopeId","data-v-fa38ac61"]]),yl=e=>(E("data-v-6ff1dd33"),e=e(),H(),e),bl={class:"container"},kl={key:0,class:"aside"},$l=yl(()=>r("div",{class:"aside-curtain"},null,-1)),Pl={class:"aside-container"},wl={class:"aside-content"},Vl={class:"content"},xl={class:"content-container"},Sl={class:"main"},Ll=g({__name:"VPDoc",setup(e){const t=J(),{hasSidebar:n,hasAside:s}=O(),o=b(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,d)=>{const f=R("Content");return a(),i("div",{class:I(["VPDoc",{"has-sidebar":c(n),"has-aside":c(s)}])},[r("div",bl,[c(s)?(a(),i("div",kl,[$l,r("div",Pl,[r("div",wl,[h(Fc,null,{"aside-top":v(()=>[u(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])])):m("",!0),r("div",Vl,[r("div",xl,[u(l.$slots,"doc-before",{},void 0,!0),h(gl),r("main",Sl,[h(f,{class:I(["vp-doc",c(o)])},null,8,["class"])]),h(fl,null,{"doc-footer-before":v(()=>[u(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(l.$slots,"doc-after",{},void 0,!0)])])])],2)}}});const Ml=p(Ll,[["__scopeId","data-v-6ff1dd33"]]),le=e=>(E("data-v-e5bd6573"),e=e(),H(),e),Il={class:"NotFound"},Cl=le(()=>r("p",{class:"code"},"404",-1)),Bl=le(()=>r("h1",{class:"title"},"PAGE NOT FOUND",-1)),Nl=le(()=>r("div",{class:"divider"},null,-1)),Tl=le(()=>r("blockquote",{class:"quote"}," But if you don't change your direction, and if you keep looking, you may end up where you are heading. ",-1)),Al={class:"action"},El=["href"],Hl=g({__name:"NotFound",setup(e){const{site:t}=w(),{localeLinks:n}=Z({removeCurrent:!1}),s=S("/");return G(()=>{var l;const o=window.location.pathname.replace(t.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(s.value=((l=n.value.find(({link:d})=>d.startsWith(o)))==null?void 0:l.link)||n.value[0].link)}),(o,l)=>(a(),i("div",Il,[Cl,Bl,Nl,Tl,r("div",Al,[r("a",{class:"link",href:c(_e)(s.value),"aria-label":"go to home"}," Take me home ",8,El)])]))}});const Ol=p(Hl,[["__scopeId","data-v-e5bd6573"]]),zl=g({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=w(),{hasSidebar:s}=O();return(o,l)=>(a(),i("div",{class:I(["VPContent",{"has-sidebar":c(s),"is-home":c(n).layout==="home"}]),id:"VPContent"},[c(t).isNotFound?u(o.$slots,"not-found",{key:0},()=>[h(Ol)],!0):c(n).layout==="page"?(a(),y(Ga,{key:1})):c(n).layout==="home"?(a(),y(Sc,{key:2},{"home-hero-before":v(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):(a(),y(Ml,{key:3},{"doc-footer-before":v(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const Dl=p(zl,[["__scopeId","data-v-91757ad7"]]),Fl={class:"container"},Gl=["innerHTML"],Rl=["innerHTML"],Ul=g({__name:"VPFooter",setup(e){const{theme:t}=w(),{hasSidebar:n}=O();return(s,o)=>c(t).footer?(a(),i("footer",{key:0,class:I(["VPFooter",{"has-sidebar":c(n)}])},[r("div",Fl,[c(t).footer.message?(a(),i("p",{key:0,class:"message",innerHTML:c(t).footer.message},null,8,Gl)):m("",!0),c(t).footer.copyright?(a(),i("p",{key:1,class:"copyright",innerHTML:c(t).footer.copyright},null,8,Rl)):m("",!0)])],2)):m("",!0)}});const jl=p(Ul,[["__scopeId","data-v-07acdfa3"]]),ql={key:0,class:"Layout"},Kl=g({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=O(),o=J();q(()=>o.path,s),Ht(t,s),te("close-sidebar",s),te("is-sidebar-open",t);const{frontmatter:l}=w(),d=mt(),f=b(()=>!!d["home-hero-image"]);return te("hero-image-slot-exists",f),(_,k)=>{const $=R("Content");return c(l).layout!==!1?(a(),i("div",ql,[u(_.$slots,"layout-top",{},void 0,!0),h(Dt),h(Rt,{class:"backdrop",show:c(t),onClick:c(s)},null,8,["show","onClick"]),h(Xo,null,{"nav-bar-title-before":v(()=>[u(_.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(_.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(_.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(_.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[u(_.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(_.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),h(xa,{open:c(t),onOpenMenu:c(n)},null,8,["open","onOpenMenu"]),h(Oa,{open:c(t)},{"sidebar-nav-before":v(()=>[u(_.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[u(_.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(Dl,null,{"not-found":v(()=>[u(_.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[u(_.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(_.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(_.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(_.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(_.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(_.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[u(_.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(_.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(_.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(_.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(_.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(_.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(_.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(_.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(_.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(jl),u(_.$slots,"layout-bottom",{},void 0,!0)])):(a(),y($,{key:1}))}}});const Wl=p(Kl,[["__scopeId","data-v-e0aba701"]]);const Yl={Layout:Wl,enhanceApp:({app:e})=>{e.component("Badge",yt)}};export{Yl as t}; diff --git a/docs/.vitepress/dist/assets/index.md.b25b952e.js b/docs/.vitepress/dist/assets/index.md.b25b952e.js new file mode 100644 index 000000000..f79423caf --- /dev/null +++ b/docs/.vitepress/dist/assets/index.md.b25b952e.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Laravel MongoDB","text":"Connect Your Laravel to MongoDB","tagline":"This package adds functionalities to the Eloquent model and Query builder for MongoDB, using the original Laravel API. This library extends the original Laravel classes, so it uses exactly the same methods.","actions":[{"theme":"brand","text":"Get Started","link":"/v3/guide/getting-started/installation"}]},"features":[{"title":"Feature A","details":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"title":"Feature B","details":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"title":"Feature C","details":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"}]},"headers":[],"relativePath":"index.md"}'),i={name:"index.md"};function o(s,r,n,l,d,c){return a(),t("div")}const p=e(i,[["render",o]]);export{u as __pageData,p as default}; diff --git a/docs/.vitepress/dist/assets/index.md.b25b952e.lean.js b/docs/.vitepress/dist/assets/index.md.b25b952e.lean.js new file mode 100644 index 000000000..f79423caf --- /dev/null +++ b/docs/.vitepress/dist/assets/index.md.b25b952e.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Laravel MongoDB","text":"Connect Your Laravel to MongoDB","tagline":"This package adds functionalities to the Eloquent model and Query builder for MongoDB, using the original Laravel API. This library extends the original Laravel classes, so it uses exactly the same methods.","actions":[{"theme":"brand","text":"Get Started","link":"/v3/guide/getting-started/installation"}]},"features":[{"title":"Feature A","details":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"title":"Feature B","details":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"title":"Feature C","details":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"}]},"headers":[],"relativePath":"index.md"}'),i={name:"index.md"};function o(s,r,n,l,d,c){return a(),t("div")}const p=e(i,[["render",o]]);export{u as __pageData,p as default}; diff --git a/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 b/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 new file mode 100644 index 000000000..2a6872967 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-cyrillic.ea42a392.woff2 b/docs/.vitepress/dist/assets/inter-italic-cyrillic.ea42a392.woff2 new file mode 100644 index 000000000..f64035158 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-cyrillic.ea42a392.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-greek-ext.4fbe9427.woff2 b/docs/.vitepress/dist/assets/inter-italic-greek-ext.4fbe9427.woff2 new file mode 100644 index 000000000..002189603 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-greek-ext.4fbe9427.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-greek.8f4463c4.woff2 b/docs/.vitepress/dist/assets/inter-italic-greek.8f4463c4.woff2 new file mode 100644 index 000000000..71c265f85 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-greek.8f4463c4.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-latin-ext.bd8920cc.woff2 b/docs/.vitepress/dist/assets/inter-italic-latin-ext.bd8920cc.woff2 new file mode 100644 index 000000000..9c1b9440e Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-latin-ext.bd8920cc.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-latin.bd3b6f56.woff2 b/docs/.vitepress/dist/assets/inter-italic-latin.bd3b6f56.woff2 new file mode 100644 index 000000000..01fcf2072 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-latin.bd3b6f56.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-vietnamese.6ce511fb.woff2 b/docs/.vitepress/dist/assets/inter-italic-vietnamese.6ce511fb.woff2 new file mode 100644 index 000000000..e4f788ee0 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-vietnamese.6ce511fb.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.e75737ce.woff2 b/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.e75737ce.woff2 new file mode 100644 index 000000000..28593ccb8 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.e75737ce.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-cyrillic.5f2c6c8c.woff2 b/docs/.vitepress/dist/assets/inter-roman-cyrillic.5f2c6c8c.woff2 new file mode 100644 index 000000000..a20adc161 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-cyrillic.5f2c6c8c.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-greek-ext.ab0619bc.woff2 b/docs/.vitepress/dist/assets/inter-roman-greek-ext.ab0619bc.woff2 new file mode 100644 index 000000000..e3b0be76d Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-greek-ext.ab0619bc.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-greek.d5a6d92a.woff2 b/docs/.vitepress/dist/assets/inter-roman-greek.d5a6d92a.woff2 new file mode 100644 index 000000000..f790e047d Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-greek.d5a6d92a.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-latin-ext.0030eebd.woff2 b/docs/.vitepress/dist/assets/inter-roman-latin-ext.0030eebd.woff2 new file mode 100644 index 000000000..715bd903b Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-latin-ext.0030eebd.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-latin.2ed14f66.woff2 b/docs/.vitepress/dist/assets/inter-roman-latin.2ed14f66.woff2 new file mode 100644 index 000000000..a540b7afe Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-latin.2ed14f66.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-vietnamese.14ce25a6.woff2 b/docs/.vitepress/dist/assets/inter-roman-vietnamese.14ce25a6.woff2 new file mode 100644 index 000000000..5a9f9cb9c Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-vietnamese.14ce25a6.woff2 differ diff --git a/docs/.vitepress/dist/assets/style.33466018.css b/docs/.vitepress/dist/assets/style.33466018.css new file mode 100644 index 000000000..cfc828bf0 --- /dev/null +++ b/docs/.vitepress/dist/assets/style.33466018.css @@ -0,0 +1 @@ +@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.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 var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,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 var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.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 var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,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 var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67);--vp-c-text-light-2: rgba(60, 60, 67, .75);--vp-c-text-light-3: rgba(60, 60, 67, .33);--vp-c-text-dark-1: rgba(255, 255, 245, .86);--vp-c-text-dark-2: rgba(235, 235, 245, .6);--vp-c-text-dark-3: rgba(235, 235, 245, .38);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d97706;--vp-c-yellow-light: #f59e0b;--vp-c-yellow-lighter: #fbbf24;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5);--vp-c-sponsor: #db2777}:root{--vp-c-bg: #ffffff;--vp-c-bg-elv: #ffffff;--vp-c-bg-elv-up: #ffffff;--vp-c-bg-elv-down: #f6f6f7;--vp-c-bg-elv-mute: #f6f6f7;--vp-c-bg-soft: #f6f6f7;--vp-c-bg-soft-up: #f9f9fa;--vp-c-bg-soft-down: #e3e3e5;--vp-c-bg-soft-mute: #e3e3e5;--vp-c-bg-alt: #f6f6f7;--vp-c-border: rgba(60, 60, 67, .29);--vp-c-divider: rgba(60, 60, 67, .12);--vp-c-gutter: rgba(60, 60, 67, .12);--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white);--vp-c-text-1: var(--vp-c-text-light-1);--vp-c-text-2: var(--vp-c-text-light-2);--vp-c-text-3: var(--vp-c-text-light-3);--vp-c-text-inverse-1: var(--vp-c-text-dark-1);--vp-c-text-inverse-2: var(--vp-c-text-dark-2);--vp-c-text-inverse-3: var(--vp-c-text-dark-3);--vp-c-text-code: #476582;--vp-c-brand: var(--vp-c-green);--vp-c-brand-light: var(--vp-c-green-light);--vp-c-brand-lighter: var(--vp-c-green-lighter);--vp-c-brand-dark: var(--vp-c-green-dark);--vp-c-brand-darker: var(--vp-c-green-darker);--vp-c-mute: #f6f6f7;--vp-c-mute-light: #f9f9fc;--vp-c-mute-lighter: #ffffff;--vp-c-mute-dark: #e3e3e5;--vp-c-mute-darker: #d7d7d9}.dark{--vp-c-bg: #1e1e20;--vp-c-bg-elv: #252529;--vp-c-bg-elv-up: #313136;--vp-c-bg-elv-down: #1e1e20;--vp-c-bg-elv-mute: #313136;--vp-c-bg-soft: #252529;--vp-c-bg-soft-up: #313136;--vp-c-bg-soft-down: #1e1e20;--vp-c-bg-soft-mute: #313136;--vp-c-bg-alt: #161618;--vp-c-border: rgba(82, 82, 89, .68);--vp-c-divider: rgba(82, 82, 89, .32);--vp-c-gutter: #000000;--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black);--vp-c-text-1: var(--vp-c-text-dark-1);--vp-c-text-2: var(--vp-c-text-dark-2);--vp-c-text-3: var(--vp-c-text-dark-3);--vp-c-text-inverse-1: var(--vp-c-text-light-1);--vp-c-text-inverse-2: var(--vp-c-text-light-2);--vp-c-text-inverse-3: var(--vp-c-text-light-3);--vp-c-text-code: #c9def1;--vp-c-mute: #313136;--vp-c-mute-light: #3a3a3c;--vp-c-mute-lighter: #505053;--vp-c-mute-dark: #2c2c30;--vp-c-mute-darker: #252529}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}: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-local-nav: 10;--vp-z-index-nav: 20;--vp-z-index-layout-top: 30;--vp-z-index-backdrop: 40;--vp-z-index-sidebar: 50;--vp-z-index-footer: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}: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-block-color: var(--vp-c-text-dark-1);--vp-code-block-bg: #292b30;--vp-code-block-bg-light: #1e1e20;--vp-code-block-divider-color: #000000;--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-code-line-number-color: var(--vp-c-text-dark-3);--vp-code-line-diff-add-color: var(--vp-c-green-dimm-2);--vp-code-line-diff-add-symbol-color: var(--vp-c-green);--vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red);--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);--vp-code-line-error-color: var(--vp-c-red-dimm-2);--vp-code-copy-code-border-color: transparent;--vp-code-copy-code-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-dark-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-bar-color: var(--vp-c-brand)}.dark{--vp-code-block-bg: #161618}:root{--vp-button-brand-border: var(--vp-c-brand-lighter);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-lighter);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-dark);--vp-button-brand-active-border: var(--vp-c-brand-lighter);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-darker);--vp-button-alt-border: var(--vp-c-border);--vp-button-alt-text: var(--vp-c-neutral);--vp-button-alt-bg: var(--vp-c-mute);--vp-button-alt-hover-border: var(--vp-c-border);--vp-button-alt-hover-text: var(--vp-c-neutral);--vp-button-alt-hover-bg: var(--vp-c-mute-dark);--vp-button-alt-active-border: var(--vp-c-border);--vp-button-alt-active-text: var(--vp-c-neutral);--vp-button-alt-active-bg: var(--vp-c-mute-darker);--vp-button-sponsor-border: var(--vp-c-gray-light-3);--vp-button-sponsor-text: var(--vp-c-text-light-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}.dark{--vp-button-sponsor-border: var(--vp-c-gray-dark-1);--vp-button-sponsor-text: var(--vp-c-text-dark-2)}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: var(--vp-c-border);--vp-custom-block-info-text: var(--vp-c-text-2);--vp-custom-block-info-bg: var(--vp-c-bg-soft-up);--vp-custom-block-info-code-bg: var(--vp-c-bg-soft);--vp-custom-block-tip-border: var(--vp-c-green);--vp-custom-block-tip-text: var(--vp-c-green-dark);--vp-custom-block-tip-bg: var(--vp-c-bg-soft-up);--vp-custom-block-tip-code-bg: var(--vp-c-bg-soft);--vp-custom-block-warning-border: var(--vp-c-yellow);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-bg-soft-up);--vp-custom-block-warning-code-bg: var(--vp-c-bg-soft);--vp-custom-block-danger-border: var(--vp-c-red);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-bg-soft-up);--vp-custom-block-danger-code-bg: var(--vp-c-bg-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-details-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-hover-border-color: var(--vp-c-gray);--vp-input-switch-bg-color: var(--vp-c-mute)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg)}: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);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: var(--vp-c-border);--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-bg-soft-up);--vp-badge-tip-border: var(--vp-c-green-dark);--vp-badge-tip-text: var(--vp-c-green);--vp-badge-tip-bg: var(--vp-c-green-dimm-1);--vp-badge-warning-border: var(--vp-c-yellow-dark);--vp-badge-warning-text: var(--vp-c-yellow);--vp-badge-warning-bg: var(--vp-c-yellow-dimm-1);--vp-badge-danger-border: var(--vp-c-red-dark);--vp-badge-danger-text: var(--vp-c-red);--vp-badge-danger-bg: var(--vp-c-red-dimm-1)}: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);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}*,: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);direction:ltr;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}.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 code{background-color:var(--vp-custom-block-info-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 code{background-color:var(--vp-custom-block-tip-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 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 code{background-color:var(--vp-custom-block-danger-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 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}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600}.custom-block a:hover{text-decoration:underline}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.dark .vp-code-light{display:none}html:not(.dark) .vp-code-dark{display:none}.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}.vp-code-group .tabs:after{position:absolute;right:0;bottom:0;left:0;height:1px;background-color:var(--vp-code-tab-divider);content:""}@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:absolute;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);background-color:var(--vp-code-tab-bg);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:10;height:1px;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-]{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{display:block}.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 .header-anchor{float:left;margin-left:-.87em;padding-right:.23em;font-weight:500;user-select:none;opacity:0;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 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}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.vp-doc a:hover{text-decoration:underline}.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{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 a{color:inherit;font-weight:600}.vp-doc .custom-block a:hover{text-decoration:underline}.vp-doc .custom-block code{font-size:var(--vp-custom-block-code-font-size);font-weight:700;color:inherit}.vp-doc .custom-block div[class*=language-]{margin:8px 0}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;color:var(--vp-c-text-code);background-color:var(--vp-c-mute);transition:color .5s,background-color .5s}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc a>code{color:var(--vp-c-brand);transition:color .25s}.vp-doc a:hover>code{color:var(--vp-c-brand-dark)}.vp-doc div[class*=language-]{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-]{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;display:block;justify-content:center;align-items:center;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;left:-65px;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;width:64px;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:"Copied"}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-c-text-dark-3);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}.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-bottom:4px;text-align:center;letter-spacing:1px;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-bg-soft-down)}.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[data-v-ce917cfb]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:10px;padding:0 8px;line-height:18px;font-size:12px;font-weight:600;transform:translateY(-2px)}h1 .VPBadge[data-v-ce917cfb],h2 .VPBadge[data-v-ce917cfb],h3 .VPBadge[data-v-ce917cfb],h4 .VPBadge[data-v-ce917cfb],h5 .VPBadge[data-v-ce917cfb],h6 .VPBadge[data-v-ce917cfb]{vertical-align:top}h2 .VPBadge[data-v-ce917cfb]{border-radius:11px;line-height:20px}.VPBadge.info[data-v-ce917cfb]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-ce917cfb]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-ce917cfb]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-ce917cfb]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPSkipLink[data-v-73e3a132]{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);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-73e3a132]:focus{height:auto;width:auto;clip:auto;clip-path:none}.dark .VPSkipLink[data-v-73e3a132]{color:var(--vp-c-green)}@media (min-width: 1280px){.VPSkipLink[data-v-73e3a132]{top:14px;left:16px}}.VPBackdrop[data-v-54a304ca]{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-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}html:not(.dark) .VPImage.dark[data-v-dc109a54]{display:none}.dark .VPImage.light[data-v-dc109a54]{display:none}.title[data-v-1ab7b21f]{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}.title[data-v-1ab7b21f]:hover{opacity:.6}@media (min-width: 960px){.title[data-v-1ab7b21f]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-1ab7b21f]{border-bottom-color:var(--vp-c-divider)}}[data-v-1ab7b21f] .logo{margin-right:8px;height:24px}/*! @docsearch/css 3.3.3 | 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-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-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;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}@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{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{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;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;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;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{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:rgba(0,0,0,.2);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:rgba(0,0,0,.2);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:"\bb "}.DocSearch-Prefill{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;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}@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{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;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.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}}.DocSearch{--docsearch-primary-color: var(--vp-c-brand);--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-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 .DocSearch{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-bg-soft-mute);--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:32px;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: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);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:1px;letter-spacing:-12px;color:transparent}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:var(--428e98e8);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-bg-soft-mute)}.icon[data-v-f3ed0000]{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;fill:var(--vp-c-text-3);transition:fill .25s;flex-shrink:0}.VPNavBarMenuLink[data-v-b7aed9c7]{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-b7aed9c7],.VPNavBarMenuLink[data-v-b7aed9c7]:hover{color:var(--vp-c-brand)}.VPMenuGroup+.VPMenuLink[data-v-fd8d5e7a]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-fd8d5e7a]{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-fd8d5e7a]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-fd8d5e7a]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{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-e42ed9b3]{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-e42ed9b3] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e42ed9b3] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e42ed9b3] .group:last-child{padding-bottom:0}.VPMenu[data-v-e42ed9b3] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e42ed9b3] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e42ed9b3] .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-e42ed9b3] .action{padding-left:24px}.VPFlyout[data-v-6afe904b]{position:relative}.VPFlyout[data-v-6afe904b]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-6afe904b]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-6afe904b]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-6afe904b]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-6afe904b]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-6afe904b],.button[aria-expanded=true]+.menu[data-v-6afe904b]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-6afe904b]{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-6afe904b]{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-6afe904b]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-6afe904b]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-6afe904b]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-6afe904b]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPNavBarMenu[data-v-f732b5d0]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-f732b5d0]{display:flex}}.VPNavBarTranslations[data-v-ff4524ae]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-ff4524ae]{display:flex;align-items:center}}.title[data-v-ff4524ae]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPSwitch[data-v-92d8f6fb]{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}.VPSwitch[data-v-92d8f6fb]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-92d8f6fb]{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}.icon[data-v-92d8f6fb]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-92d8f6fb] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-92d8f6fb] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-67878c63]{opacity:1}.moon[data-v-67878c63],.dark .sun[data-v-67878c63]{opacity:0}.dark .moon[data-v-67878c63]{opacity:1}.dark .VPSwitchAppearance[data-v-67878c63] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-5e9f0637]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-5e9f0637]{display:flex;align-items:center}}.VPSocialLink[data-v-dbecf575]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-dbecf575]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-dbecf575]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-b8f6762d]{display:flex;flex-wrap:wrap;justify-content:center}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.VPNavBarExtra[data-v-c8c2ae4b]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-c8c2ae4b]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-c8c2ae4b]{display:none}}.trans-title[data-v-c8c2ae4b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-c8c2ae4b],.item.social-links[data-v-c8c2ae4b]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-c8c2ae4b]{min-width:176px}.appearance-action[data-v-c8c2ae4b]{margin-right:-2px}.social-links-list[data-v-c8c2ae4b]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBar[data-v-d747baf3]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);transition:border-color .5s,background-color .5s;pointer-events:none}.VPNavBar.has-sidebar[data-v-d747baf3]{border-bottom-color:var(--vp-c-gutter)}@media (min-width: 768px){.VPNavBar[data-v-d747baf3]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-d747baf3]{border-bottom-color:transparent;padding:0}.VPNavBar.fill[data-v-d747baf3]:not(.has-sidebar){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-d747baf3]{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[data-v-d747baf3] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-d747baf3]{max-width:100%}}.title[data-v-d747baf3]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-d747baf3]{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-d747baf3]{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-d747baf3]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-d747baf3]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-d747baf3]{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-d747baf3]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .content-body[data-v-d747baf3],.VPNavBar.fill .content-body[data-v-d747baf3]{position:relative;background-color:var(--vp-nav-bg-color)}}.menu+.translations[data-v-d747baf3]:before,.menu+.appearance[data-v-d747baf3]:before,.menu+.social-links[data-v-d747baf3]:before,.translations+.appearance[data-v-d747baf3]:before,.appearance+.social-links[data-v-d747baf3]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-d747baf3]:before,.translations+.appearance[data-v-d747baf3]:before{margin-right:16px}.appearance+.social-links[data-v-d747baf3]:before{margin-left:16px}.social-links[data-v-d747baf3]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-d747baf3]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-d747baf3]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-d747baf3]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-a3572c96]{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-a3572c96]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-d67c9e09]{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-d67c9e09]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-1f191989]{display:block}.title[data-v-1f191989]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-76b97020]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-76b97020]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-76b97020]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-76b97020]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-76b97020]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-76b97020]{transform:rotate(45deg)}.button[data-v-76b97020]{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-76b97020]:hover{color:var(--vp-c-brand)}.button-icon[data-v-76b97020]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-76b97020]:first-child{padding-top:0}.group+.group[data-v-76b97020],.group+.item[data-v-76b97020]{padding-top:4px}.VPNavScreenAppearance[data-v-0dc5cf49]{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-0dc5cf49]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-41505286]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-41505286]{height:auto}.title[data-v-41505286]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-41505286]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-41505286]{margin-right:8px}.icon.chevron[data-v-41505286]{margin-left:4px}.list[data-v-41505286]{padding:4px 0 0 24px}.link[data-v-41505286]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-183ec3ec]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);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 .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-183ec3ec],.VPNavScreen.fade-leave-active[data-v-183ec3ec]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-183ec3ec],.VPNavScreen.fade-leave-active .container[data-v-183ec3ec]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-183ec3ec],.VPNavScreen.fade-leave-to[data-v-183ec3ec]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-183ec3ec],.VPNavScreen.fade-leave-to .container[data-v-183ec3ec]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-183ec3ec]{display:none}}.container[data-v-183ec3ec]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-183ec3ec],.menu+.appearance[data-v-183ec3ec],.translations+.appearance[data-v-183ec3ec]{margin-top:24px}.menu+.social-links[data-v-183ec3ec]{margin-top:16px}.appearance+.social-links[data-v-183ec3ec]{margin-top:16px}.VPNav[data-v-5bdc5df3]{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-5bdc5df3]{position:fixed}}.root[data-v-e3c7877a]{position:relative;z-index:1}.nested[data-v-e3c7877a]{padding-left:13px}.outline-link[data-v-e3c7877a]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:500}.outline-link[data-v-e3c7877a]:hover,.outline-link.active[data-v-e3c7877a]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-e3c7877a]{padding-left:13px}.VPLocalNavOutlineDropdown[data-v-fb01aae2]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-fb01aae2]{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-fb01aae2]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-fb01aae2]{color:var(--vp-c-text-1)}.icon[data-v-fb01aae2]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-fb01aae2] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-fb01aae2]{transform:rotate(90deg)}.items[data-v-fb01aae2]{position:absolute;left:20px;right:20px;top:64px;background-color:var(--vp-local-nav-bg-color);padding:4px 10px 16px;border:1px solid var(--vp-c-divider);border-radius:8px;max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:scroll;box-shadow:var(--vp-shadow-3)}.top-link[data-v-fb01aae2]{display:block;color:var(--vp-c-brand);font-size:13px;font-weight:500;padding:6px 0;margin:0 13px 10px;border-bottom:1px solid var(--vp-c-divider)}.flyout-enter-active[data-v-fb01aae2]{transition:all .2s ease-out}.flyout-leave-active[data-v-fb01aae2]{transition:all .15s ease-in}.flyout-enter-from[data-v-fb01aae2],.flyout-leave-to[data-v-fb01aae2]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-4092cf71]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;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);transition:border-color .5s,background-color .5s}@media (min-width: 960px){.VPLocalNav[data-v-4092cf71]{display:none}}.menu[data-v-4092cf71]{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-4092cf71]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-4092cf71]{padding:0 32px}}.menu-icon[data-v-4092cf71]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-4092cf71]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-4092cf71]{padding:12px 32px 11px}}.VPSidebarItem.level-0[data-v-0bb349fd]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-0bb349fd]{padding-bottom:10px}.item[data-v-0bb349fd]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-0bb349fd]{cursor:pointer}.indicator[data-v-0bb349fd]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-0bb349fd],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-0bb349fd],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-0bb349fd],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-0bb349fd]{background-color:var(--vp-c-brand)}.link[data-v-0bb349fd]{display:flex;align-items:center;flex-grow:1}.text[data-v-0bb349fd]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-0bb349fd]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-0bb349fd],.VPSidebarItem.level-2 .text[data-v-0bb349fd],.VPSidebarItem.level-3 .text[data-v-0bb349fd],.VPSidebarItem.level-4 .text[data-v-0bb349fd],.VPSidebarItem.level-5 .text[data-v-0bb349fd]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-0bb349fd],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-0bb349fd],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-0bb349fd],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-0bb349fd],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-0bb349fd],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-0bb349fd]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-0bb349fd],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-0bb349fd],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-0bb349fd],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-0bb349fd],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-0bb349fd],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-0bb349fd]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-0bb349fd],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-0bb349fd],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-0bb349fd],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-0bb349fd],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-0bb349fd],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-0bb349fd]{color:var(--vp-c-brand)}.caret[data-v-0bb349fd]{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}.item:hover .caret[data-v-0bb349fd]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-0bb349fd]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-0bb349fd]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-0bb349fd]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-0bb349fd],.VPSidebarItem.level-2 .items[data-v-0bb349fd],.VPSidebarItem.level-3 .items[data-v-0bb349fd],.VPSidebarItem.level-4 .items[data-v-0bb349fd],.VPSidebarItem.level-5 .items[data-v-0bb349fd]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-0bb349fd]{display:none}.VPSidebar[data-v-d2bf8cfc]{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}.VPSidebar.open[data-v-d2bf8cfc]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-d2bf8cfc]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-d2bf8cfc]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;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-d2bf8cfc]{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-d2bf8cfc]{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-d2bf8cfc]{outline:0}.group+.group[data-v-d2bf8cfc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-d2bf8cfc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPButton[data-v-fa1633a1]{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-fa1633a1]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa1633a1]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa1633a1]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa1633a1]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa1633a1]: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-fa1633a1]: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-fa1633a1]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa1633a1]: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-fa1633a1]: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-fa1633a1]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa1633a1]: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-fa1633a1]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}.VPHero[data-v-73fffaef]{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-73fffaef]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-73fffaef]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-73fffaef]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-73fffaef]{flex-direction:row}}.main[data-v-73fffaef]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-73fffaef]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-73fffaef]{text-align:left}}@media (min-width: 960px){.main[data-v-73fffaef]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-73fffaef]{max-width:592px}}.name[data-v-73fffaef],.text[data-v-73fffaef]{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-73fffaef],.VPHero.has-image .text[data-v-73fffaef]{margin:0 auto}.name[data-v-73fffaef]{color:var(--vp-home-hero-name-color)}.clip[data-v-73fffaef]{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-73fffaef],.text[data-v-73fffaef]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-73fffaef],.text[data-v-73fffaef]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-73fffaef],.VPHero.has-image .text[data-v-73fffaef]{margin:0}}.tagline[data-v-73fffaef]{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-73fffaef]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-73fffaef]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-73fffaef]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-73fffaef]{margin:0}}.actions[data-v-73fffaef]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-73fffaef]{justify-content:center}@media (min-width: 640px){.actions[data-v-73fffaef]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-73fffaef]{justify-content:flex-start}}.action[data-v-73fffaef]{flex-shrink:0;padding:6px}.image[data-v-73fffaef]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-73fffaef]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-73fffaef]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-73fffaef]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-73fffaef]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-73fffaef]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-73fffaef]{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-73fffaef]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-73fffaef]{width:320px;height:320px}}[data-v-73fffaef] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-73fffaef] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-73fffaef] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-cf6a8baf]{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-cf6a8baf]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-cf6a8baf]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-cf6a8baf] .VPImage{width:48px;height:48px;margin-bottom:20px}.icon[data-v-cf6a8baf]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-bg-soft-down);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-cf6a8baf]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-cf6a8baf]{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-cf6a8baf]{padding-top:8px}.link-text-value[data-v-cf6a8baf]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-cf6a8baf]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-5df66ecb]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-5df66ecb]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-5df66ecb]{padding:0 64px}}.container[data-v-5df66ecb]{margin:0 auto;max-width:1152px}.items[data-v-5df66ecb]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-5df66ecb]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-5df66ecb],.item.grid-4[data-v-5df66ecb],.item.grid-6[data-v-5df66ecb]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-5df66ecb],.item.grid-4[data-v-5df66ecb]{width:50%}.item.grid-3[data-v-5df66ecb],.item.grid-6[data-v-5df66ecb]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-5df66ecb]{width:25%}}.VPHome[data-v-20eabd3a]{padding-bottom:96px}.VPHome[data-v-20eabd3a] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-20eabd3a]{padding-bottom:128px}}.VPDocAsideOutline[data-v-c834746b]{display:none}.VPDocAsideOutline.has-outline[data-v-c834746b]{display:block}.content[data-v-c834746b]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-c834746b]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:1px;height:18px;background-color:var(--vp-c-brand);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-c834746b]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-4699487c]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-4699487c]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-fc0d1b73]{margin-top:64px}.edit-info[data-v-fc0d1b73]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-fc0d1b73]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-fc0d1b73]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.edit-link-button[data-v-fc0d1b73]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-fc0d1b73]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-fc0d1b73]{border-top:1px solid var(--vp-c-divider);padding-top:24px}@media (min-width: 640px){.prev-next[data-v-fc0d1b73]{display:flex}}.pager.has-prev[data-v-fc0d1b73]{padding-top:8px}@media (min-width: 640px){.pager[data-v-fc0d1b73]{display:flex;flex-direction:column;flex-shrink:0;width:50%}.pager.has-prev[data-v-fc0d1b73]{padding-top:0;padding-left:16px}}.pager-link[data-v-fc0d1b73]{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-fc0d1b73]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-fc0d1b73]{margin-left:auto;text-align:right}.desc[data-v-fc0d1b73]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-fc0d1b73]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDocOutlineDropdown[data-v-fa38ac61]{margin-bottom:42px}.VPDocOutlineDropdown button[data-v-fa38ac61]{display:block;font-size:14px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;border:1px solid var(--vp-c-border);padding:4px 12px;border-radius:8px}.VPDocOutlineDropdown button[data-v-fa38ac61]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-fa38ac61]{color:var(--vp-c-text-1)}.icon[data-v-fa38ac61]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-fa38ac61] .outline-link{font-size:13px}.open>.icon[data-v-fa38ac61]{transform:rotate(90deg)}.items[data-v-fa38ac61]{margin-top:10px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-6ff1dd33]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-6ff1dd33]{display:none}@media (min-width: 960px) and (max-width: 1280px){.VPDoc .VPDocOutlineDropdown[data-v-6ff1dd33]{display:block}}@media (min-width: 768px){.VPDoc[data-v-6ff1dd33]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-6ff1dd33]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-6ff1dd33]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-6ff1dd33]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-6ff1dd33]{display:flex;justify-content:center}.VPDoc .aside[data-v-6ff1dd33]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-6ff1dd33]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-6ff1dd33]{max-width:1104px}}.container[data-v-6ff1dd33]{margin:0 auto;width:100%}.aside[data-v-6ff1dd33]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.aside-container[data-v-6ff1dd33]{position:sticky;top:0;margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1 - 32px);padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px);height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-6ff1dd33]::-webkit-scrollbar{display:none}.aside-curtain[data-v-6ff1dd33]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-6ff1dd33]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-6ff1dd33]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-6ff1dd33]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-6ff1dd33]{order:1;margin:0;min-width:640px}}.content-container[data-v-6ff1dd33]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-6ff1dd33]{max-width:688px}.NotFound[data-v-e5bd6573]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-e5bd6573]{padding:96px 32px 168px}}.code[data-v-e5bd6573]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-e5bd6573]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-e5bd6573]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-e5bd6573]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-e5bd6573]{padding-top:20px}.link[data-v-e5bd6573]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .25s,color .25s}.link[data-v-e5bd6573]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.VPContent[data-v-91757ad7]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91757ad7]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91757ad7]{margin:0}@media (min-width: 960px){.VPContent[data-v-91757ad7]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91757ad7]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91757ad7]{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-07acdfa3]{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-07acdfa3]{display:none}@media (min-width: 768px){.VPFooter[data-v-07acdfa3]{padding:32px}}.container[data-v-07acdfa3]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-07acdfa3],.copyright[data-v-07acdfa3]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.message[data-v-07acdfa3]{order:2}.copyright[data-v-07acdfa3]{order:1}.Layout[data-v-e0aba701]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-978bd032]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-978bd032]{margin:0 auto;max-width:1152px}.love[data-v-978bd032]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-978bd032]{width:28px;height:28px;fill:currentColor}.message[data-v-978bd032]{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-978bd032]{padding-top:32px}.action[data-v-978bd032]{padding-top:40px;text-align:center}.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-b1cfd8dc-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:96px}}.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{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-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{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-3bf2e850]{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-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-b6116b11]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-b6116b11]{padding:32px}.VPTeamMembersItem.small .data[data-v-b6116b11]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-b6116b11]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-b6116b11]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-b6116b11]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-b6116b11]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-b6116b11]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-b6116b11]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-b6116b11]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-b6116b11]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-b6116b11]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-b6116b11]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-b6116b11]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-b6116b11]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-b6116b11]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-b6116b11]{text-align:center}.avatar[data-v-b6116b11]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-b6116b11]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-b6116b11]{margin:0;font-weight:600}.affiliation[data-v-b6116b11]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-b6116b11]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-b6116b11]:hover{color:var(--vp-c-brand)}.desc[data-v-b6116b11]{margin:0 auto}.links[data-v-b6116b11]{display:flex;justify-content:center;height:56px}.sp-link[data-v-b6116b11]{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-b6116b11]:hover,.sp .sp-link.link[data-v-b6116b11]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-b6116b11]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6927e48e]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6927e48e]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6927e48e]{max-width:876px}.VPTeamMembers.medium .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6927e48e]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6927e48e]{max-width:760px}.container[data-v-6927e48e]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-brand: #646cff;--vp-c-brand-light: #747bff;--vp-c-brand-lighter: #9499ff;--vp-c-brand-lightest: #bcc0ff;--vp-c-brand-dark: #535bf2;--vp-c-brand-darker: #454ce1;--vp-c-brand-dimm: rgba(100, 108, 255, .08)}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #bd34fe 30%, #41d1ff );--vp-home-hero-image-background-image: linear-gradient( -45deg, #bd34fe 50%, #47caff 50% );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-darker);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm)}.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}.dark .vp-doc a,.dark .vp-doc a>code,.dark .VPNavBarMenuLink.VPNavBarMenuLink:hover,.dark .VPNavBarMenuLink.VPNavBarMenuLink.active,.dark .link.link:hover,.dark .link.link.active,.dark .edit-link-button.edit-link-button,.dark .pager-link .title{color:var(--vp-c-brand-lighter)}.dark .vp-doc a:hover,.dark .vp-doc a>code:hover{color:var(--vp-c-brand-lightest);opacity:1}.dark .vp-doc .custom-block a{transition:color .25s} diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_basic-usage.md.69c45660.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_basic-usage.md.69c45660.js new file mode 100644 index 000000000..69a1abee5 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_basic-usage.md.69c45660.js @@ -0,0 +1,59 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/basic-usage.md"}'),p={name:"v3/guide/eloquent/basic-usage.md"},o=l(`

Basic Usage ​

Retrieving all models ​

php
$users = User::all();
+

Retrieving a record by primary key ​

php
$user = User::find('517c43667db388101e00000f');
+

Where ​

php
$posts =
+    Post::where('author.name', 'John')
+        ->take(10)
+        ->get();
+

OR Statements ​

php
$posts =
+    Post::where('votes', '>', 0)
+        ->orWhere('is_approved', true)
+        ->get();
+

AND statements ​

php
$users =
+    User::where('age', '>', 18)
+        ->where('name', '!=', 'John')
+        ->get();
+

whereIn ​

php
$users = User::whereIn('age', [16, 18, 20])->get();
+

When using whereNotIn objects will be returned if the field is non-existent. Combine with whereNotNull('age') to leave out those documents.

whereBetween ​

php
$posts = Post::whereBetween('votes', [1, 100])->get();
+

whereNull ​

php
$users = User::whereNull('age')->get();
+

whereDate ​

php
$users = User::whereDate('birthday', '2021-5-12')->get();
+

The usage is the same as whereMonth / whereDay / whereYear / whereTime

Advanced wheres ​

php
$users =
+    User::where('name', 'John')
+        ->orWhere(function ($query) {
+            return $query
+                ->where('votes', '>', 100)
+                ->where('title', '<>', 'Admin');
+        })->get();
+

orderBy ​

php
$users = User::orderBy('age', 'desc')->get();
+

Offset & Limit (skip & take) ​

php
$users =
+    User::skip(10)
+        ->take(5)
+        ->get();
+

groupBy ​

Selected columns that are not grouped will be aggregated with the $last function.

php
$users =
+    Users::groupBy('title')
+        ->get(['title', 'name']);
+

Distinct ​

Distinct requires a field for which to return the distinct values.

php
$users = User::distinct()->get(['name']);
+
+// Equivalent to:
+$users = User::distinct('name')->get();
+

Distinct can be combined with where:

php
$users =
+    User::where('active', true)
+        ->distinct('name')
+        ->get();
+

Like ​

php
$spamComments = Comment::where('body', 'like', '%spam%')->get();
+

Aggregation ​

Aggregations are only available for MongoDB versions greater than 2.2.x

php
$total = Product::count();
+$price = Product::max('price');
+$price = Product::min('price');
+$price = Product::avg('price');
+$total = Product::sum('price');
+

Aggregations can be combined with where:

php
$sold = Orders::where('sold', true)->sum('price');
+

Aggregations can be also used on sub-documents:

php
$total = Order::max('suborder.price');
+

NOTE: This aggregation only works with single sub-documents (like EmbedsOne) not subdocument arrays (like EmbedsMany).

Incrementing/Decrementing ​

Incrementing/Decrementing the value of a column

Perform increments or decrements (default 1) on specified attributes:

php
Cat::where('name', 'Kitty')->increment('age');
+
+Car::where('name', 'Toyota')->decrement('weight', 50);
+

The number of updated objects is returned:

php
$count = User::increment('age');
+

You may also specify additional columns to update:

php
Cat::where('age', 3)
+    ->increment('age', 1, ['group' => 'Kitty Club']);
+
+Car::where('weight', 300)
+    ->decrement('weight', 100, ['latest_change' => 'carbon fiber']);
+
`,53),e=[o];function t(r,c,F,D,y,i){return n(),a("div",null,e)}const h=s(p,[["render",t]]);export{A as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_basic-usage.md.69c45660.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_basic-usage.md.69c45660.lean.js new file mode 100644 index 000000000..2393bb34c --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_basic-usage.md.69c45660.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/basic-usage.md"}'),p={name:"v3/guide/eloquent/basic-usage.md"},o=l("",53),e=[o];function t(r,c,F,D,y,i){return n(),a("div",null,e)}const h=s(p,[["render",t]]);export{A as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_dates.md.7b028c74.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_dates.md.7b028c74.js new file mode 100644 index 000000000..b25115ce3 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_dates.md.7b028c74.js @@ -0,0 +1,11 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Dates","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/dates.md"}'),o={name:"v3/guide/eloquent/dates.md"},e=l(`

Dates ​

Eloquent allows you to work with Carbon or DateTime objects instead of MongoDate objects. Internally, these dates will be converted to MongoDate objects when saved to the database.

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class User extends Model
+{
+    protected $casts = ['birthday' => 'datetime'];
+}
+

This allows you to execute queries like this:

php
$users = User::where(
+    'birthday', '>',
+    new DateTime('-18 years')
+)->get();
+
`,5),p=[e];function t(c,r,D,F,y,C){return n(),a("div",null,p)}const d=s(o,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_dates.md.7b028c74.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_dates.md.7b028c74.lean.js new file mode 100644 index 000000000..922d7d481 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_dates.md.7b028c74.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Dates","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/dates.md"}'),o={name:"v3/guide/eloquent/dates.md"},e=l("",5),p=[e];function t(c,r,D,F,y,C){return n(),a("div",null,p)}const d=s(o,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-auth-base-model.md.ee286d3c.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-auth-base-model.md.ee286d3c.js new file mode 100644 index 000000000..b52deb356 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-auth-base-model.md.ee286d3c.js @@ -0,0 +1,7 @@ +import{_ as e,c as s,o as a,N as n}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Extending the Authenticatable base model","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/extending-the-auth-base-model.md"}'),t={name:"v3/guide/eloquent/extending-the-auth-base-model.md"},l=n(`

Extending the Authenticatable base model ​

This package includes a MongoDB Authenticatable Eloquent class Jenssegers\\Mongodb\\Auth\\User that you can use to replace the default Authenticatable class Illuminate\\Foundation\\Auth\\User for your User model.

php
use Jenssegers\\Mongodb\\Auth\\User as Authenticatable;
+
+class User extends Authenticatable
+{
+
+}
+
`,3),o=[l];function p(c,r,i,d,h,u){return a(),s("div",null,o)}const _=e(t,[["render",p]]);export{C as __pageData,_ as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-auth-base-model.md.ee286d3c.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-auth-base-model.md.ee286d3c.lean.js new file mode 100644 index 000000000..ed3d5a99d --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-auth-base-model.md.ee286d3c.lean.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as a,N as n}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Extending the Authenticatable base model","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/extending-the-auth-base-model.md"}'),t={name:"v3/guide/eloquent/extending-the-auth-base-model.md"},l=n("",3),o=[l];function p(c,r,i,d,h,u){return a(),s("div",null,o)}const _=e(t,[["render",p]]);export{C as __pageData,_ as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-base-model.md.04cfd216.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-base-model.md.04cfd216.js new file mode 100644 index 000000000..c77bcf033 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-base-model.md.04cfd216.js @@ -0,0 +1,28 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const d=JSON.parse('{"title":"Extending The Base Model","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/extending-the-base-model.md"}'),l={name:"v3/guide/eloquent/extending-the-base-model.md"},e=o(`

Extending The Base Model ​

This package includes a MongoDB enabled Eloquent class that you can use to define models for corresponding collections.

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Book extends Model
+{
+    //
+}
+

Just like a normal model, the MongoDB model class will know which collection to use based on the model name. For Book, the collection books will be used.

To change the collection, pass the $collection property:

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Book extends Model
+{
+    protected $collection = 'my_books_collection';
+}
+

NOTE: MongoDB documents are automatically stored with a unique ID that is stored in the _id property. If you wish to use your own ID, substitute the $primaryKey property and set it to your own primary key attribute name.

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Book extends Model
+{
+    protected $primaryKey = 'id';
+}
+
+// MongoDB will also create _id, but the 'id' property will be used for primary key actions like find().
+Book::create(['id' => 1, 'title' => 'The Fault in Our Stars']);
+

Likewise, you may define a connection property to override the name of the database connection that should be used when utilizing the model.

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Book extends Model
+{
+    protected $connection = 'mongodb';
+}
+
`,10),p=[e];function t(c,r,y,D,C,i){return a(),n("div",null,p)}const A=s(l,[["render",t]]);export{d as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-base-model.md.04cfd216.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-base-model.md.04cfd216.lean.js new file mode 100644 index 000000000..5348a34a0 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_extending-the-base-model.md.04cfd216.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const d=JSON.parse('{"title":"Extending The Base Model","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/extending-the-base-model.md"}'),l={name:"v3/guide/eloquent/extending-the-base-model.md"},e=o("",10),p=[e];function t(c,r,y,D,C,i){return a(),n("div",null,p)}const A=s(l,[["render",t]]);export{d as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_guarding-attributes.md.cd68f921.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_guarding-attributes.md.cd68f921.js new file mode 100644 index 000000000..c788b9b1a --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_guarding-attributes.md.cd68f921.js @@ -0,0 +1 @@ +import{_ as r,c as a,o as i,x as e,a as t}from"./chunks/framework.8a749e37.js";const m=JSON.parse('{"title":"Guarding attributes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/guarding-attributes.md"}'),s={name:"v3/guide/eloquent/guarding-attributes.md"},n=e("h1",{id:"guarding-attributes",tabindex:"-1"},[t("Guarding attributes "),e("a",{class:"header-anchor",href:"#guarding-attributes","aria-label":'Permalink to "Guarding attributes"'},"​")],-1),o=e("p",null,[t("When choosing between guarding attributes or marking some as fillable, Taylor Otwell prefers the fillable route. This is in light of "),e("a",{href:"https://blog.laravel.com/security-release-laravel-61835-7240",target:"_blank",rel:"noreferrer"},"recent security issues described here"),t(".")],-1),l=e("p",null,"Keep in mind guarding still works, but you may experience unexpected behavior.",-1),u=[n,o,l];function d(c,g,h,_,b,p){return i(),a("div",null,u)}const x=r(s,[["render",d]]);export{m as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_guarding-attributes.md.cd68f921.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_guarding-attributes.md.cd68f921.lean.js new file mode 100644 index 000000000..c788b9b1a --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_guarding-attributes.md.cd68f921.lean.js @@ -0,0 +1 @@ +import{_ as r,c as a,o as i,x as e,a as t}from"./chunks/framework.8a749e37.js";const m=JSON.parse('{"title":"Guarding attributes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/guarding-attributes.md"}'),s={name:"v3/guide/eloquent/guarding-attributes.md"},n=e("h1",{id:"guarding-attributes",tabindex:"-1"},[t("Guarding attributes "),e("a",{class:"header-anchor",href:"#guarding-attributes","aria-label":'Permalink to "Guarding attributes"'},"​")],-1),o=e("p",null,[t("When choosing between guarding attributes or marking some as fillable, Taylor Otwell prefers the fillable route. This is in light of "),e("a",{href:"https://blog.laravel.com/security-release-laravel-61835-7240",target:"_blank",rel:"noreferrer"},"recent security issues described here"),t(".")],-1),l=e("p",null,"Keep in mind guarding still works, but you may experience unexpected behavior.",-1),u=[n,o,l];function d(c,g,h,_,b,p){return i(),a("div",null,u)}const x=r(s,[["render",d]]);export{m as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_insert-updates-and-deletes.md.baeb0da1.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_insert-updates-and-deletes.md.baeb0da1.js new file mode 100644 index 000000000..37142d531 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_insert-updates-and-deletes.md.baeb0da1.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,x as e,a as t}from"./chunks/framework.8a749e37.js";const k=JSON.parse('{"title":"Inserts, updates and deletes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/insert-updates-and-deletes.md"}'),r={name:"v3/guide/eloquent/insert-updates-and-deletes.md"},d=e("h1",{id:"inserts-updates-and-deletes",tabindex:"-1"},[t("Inserts, updates and deletes "),e("a",{class:"header-anchor",href:"#inserts-updates-and-deletes","aria-label":'Permalink to "Inserts, updates and deletes"'},"​")],-1),o=e("p",null,[t("Inserting, updating and deleting records works just like the original Eloquent. Please check "),e("a",{href:"https://laravel.com/docs/6.x/eloquent",target:"_blank",rel:"noreferrer"},"Laravel Docs' Eloquent section"),t(".")],-1),l=e("p",null,"Here, only the MongoDB-specific operations are specified.",-1),i=[d,o,l];function c(p,u,_,h,f,m){return n(),a("div",null,i)}const x=s(r,[["render",c]]);export{k as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_insert-updates-and-deletes.md.baeb0da1.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_insert-updates-and-deletes.md.baeb0da1.lean.js new file mode 100644 index 000000000..37142d531 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_insert-updates-and-deletes.md.baeb0da1.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,x as e,a as t}from"./chunks/framework.8a749e37.js";const k=JSON.parse('{"title":"Inserts, updates and deletes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/insert-updates-and-deletes.md"}'),r={name:"v3/guide/eloquent/insert-updates-and-deletes.md"},d=e("h1",{id:"inserts-updates-and-deletes",tabindex:"-1"},[t("Inserts, updates and deletes "),e("a",{class:"header-anchor",href:"#inserts-updates-and-deletes","aria-label":'Permalink to "Inserts, updates and deletes"'},"​")],-1),o=e("p",null,[t("Inserting, updating and deleting records works just like the original Eloquent. Please check "),e("a",{href:"https://laravel.com/docs/6.x/eloquent",target:"_blank",rel:"noreferrer"},"Laravel Docs' Eloquent section"),t(".")],-1),l=e("p",null,"Here, only the MongoDB-specific operations are specified.",-1),i=[d,o,l];function c(p,u,_,h,f,m){return n(),a("div",null,i)}const x=s(r,[["render",c]]);export{k as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-geo-operations.md.94ae4c58.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-geo-operations.md.94ae4c58.js new file mode 100644 index 000000000..19b6e5164 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-geo-operations.md.94ae4c58.js @@ -0,0 +1,58 @@ +import{_ as s,c as a,o as n,N as o}from"./chunks/framework.8a749e37.js";const i=JSON.parse('{"title":"MongoDB-specific Geo operations","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/mongodb-specific-geo-operations.md"}'),l={name:"v3/guide/eloquent/mongodb-specific-geo-operations.md"},p=o(`

MongoDB-specific Geo operations ​

Near ​

php
$bars = Bar::where('location', 'near', [
+    '$geometry' => [
+        'type' => 'Point',
+        'coordinates' => [
+            -0.1367563, // longitude
+            51.5100913, // latitude
+        ],
+    ],
+    '$maxDistance' => 50,
+])->get();
+

GeoWithin ​

php
$bars = Bar::where('location', 'geoWithin', [
+    '$geometry' => [
+        'type' => 'Polygon',
+        'coordinates' => [
+            [
+                [-0.1450383, 51.5069158],
+                [-0.1367563, 51.5100913],
+                [-0.1270247, 51.5013233],
+                [-0.1450383, 51.5069158],
+            ],
+        ],
+    ],
+])->get();
+

GeoIntersects ​

php
$bars = Bar::where('location', 'geoIntersects', [
+    '$geometry' => [
+        'type' => 'LineString',
+        'coordinates' => [
+            [-0.144044, 51.515215],
+            [-0.129545, 51.507864],
+        ],
+    ],
+])->get();
+

GeoNear ​

You are able to make a geoNear query on mongoDB. You don't need to specify the automatic fields on the model. The returned instance is a collection. So you're able to make the Collection operations. Just make sure that your model has a location field, and a 2ndSphereIndex. The data in the location field must be saved as GeoJSON. The location points must be saved as WGS84 reference system for geometry calculation. That means, basically, you need to save longitude and latitude, in that order specifically, and to find near with calculated distance, you need to do the same way.

php
Bar::find("63a0cd574d08564f330ceae2")->update(
+    [
+        'location' => [
+            'type' => 'Point',
+            'coordinates' => [
+                -0.1367563,
+                51.5100913
+            ]
+        ]
+    ]
+);
+$bars = Bar::raw(function ($collection) {
+    return $collection->aggregate([
+        [
+            '$geoNear' => [
+                "near" => [ "type" =>  "Point", "coordinates" =>  [-0.132239, 51.511874] ],
+                "distanceField" =>  "dist.calculated",
+                "minDistance" =>  0,
+                "maxDistance" =>  6000,
+                "includeLocs" =>  "dist.location",
+                "spherical" =>  true,
+            ]
+        ]
+    ]);
+});
+
`,10),e=[p];function t(c,D,r,F,y,C){return n(),a("div",null,e)}const d=s(l,[["render",t]]);export{i as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-geo-operations.md.94ae4c58.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-geo-operations.md.94ae4c58.lean.js new file mode 100644 index 000000000..509b89a31 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-geo-operations.md.94ae4c58.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as o}from"./chunks/framework.8a749e37.js";const i=JSON.parse('{"title":"MongoDB-specific Geo operations","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/mongodb-specific-geo-operations.md"}'),l={name:"v3/guide/eloquent/mongodb-specific-geo-operations.md"},p=o("",10),e=[p];function t(c,D,r,F,y,C){return n(),a("div",null,e)}const d=s(l,[["render",t]]);export{i as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operations.md.134fbabb.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operations.md.134fbabb.js new file mode 100644 index 000000000..af59df52b --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operations.md.134fbabb.js @@ -0,0 +1,74 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"MongoDB specific operations","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/mongodb-specific-operations.md"}'),p={name:"v3/guide/eloquent/mongodb-specific-operations.md"},o=l(`

MongoDB specific operations ​

Raw Expressions ​

These expressions will be injected directly into the query.

php
User::whereRaw([
+    'age' => ['$gt' => 30, '$lt' => 40],
+])->get();
+
+User::whereRaw([
+    '$where' => '/.*123.*/.test(this.field)',
+])->get();
+
+User::whereRaw([
+    '$where' => '/.*123.*/.test(this["hyphenated-field"])',
+])->get();
+

You can also perform raw expressions on the internal MongoCollection object. If this is executed on the model class, it will return a collection of models.

If this is executed on the query builder, it will return the original response.

Cursor timeout ​

To prevent MongoCursorTimeout exceptions, you can manually set a timeout value that will be applied to the cursor:

php
DB::collection('users')->timeout(-1)->get();
+

Upsert ​

Update or insert a document. Additional options for the update method are passed directly to the native update method.

php
// Query Builder
+DB::collection('users')
+    ->where('name', 'John')
+    ->update($data, ['upsert' => true]);
+
+// Eloquent
+$user->update($data, ['upsert' => true]);
+

Projections ​

You can apply projections to your queries using the project method.

php
DB::collection('items')
+    ->project(['tags' => ['$slice' => 1]])
+    ->get();
+
+DB::collection('items')
+    ->project(['tags' => ['$slice' => [3, 7]]])
+    ->get();
+

Projections with Pagination ​

php
$limit = 25;
+$projections = ['id', 'name'];
+
+DB::collection('items')
+    ->paginate($limit, $projections);
+

Push ​

Add items to an array.

php
DB::collection('users')
+    ->where('name', 'John')
+    ->push('items', 'boots');
+
+$user->push('items', 'boots');
+
php
DB::collection('users')
+    ->where('name', 'John')
+    ->push('messages', [
+        'from' => 'Jane Doe',
+        'message' => 'Hi John',
+    ]);
+
+$user->push('messages', [
+    'from' => 'Jane Doe',
+    'message' => 'Hi John',
+]);
+

If you DON'T want duplicate items, set the third parameter to true:

php
DB::collection('users')
+    ->where('name', 'John')
+    ->push('items', 'boots', true);
+
+$user->push('items', 'boots', true);
+

Pull ​

Remove an item from an array.

php
DB::collection('users')
+    ->where('name', 'John')
+    ->pull('items', 'boots');
+
+$user->pull('items', 'boots');
+
php
DB::collection('users')
+    ->where('name', 'John')
+    ->pull('messages', [
+        'from' => 'Jane Doe',
+        'message' => 'Hi John',
+    ]);
+
+$user->pull('messages', [
+    'from' => 'Jane Doe',
+    'message' => 'Hi John',
+]);
+

Unset ​

Remove one or more fields from a document.

php
DB::collection('users')
+    ->where('name', 'John')
+    ->unset('note');
+
+$user->unset('note');
+
`,30),e=[o];function t(D,c,F,r,y,C){return n(),a("div",null,e)}const h=s(p,[["render",t]]);export{A as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operations.md.134fbabb.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operations.md.134fbabb.lean.js new file mode 100644 index 000000000..d46d9f70d --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operations.md.134fbabb.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"MongoDB specific operations","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/mongodb-specific-operations.md"}'),p={name:"v3/guide/eloquent/mongodb-specific-operations.md"},o=l("",30),e=[o];function t(D,c,F,r,y,C){return n(),a("div",null,e)}const h=s(p,[["render",t]]);export{A as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operators.md.dd7d2573.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operators.md.dd7d2573.js new file mode 100644 index 000000000..5d442b7ea --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operators.md.dd7d2573.js @@ -0,0 +1,11 @@ +import{_ as s,c as a,o as n,N as o}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"MongoDB-specific operators","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/mongodb-specific-operators.md"}'),e={name:"v3/guide/eloquent/mongodb-specific-operators.md"},p=o(`

MongoDB-specific operators ​

Exists ​

Matches documents that have the specified field.

php
User::where('age', 'exists', true)->get();
+

All ​

Matches arrays that contain all elements specified in the query.

php
User::where('roles', 'all', ['moderator', 'author'])->get();
+

Size ​

Selects documents if the array field is a specified size.

php
Post::where('tags', 'size', 3)->get();
+

Regex ​

Selects documents where values match a specified regular expression.

php
use MongoDB\\BSON\\Regex;
+
+User::where('name', 'regex', new Regex('.*doe', 'i'))->get();
+

NOTE: you can also use the Laravel regexp operations. These are a bit more flexible and will automatically convert your regular expression string to a MongoDB\\BSON\\Regex object.

php
User::where('name', 'regexp', '/.*doe/i')->get();
+

The inverse of regexp:

php
User::where('name', 'not regexp', '/.*doe/i')->get();
+

Type ​

Selects documents if a field is of the specified type. For more information check: http://docs.mongodb.org/manual/reference/operator/query/type/#op._S_type

php
User::where('age', 'type', 2)->get();
+

Mod ​

Performs a modulo operation on the value of a field and selects documents with a specified result.

php
User::where('age', 'mod', [10, 0])->get();
+
`,23),l=[p];function t(r,c,F,D,y,i){return n(),a("div",null,l)}const h=s(e,[["render",t]]);export{C as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operators.md.dd7d2573.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operators.md.dd7d2573.lean.js new file mode 100644 index 000000000..f3042b24d --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_mongodb-specific-operators.md.dd7d2573.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as o}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"MongoDB-specific operators","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/mongodb-specific-operators.md"}'),e={name:"v3/guide/eloquent/mongodb-specific-operators.md"},p=o("",23),l=[p];function t(r,c,F,D,y,i){return n(),a("div",null,l)}const h=s(e,[["render",t]]);export{C as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_soft-deletes.md.09e86fb3.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_soft-deletes.md.09e86fb3.js new file mode 100644 index 000000000..6e309b6da --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_soft-deletes.md.09e86fb3.js @@ -0,0 +1,7 @@ +import{_ as s,c as e,o as a,N as o}from"./chunks/framework.8a749e37.js";const _=JSON.parse('{"title":"Soft Deletes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/soft-deletes.md"}'),n={name:"v3/guide/eloquent/soft-deletes.md"},t=o(`

Soft Deletes ​

When soft deleting a model, it is not actually removed from your database. Instead, a deleted_at timestamp is set on the record.

To enable soft deletes for a model, apply the Jenssegers\\Mongodb\\Eloquent\\SoftDeletes Trait to the model:

php
use Jenssegers\\Mongodb\\Eloquent\\SoftDeletes;
+
+class User extends Model
+{
+    use SoftDeletes;
+}
+

For more information check Laravel Docs about Soft Deleting.

`,5),l=[t];function p(r,c,d,i,D,C){return a(),e("div",null,l)}const f=s(n,[["render",p]]);export{_ as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_eloquent_soft-deletes.md.09e86fb3.lean.js b/docs/.vitepress/dist/assets/v3_guide_eloquent_soft-deletes.md.09e86fb3.lean.js new file mode 100644 index 000000000..382c02dba --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_eloquent_soft-deletes.md.09e86fb3.lean.js @@ -0,0 +1 @@ +import{_ as s,c as e,o as a,N as o}from"./chunks/framework.8a749e37.js";const _=JSON.parse('{"title":"Soft Deletes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/eloquent/soft-deletes.md"}'),n={name:"v3/guide/eloquent/soft-deletes.md"},t=o("",5),l=[t];function p(r,c,d,i,D,C){return a(),e("div",null,l)}const f=s(n,[["render",p]]);export{_ as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_extending_authentication.md.87a8a74a.js b/docs/.vitepress/dist/assets/v3_guide_extending_authentication.md.87a8a74a.js new file mode 100644 index 000000000..f2b37c46d --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_extending_authentication.md.87a8a74a.js @@ -0,0 +1,2 @@ +import{_ as e,c as s,o as t,N as a}from"./chunks/framework.8a749e37.js";const y=JSON.parse('{"title":"Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/extending/authentication.md"}'),n={name:"v3/guide/extending/authentication.md"},o=a(`

Authentication ​

If you want to use Laravel's native Auth functionality, register this included service provider:

php
Jenssegers\\Mongodb\\Auth\\PasswordResetServiceProvider::class,
+

This service provider will slightly modify the internal DatabaseReminderRepository to add support for MongoDB based password reminders.

If you don't use password reminders, you don't have to register this service provider and everything else should work just fine.

`,5),i=[o];function r(p,l,c,d,h,u){return t(),s("div",null,i)}const v=e(n,[["render",r]]);export{y as __pageData,v as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_extending_authentication.md.87a8a74a.lean.js b/docs/.vitepress/dist/assets/v3_guide_extending_authentication.md.87a8a74a.lean.js new file mode 100644 index 000000000..75be38f6f --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_extending_authentication.md.87a8a74a.lean.js @@ -0,0 +1 @@ +import{_ as e,c as s,o as t,N as a}from"./chunks/framework.8a749e37.js";const y=JSON.parse('{"title":"Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/extending/authentication.md"}'),n={name:"v3/guide/extending/authentication.md"},o=a("",5),i=[o];function r(p,l,c,d,h,u){return t(),s("div",null,i)}const v=e(n,[["render",r]]);export{y as __pageData,v as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_extending_cross-database-relationships.md.2f3662cc.js b/docs/.vitepress/dist/assets/v3_guide_extending_cross-database-relationships.md.2f3662cc.js new file mode 100644 index 000000000..9cc0a35ad --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_extending_cross-database-relationships.md.2f3662cc.js @@ -0,0 +1,25 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Cross-Database Relationships","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/extending/cross-database-relationships.md"}'),l={name:"v3/guide/extending/cross-database-relationships.md"},p=o(`

Cross-Database Relationships ​

If you're using a hybrid MongoDB and SQL setup, you can define relationships across them.

The model will automatically return a MongoDB-related or SQL-related relation based on the type of the related model.

If you want this functionality to work both ways, your SQL-models will need to use the Jenssegers\\Mongodb\\Eloquent\\HybridRelations trait.

This functionality only works for hasOne, hasMany and belongsTo.

The MySQL model should use the HybridRelations trait:

php
use Jenssegers\\Mongodb\\Eloquent\\HybridRelations;
+
+class User extends Model
+{
+    use HybridRelations;
+
+    protected $connection = 'mysql';
+
+    public function messages()
+    {
+        return $this->hasMany(Message::class);
+    }
+}
+

Within your MongoDB model, you should define the relationship:

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Message extends Model
+{
+    protected $connection = 'mongodb';
+
+    public function user()
+    {
+        return $this->belongsTo(User::class);
+    }
+}
+
`,9),e=[p];function t(c,r,y,D,i,C){return a(),n("div",null,e)}const d=s(l,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_extending_cross-database-relationships.md.2f3662cc.lean.js b/docs/.vitepress/dist/assets/v3_guide_extending_cross-database-relationships.md.2f3662cc.lean.js new file mode 100644 index 000000000..b854e3d86 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_extending_cross-database-relationships.md.2f3662cc.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Cross-Database Relationships","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/extending/cross-database-relationships.md"}'),l={name:"v3/guide/extending/cross-database-relationships.md"},p=o("",9),e=[p];function t(c,r,y,D,i,C){return a(),n("div",null,e)}const d=s(l,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_extending_queues.md.ac9d416e.js b/docs/.vitepress/dist/assets/v3_guide_extending_queues.md.ac9d416e.js new file mode 100644 index 000000000..e6cae28c5 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_extending_queues.md.ac9d416e.js @@ -0,0 +1,21 @@ +import{_ as s,c as a,o as n,N as p}from"./chunks/framework.8a749e37.js";const d=JSON.parse('{"title":"Queues","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/extending/queues.md"}'),o={name:"v3/guide/extending/queues.md"},l=p(`

Queues ​

If you want to use MongoDB as your database backend, change the driver in config/queue.php:

php
'connections' => [
+    'database' => [
+        'driver' => 'mongodb',
+        // You can also specify your jobs specific database created on config/database.php
+        'connection' => 'mongodb-job',
+        'table' => 'jobs',
+        'queue' => 'default',
+        'expire' => 60,
+    ],
+],
+

If you want to use MongoDB to handle failed jobs, change the database in config/queue.php:

php
'failed' => [
+    'driver' => 'mongodb',
+    // You can also specify your jobs specific database created on config/database.php
+    'database' => 'mongodb-job',
+    'table' => 'failed_jobs',
+],
+

Laravel specific ​

Add the service provider in config/app.php:

php
Jenssegers\\Mongodb\\MongodbQueueServiceProvider::class,
+

Lumen specific ​

With Lumen, add the service provider in bootstrap/app.php. You must however ensure that you add the following after the MongodbServiceProvider registration.

php
$app->make('queue');
+
+$app->register(Jenssegers\\Mongodb\\MongodbQueueServiceProvider::class);
+
`,11),e=[l];function t(c,r,D,F,y,i){return n(),a("div",null,e)}const A=s(o,[["render",t]]);export{d as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_extending_queues.md.ac9d416e.lean.js b/docs/.vitepress/dist/assets/v3_guide_extending_queues.md.ac9d416e.lean.js new file mode 100644 index 000000000..c7063f3b4 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_extending_queues.md.ac9d416e.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as p}from"./chunks/framework.8a749e37.js";const d=JSON.parse('{"title":"Queues","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/extending/queues.md"}'),o={name:"v3/guide/extending/queues.md"},l=p("",11),e=[l];function t(c,r,D,F,y,i){return n(),a("div",null,e)}const A=s(o,[["render",t]]);export{d as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_configuration.md.aa53671a.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_configuration.md.aa53671a.js new file mode 100644 index 000000000..10f27e238 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_configuration.md.aa53671a.js @@ -0,0 +1,12 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/configuration.md"}'),p={name:"v3/guide/getting-started/configuration.md"},l=o(`

Configuration ​

The dsn key contains the connection string used to connect to your MongoDB deployment. The format and available options are documented in the MongoDB documentation.

Instead of using a connection string, you can also use the host and port configuration options to have the connection string created for you.

php
'mongodb' => [
+    'driver' => 'mongodb',
+    'host' => env('DB_HOST', '127.0.0.1'),
+    'port' => env('DB_PORT', 27017),
+    'database' => env('DB_DATABASE', 'homestead'),
+    'username' => env('DB_USERNAME', 'homestead'),
+    'password' => env('DB_PASSWORD', 'secret'),
+    'options' => [
+        'appname' => 'homestead',
+    ],
+],
+

The options key in the connection configuration corresponds to the uriOptions parameter.

`,5),e=[l];function t(r,c,D,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_configuration.md.aa53671a.lean.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_configuration.md.aa53671a.lean.js new file mode 100644 index 000000000..9b956b6fb --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_configuration.md.aa53671a.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/configuration.md"}'),p={name:"v3/guide/getting-started/configuration.md"},l=o("",5),e=[l];function t(r,c,D,F,y,C){return a(),n("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_database_testing.md.8094d609.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_database_testing.md.8094d609.js new file mode 100644 index 000000000..28a7bf942 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_database_testing.md.8094d609.js @@ -0,0 +1,3 @@ +import{_ as a,c as s,o as e,N as t}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"Database Testing","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/database_testing.md"}'),n={name:"v3/guide/getting-started/database_testing.md"},o=t(`

Database Testing ​

To reset the database after each test, add:

php
use Illuminate\\Foundation\\Testing\\DatabaseMigrations;
+

Also inside each test classes, add:

php
use DatabaseMigrations;
+

Keep in mind that these traits are not yet supported:

  • use Database Transactions;
  • use RefreshDatabase;
`,7),p=[o];function l(i,c,r,d,_,g){return e(),s("div",null,p)}const D=a(n,[["render",l]]);export{u as __pageData,D as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_database_testing.md.8094d609.lean.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_database_testing.md.8094d609.lean.js new file mode 100644 index 000000000..a94f41246 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_database_testing.md.8094d609.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,o as e,N as t}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"Database Testing","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/database_testing.md"}'),n={name:"v3/guide/getting-started/database_testing.md"},o=t("",7),p=[o];function l(i,c,r,d,_,g){return e(),s("div",null,p)}const D=a(n,[["render",l]]);export{u as __pageData,D as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_installation.md.9eacd442.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_installation.md.9eacd442.js new file mode 100644 index 000000000..99c996fd5 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_installation.md.9eacd442.js @@ -0,0 +1,11 @@ +import{_ as s,c as a,o as e,N as n}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Install the package via Composer","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/installation.md"}'),o={name:"v3/guide/getting-started/installation.md"},l=n(`

Install the package via Composer ​

bash
$ composer require jenssegers/mongodb
+

Laravel ​

In case your Laravel version does NOT autoload the packages, add the service provider to config/app.php:

php
Jenssegers\\Mongodb\\MongodbServiceProvider::class,
+

Lumen ​

For usage with Lumen, add the service provider in bootstrap/app.php. In this file, you will also need to enable Eloquent. You must however ensure that your call to $app->withEloquent(); is below where you have registered the MongodbServiceProvider:

php
$app->register(Jenssegers\\Mongodb\\MongodbServiceProvider::class);
+
+$app->withEloquent();
+

The service provider will register a MongoDB database extension with the original database manager. There is no need to register additional facades or objects.

When using MongoDB connections, Laravel will automatically provide you with the corresponding MongoDB objects.

Non-Laravel projects ​

For usage outside Laravel, check out the Capsule manager and add:

php
$capsule->getDatabaseManager()->extend('mongodb', function($config, $name) {
+    $config['name'] = $name;
+
+    return new Jenssegers\\Mongodb\\Connection($config);
+});
+
`,13),p=[l];function t(r,c,i,D,F,y){return e(),a("div",null,p)}const h=s(o,[["render",t]]);export{C as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_installation.md.9eacd442.lean.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_installation.md.9eacd442.lean.js new file mode 100644 index 000000000..f55957880 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_installation.md.9eacd442.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as e,N as n}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Install the package via Composer","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/installation.md"}'),o={name:"v3/guide/getting-started/installation.md"},l=n("",13),p=[l];function t(r,c,i,D,F,y){return e(),a("div",null,p)}const h=s(o,[["render",t]]);export{C as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_testing.md.dfbca890.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_testing.md.dfbca890.js new file mode 100644 index 000000000..256b4114b --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_testing.md.dfbca890.js @@ -0,0 +1,2 @@ +import{_ as t,c as e,o as s,N as a}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"Testing","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/testing.md"}'),n={name:"v3/guide/getting-started/testing.md"},o=a(`

Testing ​

To run the test for this package, run:

docker-compose up
+
`,3),i=[o];function c(r,p,l,_,d,g){return s(),e("div",null,i)}const m=t(n,[["render",c]]);export{u as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_getting-started_testing.md.dfbca890.lean.js b/docs/.vitepress/dist/assets/v3_guide_getting-started_testing.md.dfbca890.lean.js new file mode 100644 index 000000000..8fc81c9fc --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_getting-started_testing.md.dfbca890.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as s,N as a}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"Testing","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/getting-started/testing.md"}'),n={name:"v3/guide/getting-started/testing.md"},o=a("",3),i=[o];function c(r,p,l,_,d,g){return s(),e("div",null,i)}const m=t(n,[["render",c]]);export{u as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_query-builder_available-operations.md.221ccb2a.js b/docs/.vitepress/dist/assets/v3_guide_query-builder_available-operations.md.221ccb2a.js new file mode 100644 index 000000000..d324f8a35 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_query-builder_available-operations.md.221ccb2a.js @@ -0,0 +1 @@ +import{_ as t,c as o,o as i,x as e,a}from"./chunks/framework.8a749e37.js";const m=JSON.parse('{"title":"Available operations","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/query-builder/available-operations.md"}'),s={name:"v3/guide/query-builder/available-operations.md"},r=e("h1",{id:"available-operations",tabindex:"-1"},[a("Available operations "),e("a",{class:"header-anchor",href:"#available-operations","aria-label":'Permalink to "Available operations"'},"​")],-1),l=e("p",null,[a("To see the available operations, check the "),e("a",{href:"/v3/guide/eloquent/basic-usage.html"},"Eloquent"),a(" section.")],-1),n=[r,l];function c(d,p,_,u,h,b){return i(),o("div",null,n)}const f=t(s,[["render",c]]);export{m as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_query-builder_available-operations.md.221ccb2a.lean.js b/docs/.vitepress/dist/assets/v3_guide_query-builder_available-operations.md.221ccb2a.lean.js new file mode 100644 index 000000000..d324f8a35 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_query-builder_available-operations.md.221ccb2a.lean.js @@ -0,0 +1 @@ +import{_ as t,c as o,o as i,x as e,a}from"./chunks/framework.8a749e37.js";const m=JSON.parse('{"title":"Available operations","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/query-builder/available-operations.md"}'),s={name:"v3/guide/query-builder/available-operations.md"},r=e("h1",{id:"available-operations",tabindex:"-1"},[a("Available operations "),e("a",{class:"header-anchor",href:"#available-operations","aria-label":'Permalink to "Available operations"'},"​")],-1),l=e("p",null,[a("To see the available operations, check the "),e("a",{href:"/v3/guide/eloquent/basic-usage.html"},"Eloquent"),a(" section.")],-1),n=[r,l];function c(d,p,_,u,h,b){return i(),o("div",null,n)}const f=t(s,[["render",c]]);export{m as __pageData,f as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_query-builder_basic-usage.md.6bf31699.js b/docs/.vitepress/dist/assets/v3_guide_query-builder_basic-usage.md.6bf31699.js new file mode 100644 index 000000000..29460b57a --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_query-builder_basic-usage.md.6bf31699.js @@ -0,0 +1,7 @@ +import{_ as s,c as a,o as e,N as n}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/query-builder/basic-usage.md"}'),o={name:"v3/guide/query-builder/basic-usage.md"},l=n(`

Basic Usage ​

The database driver plugs right into the original query builder.

When using MongoDB connections, you will be able to build fluent queries to perform database operations.

For your convenience, there is a collection alias for table as well as some additional MongoDB specific operators/operations.

php
$books = DB::collection('books')->get();
+
+$hungerGames =
+    DB::collection('books')
+        ->where('name', 'Hunger Games')
+        ->first();
+

If you are familiar with Eloquent Queries, there is the same functionality.

`,6),p=[l];function t(r,c,i,D,F,y){return e(),a("div",null,p)}const g=s(o,[["render",t]]);export{u as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_query-builder_basic-usage.md.6bf31699.lean.js b/docs/.vitepress/dist/assets/v3_guide_query-builder_basic-usage.md.6bf31699.lean.js new file mode 100644 index 000000000..d0f7eac40 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_query-builder_basic-usage.md.6bf31699.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as e,N as n}from"./chunks/framework.8a749e37.js";const u=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/query-builder/basic-usage.md"}'),o={name:"v3/guide/query-builder/basic-usage.md"},l=n("",6),p=[l];function t(r,c,i,D,F,y){return e(),a("div",null,p)}const g=s(o,[["render",t]]);export{u as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_basic-usage.md.9ac19a20.js b/docs/.vitepress/dist/assets/v3_guide_relationships_basic-usage.md.9ac19a20.js new file mode 100644 index 000000000..103f312cc --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_basic-usage.md.9ac19a20.js @@ -0,0 +1,19 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/basic-usage.md"}'),p={name:"v3/guide/relationships/basic-usage.md"},o=l(`

Basic Usage ​

The only available relationships are:

  • hasOne
  • hasMany
  • belongsTo
  • belongsToMany

The MongoDB-specific relationships are:

  • embedsOne
  • embedsMany

Here is a small example:

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class User extends Model
+{
+    public function items()
+    {
+        return $this->hasMany(Item::class);
+    }
+}
+

The inverse relation of hasMany is belongsTo:

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Item extends Model
+{
+    public function user()
+    {
+        return $this->belongsTo(User::class);
+    }
+}
+
`,9),e=[o];function c(t,r,i,y,D,C){return n(),a("div",null,e)}const d=s(p,[["render",c]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_basic-usage.md.9ac19a20.lean.js b/docs/.vitepress/dist/assets/v3_guide_relationships_basic-usage.md.9ac19a20.lean.js new file mode 100644 index 000000000..9c8041127 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_basic-usage.md.9ac19a20.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/basic-usage.md"}'),p={name:"v3/guide/relationships/basic-usage.md"},o=l("",9),e=[o];function c(t,r,i,y,D,C){return n(),a("div",null,e)}const d=s(p,[["render",c]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_belongs-to-many-and-pivots.md.54e608ab.js b/docs/.vitepress/dist/assets/v3_guide_relationships_belongs-to-many-and-pivots.md.54e608ab.js new file mode 100644 index 000000000..5b428734b --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_belongs-to-many-and-pivots.md.54e608ab.js @@ -0,0 +1,12 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"belongsToMany and pivots","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/belongs-to-many-and-pivots.md"}'),l={name:"v3/guide/relationships/belongs-to-many-and-pivots.md"},p=o(`

belongsToMany and pivots ​

The belongsToMany relation will not use a pivot "table" but will push id's to a related_ids attribute instead. This makes the second parameter for the belongsToMany method useless.

If you want to define custom keys for your relation, set it to null:

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class User extends Model
+{
+    public function groups()
+    {
+        return $this->belongsToMany(
+            Group::class, null, 'user_ids', 'group_ids'
+        );
+    }
+}
+
`,4),e=[p];function t(c,r,y,i,D,C){return a(),n("div",null,e)}const d=s(l,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_belongs-to-many-and-pivots.md.54e608ab.lean.js b/docs/.vitepress/dist/assets/v3_guide_relationships_belongs-to-many-and-pivots.md.54e608ab.lean.js new file mode 100644 index 000000000..32c49a60c --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_belongs-to-many-and-pivots.md.54e608ab.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"belongsToMany and pivots","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/belongs-to-many-and-pivots.md"}'),l={name:"v3/guide/relationships/belongs-to-many-and-pivots.md"},p=o("",4),e=[p];function t(c,r,y,i,D,C){return a(),n("div",null,e)}const d=s(l,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-many-relationships.md.207e6d38.js b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-many-relationships.md.207e6d38.js new file mode 100644 index 000000000..eea38d2e3 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-many-relationships.md.207e6d38.js @@ -0,0 +1,45 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"EmbedsMany Relationship","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/embeds-many-relationships.md"}'),o={name:"v3/guide/relationships/embeds-many-relationships.md"},p=l(`

EmbedsMany Relationship ​

If you want to embed models, rather than referencing them, you can use the embedsMany relation. This relation is similar to the hasMany relation but embeds the models inside the parent object.

REMEMBER: These relations return Eloquent collections, they don't return query builder objects!

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class User extends Model
+{
+    public function books()
+    {
+        return $this->embedsMany(Book::class);
+    }
+}
+

You can access the embedded models through the dynamic property:

php
$user = User::first();
+
+foreach ($user->books as $book) {
+    //
+}
+

The inverse relation is automagically available. You don't need to define this reverse relation.

php
$book = Book::first();
+
+$user = $book->user;
+

Inserting and updating embedded models works similar to the hasMany relation:

php
$book = $user->books()->save(
+    new Book(['title' => 'A Game of Thrones'])
+);
+
+// or
+$book =
+    $user->books()
+         ->create(['title' => 'A Game of Thrones']);
+

You can update embedded models using their save method (available since release 2.0.0):

php
$book = $user->books()->first();
+
+$book->title = 'A Game of Thrones';
+$book->save();
+

You can remove an embedded model by using the destroy method on the relation, or the delete method on the model (available since release 2.0.0):

php
$book->delete();
+
+// Similar operation
+$user->books()->destroy($book);
+

If you want to add or remove an embedded model, without touching the database, you can use the associate and dissociate methods.

To eventually write the changes to the database, save the parent object:

php
$user->books()->associate($book);
+$user->save();
+

Like other relations, embedsMany assumes the local key of the relationship based on the model name. You can override the default local key by passing a second argument to the embedsMany method:

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class User extends Model
+{
+    public function books()
+    {
+        return $this->embedsMany(Book::class, 'local_key');
+    }
+}
+

Embedded relations will return a Collection of embedded items instead of a query builder. Check out the available operations here: https://laravel.com/docs/master/collections

`,20),e=[p];function t(c,r,D,y,F,i){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-many-relationships.md.207e6d38.lean.js b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-many-relationships.md.207e6d38.lean.js new file mode 100644 index 000000000..35680a798 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-many-relationships.md.207e6d38.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"EmbedsMany Relationship","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/embeds-many-relationships.md"}'),o={name:"v3/guide/relationships/embeds-many-relationships.md"},p=l("",20),e=[p];function t(c,r,D,y,F,i){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-one-relationship.md.72e3f093.js b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-one-relationship.md.72e3f093.js new file mode 100644 index 000000000..144921832 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-one-relationship.md.72e3f093.js @@ -0,0 +1,27 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"EmbedsOne Relationship","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/embeds-one-relationship.md"}'),p={name:"v3/guide/relationships/embeds-one-relationship.md"},o=l(`

EmbedsOne Relationship ​

The embedsOne relation is similar to the embedsMany relation, but only embeds a single model.

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class Book extends Model
+{
+    public function author()
+    {
+        return $this->embedsOne(Author::class);
+    }
+}
+

You can access the embedded models through the dynamic property:

php
$book = Book::first();
+$author = $book->author;
+

Inserting and updating embedded models works similar to the hasOne relation:

php
$author = $book->author()->save(
+    new Author(['name' => 'John Doe'])
+);
+
+// Similar
+$author =
+    $book->author()
+         ->create(['name' => 'John Doe']);
+

You can update the embedded model using the save method (available since release 2.0.0):

php
$author = $book->author;
+
+$author->name = 'Jane Doe';
+$author->save();
+

You can replace the embedded model with a new model like this:

php
$newAuthor = new Author(['name' => 'Jane Doe']);
+
+$book->author()->save($newAuthor);
+
`,11),e=[o];function t(c,r,D,F,y,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-one-relationship.md.72e3f093.lean.js b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-one-relationship.md.72e3f093.lean.js new file mode 100644 index 000000000..db4e7aaea --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_relationships_embeds-one-relationship.md.72e3f093.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"EmbedsOne Relationship","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/relationships/embeds-one-relationship.md"}'),p={name:"v3/guide/relationships/embeds-one-relationship.md"},o=l("",11),e=[o];function t(c,r,D,F,y,C){return n(),a("div",null,e)}const d=s(p,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_schema_basic-usage.md.5b8be036.js b/docs/.vitepress/dist/assets/v3_guide_schema_basic-usage.md.5b8be036.js new file mode 100644 index 000000000..db9afc743 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_schema_basic-usage.md.5b8be036.js @@ -0,0 +1,17 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/schema/basic-usage.md"}'),o={name:"v3/guide/schema/basic-usage.md"},p=l(`

The database driver also has (limited) schema builder support. You can easily manipulate collections and set indexes.

Basic Usage ​

php
Schema::create('users', function ($collection) {
+    $collection->index('name');
+    $collection->unique('email');
+});
+

You can also pass all the parameters specified in the MongoDB docs to the $options parameter:

php
Schema::create('users', function ($collection) {
+    $collection->index(
+        'username',
+        null,
+        null,
+        [
+            'sparse' => true,
+            'unique' => true,
+            'background' => true,
+        ]
+    );
+});
+

Inherited operations:

  • create and drop
  • collection
  • hasCollection
  • index and dropIndex (compound indexes supported as well)
  • unique

MongoDB specific operations:

  • background
  • sparse
  • expire
  • geospatial

All other (unsupported) operations are implemented as dummy pass-through methods because MongoDB does not use a predefined schema.

Read more about the schema builder on Laravel Docs

`,11),e=[p];function t(c,r,D,i,F,y){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_schema_basic-usage.md.5b8be036.lean.js b/docs/.vitepress/dist/assets/v3_guide_schema_basic-usage.md.5b8be036.lean.js new file mode 100644 index 000000000..89217cde1 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_schema_basic-usage.md.5b8be036.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/schema/basic-usage.md"}'),o={name:"v3/guide/schema/basic-usage.md"},p=l("",11),e=[p];function t(c,r,D,i,F,y){return n(),a("div",null,e)}const d=s(o,[["render",t]]);export{A as __pageData,d as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_schema_geospatial-indexes.md.e4247b2e.js b/docs/.vitepress/dist/assets/v3_guide_schema_geospatial-indexes.md.e4247b2e.js new file mode 100644 index 000000000..ee7d8af19 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_schema_geospatial-indexes.md.e4247b2e.js @@ -0,0 +1,7 @@ +import{_ as s,c as a,o as n,N as o}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Geospatial indexes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/schema/geospatial-indexes.md"}'),e={name:"v3/guide/schema/geospatial-indexes.md"},l=o(`

Geospatial indexes ​

Geospatial indexes are handy for querying location-based documents.

They come in two forms: 2d and 2dsphere. Use the schema builder to add these to a collection.

php
Schema::create('bars', function ($collection) {
+    $collection->geospatial('location', '2d');
+});
+

To add a 2dsphere index:

php
Schema::create('bars', function ($collection) {
+    $collection->geospatial('location', '2dsphere');
+});
+
`,6),p=[l];function t(c,r,D,F,i,y){return n(),a("div",null,p)}const A=s(e,[["render",t]]);export{C as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_schema_geospatial-indexes.md.e4247b2e.lean.js b/docs/.vitepress/dist/assets/v3_guide_schema_geospatial-indexes.md.e4247b2e.lean.js new file mode 100644 index 000000000..f5c559748 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_schema_geospatial-indexes.md.e4247b2e.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as o}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Geospatial indexes","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/schema/geospatial-indexes.md"}'),e={name:"v3/guide/schema/geospatial-indexes.md"},l=o("",6),p=[l];function t(c,r,D,F,i,y){return n(),a("div",null,p)}const A=s(e,[["render",t]]);export{C as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_security-contact-information_security-contact-information.md.b324390c.js b/docs/.vitepress/dist/assets/v3_guide_security-contact-information_security-contact-information.md.b324390c.js new file mode 100644 index 000000000..34a03744f --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_security-contact-information_security-contact-information.md.b324390c.js @@ -0,0 +1 @@ +import{_ as o,c as a,o as r,x as t,a as e}from"./chunks/framework.8a749e37.js";const y=JSON.parse('{"title":"Security contact information","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/security-contact-information/security-contact-information.md"}'),n={name:"v3/guide/security-contact-information/security-contact-information.md"},c=t("h1",{id:"security-contact-information",tabindex:"-1"},[e("Security contact information "),t("a",{class:"header-anchor",href:"#security-contact-information","aria-label":'Permalink to "Security contact information"'},"​")],-1),i=t("p",null,[e("To report a security vulnerability, follow "),t("a",{href:"https://tidelift.com/security",target:"_blank",rel:"noreferrer"},"these steps"),e(".")],-1),s=[c,i];function f(l,u,d,m,_,p){return r(),a("div",null,s)}const x=o(n,[["render",f]]);export{y as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_security-contact-information_security-contact-information.md.b324390c.lean.js b/docs/.vitepress/dist/assets/v3_guide_security-contact-information_security-contact-information.md.b324390c.lean.js new file mode 100644 index 000000000..34a03744f --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_security-contact-information_security-contact-information.md.b324390c.lean.js @@ -0,0 +1 @@ +import{_ as o,c as a,o as r,x as t,a as e}from"./chunks/framework.8a749e37.js";const y=JSON.parse('{"title":"Security contact information","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/security-contact-information/security-contact-information.md"}'),n={name:"v3/guide/security-contact-information/security-contact-information.md"},c=t("h1",{id:"security-contact-information",tabindex:"-1"},[e("Security contact information "),t("a",{class:"header-anchor",href:"#security-contact-information","aria-label":'Permalink to "Security contact information"'},"​")],-1),i=t("p",null,[e("To report a security vulnerability, follow "),t("a",{href:"https://tidelift.com/security",target:"_blank",rel:"noreferrer"},"these steps"),e(".")],-1),s=[c,i];function f(l,u,d,m,_,p){return r(),a("div",null,s)}const x=o(n,[["render",f]]);export{y as __pageData,x as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_transactions_basic-usage.md.d44af26f.js b/docs/.vitepress/dist/assets/v3_guide_transactions_basic-usage.md.d44af26f.js new file mode 100644 index 000000000..0316f66d3 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_transactions_basic-usage.md.d44af26f.js @@ -0,0 +1,27 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Transactions","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/transactions/basic-usage.md"}'),o={name:"v3/guide/transactions/basic-usage.md"},p=l(`

Transactions ​

Transactions require MongoDB version ^4.0 as well as deployment of replica set or sharded clusters. You can find more information in the MongoDB docs

Basic Usage ​

php
DB::transaction(function () {
+    User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']);
+    DB::collection('users')->where('name', 'john')->update(['age' => 20]);
+    DB::collection('users')->where('name', 'john')->delete();
+});
+
php
// begin a transaction
+DB::beginTransaction();
+User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']);
+DB::collection('users')->where('name', 'john')->update(['age' => 20]);
+DB::collection('users')->where('name', 'john')->delete();
+
+// commit changes
+DB::commit();
+

To abort a transaction, call the rollBack method at any point during the transaction:

php
DB::beginTransaction();
+User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']);
+
+// Abort the transaction, discarding any data created as part of it
+DB::rollBack();
+

NOTE: Transactions in MongoDB cannot be nested. DB::beginTransaction() function will start new transactions in a new created or existing session and will raise the RuntimeException when transactions already exist. See more in MongoDB official docs Transactions and Sessions

php
DB::beginTransaction();
+User::create(['name' => 'john', 'age' => 20, 'title' => 'admin']);
+
+// This call to start a nested transaction will raise a RuntimeException
+DB::beginTransaction();
+DB::collection('users')->where('name', 'john')->update(['age' => 20]);
+DB::commit();
+DB::rollBack();
+
`,9),e=[p];function t(c,D,r,F,y,C){return n(),a("div",null,e)}const g=s(o,[["render",t]]);export{A as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_transactions_basic-usage.md.d44af26f.lean.js b/docs/.vitepress/dist/assets/v3_guide_transactions_basic-usage.md.d44af26f.lean.js new file mode 100644 index 000000000..317406fe4 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_transactions_basic-usage.md.d44af26f.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as n,N as l}from"./chunks/framework.8a749e37.js";const A=JSON.parse('{"title":"Transactions","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/transactions/basic-usage.md"}'),o={name:"v3/guide/transactions/basic-usage.md"},p=l("",9),e=[p];function t(c,D,r,F,y,C){return n(),a("div",null,e)}const g=s(o,[["render",t]]);export{A as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_upgrading_upgrading-from-version-2-to-3.md.9f36d133.js b/docs/.vitepress/dist/assets/v3_guide_upgrading_upgrading-from-version-2-to-3.md.9f36d133.js new file mode 100644 index 000000000..4e4d579a2 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_upgrading_upgrading-from-version-2-to-3.md.9f36d133.js @@ -0,0 +1,17 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Upgrading from version 2 to 3","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/upgrading/upgrading-from-version-2-to-3.md"}'),e={name:"v3/guide/upgrading/upgrading-from-version-2-to-3.md"},l=o(`

Upgrading from version 2 to 3 ​

In this new major release which supports the new MongoDB PHP extension, we also moved the location of the Model class and replaced the MySQL model class with a trait.

Please change all Jenssegers\\Mongodb\\Model references to Jenssegers\\Mongodb\\Eloquent\\Model either at the top of your model files or your registered alias.

php
use Jenssegers\\Mongodb\\Eloquent\\Model;
+
+class User extends Model
+{
+    //
+}
+

If you are using hybrid relations, your MySQL classes should now extend the original Eloquent model class Illuminate\\Database\\Eloquent\\Model instead of the removed Jenssegers\\Eloquent\\Model.

Instead use the new Jenssegers\\Mongodb\\Eloquent\\HybridRelations trait. This should make things more clear as there is only one single model class in this package.

php
use Jenssegers\\Mongodb\\Eloquent\\HybridRelations;
+
+class User extends Model
+{
+
+    use HybridRelations;
+
+    protected $connection = 'mysql';
+}
+

Embedded relations now return an Illuminate\\Database\\Eloquent\\Collection rather than a custom Collection class. If you were using one of the special methods that were available, convert them to Collection operations.

php
$books = $user->books()->sortBy('title')->get();
+
`,9),p=[l];function t(r,c,i,y,d,D){return a(),n("div",null,p)}const A=s(e,[["render",t]]);export{C as __pageData,A as default}; diff --git a/docs/.vitepress/dist/assets/v3_guide_upgrading_upgrading-from-version-2-to-3.md.9f36d133.lean.js b/docs/.vitepress/dist/assets/v3_guide_upgrading_upgrading-from-version-2-to-3.md.9f36d133.lean.js new file mode 100644 index 000000000..3604890f5 --- /dev/null +++ b/docs/.vitepress/dist/assets/v3_guide_upgrading_upgrading-from-version-2-to-3.md.9f36d133.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,o as a,N as o}from"./chunks/framework.8a749e37.js";const C=JSON.parse('{"title":"Upgrading from version 2 to 3","description":"","frontmatter":{},"headers":[],"relativePath":"v3/guide/upgrading/upgrading-from-version-2-to-3.md"}'),e={name:"v3/guide/upgrading/upgrading-from-version-2-to-3.md"},l=o("",9),p=[l];function t(r,c,i,y,d,D){return a(),n("div",null,p)}const A=s(e,[["render",t]]);export{C as __pageData,A as default}; diff --git a/docs/.vitepress/dist/hashmap.json b/docs/.vitepress/dist/hashmap.json new file mode 100644 index 000000000..42838020f --- /dev/null +++ b/docs/.vitepress/dist/hashmap.json @@ -0,0 +1 @@ +{"v3_guide_query-builder_basic-usage.md":"6bf31699","v3_guide_eloquent_insert-updates-and-deletes.md":"baeb0da1","v3_guide_schema_basic-usage.md":"5b8be036","v3_guide_getting-started_database_testing.md":"8094d609","v3_guide_relationships_basic-usage.md":"9ac19a20","v3_guide_eloquent_extending-the-auth-base-model.md":"ee286d3c","v3_guide_getting-started_installation.md":"9eacd442","v3_guide_eloquent_guarding-attributes.md":"cd68f921","v3_guide_extending_authentication.md":"87a8a74a","v3_guide_query-builder_available-operations.md":"221ccb2a","v3_guide_getting-started_configuration.md":"aa53671a","index.md":"b25b952e","v3_guide_relationships_embeds-one-relationship.md":"72e3f093","v3_guide_eloquent_extending-the-base-model.md":"04cfd216","v3_guide_relationships_belongs-to-many-and-pivots.md":"54e608ab","v3_guide_eloquent_mongodb-specific-geo-operations.md":"94ae4c58","v3_guide_upgrading_upgrading-from-version-2-to-3.md":"9f36d133","v3_guide_eloquent_dates.md":"7b028c74","v3_guide_eloquent_mongodb-specific-operators.md":"dd7d2573","v3_guide_eloquent_soft-deletes.md":"09e86fb3","v3_guide_eloquent_basic-usage.md":"69c45660","v3_guide_extending_cross-database-relationships.md":"2f3662cc","v3_guide_extending_queues.md":"ac9d416e","v3_guide_transactions_basic-usage.md":"d44af26f","v3_guide_security-contact-information_security-contact-information.md":"b324390c","v3_guide_getting-started_testing.md":"dfbca890","v3_guide_eloquent_mongodb-specific-operations.md":"134fbabb","v3_guide_schema_geospatial-indexes.md":"e4247b2e","v3_guide_relationships_embeds-many-relationships.md":"207e6d38"} diff --git a/docs/.vitepress/dist/index.html b/docs/.vitepress/dist/index.html new file mode 100644 index 000000000..aa76dc17f --- /dev/null +++ b/docs/.vitepress/dist/index.html @@ -0,0 +1,22 @@ + + + + + + Laravel MongoDB | Laravel MongoDB + + + + + + + + + + +
Skip to content

Laravel MongoDB

Connect Your Laravel to MongoDB

This package adds functionalities to the Eloquent model and Query builder for MongoDB, using the original Laravel API. This library extends the original Laravel classes, so it uses exactly the same methods.

Feature A

Lorem ipsum dolor sit amet, consectetur adipiscing elit

Feature B

Lorem ipsum dolor sit amet, consectetur adipiscing elit

Feature C

Lorem ipsum dolor sit amet, consectetur adipiscing elit

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/basic-usage.html b/docs/.vitepress/dist/v3/guide/eloquent/basic-usage.html new file mode 100644 index 000000000..0e3f8e59a --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/basic-usage.html @@ -0,0 +1,80 @@ + + + + + + Basic Usage | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Basic Usage ​

Retrieving all models ​

php
$users = User::all();
+

Retrieving a record by primary key ​

php
$user = User::find('517c43667db388101e00000f');
+

Where ​

php
$posts =
+    Post::where('author.name', 'John')
+        ->take(10)
+        ->get();
+

OR Statements ​

php
$posts =
+    Post::where('votes', '>', 0)
+        ->orWhere('is_approved', true)
+        ->get();
+

AND statements ​

php
$users =
+    User::where('age', '>', 18)
+        ->where('name', '!=', 'John')
+        ->get();
+

whereIn ​

php
$users = User::whereIn('age', [16, 18, 20])->get();
+

When using whereNotIn objects will be returned if the field is non-existent. Combine with whereNotNull('age') to leave out those documents.

whereBetween ​

php
$posts = Post::whereBetween('votes', [1, 100])->get();
+

whereNull ​

php
$users = User::whereNull('age')->get();
+

whereDate ​

php
$users = User::whereDate('birthday', '2021-5-12')->get();
+

The usage is the same as whereMonth / whereDay / whereYear / whereTime

Advanced wheres ​

php
$users =
+    User::where('name', 'John')
+        ->orWhere(function ($query) {
+            return $query
+                ->where('votes', '>', 100)
+                ->where('title', '<>', 'Admin');
+        })->get();
+

orderBy ​

php
$users = User::orderBy('age', 'desc')->get();
+

Offset & Limit (skip & take) ​

php
$users =
+    User::skip(10)
+        ->take(5)
+        ->get();
+

groupBy ​

Selected columns that are not grouped will be aggregated with the $last function.

php
$users =
+    Users::groupBy('title')
+        ->get(['title', 'name']);
+

Distinct ​

Distinct requires a field for which to return the distinct values.

php
$users = User::distinct()->get(['name']);
+
+// Equivalent to:
+$users = User::distinct('name')->get();
+

Distinct can be combined with where:

php
$users =
+    User::where('active', true)
+        ->distinct('name')
+        ->get();
+

Like ​

php
$spamComments = Comment::where('body', 'like', '%spam%')->get();
+

Aggregation ​

Aggregations are only available for MongoDB versions greater than 2.2.x

php
$total = Product::count();
+$price = Product::max('price');
+$price = Product::min('price');
+$price = Product::avg('price');
+$total = Product::sum('price');
+

Aggregations can be combined with where:

php
$sold = Orders::where('sold', true)->sum('price');
+

Aggregations can be also used on sub-documents:

php
$total = Order::max('suborder.price');
+

NOTE: This aggregation only works with single sub-documents (like EmbedsOne) not subdocument arrays (like EmbedsMany).

Incrementing/Decrementing ​

Incrementing/Decrementing the value of a column

Perform increments or decrements (default 1) on specified attributes:

php
Cat::where('name', 'Kitty')->increment('age');
+
+Car::where('name', 'Toyota')->decrement('weight', 50);
+

The number of updated objects is returned:

php
$count = User::increment('age');
+

You may also specify additional columns to update:

php
Cat::where('age', 3)
+    ->increment('age', 1, ['group' => 'Kitty Club']);
+
+Car::where('weight', 300)
+    ->decrement('weight', 100, ['latest_change' => 'carbon fiber']);
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/dates.html b/docs/.vitepress/dist/v3/guide/eloquent/dates.html new file mode 100644 index 000000000..525c086b5 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/dates.html @@ -0,0 +1,32 @@ + + + + + + Dates | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Dates ​

Eloquent allows you to work with Carbon or DateTime objects instead of MongoDate objects. Internally, these dates will be converted to MongoDate objects when saved to the database.

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class User extends Model
+{
+    protected $casts = ['birthday' => 'datetime'];
+}
+

This allows you to execute queries like this:

php
$users = User::where(
+    'birthday', '>',
+    new DateTime('-18 years')
+)->get();
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/extending-the-auth-base-model.html b/docs/.vitepress/dist/v3/guide/eloquent/extending-the-auth-base-model.html new file mode 100644 index 000000000..1473e2c88 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/extending-the-auth-base-model.html @@ -0,0 +1,28 @@ + + + + + + Extending the Authenticatable base model | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Extending the Authenticatable base model ​

This package includes a MongoDB Authenticatable Eloquent class Jenssegers\Mongodb\Auth\User that you can use to replace the default Authenticatable class Illuminate\Foundation\Auth\User for your User model.

php
use Jenssegers\Mongodb\Auth\User as Authenticatable;
+
+class User extends Authenticatable
+{
+
+}
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/extending-the-base-model.html b/docs/.vitepress/dist/v3/guide/eloquent/extending-the-base-model.html new file mode 100644 index 000000000..3dd9d0092 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/extending-the-base-model.html @@ -0,0 +1,49 @@ + + + + + + Extending The Base Model | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Extending The Base Model ​

This package includes a MongoDB enabled Eloquent class that you can use to define models for corresponding collections.

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Book extends Model
+{
+    //
+}
+

Just like a normal model, the MongoDB model class will know which collection to use based on the model name. For Book, the collection books will be used.

To change the collection, pass the $collection property:

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Book extends Model
+{
+    protected $collection = 'my_books_collection';
+}
+

NOTE: MongoDB documents are automatically stored with a unique ID that is stored in the _id property. If you wish to use your own ID, substitute the $primaryKey property and set it to your own primary key attribute name.

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Book extends Model
+{
+    protected $primaryKey = 'id';
+}
+
+// MongoDB will also create _id, but the 'id' property will be used for primary key actions like find().
+Book::create(['id' => 1, 'title' => 'The Fault in Our Stars']);
+

Likewise, you may define a connection property to override the name of the database connection that should be used when utilizing the model.

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Book extends Model
+{
+    protected $connection = 'mongodb';
+}
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/guarding-attributes.html b/docs/.vitepress/dist/v3/guide/eloquent/guarding-attributes.html new file mode 100644 index 000000000..696717a6e --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/guarding-attributes.html @@ -0,0 +1,22 @@ + + + + + + Guarding attributes | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Guarding attributes ​

When choosing between guarding attributes or marking some as fillable, Taylor Otwell prefers the fillable route. This is in light of recent security issues described here.

Keep in mind guarding still works, but you may experience unexpected behavior.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/insert-updates-and-deletes.html b/docs/.vitepress/dist/v3/guide/eloquent/insert-updates-and-deletes.html new file mode 100644 index 000000000..09affc2ab --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/insert-updates-and-deletes.html @@ -0,0 +1,22 @@ + + + + + + Inserts, updates and deletes | Laravel MongoDB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-geo-operations.html b/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-geo-operations.html new file mode 100644 index 000000000..0a4c5e378 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-geo-operations.html @@ -0,0 +1,79 @@ + + + + + + MongoDB-specific Geo operations | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

MongoDB-specific Geo operations ​

Near ​

php
$bars = Bar::where('location', 'near', [
+    '$geometry' => [
+        'type' => 'Point',
+        'coordinates' => [
+            -0.1367563, // longitude
+            51.5100913, // latitude
+        ],
+    ],
+    '$maxDistance' => 50,
+])->get();
+

GeoWithin ​

php
$bars = Bar::where('location', 'geoWithin', [
+    '$geometry' => [
+        'type' => 'Polygon',
+        'coordinates' => [
+            [
+                [-0.1450383, 51.5069158],
+                [-0.1367563, 51.5100913],
+                [-0.1270247, 51.5013233],
+                [-0.1450383, 51.5069158],
+            ],
+        ],
+    ],
+])->get();
+

GeoIntersects ​

php
$bars = Bar::where('location', 'geoIntersects', [
+    '$geometry' => [
+        'type' => 'LineString',
+        'coordinates' => [
+            [-0.144044, 51.515215],
+            [-0.129545, 51.507864],
+        ],
+    ],
+])->get();
+

GeoNear ​

You are able to make a geoNear query on mongoDB. You don't need to specify the automatic fields on the model. The returned instance is a collection. So you're able to make the Collection operations. Just make sure that your model has a location field, and a 2ndSphereIndex. The data in the location field must be saved as GeoJSON. The location points must be saved as WGS84 reference system for geometry calculation. That means, basically, you need to save longitude and latitude, in that order specifically, and to find near with calculated distance, you need to do the same way.

php
Bar::find("63a0cd574d08564f330ceae2")->update(
+    [
+        'location' => [
+            'type' => 'Point',
+            'coordinates' => [
+                -0.1367563,
+                51.5100913
+            ]
+        ]
+    ]
+);
+$bars = Bar::raw(function ($collection) {
+    return $collection->aggregate([
+        [
+            '$geoNear' => [
+                "near" => [ "type" =>  "Point", "coordinates" =>  [-0.132239, 51.511874] ],
+                "distanceField" =>  "dist.calculated",
+                "minDistance" =>  0,
+                "maxDistance" =>  6000,
+                "includeLocs" =>  "dist.location",
+                "spherical" =>  true,
+            ]
+        ]
+    ]);
+});
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-operations.html b/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-operations.html new file mode 100644 index 000000000..181f9f998 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-operations.html @@ -0,0 +1,95 @@ + + + + + + MongoDB specific operations | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

MongoDB specific operations ​

Raw Expressions ​

These expressions will be injected directly into the query.

php
User::whereRaw([
+    'age' => ['$gt' => 30, '$lt' => 40],
+])->get();
+
+User::whereRaw([
+    '$where' => '/.*123.*/.test(this.field)',
+])->get();
+
+User::whereRaw([
+    '$where' => '/.*123.*/.test(this["hyphenated-field"])',
+])->get();
+

You can also perform raw expressions on the internal MongoCollection object. If this is executed on the model class, it will return a collection of models.

If this is executed on the query builder, it will return the original response.

Cursor timeout ​

To prevent MongoCursorTimeout exceptions, you can manually set a timeout value that will be applied to the cursor:

php
DB::collection('users')->timeout(-1)->get();
+

Upsert ​

Update or insert a document. Additional options for the update method are passed directly to the native update method.

php
// Query Builder
+DB::collection('users')
+    ->where('name', 'John')
+    ->update($data, ['upsert' => true]);
+
+// Eloquent
+$user->update($data, ['upsert' => true]);
+

Projections ​

You can apply projections to your queries using the project method.

php
DB::collection('items')
+    ->project(['tags' => ['$slice' => 1]])
+    ->get();
+
+DB::collection('items')
+    ->project(['tags' => ['$slice' => [3, 7]]])
+    ->get();
+

Projections with Pagination ​

php
$limit = 25;
+$projections = ['id', 'name'];
+
+DB::collection('items')
+    ->paginate($limit, $projections);
+

Push ​

Add items to an array.

php
DB::collection('users')
+    ->where('name', 'John')
+    ->push('items', 'boots');
+
+$user->push('items', 'boots');
+
php
DB::collection('users')
+    ->where('name', 'John')
+    ->push('messages', [
+        'from' => 'Jane Doe',
+        'message' => 'Hi John',
+    ]);
+
+$user->push('messages', [
+    'from' => 'Jane Doe',
+    'message' => 'Hi John',
+]);
+

If you DON'T want duplicate items, set the third parameter to true:

php
DB::collection('users')
+    ->where('name', 'John')
+    ->push('items', 'boots', true);
+
+$user->push('items', 'boots', true);
+

Pull ​

Remove an item from an array.

php
DB::collection('users')
+    ->where('name', 'John')
+    ->pull('items', 'boots');
+
+$user->pull('items', 'boots');
+
php
DB::collection('users')
+    ->where('name', 'John')
+    ->pull('messages', [
+        'from' => 'Jane Doe',
+        'message' => 'Hi John',
+    ]);
+
+$user->pull('messages', [
+    'from' => 'Jane Doe',
+    'message' => 'Hi John',
+]);
+

Unset ​

Remove one or more fields from a document.

php
DB::collection('users')
+    ->where('name', 'John')
+    ->unset('note');
+
+$user->unset('note');
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-operators.html b/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-operators.html new file mode 100644 index 000000000..fb5ab433d --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/mongodb-specific-operators.html @@ -0,0 +1,32 @@ + + + + + + MongoDB-specific operators | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

MongoDB-specific operators ​

Exists ​

Matches documents that have the specified field.

php
User::where('age', 'exists', true)->get();
+

All ​

Matches arrays that contain all elements specified in the query.

php
User::where('roles', 'all', ['moderator', 'author'])->get();
+

Size ​

Selects documents if the array field is a specified size.

php
Post::where('tags', 'size', 3)->get();
+

Regex ​

Selects documents where values match a specified regular expression.

php
use MongoDB\BSON\Regex;
+
+User::where('name', 'regex', new Regex('.*doe', 'i'))->get();
+

NOTE: you can also use the Laravel regexp operations. These are a bit more flexible and will automatically convert your regular expression string to a MongoDB\BSON\Regex object.

php
User::where('name', 'regexp', '/.*doe/i')->get();
+

The inverse of regexp:

php
User::where('name', 'not regexp', '/.*doe/i')->get();
+

Type ​

Selects documents if a field is of the specified type. For more information check: http://docs.mongodb.org/manual/reference/operator/query/type/#op._S_type

php
User::where('age', 'type', 2)->get();
+

Mod ​

Performs a modulo operation on the value of a field and selects documents with a specified result.

php
User::where('age', 'mod', [10, 0])->get();
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/eloquent/soft-deletes.html b/docs/.vitepress/dist/v3/guide/eloquent/soft-deletes.html new file mode 100644 index 000000000..0652f4bf5 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/eloquent/soft-deletes.html @@ -0,0 +1,28 @@ + + + + + + Soft Deletes | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Soft Deletes ​

When soft deleting a model, it is not actually removed from your database. Instead, a deleted_at timestamp is set on the record.

To enable soft deletes for a model, apply the Jenssegers\Mongodb\Eloquent\SoftDeletes Trait to the model:

php
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
+
+class User extends Model
+{
+    use SoftDeletes;
+}
+

For more information check Laravel Docs about Soft Deleting.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/extending/authentication.html b/docs/.vitepress/dist/v3/guide/extending/authentication.html new file mode 100644 index 000000000..d89e58035 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/extending/authentication.html @@ -0,0 +1,23 @@ + + + + + + Authentication | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Authentication ​

If you want to use Laravel's native Auth functionality, register this included service provider:

php
Jenssegers\Mongodb\Auth\PasswordResetServiceProvider::class,
+

This service provider will slightly modify the internal DatabaseReminderRepository to add support for MongoDB based password reminders.

If you don't use password reminders, you don't have to register this service provider and everything else should work just fine.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/extending/cross-database-relationships.html b/docs/.vitepress/dist/v3/guide/extending/cross-database-relationships.html new file mode 100644 index 000000000..74cd97b37 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/extending/cross-database-relationships.html @@ -0,0 +1,46 @@ + + + + + + Cross-Database Relationships | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Cross-Database Relationships ​

If you're using a hybrid MongoDB and SQL setup, you can define relationships across them.

The model will automatically return a MongoDB-related or SQL-related relation based on the type of the related model.

If you want this functionality to work both ways, your SQL-models will need to use the Jenssegers\Mongodb\Eloquent\HybridRelations trait.

This functionality only works for hasOne, hasMany and belongsTo.

The MySQL model should use the HybridRelations trait:

php
use Jenssegers\Mongodb\Eloquent\HybridRelations;
+
+class User extends Model
+{
+    use HybridRelations;
+
+    protected $connection = 'mysql';
+
+    public function messages()
+    {
+        return $this->hasMany(Message::class);
+    }
+}
+

Within your MongoDB model, you should define the relationship:

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Message extends Model
+{
+    protected $connection = 'mongodb';
+
+    public function user()
+    {
+        return $this->belongsTo(User::class);
+    }
+}
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/extending/queues.html b/docs/.vitepress/dist/v3/guide/extending/queues.html new file mode 100644 index 000000000..c0465f6e0 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/extending/queues.html @@ -0,0 +1,42 @@ + + + + + + Queues | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Queues ​

If you want to use MongoDB as your database backend, change the driver in config/queue.php:

php
'connections' => [
+    'database' => [
+        'driver' => 'mongodb',
+        // You can also specify your jobs specific database created on config/database.php
+        'connection' => 'mongodb-job',
+        'table' => 'jobs',
+        'queue' => 'default',
+        'expire' => 60,
+    ],
+],
+

If you want to use MongoDB to handle failed jobs, change the database in config/queue.php:

php
'failed' => [
+    'driver' => 'mongodb',
+    // You can also specify your jobs specific database created on config/database.php
+    'database' => 'mongodb-job',
+    'table' => 'failed_jobs',
+],
+

Laravel specific ​

Add the service provider in config/app.php:

php
Jenssegers\Mongodb\MongodbQueueServiceProvider::class,
+

Lumen specific ​

With Lumen, add the service provider in bootstrap/app.php. You must however ensure that you add the following after the MongodbServiceProvider registration.

php
$app->make('queue');
+
+$app->register(Jenssegers\Mongodb\MongodbQueueServiceProvider::class);
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/getting-started/configuration.html b/docs/.vitepress/dist/v3/guide/getting-started/configuration.html new file mode 100644 index 000000000..21afb0ffe --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/getting-started/configuration.html @@ -0,0 +1,33 @@ + + + + + + Configuration | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Configuration ​

The dsn key contains the connection string used to connect to your MongoDB deployment. The format and available options are documented in the MongoDB documentation.

Instead of using a connection string, you can also use the host and port configuration options to have the connection string created for you.

php
'mongodb' => [
+    'driver' => 'mongodb',
+    'host' => env('DB_HOST', '127.0.0.1'),
+    'port' => env('DB_PORT', 27017),
+    'database' => env('DB_DATABASE', 'homestead'),
+    'username' => env('DB_USERNAME', 'homestead'),
+    'password' => env('DB_PASSWORD', 'secret'),
+    'options' => [
+        'appname' => 'homestead',
+    ],
+],
+

The options key in the connection configuration corresponds to the uriOptions parameter.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/getting-started/database_testing.html b/docs/.vitepress/dist/v3/guide/getting-started/database_testing.html new file mode 100644 index 000000000..fff627f88 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/getting-started/database_testing.html @@ -0,0 +1,24 @@ + + + + + + Database Testing | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Database Testing ​

To reset the database after each test, add:

php
use Illuminate\Foundation\Testing\DatabaseMigrations;
+

Also inside each test classes, add:

php
use DatabaseMigrations;
+

Keep in mind that these traits are not yet supported:

  • use Database Transactions;
  • use RefreshDatabase;
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/getting-started/installation.html b/docs/.vitepress/dist/v3/guide/getting-started/installation.html new file mode 100644 index 000000000..2f0f15d93 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/getting-started/installation.html @@ -0,0 +1,32 @@ + + + + + + Install the package via Composer | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Install the package via Composer ​

bash
$ composer require jenssegers/mongodb
+

Laravel ​

In case your Laravel version does NOT autoload the packages, add the service provider to config/app.php:

php
Jenssegers\Mongodb\MongodbServiceProvider::class,
+

Lumen ​

For usage with Lumen, add the service provider in bootstrap/app.php. In this file, you will also need to enable Eloquent. You must however ensure that your call to $app->withEloquent(); is below where you have registered the MongodbServiceProvider:

php
$app->register(Jenssegers\Mongodb\MongodbServiceProvider::class);
+
+$app->withEloquent();
+

The service provider will register a MongoDB database extension with the original database manager. There is no need to register additional facades or objects.

When using MongoDB connections, Laravel will automatically provide you with the corresponding MongoDB objects.

Non-Laravel projects ​

For usage outside Laravel, check out the Capsule manager and add:

php
$capsule->getDatabaseManager()->extend('mongodb', function($config, $name) {
+    $config['name'] = $name;
+
+    return new Jenssegers\Mongodb\Connection($config);
+});
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/getting-started/testing.html b/docs/.vitepress/dist/v3/guide/getting-started/testing.html new file mode 100644 index 000000000..1b164971c --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/getting-started/testing.html @@ -0,0 +1,23 @@ + + + + + + Testing | Laravel MongoDB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/query-builder/available-operations.html b/docs/.vitepress/dist/v3/guide/query-builder/available-operations.html new file mode 100644 index 000000000..a15a2d5e0 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/query-builder/available-operations.html @@ -0,0 +1,22 @@ + + + + + + Available operations | Laravel MongoDB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/query-builder/basic-usage.html b/docs/.vitepress/dist/v3/guide/query-builder/basic-usage.html new file mode 100644 index 000000000..133fd0a9a --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/query-builder/basic-usage.html @@ -0,0 +1,28 @@ + + + + + + Basic Usage | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Basic Usage ​

The database driver plugs right into the original query builder.

When using MongoDB connections, you will be able to build fluent queries to perform database operations.

For your convenience, there is a collection alias for table as well as some additional MongoDB specific operators/operations.

php
$books = DB::collection('books')->get();
+
+$hungerGames =
+    DB::collection('books')
+        ->where('name', 'Hunger Games')
+        ->first();
+

If you are familiar with Eloquent Queries, there is the same functionality.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/relationships/basic-usage.html b/docs/.vitepress/dist/v3/guide/relationships/basic-usage.html new file mode 100644 index 000000000..269c8b749 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/relationships/basic-usage.html @@ -0,0 +1,40 @@ + + + + + + Basic Usage | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Basic Usage ​

The only available relationships are:

  • hasOne
  • hasMany
  • belongsTo
  • belongsToMany

The MongoDB-specific relationships are:

  • embedsOne
  • embedsMany

Here is a small example:

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class User extends Model
+{
+    public function items()
+    {
+        return $this->hasMany(Item::class);
+    }
+}
+

The inverse relation of hasMany is belongsTo:

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Item extends Model
+{
+    public function user()
+    {
+        return $this->belongsTo(User::class);
+    }
+}
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/relationships/belongs-to-many-and-pivots.html b/docs/.vitepress/dist/v3/guide/relationships/belongs-to-many-and-pivots.html new file mode 100644 index 000000000..faab8074c --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/relationships/belongs-to-many-and-pivots.html @@ -0,0 +1,33 @@ + + + + + + belongsToMany and pivots | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

belongsToMany and pivots ​

The belongsToMany relation will not use a pivot "table" but will push id's to a related_ids attribute instead. This makes the second parameter for the belongsToMany method useless.

If you want to define custom keys for your relation, set it to null:

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class User extends Model
+{
+    public function groups()
+    {
+        return $this->belongsToMany(
+            Group::class, null, 'user_ids', 'group_ids'
+        );
+    }
+}
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/relationships/embeds-many-relationships.html b/docs/.vitepress/dist/v3/guide/relationships/embeds-many-relationships.html new file mode 100644 index 000000000..026159e50 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/relationships/embeds-many-relationships.html @@ -0,0 +1,66 @@ + + + + + + EmbedsMany Relationship | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

EmbedsMany Relationship ​

If you want to embed models, rather than referencing them, you can use the embedsMany relation. This relation is similar to the hasMany relation but embeds the models inside the parent object.

REMEMBER: These relations return Eloquent collections, they don't return query builder objects!

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class User extends Model
+{
+    public function books()
+    {
+        return $this->embedsMany(Book::class);
+    }
+}
+

You can access the embedded models through the dynamic property:

php
$user = User::first();
+
+foreach ($user->books as $book) {
+    //
+}
+

The inverse relation is automagically available. You don't need to define this reverse relation.

php
$book = Book::first();
+
+$user = $book->user;
+

Inserting and updating embedded models works similar to the hasMany relation:

php
$book = $user->books()->save(
+    new Book(['title' => 'A Game of Thrones'])
+);
+
+// or
+$book =
+    $user->books()
+         ->create(['title' => 'A Game of Thrones']);
+

You can update embedded models using their save method (available since release 2.0.0):

php
$book = $user->books()->first();
+
+$book->title = 'A Game of Thrones';
+$book->save();
+

You can remove an embedded model by using the destroy method on the relation, or the delete method on the model (available since release 2.0.0):

php
$book->delete();
+
+// Similar operation
+$user->books()->destroy($book);
+

If you want to add or remove an embedded model, without touching the database, you can use the associate and dissociate methods.

To eventually write the changes to the database, save the parent object:

php
$user->books()->associate($book);
+$user->save();
+

Like other relations, embedsMany assumes the local key of the relationship based on the model name. You can override the default local key by passing a second argument to the embedsMany method:

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class User extends Model
+{
+    public function books()
+    {
+        return $this->embedsMany(Book::class, 'local_key');
+    }
+}
+

Embedded relations will return a Collection of embedded items instead of a query builder. Check out the available operations here: https://laravel.com/docs/master/collections

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/relationships/embeds-one-relationship.html b/docs/.vitepress/dist/v3/guide/relationships/embeds-one-relationship.html new file mode 100644 index 000000000..4d0a7a340 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/relationships/embeds-one-relationship.html @@ -0,0 +1,48 @@ + + + + + + EmbedsOne Relationship | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

EmbedsOne Relationship ​

The embedsOne relation is similar to the embedsMany relation, but only embeds a single model.

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class Book extends Model
+{
+    public function author()
+    {
+        return $this->embedsOne(Author::class);
+    }
+}
+

You can access the embedded models through the dynamic property:

php
$book = Book::first();
+$author = $book->author;
+

Inserting and updating embedded models works similar to the hasOne relation:

php
$author = $book->author()->save(
+    new Author(['name' => 'John Doe'])
+);
+
+// Similar
+$author =
+    $book->author()
+         ->create(['name' => 'John Doe']);
+

You can update the embedded model using the save method (available since release 2.0.0):

php
$author = $book->author;
+
+$author->name = 'Jane Doe';
+$author->save();
+

You can replace the embedded model with a new model like this:

php
$newAuthor = new Author(['name' => 'Jane Doe']);
+
+$book->author()->save($newAuthor);
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/schema/basic-usage.html b/docs/.vitepress/dist/v3/guide/schema/basic-usage.html new file mode 100644 index 000000000..d5f8ff00f --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/schema/basic-usage.html @@ -0,0 +1,38 @@ + + + + + + Basic Usage | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

The database driver also has (limited) schema builder support. You can easily manipulate collections and set indexes.

Basic Usage ​

php
Schema::create('users', function ($collection) {
+    $collection->index('name');
+    $collection->unique('email');
+});
+

You can also pass all the parameters specified in the MongoDB docs to the $options parameter:

php
Schema::create('users', function ($collection) {
+    $collection->index(
+        'username',
+        null,
+        null,
+        [
+            'sparse' => true,
+            'unique' => true,
+            'background' => true,
+        ]
+    );
+});
+

Inherited operations:

  • create and drop
  • collection
  • hasCollection
  • index and dropIndex (compound indexes supported as well)
  • unique

MongoDB specific operations:

  • background
  • sparse
  • expire
  • geospatial

All other (unsupported) operations are implemented as dummy pass-through methods because MongoDB does not use a predefined schema.

Read more about the schema builder on Laravel Docs

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/schema/geospatial-indexes.html b/docs/.vitepress/dist/v3/guide/schema/geospatial-indexes.html new file mode 100644 index 000000000..937f44e22 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/schema/geospatial-indexes.html @@ -0,0 +1,28 @@ + + + + + + Geospatial indexes | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Geospatial indexes ​

Geospatial indexes are handy for querying location-based documents.

They come in two forms: 2d and 2dsphere. Use the schema builder to add these to a collection.

php
Schema::create('bars', function ($collection) {
+    $collection->geospatial('location', '2d');
+});
+

To add a 2dsphere index:

php
Schema::create('bars', function ($collection) {
+    $collection->geospatial('location', '2dsphere');
+});
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/security-contact-information/security-contact-information.html b/docs/.vitepress/dist/v3/guide/security-contact-information/security-contact-information.html new file mode 100644 index 000000000..8e2dee136 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/security-contact-information/security-contact-information.html @@ -0,0 +1,22 @@ + + + + + + Security contact information | Laravel MongoDB + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/transactions/basic-usage.html b/docs/.vitepress/dist/v3/guide/transactions/basic-usage.html new file mode 100644 index 000000000..e2527f795 --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/transactions/basic-usage.html @@ -0,0 +1,48 @@ + + + + + + Transactions | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Transactions ​

Transactions require MongoDB version ^4.0 as well as deployment of replica set or sharded clusters. You can find more information in the MongoDB docs

Basic Usage ​

php
DB::transaction(function () {
+    User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']);
+    DB::collection('users')->where('name', 'john')->update(['age' => 20]);
+    DB::collection('users')->where('name', 'john')->delete();
+});
+
php
// begin a transaction
+DB::beginTransaction();
+User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']);
+DB::collection('users')->where('name', 'john')->update(['age' => 20]);
+DB::collection('users')->where('name', 'john')->delete();
+
+// commit changes
+DB::commit();
+

To abort a transaction, call the rollBack method at any point during the transaction:

php
DB::beginTransaction();
+User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']);
+
+// Abort the transaction, discarding any data created as part of it
+DB::rollBack();
+

NOTE: Transactions in MongoDB cannot be nested. DB::beginTransaction() function will start new transactions in a new created or existing session and will raise the RuntimeException when transactions already exist. See more in MongoDB official docs Transactions and Sessions

php
DB::beginTransaction();
+User::create(['name' => 'john', 'age' => 20, 'title' => 'admin']);
+
+// This call to start a nested transaction will raise a RuntimeException
+DB::beginTransaction();
+DB::collection('users')->where('name', 'john')->update(['age' => 20]);
+DB::commit();
+DB::rollBack();
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/v3/guide/upgrading/upgrading-from-version-2-to-3.html b/docs/.vitepress/dist/v3/guide/upgrading/upgrading-from-version-2-to-3.html new file mode 100644 index 000000000..c11aba1ac --- /dev/null +++ b/docs/.vitepress/dist/v3/guide/upgrading/upgrading-from-version-2-to-3.html @@ -0,0 +1,38 @@ + + + + + + Upgrading from version 2 to 3 | Laravel MongoDB + + + + + + + + + + +
Skip to content
On this page

Upgrading from version 2 to 3 ​

In this new major release which supports the new MongoDB PHP extension, we also moved the location of the Model class and replaced the MySQL model class with a trait.

Please change all Jenssegers\Mongodb\Model references to Jenssegers\Mongodb\Eloquent\Model either at the top of your model files or your registered alias.

php
use Jenssegers\Mongodb\Eloquent\Model;
+
+class User extends Model
+{
+    //
+}
+

If you are using hybrid relations, your MySQL classes should now extend the original Eloquent model class Illuminate\Database\Eloquent\Model instead of the removed Jenssegers\Eloquent\Model.

Instead use the new Jenssegers\Mongodb\Eloquent\HybridRelations trait. This should make things more clear as there is only one single model class in this package.

php
use Jenssegers\Mongodb\Eloquent\HybridRelations;
+
+class User extends Model
+{
+
+    use HybridRelations;
+
+    protected $connection = 'mysql';
+}
+

Embedded relations now return an Illuminate\Database\Eloquent\Collection rather than a custom Collection class. If you were using one of the special methods that were available, convert them to Collection operations.

php
$books = $user->books()->sortBy('title')->get();
+
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 000000000..4a55d221f --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,16 @@ +// https://vitepress.dev/v3/guide/custom-theme +import { h } from 'vue' +import Theme from 'vitepress/theme' +import './style.css' + +export default { + ...Theme, + Layout: () => { + return h(Theme.Layout, null, { + // https://vitepress.dev/v3/guide/extending-default-theme#layout-slots + }) + }, + enhanceApp({ app, router, siteData }) { + // ... + } +} diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css new file mode 100644 index 000000000..0e95adf29 --- /dev/null +++ b/docs/.vitepress/theme/style.css @@ -0,0 +1,122 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-brand: #646cff; + --vp-c-brand-light: #747bff; + --vp-c-brand-lighter: #9499ff; + --vp-c-brand-lightest: #bcc0ff; + --vp-c-brand-dark: #535bf2; + --vp-c-brand-darker: #454ce1; + --vp-c-brand-dimm: rgba(100, 108, 255, 0.08); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: var(--vp-c-brand-light); + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand); + --vp-button-brand-hover-border: var(--vp-c-brand-light); + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-light); + --vp-button-brand-active-border: var(--vp-c-brand-light); + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-button-brand-bg); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(40px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(72px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: var(--vp-c-brand); + --vp-custom-block-tip-text: var(--vp-c-brand-darker); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); +} + +.dark { + --vp-custom-block-tip-border: var(--vp-c-brand); + --vp-custom-block-tip-text: var(--vp-c-brand-lightest); + --vp-custom-block-tip-bg: var(--vp-c-brand-dimm); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand) !important; +} + +/** + * VitePress: Custom fix + * -------------------------------------------------------------------------- */ + +/* + Use lighter colors for links in dark mode for a11y. + Also specify some classes twice to have higher specificity + over scoped class data attribute. +*/ +.dark .vp-doc a, +.dark .vp-doc a > code, +.dark .VPNavBarMenuLink.VPNavBarMenuLink:hover, +.dark .VPNavBarMenuLink.VPNavBarMenuLink.active, +.dark .link.link:hover, +.dark .link.link.active, +.dark .edit-link-button.edit-link-button, +.dark .pager-link .title { + color: var(--vp-c-brand-lighter); +} + +.dark .vp-doc a:hover, +.dark .vp-doc a > code:hover { + color: var(--vp-c-brand-lightest); + opacity: 1; +} + +/* Transition by color instead of opacity */ +.dark .vp-doc .custom-block a { + transition: color 0.25s; +} + diff --git a/docs/fav.png b/docs/fav.png new file mode 100644 index 000000000..aa304cc9f Binary files /dev/null and b/docs/fav.png differ diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..7da1b5810 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,24 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Laravel MongoDB" + text: "Connect Your Laravel to MongoDB" + tagline: This package adds functionalities to the Eloquent model and Query builder for MongoDB, using the original Laravel API. This library extends the original Laravel classes, so it uses exactly the same methods. + actions: + - theme: brand + text: Get Started + link: /v3/guide/getting-started/installation + # - theme: alt + # text: API Examples + # link: /api-examples + +features: + - title: Easy Setup + details: You can now setup your laravel project to connect with MongoDB. + - title: MongoDB + details: MongoDB is one of the most popular mongoDB because of its good features. + - title: Use Eloquent + details: You can manipulate your data using Laravel Eloquent like you always do. +--- diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..fa1a07107 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,16 @@ +{ + "repository": { + "url": "https://github.com/BroJenuel/laravel-mongodb" + }, + "devDependencies": { + "vitepress": "^1.0.0-alpha.61" + }, + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + }, + "dependencies": { + "vue": "^3.2.47" + } +} \ No newline at end of file diff --git a/docs/v1/version-one.md b/docs/v1/version-one.md new file mode 100644 index 000000000..84930dbf2 --- /dev/null +++ b/docs/v1/version-one.md @@ -0,0 +1,4 @@ +# Version One Documentation Is Not Available + +[Go to Version 3](/v3/guide/getting-started/installation) +[Upgrading](/v3/guide/upgrading/upgrading-from-version-2-to-3) diff --git a/docs/v2/version-two.md b/docs/v2/version-two.md new file mode 100644 index 000000000..22dd3f624 --- /dev/null +++ b/docs/v2/version-two.md @@ -0,0 +1,5 @@ +# Version Two Documentation Is Not Available + +You can still use the documentation for 2 in the version 3 +[Go to Version 3](/v3/guide/getting-started/installation) +[Upgrading](/v3/guide/upgrading/upgrading-from-version-2-to-3) diff --git a/docs/v3/guide/eloquent/basic-usage.md b/docs/v3/guide/eloquent/basic-usage.md new file mode 100644 index 000000000..f22595d41 --- /dev/null +++ b/docs/v3/guide/eloquent/basic-usage.md @@ -0,0 +1,185 @@ +# Basic Usage + +## Retrieving all models + +```php +$users = User::all(); +``` + +## Retrieving a record by primary key + +```php +$user = User::find('517c43667db388101e00000f'); +``` + +## Where + +```php +$posts = + Post::where('author.name', 'John') + ->take(10) + ->get(); +``` + +## OR Statements + +```php +$posts = + Post::where('votes', '>', 0) + ->orWhere('is_approved', true) + ->get(); +``` + +## AND statements + +```php +$users = + User::where('age', '>', 18) + ->where('name', '!=', 'John') + ->get(); +``` + +## whereIn + +```php +$users = User::whereIn('age', [16, 18, 20])->get(); +``` + +When using `whereNotIn` objects will be returned if the field is non-existent. Combine with `whereNotNull('age')` to leave out those documents. + +## whereBetween + +```php +$posts = Post::whereBetween('votes', [1, 100])->get(); +``` + +## whereNull + +```php +$users = User::whereNull('age')->get(); +``` + +## whereDate + +```php +$users = User::whereDate('birthday', '2021-5-12')->get(); +``` + +The usage is the same as `whereMonth` / `whereDay` / `whereYear` / `whereTime` + +## Advanced wheres + +```php +$users = + User::where('name', 'John') + ->orWhere(function ($query) { + return $query + ->where('votes', '>', 100) + ->where('title', '<>', 'Admin'); + })->get(); +``` + +## orderBy + +```php +$users = User::orderBy('age', 'desc')->get(); +``` + +## Offset & Limit (skip & take) + +```php +$users = + User::skip(10) + ->take(5) + ->get(); +``` + +## groupBy + +Selected columns that are not grouped will be aggregated with the `$last` function. + +```php +$users = + Users::groupBy('title') + ->get(['title', 'name']); +``` + +## Distinct + +Distinct requires a field for which to return the distinct values. + +```php +$users = User::distinct()->get(['name']); + +// Equivalent to: +$users = User::distinct('name')->get(); +``` + +Distinct can be combined with **where**: + +```php +$users = + User::where('active', true) + ->distinct('name') + ->get(); +``` + +## Like + +```php +$spamComments = Comment::where('body', 'like', '%spam%')->get(); +``` + +## Aggregation + +**Aggregations are only available for MongoDB versions greater than 2.2.x** + +```php +$total = Product::count(); +$price = Product::max('price'); +$price = Product::min('price'); +$price = Product::avg('price'); +$total = Product::sum('price'); +``` + +Aggregations can be combined with **where**: + +```php +$sold = Orders::where('sold', true)->sum('price'); +``` + +Aggregations can be also used on sub-documents: + +```php +$total = Order::max('suborder.price'); +``` + +**NOTE**: This aggregation only works with single sub-documents (like `EmbedsOne`) not subdocument arrays (like `EmbedsMany`). + +## Incrementing/Decrementing + +**Incrementing/Decrementing the value of a column** + +Perform increments or decrements (default 1) on specified attributes: + +```php +Cat::where('name', 'Kitty')->increment('age'); + +Car::where('name', 'Toyota')->decrement('weight', 50); +``` + +The number of updated objects is returned: + +```php +$count = User::increment('age'); +``` + +You may also specify additional columns to update: + +```php +Cat::where('age', 3) + ->increment('age', 1, ['group' => 'Kitty Club']); + +Car::where('weight', 300) + ->decrement('weight', 100, ['latest_change' => 'carbon fiber']); +``` \ No newline at end of file diff --git a/docs/v3/guide/eloquent/dates.md b/docs/v3/guide/eloquent/dates.md new file mode 100644 index 000000000..fbd146fa9 --- /dev/null +++ b/docs/v3/guide/eloquent/dates.md @@ -0,0 +1,21 @@ +# Dates + +Eloquent allows you to work with Carbon or DateTime objects instead of MongoDate objects. Internally, these dates will be converted to MongoDate objects when saved to the database. + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class User extends Model +{ + protected $casts = ['birthday' => 'datetime']; +} +``` + +This allows you to execute queries like this: + +```php +$users = User::where( + 'birthday', '>', + new DateTime('-18 years') +)->get(); +``` \ No newline at end of file diff --git a/docs/v3/guide/eloquent/extending-the-auth-base-model.md b/docs/v3/guide/eloquent/extending-the-auth-base-model.md new file mode 100644 index 000000000..0e2e3333e --- /dev/null +++ b/docs/v3/guide/eloquent/extending-the-auth-base-model.md @@ -0,0 +1,12 @@ +# Extending the Authenticatable base model + +This package includes a MongoDB Authenticatable Eloquent class `Jenssegers\Mongodb\Auth\User` that you can use to replace the default Authenticatable class `Illuminate\Foundation\Auth\User` for your `User` model. + +```php +use Jenssegers\Mongodb\Auth\User as Authenticatable; + +class User extends Authenticatable +{ + +} +``` diff --git a/docs/v3/guide/eloquent/extending-the-base-model.md b/docs/v3/guide/eloquent/extending-the-base-model.md new file mode 100644 index 000000000..3e8f9ec31 --- /dev/null +++ b/docs/v3/guide/eloquent/extending-the-base-model.md @@ -0,0 +1,50 @@ +# Extending The Base Model + +This package includes a MongoDB enabled Eloquent class that you can use to define models for corresponding collections. + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Book extends Model +{ + // +} +``` + +Just like a normal model, the MongoDB model class will know which collection to use based on the model name. For `Book`, the collection `books` will be used. + +To change the collection, pass the `$collection` property: + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Book extends Model +{ + protected $collection = 'my_books_collection'; +} +``` + +**NOTE:** MongoDB documents are automatically stored with a unique ID that is stored in the `_id` property. If you wish to use your own ID, substitute the `$primaryKey` property and set it to your own primary key attribute name. + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Book extends Model +{ + protected $primaryKey = 'id'; +} + +// MongoDB will also create _id, but the 'id' property will be used for primary key actions like find(). +Book::create(['id' => 1, 'title' => 'The Fault in Our Stars']); +``` + +Likewise, you may define a `connection` property to override the name of the database connection that should be used when utilizing the model. + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Book extends Model +{ + protected $connection = 'mongodb'; +} +``` \ No newline at end of file diff --git a/docs/v3/guide/eloquent/guarding-attributes.md b/docs/v3/guide/eloquent/guarding-attributes.md new file mode 100644 index 000000000..56210b918 --- /dev/null +++ b/docs/v3/guide/eloquent/guarding-attributes.md @@ -0,0 +1,6 @@ +# Guarding attributes + +When choosing between guarding attributes or marking some as fillable, Taylor Otwell prefers the fillable route. +This is in light of [recent security issues described here](https://blog.laravel.com/security-release-laravel-61835-7240). + +Keep in mind guarding still works, but you may experience unexpected behavior. \ No newline at end of file diff --git a/docs/v3/guide/eloquent/insert-updates-and-deletes.md b/docs/v3/guide/eloquent/insert-updates-and-deletes.md new file mode 100644 index 000000000..9a51a5fa1 --- /dev/null +++ b/docs/v3/guide/eloquent/insert-updates-and-deletes.md @@ -0,0 +1,5 @@ +# Inserts, updates and deletes + +Inserting, updating and deleting records works just like the original Eloquent. Please check [Laravel Docs' Eloquent section](https://laravel.com/docs/6.x/eloquent). + +Here, only the MongoDB-specific operations are specified. \ No newline at end of file diff --git a/docs/v3/guide/eloquent/mongodb-specific-geo-operations.md b/docs/v3/guide/eloquent/mongodb-specific-geo-operations.md new file mode 100644 index 000000000..2a4a6929e --- /dev/null +++ b/docs/v3/guide/eloquent/mongodb-specific-geo-operations.md @@ -0,0 +1,85 @@ +# MongoDB-specific Geo operations + +## Near + +```php +$bars = Bar::where('location', 'near', [ + '$geometry' => [ + 'type' => 'Point', + 'coordinates' => [ + -0.1367563, // longitude + 51.5100913, // latitude + ], + ], + '$maxDistance' => 50, +])->get(); +``` + +## GeoWithin + +```php +$bars = Bar::where('location', 'geoWithin', [ + '$geometry' => [ + 'type' => 'Polygon', + 'coordinates' => [ + [ + [-0.1450383, 51.5069158], + [-0.1367563, 51.5100913], + [-0.1270247, 51.5013233], + [-0.1450383, 51.5069158], + ], + ], + ], +])->get(); +``` + +## GeoIntersects + +```php +$bars = Bar::where('location', 'geoIntersects', [ + '$geometry' => [ + 'type' => 'LineString', + 'coordinates' => [ + [-0.144044, 51.515215], + [-0.129545, 51.507864], + ], + ], +])->get(); +``` + +## GeoNear + +You are able to make a `geoNear` query on mongoDB. +You don't need to specify the automatic fields on the model. +The returned instance is a collection. So you're able to make the [Collection](https://laravel.com/docs/9.x/collections) operations. +Just make sure that your model has a `location` field, and a [2ndSphereIndex](https://www.mongodb.com/docs/manual/core/2dsphere). +The data in the `location` field must be saved as [GeoJSON](https://www.mongodb.com/docs/manual/reference/geojson/). +The `location` points must be saved as [WGS84](https://www.mongodb.com/docs/manual/reference/glossary/#std-term-WGS84) reference system for geometry calculation. That means, basically, you need to save `longitude and latitude`, in that order specifically, and to find near with calculated distance, you `need to do the same way`. + +```php +Bar::find("63a0cd574d08564f330ceae2")->update( + [ + 'location' => [ + 'type' => 'Point', + 'coordinates' => [ + -0.1367563, + 51.5100913 + ] + ] + ] +); +$bars = Bar::raw(function ($collection) { + return $collection->aggregate([ + [ + '$geoNear' => [ + "near" => [ "type" => "Point", "coordinates" => [-0.132239, 51.511874] ], + "distanceField" => "dist.calculated", + "minDistance" => 0, + "maxDistance" => 6000, + "includeLocs" => "dist.location", + "spherical" => true, + ] + ] + ]); +}); +``` \ No newline at end of file diff --git a/docs/v3/guide/eloquent/mongodb-specific-operations.md b/docs/v3/guide/eloquent/mongodb-specific-operations.md new file mode 100644 index 000000000..74e570ff4 --- /dev/null +++ b/docs/v3/guide/eloquent/mongodb-specific-operations.md @@ -0,0 +1,143 @@ +# MongoDB specific operations + +## Raw Expressions + +These expressions will be injected directly into the query. + +```php +User::whereRaw([ + 'age' => ['$gt' => 30, '$lt' => 40], +])->get(); + +User::whereRaw([ + '$where' => '/.*123.*/.test(this.field)', +])->get(); + +User::whereRaw([ + '$where' => '/.*123.*/.test(this["hyphenated-field"])', +])->get(); +``` + +You can also perform raw expressions on the internal MongoCollection object. If this is executed on the model class, it will return a collection of models. + +If this is executed on the query builder, it will return the original response. + +## Cursor timeout + +To prevent `MongoCursorTimeout` exceptions, you can manually set a timeout value that will be applied to the cursor: + +```php +DB::collection('users')->timeout(-1)->get(); +``` + +## Upsert + +Update or insert a document. Additional options for the update method are passed directly to the native update method. + +```php +// Query Builder +DB::collection('users') + ->where('name', 'John') + ->update($data, ['upsert' => true]); + +// Eloquent +$user->update($data, ['upsert' => true]); +``` + +## Projections + +You can apply projections to your queries using the `project` method. + +```php +DB::collection('items') + ->project(['tags' => ['$slice' => 1]]) + ->get(); + +DB::collection('items') + ->project(['tags' => ['$slice' => [3, 7]]]) + ->get(); +``` + +## Projections with Pagination + +```php +$limit = 25; +$projections = ['id', 'name']; + +DB::collection('items') + ->paginate($limit, $projections); +``` + +## Push + +Add items to an array. + +```php +DB::collection('users') + ->where('name', 'John') + ->push('items', 'boots'); + +$user->push('items', 'boots'); +``` + +```php +DB::collection('users') + ->where('name', 'John') + ->push('messages', [ + 'from' => 'Jane Doe', + 'message' => 'Hi John', + ]); + +$user->push('messages', [ + 'from' => 'Jane Doe', + 'message' => 'Hi John', +]); +``` + +If you **DON'T** want duplicate items, set the third parameter to `true`: + +```php +DB::collection('users') + ->where('name', 'John') + ->push('items', 'boots', true); + +$user->push('items', 'boots', true); +``` + +## Pull + +Remove an item from an array. + +```php +DB::collection('users') + ->where('name', 'John') + ->pull('items', 'boots'); + +$user->pull('items', 'boots'); +``` + +```php +DB::collection('users') + ->where('name', 'John') + ->pull('messages', [ + 'from' => 'Jane Doe', + 'message' => 'Hi John', + ]); + +$user->pull('messages', [ + 'from' => 'Jane Doe', + 'message' => 'Hi John', +]); +``` + +## Unset + +Remove one or more fields from a document. + +```php +DB::collection('users') + ->where('name', 'John') + ->unset('note'); + +$user->unset('note'); +``` \ No newline at end of file diff --git a/docs/v3/guide/eloquent/mongodb-specific-operators.md b/docs/v3/guide/eloquent/mongodb-specific-operators.md new file mode 100644 index 000000000..534a96c63 --- /dev/null +++ b/docs/v3/guide/eloquent/mongodb-specific-operators.md @@ -0,0 +1,63 @@ +# MongoDB-specific operators + +## Exists + +Matches documents that have the specified field. + +```php +User::where('age', 'exists', true)->get(); +``` + +## All + +Matches arrays that contain all elements specified in the query. + +```php +User::where('roles', 'all', ['moderator', 'author'])->get(); +``` + +## Size + +Selects documents if the array field is a specified size. + +```php +Post::where('tags', 'size', 3)->get(); +``` + +## Regex + +Selects documents where values match a specified regular expression. + +```php +use MongoDB\BSON\Regex; + +User::where('name', 'regex', new Regex('.*doe', 'i'))->get(); +``` + +**NOTE:** you can also use the Laravel regexp operations. These are a bit more flexible and will automatically convert your regular expression string to a `MongoDB\BSON\Regex` object. + +```php +User::where('name', 'regexp', '/.*doe/i')->get(); +``` + +The inverse of regexp: + +```php +User::where('name', 'not regexp', '/.*doe/i')->get(); +``` + +## Type + +Selects documents if a field is of the specified type. For more information check: http://docs.mongodb.org/manual/reference/operator/query/type/#op._S_type + +```php +User::where('age', 'type', 2)->get(); +``` + +## Mod + +Performs a modulo operation on the value of a field and selects documents with a specified result. + +```php +User::where('age', 'mod', [10, 0])->get(); +``` \ No newline at end of file diff --git a/docs/v3/guide/eloquent/soft-deletes.md b/docs/v3/guide/eloquent/soft-deletes.md new file mode 100644 index 000000000..172a76b1a --- /dev/null +++ b/docs/v3/guide/eloquent/soft-deletes.md @@ -0,0 +1,16 @@ +# Soft Deletes + +When soft deleting a model, it is not actually removed from your database. Instead, a deleted_at timestamp is set on the record. + +To enable soft deletes for a model, apply the `Jenssegers\Mongodb\Eloquent\SoftDeletes` Trait to the model: + +```php +use Jenssegers\Mongodb\Eloquent\SoftDeletes; + +class User extends Model +{ + use SoftDeletes; +} +``` + +For more information check [Laravel Docs about Soft Deleting](http://laravel.com/docs/eloquent#soft-deleting). \ No newline at end of file diff --git a/docs/v3/guide/extending/authentication.md b/docs/v3/guide/extending/authentication.md new file mode 100644 index 000000000..e4f784f1d --- /dev/null +++ b/docs/v3/guide/extending/authentication.md @@ -0,0 +1,11 @@ +# Authentication + +If you want to use Laravel's native Auth functionality, register this included service provider: + +```php +Jenssegers\Mongodb\Auth\PasswordResetServiceProvider::class, +``` + +This service provider will slightly modify the internal DatabaseReminderRepository to add support for MongoDB based password reminders. + +If you don't use password reminders, you don't have to register this service provider and everything else should work just fine. \ No newline at end of file diff --git a/docs/v3/guide/extending/cross-database-relationships.md b/docs/v3/guide/extending/cross-database-relationships.md new file mode 100644 index 000000000..aa4a87424 --- /dev/null +++ b/docs/v3/guide/extending/cross-database-relationships.md @@ -0,0 +1,43 @@ +# Cross-Database Relationships + +If you're using a hybrid MongoDB and SQL setup, you can define relationships across them. + +The model will automatically return a MongoDB-related or SQL-related relation based on the type of the related model. + +If you want this functionality to work both ways, your SQL-models will need to use the `Jenssegers\Mongodb\Eloquent\HybridRelations` trait. + +**This functionality only works for `hasOne`, `hasMany` and `belongsTo`.** + +The MySQL model should use the `HybridRelations` trait: + +```php +use Jenssegers\Mongodb\Eloquent\HybridRelations; + +class User extends Model +{ + use HybridRelations; + + protected $connection = 'mysql'; + + public function messages() + { + return $this->hasMany(Message::class); + } +} +``` + +Within your MongoDB model, you should define the relationship: + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Message extends Model +{ + protected $connection = 'mongodb'; + + public function user() + { + return $this->belongsTo(User::class); + } +} +``` \ No newline at end of file diff --git a/docs/v3/guide/extending/queues.md b/docs/v3/guide/extending/queues.md new file mode 100644 index 000000000..26d23f3b4 --- /dev/null +++ b/docs/v3/guide/extending/queues.md @@ -0,0 +1,45 @@ +# Queues + +If you want to use MongoDB as your database backend, change the driver in `config/queue.php`: + +```php +'connections' => [ + 'database' => [ + 'driver' => 'mongodb', + // You can also specify your jobs specific database created on config/database.php + 'connection' => 'mongodb-job', + 'table' => 'jobs', + 'queue' => 'default', + 'expire' => 60, + ], +], +``` + +If you want to use MongoDB to handle failed jobs, change the database in `config/queue.php`: + +```php +'failed' => [ + 'driver' => 'mongodb', + // You can also specify your jobs specific database created on config/database.php + 'database' => 'mongodb-job', + 'table' => 'failed_jobs', +], +``` + +## Laravel specific + +Add the service provider in `config/app.php`: + +```php +Jenssegers\Mongodb\MongodbQueueServiceProvider::class, +``` + +## Lumen specific + +With [Lumen](http://lumen.laravel.com), add the service provider in `bootstrap/app.php`. You must however ensure that you add the following **after** the `MongodbServiceProvider` registration. + +```php +$app->make('queue'); + +$app->register(Jenssegers\Mongodb\MongodbQueueServiceProvider::class); +``` \ No newline at end of file diff --git a/docs/v3/guide/getting-started/configuration.md b/docs/v3/guide/getting-started/configuration.md new file mode 100644 index 000000000..11fd94d62 --- /dev/null +++ b/docs/v3/guide/getting-started/configuration.md @@ -0,0 +1,21 @@ +# Configuration + +The `dsn` key contains the connection string used to connect to your MongoDB deployment. The format and available options are documented in the [MongoDB documentation](https://docs.mongodb.com/manual/reference/connection-string/). + +Instead of using a connection string, you can also use the `host` and `port` configuration options to have the connection string created for you. + +```php +'mongodb' => [ + 'driver' => 'mongodb', + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', 27017), + 'database' => env('DB_DATABASE', 'homestead'), + 'username' => env('DB_USERNAME', 'homestead'), + 'password' => env('DB_PASSWORD', 'secret'), + 'options' => [ + 'appname' => 'homestead', + ], +], +``` + +The `options` key in the connection configuration corresponds to the [`uriOptions` parameter](https://www.php.net/manual/en/mongodb-driver-manager.construct.php#mongodb-driver-manager.construct-urioptions). \ No newline at end of file diff --git a/docs/v3/guide/getting-started/database_testing.md b/docs/v3/guide/getting-started/database_testing.md new file mode 100644 index 000000000..3e2fb62c3 --- /dev/null +++ b/docs/v3/guide/getting-started/database_testing.md @@ -0,0 +1,18 @@ +# Database Testing + +To reset the database after each test, add: + +```php +use Illuminate\Foundation\Testing\DatabaseMigrations; +``` + +Also inside each test classes, add: + +```php +use DatabaseMigrations; +``` + +Keep in mind that these traits are not yet supported: + +- `use Database Transactions;` +- `use RefreshDatabase;` \ No newline at end of file diff --git a/docs/v3/guide/getting-started/installation.md b/docs/v3/guide/getting-started/installation.md new file mode 100644 index 000000000..4c633bc70 --- /dev/null +++ b/docs/v3/guide/getting-started/installation.md @@ -0,0 +1,68 @@ +## Installation + +Make sure you have the MongoDB PHP driver installed. You can find installation instructions at http://php.net/manual/en/mongodb.installation.php + +## Laravel version Compatibility + +| Laravel | Package | Maintained | +| :------ | :------------- | :----------------- | +| 9.x | 3.9.x | :white_check_mark: | +| 8.x | 3.8.x | :white_check_mark: | +| 7.x | 3.7.x | :x: | +| 6.x | 3.6.x | :x: | +| 5.8.x | 3.5.x | :x: | +| 5.7.x | 3.4.x | :x: | +| 5.6.x | 3.4.x | :x: | +| 5.5.x | 3.3.x | :x: | +| 5.4.x | 3.2.x | :x: | +| 5.3.x | 3.1.x or 3.2.x | :x: | +| 5.2.x | 2.3.x or 3.0.x | :x: | +| 5.1.x | 2.2.x or 3.0.x | :x: | +| 5.0.x | 2.1.x | :x: | +| 4.2.x | 2.0.x | :x: | + +Install the package via Composer: + +```bash +$ composer require jenssegers/mongodb +``` + +## Install the package via Composer + +```bash +$ composer require jenssegers/mongodb +``` + +## Laravel + +In case your Laravel version does NOT autoload the packages, add the service provider to `config/app.php`: + +```php +Jenssegers\Mongodb\MongodbServiceProvider::class, +``` + +## Lumen + +For usage with [Lumen](http://lumen.laravel.com), add the service provider in `bootstrap/app.php`. In this file, you will also need to enable Eloquent. You must however ensure that your call to `$app->withEloquent();` is **below** where you have registered the `MongodbServiceProvider`: + +```php +$app->register(Jenssegers\Mongodb\MongodbServiceProvider::class); + +$app->withEloquent(); +``` + +The service provider will register a MongoDB database extension with the original database manager. There is no need to register additional facades or objects. + +When using MongoDB connections, Laravel will automatically provide you with the corresponding MongoDB objects. + +## Non-Laravel projects + +For usage outside Laravel, check out the [Capsule manager](https://github.com/illuminate/database/blob/master/README.md) and add: + +```php +$capsule->getDatabaseManager()->extend('mongodb', function($config, $name) { + $config['name'] = $name; + + return new Jenssegers\Mongodb\Connection($config); +}); +``` \ No newline at end of file diff --git a/docs/v3/guide/getting-started/testing.md b/docs/v3/guide/getting-started/testing.md new file mode 100644 index 000000000..d405d40c8 --- /dev/null +++ b/docs/v3/guide/getting-started/testing.md @@ -0,0 +1,7 @@ +# Testing + +To run the test for this package, run: + +``` +docker-compose up +``` \ No newline at end of file diff --git a/docs/v3/guide/query-builder/available-operations.md b/docs/v3/guide/query-builder/available-operations.md new file mode 100644 index 000000000..e683608d3 --- /dev/null +++ b/docs/v3/guide/query-builder/available-operations.md @@ -0,0 +1,3 @@ +# Available operations + +To see the available operations, check the [Eloquent](/v3/guide/eloquent/basic-usage) section. \ No newline at end of file diff --git a/docs/v3/guide/query-builder/basic-usage.md b/docs/v3/guide/query-builder/basic-usage.md new file mode 100644 index 000000000..80e425894 --- /dev/null +++ b/docs/v3/guide/query-builder/basic-usage.md @@ -0,0 +1,18 @@ +# Basic Usage + +The database driver plugs right into the original query builder. + +When using MongoDB connections, you will be able to build fluent queries to perform database operations. + +For your convenience, there is a `collection` alias for `table` as well as some additional MongoDB specific operators/operations. + +```php +$books = DB::collection('books')->get(); + +$hungerGames = + DB::collection('books') + ->where('name', 'Hunger Games') + ->first(); +``` + +If you are familiar with [Eloquent Queries](http://laravel.com/docs/queries), there is the same functionality. \ No newline at end of file diff --git a/docs/v3/guide/relationships/basic-usage.md b/docs/v3/guide/relationships/basic-usage.md new file mode 100644 index 000000000..cb1990031 --- /dev/null +++ b/docs/v3/guide/relationships/basic-usage.md @@ -0,0 +1,41 @@ +# Basic Usage + +The only available relationships are: + +- hasOne +- hasMany +- belongsTo +- belongsToMany + +The MongoDB-specific relationships are: + +- embedsOne +- embedsMany + +Here is a small example: + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class User extends Model +{ + public function items() + { + return $this->hasMany(Item::class); + } +} +``` + +The inverse relation of `hasMany` is `belongsTo`: + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Item extends Model +{ + public function user() + { + return $this->belongsTo(User::class); + } +} +``` \ No newline at end of file diff --git a/docs/v3/guide/relationships/belongs-to-many-and-pivots.md b/docs/v3/guide/relationships/belongs-to-many-and-pivots.md new file mode 100644 index 000000000..3de0469fc --- /dev/null +++ b/docs/v3/guide/relationships/belongs-to-many-and-pivots.md @@ -0,0 +1,19 @@ +# belongsToMany and pivots + +The belongsToMany relation will not use a pivot "table" but will push id's to a __related_ids__ attribute instead. This makes the second parameter for the belongsToMany method useless. + +If you want to define custom keys for your relation, set it to `null`: + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class User extends Model +{ + public function groups() + { + return $this->belongsToMany( + Group::class, null, 'user_ids', 'group_ids' + ); + } +} +``` \ No newline at end of file diff --git a/docs/v3/guide/relationships/embeds-many-relationships.md b/docs/v3/guide/relationships/embeds-many-relationships.md new file mode 100644 index 000000000..ea9947d4a --- /dev/null +++ b/docs/v3/guide/relationships/embeds-many-relationships.md @@ -0,0 +1,91 @@ +# EmbedsMany Relationship + +If you want to embed models, rather than referencing them, you can use the `embedsMany` relation. This relation is similar to the `hasMany` relation but embeds the models inside the parent object. + +**REMEMBER**: These relations return Eloquent collections, they don't return query builder objects! + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class User extends Model +{ + public function books() + { + return $this->embedsMany(Book::class); + } +} +``` + +You can access the embedded models through the dynamic property: + +```php +$user = User::first(); + +foreach ($user->books as $book) { + // +} +``` + +The inverse relation is auto*magically* available. You don't need to define this reverse relation. + +```php +$book = Book::first(); + +$user = $book->user; +``` + +Inserting and updating embedded models works similar to the `hasMany` relation: + +```php +$book = $user->books()->save( + new Book(['title' => 'A Game of Thrones']) +); + +// or +$book = + $user->books() + ->create(['title' => 'A Game of Thrones']); +``` + +You can update embedded models using their `save` method (available since release 2.0.0): + +```php +$book = $user->books()->first(); + +$book->title = 'A Game of Thrones'; +$book->save(); +``` + +You can remove an embedded model by using the `destroy` method on the relation, or the `delete` method on the model (available since release 2.0.0): + +```php +$book->delete(); + +// Similar operation +$user->books()->destroy($book); +``` + +If you want to add or remove an embedded model, without touching the database, you can use the `associate` and `dissociate` methods. + +To eventually write the changes to the database, save the parent object: + +```php +$user->books()->associate($book); +$user->save(); +``` + +Like other relations, embedsMany assumes the local key of the relationship based on the model name. You can override the default local key by passing a second argument to the embedsMany method: + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class User extends Model +{ + public function books() + { + return $this->embedsMany(Book::class, 'local_key'); + } +} +``` + +Embedded relations will return a Collection of embedded items instead of a query builder. Check out the available operations here: https://laravel.com/docs/master/collections \ No newline at end of file diff --git a/docs/v3/guide/relationships/embeds-one-relationship.md b/docs/v3/guide/relationships/embeds-one-relationship.md new file mode 100644 index 000000000..b450755d1 --- /dev/null +++ b/docs/v3/guide/relationships/embeds-one-relationship.md @@ -0,0 +1,52 @@ +# EmbedsOne Relationship + +The embedsOne relation is similar to the embedsMany relation, but only embeds a single model. + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class Book extends Model +{ + public function author() + { + return $this->embedsOne(Author::class); + } +} +``` + +You can access the embedded models through the dynamic property: + +```php +$book = Book::first(); +$author = $book->author; +``` + +Inserting and updating embedded models works similar to the `hasOne` relation: + +```php +$author = $book->author()->save( + new Author(['name' => 'John Doe']) +); + +// Similar +$author = + $book->author() + ->create(['name' => 'John Doe']); +``` + +You can update the embedded model using the `save` method (available since release 2.0.0): + +```php +$author = $book->author; + +$author->name = 'Jane Doe'; +$author->save(); +``` + +You can replace the embedded model with a new model like this: + +```php +$newAuthor = new Author(['name' => 'Jane Doe']); + +$book->author()->save($newAuthor); +``` \ No newline at end of file diff --git a/docs/v3/guide/schema/basic-usage.md b/docs/v3/guide/schema/basic-usage.md new file mode 100644 index 000000000..715058ffa --- /dev/null +++ b/docs/v3/guide/schema/basic-usage.md @@ -0,0 +1,46 @@ +The database driver also has (limited) schema builder support. You can easily manipulate collections and set indexes. + +# Basic Usage + +```php +Schema::create('users', function ($collection) { + $collection->index('name'); + $collection->unique('email'); +}); +``` + +You can also pass all the parameters specified [in the MongoDB docs](https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/#options-for-all-index-types) to the `$options` parameter: + +```php +Schema::create('users', function ($collection) { + $collection->index( + 'username', + null, + null, + [ + 'sparse' => true, + 'unique' => true, + 'background' => true, + ] + ); +}); +``` + +Inherited operations: + +- create and drop +- collection +- hasCollection +- index and dropIndex (compound indexes supported as well) +- unique + +MongoDB specific operations: + +- background +- sparse +- expire +- geospatial + +All other (unsupported) operations are implemented as dummy pass-through methods because MongoDB does not use a predefined schema. + +Read more about the schema builder on [Laravel Docs](https://laravel.com/docs/10.x/migrations#tables) diff --git a/docs/v3/guide/schema/geospatial-indexes.md b/docs/v3/guide/schema/geospatial-indexes.md new file mode 100644 index 000000000..25fc33a2a --- /dev/null +++ b/docs/v3/guide/schema/geospatial-indexes.md @@ -0,0 +1,19 @@ +# Geospatial indexes + +Geospatial indexes are handy for querying location-based documents. + +They come in two forms: `2d` and `2dsphere`. Use the schema builder to add these to a collection. + +```php +Schema::create('bars', function ($collection) { + $collection->geospatial('location', '2d'); +}); +``` + +To add a `2dsphere` index: + +```php +Schema::create('bars', function ($collection) { + $collection->geospatial('location', '2dsphere'); +}); +``` \ No newline at end of file diff --git a/docs/v3/guide/security-contact-information/security-contact-information.md b/docs/v3/guide/security-contact-information/security-contact-information.md new file mode 100644 index 000000000..263101612 --- /dev/null +++ b/docs/v3/guide/security-contact-information/security-contact-information.md @@ -0,0 +1,3 @@ +# Security contact information + +To report a security vulnerability, follow [these steps](https://tidelift.com/security). diff --git a/docs/v3/guide/transactions/basic-usage.md b/docs/v3/guide/transactions/basic-usage.md new file mode 100644 index 000000000..000947050 --- /dev/null +++ b/docs/v3/guide/transactions/basic-usage.md @@ -0,0 +1,47 @@ +# Transactions + +Transactions require MongoDB version ^4.0 as well as deployment of replica set or sharded clusters. You can find more information [in the MongoDB docs](https://docs.mongodb.com/manual/core/transactions/) + +## Basic Usage + +```php +DB::transaction(function () { + User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']); + DB::collection('users')->where('name', 'john')->update(['age' => 20]); + DB::collection('users')->where('name', 'john')->delete(); +}); +``` + +```php +// begin a transaction +DB::beginTransaction(); +User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']); +DB::collection('users')->where('name', 'john')->update(['age' => 20]); +DB::collection('users')->where('name', 'john')->delete(); + +// commit changes +DB::commit(); +``` + +To abort a transaction, call the `rollBack` method at any point during the transaction: + +```php +DB::beginTransaction(); +User::create(['name' => 'john', 'age' => 19, 'title' => 'admin', 'email' => 'john@example.com']); + +// Abort the transaction, discarding any data created as part of it +DB::rollBack(); +``` + +**NOTE:** Transactions in MongoDB cannot be nested. DB::beginTransaction() function will start new transactions in a new created or existing session and will raise the RuntimeException when transactions already exist. See more in MongoDB official docs [Transactions and Sessions](https://www.mongodb.com/docs/manual/core/transactions/#transactions-and-sessions) + +```php +DB::beginTransaction(); +User::create(['name' => 'john', 'age' => 20, 'title' => 'admin']); + +// This call to start a nested transaction will raise a RuntimeException +DB::beginTransaction(); +DB::collection('users')->where('name', 'john')->update(['age' => 20]); +DB::commit(); +DB::rollBack(); +``` \ No newline at end of file diff --git a/docs/v3/guide/upgrading/upgrading-from-version-2-to-3.md b/docs/v3/guide/upgrading/upgrading-from-version-2-to-3.md new file mode 100644 index 000000000..c12cdee90 --- /dev/null +++ b/docs/v3/guide/upgrading/upgrading-from-version-2-to-3.md @@ -0,0 +1,36 @@ +# Upgrading from version 2 to 3 + +In this new major release which supports the new MongoDB PHP extension, we also moved the location of the Model class and replaced the MySQL model class with a trait. + +Please change all `Jenssegers\Mongodb\Model` references to `Jenssegers\Mongodb\Eloquent\Model` either at the top of your model files or your registered alias. + +```php +use Jenssegers\Mongodb\Eloquent\Model; + +class User extends Model +{ + // +} +``` + +If you are using hybrid relations, your MySQL classes should now extend the original Eloquent model class `Illuminate\Database\Eloquent\Model` instead of the removed `Jenssegers\Eloquent\Model`. + +Instead use the new `Jenssegers\Mongodb\Eloquent\HybridRelations` trait. This should make things more clear as there is only one single model class in this package. + +```php +use Jenssegers\Mongodb\Eloquent\HybridRelations; + +class User extends Model +{ + + use HybridRelations; + + protected $connection = 'mysql'; +} +``` + +Embedded relations now return an `Illuminate\Database\Eloquent\Collection` rather than a custom Collection class. If you were using one of the special methods that were available, convert them to Collection operations. + +```php +$books = $user->books()->sortBy('title')->get(); +``` diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 000000000..cfb2b725d --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,623 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz#85ff36b2673654a393c8c505345eaedd6eaa4f70" + integrity sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-preset-algolia@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz#610ee1d887962f230b987cba2fd6556478000bc3" + integrity sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-shared@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz#78aea1140a50c4d193e1f06a13b7f12c5e2cbeea" + integrity sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg== + +"@algolia/cache-browser-local-storage@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.15.0.tgz#84f12aec6b6aa69542a3bfd3a4ba458ed2cc8230" + integrity sha512-uxxFhTWh4JJDb2+FFSmNMfEQ8p9o2vjSpU7iW007QX3OvqljPPN68lk3bpZVaG8pwr5MU1DqpkZ71FcQdVTjgQ== + dependencies: + "@algolia/cache-common" "4.15.0" + +"@algolia/cache-common@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.15.0.tgz#a198098c4b8fa6ef661879ec22d2a2d1ad77d2bb" + integrity sha512-Me3PbI4QurAM+3D+htIE0l1xt6+bl/18SG6Wc7bPQEZAtN7DTGz22HqhKNyLF2lR/cOfpaH7umXZlZEhIHf7gQ== + +"@algolia/cache-in-memory@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.15.0.tgz#77cac4db36a0aa0837f7a7ceb760188191e35268" + integrity sha512-B9mg1wd7CKMfpkbiTQ8KlcKkH6ut/goVaI6XmDCUczOOqeuZlV34tuEi7o3Xo1j66KWr/d9pMjjGYcoVPCVeOA== + dependencies: + "@algolia/cache-common" "4.15.0" + +"@algolia/client-account@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.15.0.tgz#8e0723052169665b4449dc2f8bcf3075feb6a424" + integrity sha512-8wqI33HRZy5ydfFt6F5vMhtkOiAUhVfSCYXx4U3Go5RALqWLgVUp6wzOo0mr1z08POCkHDpbQMQvyayb1CZ/kw== + dependencies: + "@algolia/client-common" "4.15.0" + "@algolia/client-search" "4.15.0" + "@algolia/transporter" "4.15.0" + +"@algolia/client-analytics@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.15.0.tgz#6b8fe450e1bba114b0d0598cbf9acac482798a36" + integrity sha512-jrPjEeNEIIQKeA1XCZXx3f3aybtwF7wjYlnfHbLARuZ9AuHzimOKjX0ZwqvMmvTsHivpcZ2rqY+j1E8HoH1ELA== + dependencies: + "@algolia/client-common" "4.15.0" + "@algolia/client-search" "4.15.0" + "@algolia/requester-common" "4.15.0" + "@algolia/transporter" "4.15.0" + +"@algolia/client-common@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.15.0.tgz#27dd9441aedf481736696d519e55ea8e2f5a4432" + integrity sha512-PlsJMObZuYw4JlG5EhYv1PHDOv7n5mD5PzqFyoNfSOYaEPRZepa3W579ya29yOu3FZ0VGMNJmB7Q5v/+/fwvIw== + dependencies: + "@algolia/requester-common" "4.15.0" + "@algolia/transporter" "4.15.0" + +"@algolia/client-personalization@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.15.0.tgz#6f10eda827d2607ab6c2341464cd35107bf8cf99" + integrity sha512-Bf0bhRAiNL9LWurzyHRH8UBi4fDt3VbCNkInxVngKQT1uCZWXecwoPWGhcSSpdanBqFJA/1WBt+BWx7a50Bhlg== + dependencies: + "@algolia/client-common" "4.15.0" + "@algolia/requester-common" "4.15.0" + "@algolia/transporter" "4.15.0" + +"@algolia/client-search@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.15.0.tgz#2d849faae7943fcc983ac923eac767666a9e6a9a" + integrity sha512-dTwZD4u53WdmexnMcoO2Qd/+YCP3ESXKOtD2MryQ1a9dHwB2Y3Qob0kyS1PG82idwM3enbznvscI9Sf4o9PUWQ== + dependencies: + "@algolia/client-common" "4.15.0" + "@algolia/requester-common" "4.15.0" + "@algolia/transporter" "4.15.0" + +"@algolia/logger-common@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.15.0.tgz#a2cf3d3abbdd00594006164302600ba46d75059f" + integrity sha512-D8OFwn/HpvQz66goIcjxOKsYBMuxiruxJ3cA/bnc0EiDvSA2P2z6bNQWgS5gbstuTZIJmbhr+53NyOxFkmMNAA== + +"@algolia/logger-console@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.15.0.tgz#8a0948b0c16ad546af9dd14b9021f21f42737c97" + integrity sha512-pQOvVaRSEJQJRXKTnxEA6nN1hipSQadJJ4einw0nIlfMOGZh/kps1ybh8vRUlUGyfEuN/3dyFs0W3Ac7hIItlg== + dependencies: + "@algolia/logger-common" "4.15.0" + +"@algolia/requester-browser-xhr@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.15.0.tgz#38b5956d01408ad4291d89915df921ff8534cca6" + integrity sha512-va186EfALF+6msYZXaoBSxcnFCg3SoWJ+uv1yMyhQRJRe7cZSHWSVT3s40vmar90gxlBu80KMVwVlsvJhJv6ew== + dependencies: + "@algolia/requester-common" "4.15.0" + +"@algolia/requester-common@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.15.0.tgz#c68ad3dccc1de71b5be9b08a07e2baf58ec49d82" + integrity sha512-w0UUzxElbo4hrKg4QP/jiXDNbIJuAthxdlkos9nS8KAPK2XI3R9BlUjLz/ZVs4F9TDGI0mhjrNHhZ12KXcoyhg== + +"@algolia/requester-node-http@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.15.0.tgz#02f841586e620c7b4e4e555f315cd52dd815f330" + integrity sha512-eeEOhFtgwKcgAlKAZpgBRZJ0ILSEBCXxZ9uwfVWPD24W1b6z08gVoTJ6J7lCeCnJmudg+tMElDnGzHkjup9CJA== + dependencies: + "@algolia/requester-common" "4.15.0" + +"@algolia/transporter@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.15.0.tgz#c65c512206c66aadc2897337220ae5454001967e" + integrity sha512-JoWR+ixG3EmA0UPntQFN/FV5TasYcYu93d5+oKzHFeZ6Z7rtW5Im9iy/Oh/ggk1AAN5fTdqKewtbBpdaYDbKsQ== + dependencies: + "@algolia/cache-common" "4.15.0" + "@algolia/logger-common" "4.15.0" + "@algolia/requester-common" "4.15.0" + +"@babel/parser@^7.16.4": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3" + integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ== + +"@docsearch/css@3.3.3", "@docsearch/css@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.3.tgz#f9346c9e24602218341f51b8ba91eb9109add434" + integrity sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg== + +"@docsearch/js@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.3.3.tgz#70725a7a8fe92d221fcf0593263b936389d3728f" + integrity sha512-2xAv2GFuHzzmG0SSZgf8wHX0qZX8n9Y1ZirKUk5Wrdc+vH9CL837x2hZIUdwcPZI9caBA+/CzxsS68O4waYjUQ== + dependencies: + "@docsearch/react" "3.3.3" + preact "^10.0.0" + +"@docsearch/react@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.3.tgz#907b6936a565f880b4c0892624b4f7a9f132d298" + integrity sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q== + dependencies: + "@algolia/autocomplete-core" "1.7.4" + "@algolia/autocomplete-preset-algolia" "1.7.4" + "@docsearch/css" "3.3.3" + algoliasearch "^4.0.0" + +"@esbuild/android-arm64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz#15a8e2b407d03989b899e325151dc2e96d19c620" + integrity sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA== + +"@esbuild/android-arm@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.12.tgz#677a09297e1f4f37aba7b4fc4f31088b00484985" + integrity sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ== + +"@esbuild/android-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.12.tgz#b292729eef4e0060ae1941f6a021c4d2542a3521" + integrity sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w== + +"@esbuild/darwin-arm64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz#efa35318df931da05825894e1787b976d55adbe3" + integrity sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg== + +"@esbuild/darwin-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz#e7b54bb3f6dc81aadfd0485cd1623c648157e64d" + integrity sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA== + +"@esbuild/freebsd-arm64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz#99a18a8579d6299c449566fe91d9b6a54cf2a591" + integrity sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ== + +"@esbuild/freebsd-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz#0e090190fede307fb4022f671791a50dd5121abd" + integrity sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw== + +"@esbuild/linux-arm64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz#7fe2a69f8a1a7153fa2b0f44aabcadb59475c7e0" + integrity sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg== + +"@esbuild/linux-arm@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz#b87c76ebf1fe03e01fd6bb5cfc2f3c5becd5ee93" + integrity sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA== + +"@esbuild/linux-ia32@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz#9e9357090254524d32e6708883a47328f3037858" + integrity sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw== + +"@esbuild/linux-loong64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz#9deb605f9e2c82f59412ddfefb4b6b96d54b5b5b" + integrity sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA== + +"@esbuild/linux-mips64el@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz#6ef170b974ddf5e6acdfa5b05f22b6e9dfd2b003" + integrity sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA== + +"@esbuild/linux-ppc64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz#1638d3d4acf1d34aaf37cf8908c2e1cefed16204" + integrity sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A== + +"@esbuild/linux-riscv64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz#135b6e9270a8e2de2b9094bb21a287517df520ef" + integrity sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA== + +"@esbuild/linux-s390x@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz#21e40830770c5d08368e300842bde382ce97d615" + integrity sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g== + +"@esbuild/linux-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz#76c1c199871d48e1aaa47a762fb9e0dca52e1f7a" + integrity sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA== + +"@esbuild/netbsd-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz#c7c3b3017a4b938c76c35f66af529baf62eac527" + integrity sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg== + +"@esbuild/openbsd-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz#05d04217d980e049001afdbeacbb58d31bb5cefb" + integrity sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA== + +"@esbuild/sunos-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz#cf3862521600e4eb6c440ec3bad31ed40fb87ef3" + integrity sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg== + +"@esbuild/win32-arm64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz#43dd7fb5be77bf12a1550355ab2b123efd60868e" + integrity sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg== + +"@esbuild/win32-ia32@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz#9940963d0bff4ea3035a84e2b4c6e41c5e6296eb" + integrity sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng== + +"@esbuild/win32-x64@0.17.12": + version "0.17.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz#3a11d13e9a5b0c05db88991b234d8baba1f96487" + integrity sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw== + +"@types/web-bluetooth@^0.0.16": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" + integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== + +"@vitejs/plugin-vue@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz#b6a9d83cd91575f7ee15593f6444397f68751073" + integrity sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ== + +"@vue/compiler-core@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz#3e07c684d74897ac9aa5922c520741f3029267f8" + integrity sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz#a0b06caf7ef7056939e563dcaa9cbde30794f305" + integrity sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ== + dependencies: + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/compiler-sfc@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d" + integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-ssr" "3.2.47" + "@vue/reactivity-transform" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz#35872c01a273aac4d6070ab9d8da918ab13057ee" + integrity sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw== + dependencies: + "@vue/compiler-dom" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/devtools-api@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" + integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + +"@vue/reactivity-transform@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e" + integrity sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.47.tgz#1d6399074eadfc3ed35c727e2fd707d6881140b6" + integrity sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ== + dependencies: + "@vue/shared" "3.2.47" + +"@vue/runtime-core@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz#406ebade3d5551c00fc6409bbc1eeb10f32e121d" + integrity sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA== + dependencies: + "@vue/reactivity" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/runtime-dom@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz#93e760eeaeab84dedfb7c3eaf3ed58d776299382" + integrity sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA== + dependencies: + "@vue/runtime-core" "3.2.47" + "@vue/shared" "3.2.47" + csstype "^2.6.8" + +"@vue/server-renderer@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz#8aa1d1871fc4eb5a7851aa7f741f8f700e6de3c0" + integrity sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA== + dependencies: + "@vue/compiler-ssr" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/shared@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c" + integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ== + +"@vueuse/core@^9.13.0": + version "9.13.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4" + integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== + dependencies: + "@types/web-bluetooth" "^0.0.16" + "@vueuse/metadata" "9.13.0" + "@vueuse/shared" "9.13.0" + vue-demi "*" + +"@vueuse/metadata@9.13.0": + version "9.13.0" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff" + integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== + +"@vueuse/shared@9.13.0": + version "9.13.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9" + integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== + dependencies: + vue-demi "*" + +algoliasearch@^4.0.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.15.0.tgz#8279576f06667a1d0705e8c22a17daa8e707b469" + integrity sha512-+vgKQF5944dYsz9zhKk07JbOYeNdKisoD5GeG0woBL3nLzbn2a+nGwki60DXg7CXvaFXBcTXyJG4C+VaBVd44g== + dependencies: + "@algolia/cache-browser-local-storage" "4.15.0" + "@algolia/cache-common" "4.15.0" + "@algolia/cache-in-memory" "4.15.0" + "@algolia/client-account" "4.15.0" + "@algolia/client-analytics" "4.15.0" + "@algolia/client-common" "4.15.0" + "@algolia/client-personalization" "4.15.0" + "@algolia/client-search" "4.15.0" + "@algolia/logger-common" "4.15.0" + "@algolia/logger-console" "4.15.0" + "@algolia/requester-browser-xhr" "4.15.0" + "@algolia/requester-common" "4.15.0" + "@algolia/requester-node-http" "4.15.0" + "@algolia/transporter" "4.15.0" + +ansi-sequence-parser@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed" + integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ== + +body-scroll-lock@4.0.0-beta.0: + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e" + integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ== + +csstype@^2.6.8: + version "2.6.21" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== + +esbuild@^0.17.5: + version "0.17.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.12.tgz#2ad7523bf1bc01881e9d904bc04e693bd3bdcf2f" + integrity sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ== + optionalDependencies: + "@esbuild/android-arm" "0.17.12" + "@esbuild/android-arm64" "0.17.12" + "@esbuild/android-x64" "0.17.12" + "@esbuild/darwin-arm64" "0.17.12" + "@esbuild/darwin-x64" "0.17.12" + "@esbuild/freebsd-arm64" "0.17.12" + "@esbuild/freebsd-x64" "0.17.12" + "@esbuild/linux-arm" "0.17.12" + "@esbuild/linux-arm64" "0.17.12" + "@esbuild/linux-ia32" "0.17.12" + "@esbuild/linux-loong64" "0.17.12" + "@esbuild/linux-mips64el" "0.17.12" + "@esbuild/linux-ppc64" "0.17.12" + "@esbuild/linux-riscv64" "0.17.12" + "@esbuild/linux-s390x" "0.17.12" + "@esbuild/linux-x64" "0.17.12" + "@esbuild/netbsd-x64" "0.17.12" + "@esbuild/openbsd-x64" "0.17.12" + "@esbuild/sunos-x64" "0.17.12" + "@esbuild/win32-arm64" "0.17.12" + "@esbuild/win32-ia32" "0.17.12" + "@esbuild/win32-x64" "0.17.12" + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +postcss@^8.1.10, postcss@^8.4.21: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +preact@^10.0.0: + version "10.13.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.13.1.tgz#d220bd8771b8fa197680d4917f3cefc5eed88720" + integrity sha512-KyoXVDU5OqTpG9LXlB3+y639JAGzl8JSBXLn1J9HTSB3gbKcuInga7bZnXLlxmK94ntTs1EFeZp0lrja2AuBYQ== + +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rollup@^3.18.0: + version "3.20.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.20.0.tgz#ce7bd88449a776b9f75bf4e35959e25fbd3f51b1" + integrity sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ== + optionalDependencies: + fsevents "~2.3.2" + +shiki@^0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.1.tgz#9fbe082d0a8aa2ad63df4fbf2ee11ec924aa7ee1" + integrity sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +vite@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.2.1.tgz#6c2eb337b0dfd80a9ded5922163b94949d7fc254" + integrity sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg== + dependencies: + esbuild "^0.17.5" + postcss "^8.4.21" + resolve "^1.22.1" + rollup "^3.18.0" + optionalDependencies: + fsevents "~2.3.2" + +vitepress@^1.0.0-alpha.61: + version "1.0.0-alpha.61" + resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.0.0-alpha.61.tgz#ae916dadbff77051661e4537d9b848c016675681" + integrity sha512-NvzERVS3/TU9YkYcaiK7yNSe0zY9UcSV58tx3mxbvVLCuwRykzO4OWbl6vQT6Ut6YGuZU1y3Z5WcSS+fHfaxJA== + dependencies: + "@docsearch/css" "^3.3.3" + "@docsearch/js" "^3.3.3" + "@vitejs/plugin-vue" "^4.1.0" + "@vue/devtools-api" "^6.5.0" + "@vueuse/core" "^9.13.0" + body-scroll-lock "4.0.0-beta.0" + shiki "^0.14.1" + vite "^4.2.1" + vue "^3.2.47" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + +vue-demi@*: + version "0.13.11" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99" + integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== + +vue@^3.2.47: + version "3.2.47" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.47.tgz#3eb736cbc606fc87038dbba6a154707c8a34cff0" + integrity sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ== + dependencies: + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-sfc" "3.2.47" + "@vue/runtime-dom" "3.2.47" + "@vue/server-renderer" "3.2.47" + "@vue/shared" "3.2.47"