diff --git a/.DS_Store b/.DS_Store index aed1223..11159d7 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 1724730..e2ee1ce 100644 --- a/.gitignore +++ b/.gitignore @@ -13,8 +13,7 @@ pids *.pid.lock # docs -docs - +docs11 # Directory for instrumented libs generated by jscoverage/JSCover lib-cov diff --git a/docs/category/README.md b/category/README.md similarity index 100% rename from docs/category/README.md rename to category/README.md diff --git a/docs/category/about_author.md b/category/about_author.md similarity index 100% rename from docs/category/about_author.md rename to category/about_author.md diff --git a/docs/category/reader_donate.md b/category/reader_donate.md similarity index 100% rename from docs/category/reader_donate.md rename to category/reader_donate.md diff --git a/docs/category/sidebar_contents.js b/category/sidebar_contents.js similarity index 100% rename from docs/category/sidebar_contents.js rename to category/sidebar_contents.js diff --git a/docs/category/test/1.test.md b/category/test/1.test.md similarity index 100% rename from docs/category/test/1.test.md rename to category/test/1.test.md diff --git a/docs/category/update_logs.md b/category/update_logs.md similarity index 100% rename from docs/category/update_logs.md rename to category/update_logs.md diff --git a/docs/.vuepress/.cache/deps/@vue_devtools-api.js b/docs/.vuepress/.cache/deps/@vue_devtools-api.js deleted file mode 100644 index db086ed..0000000 --- a/docs/.vuepress/.cache/deps/@vue_devtools-api.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - isPerformanceSupported, - now, - setupDevtoolsPlugin -} from "./chunk-WT46H2UR.js"; -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// dep:@vue_devtools-api -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -export { - isPerformanceSupported, - now, - setupDevtoolsPlugin -}; -//# sourceMappingURL=@vue_devtools-api.js.map diff --git a/docs/.vuepress/.cache/deps/@vue_devtools-api.js.map b/docs/.vuepress/.cache/deps/@vue_devtools-api.js.map deleted file mode 100644 index 55f7942..0000000 --- a/docs/.vuepress/.cache/deps/@vue_devtools-api.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["dep:@vue_devtools-api"], - "sourcesContent": ["\nexport * from \"../../../../node_modules/@vue/devtools-api/lib/esm/index.js\""], - "mappings": ";;;;;;;;;;;AAAA;AAAA;", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/@vuepress_shared.js b/docs/.vuepress/.cache/deps/@vuepress_shared.js deleted file mode 100644 index d7ef201..0000000 --- a/docs/.vuepress/.cache/deps/@vuepress_shared.js +++ /dev/null @@ -1,258 +0,0 @@ -import { - isArray, - isFunction, - isPromise, - isString -} from "./chunk-SDTWZDHJ.js"; -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// dep:@vuepress_shared -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/index.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/types/index.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/types/head.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/types/locale.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/types/page.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/types/site.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/types/ssr.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/utils/index.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/utils/dedupeHead.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/utils/resolveHeadIdentifier.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var resolveHeadIdentifier = ([tag, attrs, content]) => { - if (tag === "meta" && attrs.name) { - return `${tag}.${attrs.name}`; - } - if (["title", "base"].includes(tag)) { - return tag; - } - if (tag === "template" && attrs.id) { - return `${tag}.${attrs.id}`; - } - return JSON.stringify([tag, attrs, content]); -}; - -// node_modules/@vuepress/shared/lib/esm/utils/dedupeHead.js -var dedupeHead = (head) => { - const identifierSet = /* @__PURE__ */ new Set(); - const result = []; - head.forEach((item) => { - const identifier = resolveHeadIdentifier(item); - if (!identifierSet.has(identifier)) { - identifierSet.add(identifier); - result.push(item); - } - }); - return result; -}; - -// node_modules/@vuepress/shared/lib/esm/utils/ensureLeadingSlash.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var ensureLeadingSlash = (str) => str.replace(/^\/?/, "/"); - -// node_modules/@vuepress/shared/lib/esm/utils/ensureEndingSlash.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var ensureEndingSlash = (str) => /(\.html|\/)$/.test(str) ? str : str + "/"; - -// node_modules/@vuepress/shared/lib/esm/utils/formatDateString.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var formatDateString = (str, defaultDateString = "") => { - const dateMatch = str.match(/\b(\d{4})-(\d{1,2})-(\d{1,2})\b/); - if (dateMatch === null) { - return defaultDateString; - } - const [, yearStr, monthStr, dayStr] = dateMatch; - return [yearStr, monthStr.padStart(2, "0"), dayStr.padStart(2, "0")].join("-"); -}; - -// node_modules/@vuepress/shared/lib/esm/utils/htmlEscape.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var htmlEscapeMap = { - "&": "&", - "<": "<", - ">": ">", - "'": "'", - '"': """ -}; -var htmlEscapeRegexp = /[&<>'"]/g; -var htmlEscape = (str) => str.replace(htmlEscapeRegexp, (char) => htmlEscapeMap[char]); - -// node_modules/@vuepress/shared/lib/esm/utils/htmlUnescape.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var htmlUnescapeMap = { - "&": "&", - "&": "&", - "<": "<", - "<": "<", - ">": ">", - ">": ">", - "'": "'", - "'": "'", - """: '"', - """: '"' -}; -var htmlUnescapeRegexp = /&(amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g; -var htmlUnescape = (str) => str.replace(htmlUnescapeRegexp, (char) => htmlUnescapeMap[char]); - -// node_modules/@vuepress/shared/lib/esm/utils/isLinkExternal.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vuepress/shared/lib/esm/utils/isLinkFtp.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var isLinkFtp = (link) => link.startsWith("ftp://"); - -// node_modules/@vuepress/shared/lib/esm/utils/isLinkHttp.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var isLinkHttp = (link) => /^(https?:)?\/\//.test(link); - -// node_modules/@vuepress/shared/lib/esm/utils/isLinkExternal.js -var isLinkExternal = (link, base = "/") => { - if (isLinkHttp(link) || isLinkFtp(link)) { - return true; - } - if (link.startsWith("/") && !link.startsWith(base)) { - return true; - } - return false; -}; - -// node_modules/@vuepress/shared/lib/esm/utils/isLinkMailto.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var isLinkMailto = (link) => /^mailto:/.test(link); - -// node_modules/@vuepress/shared/lib/esm/utils/isLinkTel.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var isLinkTel = (link) => /^tel:/.test(link); - -// node_modules/@vuepress/shared/lib/esm/utils/isPlainObject.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var isPlainObject = (val) => Object.prototype.toString.call(val) === "[object Object]"; - -// node_modules/@vuepress/shared/lib/esm/utils/normalizePackageName.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var normalizePackageName = (request, org, type = null) => { - const orgPrefix = `${org}-`; - const typePrefix = type === null ? "" : `${type}-`; - const scopedMatch = request.match(/^@(.*)\/(.*)$/); - if (scopedMatch === null) { - if (request.startsWith(`${orgPrefix}${typePrefix}`)) { - return request; - } - return `${orgPrefix}${typePrefix}${request}`; - } - const [, reqOrg, reqName] = scopedMatch; - if (reqOrg === org) { - if (reqName.startsWith(typePrefix)) { - return request; - } - return `@${reqOrg}/${typePrefix}${reqName}`; - } - if (reqName.startsWith(`${orgPrefix}${typePrefix}`)) { - return request; - } - return `@${reqOrg}/${orgPrefix}${typePrefix}${reqName}`; -}; - -// node_modules/@vuepress/shared/lib/esm/utils/removeEndingSlash.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var removeEndingSlash = (str) => str.replace(/\/$/, ""); - -// node_modules/@vuepress/shared/lib/esm/utils/removeLeadingSlash.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var removeLeadingSlash = (str) => str.replace(/^\//, ""); - -// node_modules/@vuepress/shared/lib/esm/utils/resolveLocalePath.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var resolveLocalePath = (locales, routePath) => { - const localePaths = Object.keys(locales).sort((a, b) => { - const levelDelta = b.split("/").length - a.split("/").length; - if (levelDelta !== 0) { - return levelDelta; - } - return b.length - a.length; - }); - for (const localePath of localePaths) { - if (routePath.startsWith(localePath)) { - return localePath; - } - } - return "/"; -}; - -// node_modules/@vuepress/shared/lib/esm/utils/resolveRoutePathFromUrl.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var resolveRoutePathFromUrl = (url, base = "/") => url.replace(/^(https?:)?\/\/[^/]*/, "").replace(new RegExp(`^${base}`), "/"); -export { - dedupeHead, - ensureEndingSlash, - ensureLeadingSlash, - formatDateString, - htmlEscape, - htmlUnescape, - isArray, - isFunction, - isLinkExternal, - isLinkFtp, - isLinkHttp, - isLinkMailto, - isLinkTel, - isPlainObject, - isPromise, - isString, - normalizePackageName, - removeEndingSlash, - removeLeadingSlash, - resolveHeadIdentifier, - resolveLocalePath, - resolveRoutePathFromUrl -}; -//# sourceMappingURL=@vuepress_shared.js.map diff --git a/docs/.vuepress/.cache/deps/@vuepress_shared.js.map b/docs/.vuepress/.cache/deps/@vuepress_shared.js.map deleted file mode 100644 index ae72b70..0000000 --- a/docs/.vuepress/.cache/deps/@vuepress_shared.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["dep:@vuepress_shared", "../../../../node_modules/@vuepress/shared/lib/esm/index.js", "../../../../node_modules/@vuepress/shared/lib/esm/types/index.js", "../../../../node_modules/@vuepress/shared/lib/esm/types/head.js", "../../../../node_modules/@vuepress/shared/lib/esm/types/locale.js", "../../../../node_modules/@vuepress/shared/lib/esm/types/page.js", "../../../../node_modules/@vuepress/shared/lib/esm/types/site.js", "../../../../node_modules/@vuepress/shared/lib/esm/types/ssr.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/index.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/dedupeHead.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/resolveHeadIdentifier.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/ensureLeadingSlash.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/ensureEndingSlash.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/formatDateString.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/htmlEscape.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/htmlUnescape.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/isLinkExternal.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/isLinkFtp.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/isLinkHttp.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/isLinkMailto.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/isLinkTel.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/isPlainObject.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/normalizePackageName.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/removeEndingSlash.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/removeLeadingSlash.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/resolveLocalePath.js", "../../../../node_modules/@vuepress/shared/lib/esm/utils/resolveRoutePathFromUrl.js"], - "sourcesContent": ["\nexport * from \"../../../../node_modules/@vuepress/shared/lib/esm/index.js\"", "export * from './types';\nexport * from './utils';\n", "export * from './head';\nexport * from './locale';\nexport * from './page';\nexport * from './site';\nexport * from './ssr';\n", "export {};\n", "export {};\n", "export {};\n", "export {};\n", "export {};\n", "export { isArray, isFunction, isPromise, isString } from '@vue/shared';\nexport * from './dedupeHead';\nexport * from './ensureLeadingSlash';\nexport * from './ensureEndingSlash';\nexport * from './formatDateString';\nexport * from './htmlEscape';\nexport * from './htmlUnescape';\nexport * from './isLinkExternal';\nexport * from './isLinkFtp';\nexport * from './isLinkHttp';\nexport * from './isLinkMailto';\nexport * from './isLinkTel';\nexport * from './isPlainObject';\nexport * from './normalizePackageName';\nexport * from './removeEndingSlash';\nexport * from './removeLeadingSlash';\nexport * from './resolveHeadIdentifier';\nexport * from './resolveLocalePath';\nexport * from './resolveRoutePathFromUrl';\n", "import { resolveHeadIdentifier } from './resolveHeadIdentifier';\n/**\n * Dedupe head config with identifier\n *\n * Items that appear earlier have higher priority\n */\nexport const dedupeHead = (head) => {\n const identifierSet = new Set();\n const result = [];\n head.forEach((item) => {\n const identifier = resolveHeadIdentifier(item);\n if (!identifierSet.has(identifier)) {\n identifierSet.add(identifier);\n result.push(item);\n }\n });\n return result;\n};\n", "/**\n * Resolve identifier of a tag, to avoid duplicated tags in ``\n */\nexport const resolveHeadIdentifier = ([tag, attrs, content,]) => {\n // avoid duplicated `` with same `name`\n if (tag === 'meta' && attrs.name) {\n return `${tag}.${attrs.name}`;\n }\n // there should be only one `` or `<base>`\n if (['title', 'base'].includes(tag)) {\n return tag;\n }\n // avoid duplicated `<template>` with same `id`\n if (tag === 'template' && attrs.id) {\n return `${tag}.${attrs.id}`;\n }\n return JSON.stringify([tag, attrs, content]);\n};\n", "/**\n * Ensure a url string to have leading slash /\n */\nexport const ensureLeadingSlash = (str) => str.replace(/^\\/?/, '/');\n", "/**\n * Ensure a url string to have ending slash /\n */\nexport const ensureEndingSlash = (str) => /(\\.html|\\/)$/.test(str) ? str : str + '/';\n", "/**\n * Format a date string to `yyyy-MM-dd`\n */\nexport const formatDateString = (str, defaultDateString = '') => {\n // match the `yyyy-(M)M-(d)d` pattern\n const dateMatch = str.match(/\\b(\\d{4})-(\\d{1,2})-(\\d{1,2})\\b/);\n // return `defaultDateString` if no matched pattern\n if (dateMatch === null) {\n return defaultDateString;\n }\n // fill leading zeros for month and day\n const [, yearStr, monthStr, dayStr] = dateMatch;\n return [yearStr, monthStr.padStart(2, '0'), dayStr.padStart(2, '0')].join('-');\n};\n", "const htmlEscapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"',\n};\nconst htmlEscapeRegexp = /[&<>'\"]/g;\n/**\n * Escape html chars\n */\nexport const htmlEscape = (str) => str.replace(htmlEscapeRegexp, (char) => htmlEscapeMap[char]);\n", "const htmlUnescapeMap = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n};\nconst htmlUnescapeRegexp = /&(amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\n/**\n * Unescape html chars\n */\nexport const htmlUnescape = (str) => str.replace(htmlUnescapeRegexp, (char) => htmlUnescapeMap[char]);\n", "import { isLinkFtp } from './isLinkFtp';\nimport { isLinkHttp } from './isLinkHttp';\n/**\n * Determine a link is external or not\n */\nexport const isLinkExternal = (link, base = '/') => {\n // http link or ftp link\n if (isLinkHttp(link) || isLinkFtp(link)) {\n return true;\n }\n // absolute link that does not start with `base`\n if (link.startsWith('/') && !link.startsWith(base)) {\n return true;\n }\n return false;\n};\n", "/**\n * Determine a link is ftp link or not\n */\nexport const isLinkFtp = (link) => link.startsWith('ftp://');\n", "/**\n * Determine a link is http link or not\n *\n * - http://github.com\n * - https://github.com\n * - //github.com\n */\nexport const isLinkHttp = (link) => /^(https?:)?\\/\\//.test(link);\n", "/**\n * Determine a link is a mailto: address or not\n */\nexport const isLinkMailto = (link) => /^mailto:/.test(link);\n", "/**\n * Determine a link is a tel: address or not\n */\nexport const isLinkTel = (link) => /^tel:/.test(link);\n", "/**\n * Check if a value is plain object, with generic type support\n */\nexport const isPlainObject = (val) => Object.prototype.toString.call(val) === '[object Object]';\n", "/**\n * Normalize package name\n */\nexport const normalizePackageName = (request, org, type = null) => {\n // org prefix and type prefix\n const orgPrefix = `${org}-`;\n const typePrefix = type === null ? '' : `${type}-`;\n // scoped package pattern\n const scopedMatch = request.match(/^@(.*)\\/(.*)$/);\n // handle non-scoped package\n if (scopedMatch === null) {\n // full name, return as is\n if (request.startsWith(`${orgPrefix}${typePrefix}`)) {\n return request;\n }\n // short name, add org prefix and type prefix\n return `${orgPrefix}${typePrefix}${request}`;\n }\n // handle scoped package\n const [, reqOrg, reqName] = scopedMatch;\n // handle default org\n if (reqOrg === org) {\n // full name, return as is\n if (reqName.startsWith(typePrefix)) {\n return request;\n }\n // short name, add type prefix\n return `@${reqOrg}/${typePrefix}${reqName}`;\n }\n // handle other org\n // full name, return as is\n if (reqName.startsWith(`${orgPrefix}${typePrefix}`)) {\n return request;\n }\n // short name, add org prefix and type prefix\n return `@${reqOrg}/${orgPrefix}${typePrefix}${reqName}`;\n};\n", "/**\n * Remove ending slash / from a string\n */\nexport const removeEndingSlash = (str) => str.replace(/\\/$/, '');\n", "/**\n * Remove leading slash / from a string\n */\nexport const removeLeadingSlash = (str) => str.replace(/^\\//, '');\n", "/**\n * Resolve the matched locale path of route path\n */\nexport const resolveLocalePath = (locales, routePath) => {\n const localePaths = Object.keys(locales).sort((a, b) => {\n const levelDelta = b.split('/').length - a.split('/').length;\n if (levelDelta !== 0) {\n return levelDelta;\n }\n return b.length - a.length;\n });\n for (const localePath of localePaths) {\n if (routePath.startsWith(localePath)) {\n return localePath;\n }\n }\n return '/';\n};\n", "export const resolveRoutePathFromUrl = (url, base = '/') => url\n // remove url origin\n .replace(/^(https?:)?\\/\\/[^/]*/, '')\n // remove site base\n .replace(new RegExp(`^${base}`), '/');\n"], - "mappings": ";;;;;;;;;;;;AAAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;;;ACAA;AAAA;AAGO,IAAM,wBAAwB,CAAC,CAAC,KAAK,OAAO,aAAc;AAE7D,MAAI,QAAQ,UAAU,MAAM,MAAM;AAC9B,WAAO,GAAG,OAAO,MAAM;AAAA,EAC3B;AAEA,MAAI,CAAC,SAAS,MAAM,EAAE,SAAS,GAAG,GAAG;AACjC,WAAO;AAAA,EACX;AAEA,MAAI,QAAQ,cAAc,MAAM,IAAI;AAChC,WAAO,GAAG,OAAO,MAAM;AAAA,EAC3B;AACA,SAAO,KAAK,UAAU,CAAC,KAAK,OAAO,OAAO,CAAC;AAC/C;;;ADXO,IAAM,aAAa,CAAC,SAAS;AAChC,QAAM,gBAAgB,oBAAI,IAAI;AAC9B,QAAM,SAAS,CAAC;AAChB,OAAK,QAAQ,CAAC,SAAS;AACnB,UAAM,aAAa,sBAAsB,IAAI;AAC7C,QAAI,CAAC,cAAc,IAAI,UAAU,GAAG;AAChC,oBAAc,IAAI,UAAU;AAC5B,aAAO,KAAK,IAAI;AAAA,IACpB;AAAA,EACJ,CAAC;AACD,SAAO;AACX;;;AEjBA;AAAA;AAGO,IAAM,qBAAqB,CAAC,QAAQ,IAAI,QAAQ,QAAQ,GAAG;;;ACHlE;AAAA;AAGO,IAAM,oBAAoB,CAAC,QAAQ,eAAe,KAAK,GAAG,IAAI,MAAM,MAAM;;;ACHjF;AAAA;AAGO,IAAM,mBAAmB,CAAC,KAAK,oBAAoB,OAAO;AAE7D,QAAM,YAAY,IAAI,MAAM,iCAAiC;AAE7D,MAAI,cAAc,MAAM;AACpB,WAAO;AAAA,EACX;AAEA,QAAM,CAAC,EAAE,SAAS,UAAU,UAAU;AACtC,SAAO,CAAC,SAAS,SAAS,SAAS,GAAG,GAAG,GAAG,OAAO,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG;AACjF;;;ACbA;AAAA;AAAA,IAAM,gBAAgB;AAAA,EAClB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACT;AACA,IAAM,mBAAmB;AAIlB,IAAM,aAAa,CAAC,QAAQ,IAAI,QAAQ,kBAAkB,CAAC,SAAS,cAAc,KAAK;;;ACX9F;AAAA;AAAA,IAAM,kBAAkB;AAAA,EACpB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AACb;AACA,IAAM,qBAAqB;AAIpB,IAAM,eAAe,CAAC,QAAQ,IAAI,QAAQ,oBAAoB,CAAC,SAAS,gBAAgB,KAAK;;;AChBpG;AAAA;;;ACAA;AAAA;AAGO,IAAM,YAAY,CAAC,SAAS,KAAK,WAAW,QAAQ;;;ACH3D;AAAA;AAOO,IAAM,aAAa,CAAC,SAAS,kBAAkB,KAAK,IAAI;;;AFFxD,IAAM,iBAAiB,CAAC,MAAM,OAAO,QAAQ;AAEhD,MAAI,WAAW,IAAI,KAAK,UAAU,IAAI,GAAG;AACrC,WAAO;AAAA,EACX;AAEA,MAAI,KAAK,WAAW,GAAG,KAAK,CAAC,KAAK,WAAW,IAAI,GAAG;AAChD,WAAO;AAAA,EACX;AACA,SAAO;AACX;;;AGfA;AAAA;AAGO,IAAM,eAAe,CAAC,SAAS,WAAW,KAAK,IAAI;;;ACH1D;AAAA;AAGO,IAAM,YAAY,CAAC,SAAS,QAAQ,KAAK,IAAI;;;ACHpD;AAAA;AAGO,IAAM,gBAAgB,CAAC,QAAQ,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;;;ACH9E;AAAA;AAGO,IAAM,uBAAuB,CAAC,SAAS,KAAK,OAAO,SAAS;AAE/D,QAAM,YAAY,GAAG;AACrB,QAAM,aAAa,SAAS,OAAO,KAAK,GAAG;AAE3C,QAAM,cAAc,QAAQ,MAAM,eAAe;AAEjD,MAAI,gBAAgB,MAAM;AAEtB,QAAI,QAAQ,WAAW,GAAG,YAAY,YAAY,GAAG;AACjD,aAAO;AAAA,IACX;AAEA,WAAO,GAAG,YAAY,aAAa;AAAA,EACvC;AAEA,QAAM,CAAC,EAAE,QAAQ,WAAW;AAE5B,MAAI,WAAW,KAAK;AAEhB,QAAI,QAAQ,WAAW,UAAU,GAAG;AAChC,aAAO;AAAA,IACX;AAEA,WAAO,IAAI,UAAU,aAAa;AAAA,EACtC;AAGA,MAAI,QAAQ,WAAW,GAAG,YAAY,YAAY,GAAG;AACjD,WAAO;AAAA,EACX;AAEA,SAAO,IAAI,UAAU,YAAY,aAAa;AAClD;;;ACpCA;AAAA;AAGO,IAAM,oBAAoB,CAAC,QAAQ,IAAI,QAAQ,OAAO,EAAE;;;ACH/D;AAAA;AAGO,IAAM,qBAAqB,CAAC,QAAQ,IAAI,QAAQ,OAAO,EAAE;;;ACHhE;AAAA;AAGO,IAAM,oBAAoB,CAAC,SAAS,cAAc;AACrD,QAAM,cAAc,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACpD,UAAM,aAAa,EAAE,MAAM,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE;AACtD,QAAI,eAAe,GAAG;AAClB,aAAO;AAAA,IACX;AACA,WAAO,EAAE,SAAS,EAAE;AAAA,EACxB,CAAC;AACD,aAAW,cAAc,aAAa;AAClC,QAAI,UAAU,WAAW,UAAU,GAAG;AAClC,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;;;ACjBA;AAAA;AAAO,IAAM,0BAA0B,CAAC,KAAK,OAAO,QAAQ,IAEvD,QAAQ,wBAAwB,EAAE,EAElC,QAAQ,IAAI,OAAO,IAAI,MAAM,GAAG,GAAG;", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/@vueuse_core.js b/docs/.vuepress/.cache/deps/@vueuse_core.js deleted file mode 100644 index 12e2452..0000000 --- a/docs/.vuepress/.cache/deps/@vueuse_core.js +++ /dev/null @@ -1,6875 +0,0 @@ -import { - computed, - customRef, - effectScope, - getCurrentInstance, - getCurrentScope, - inject, - isRef, - markRaw, - nextTick, - onBeforeMount, - onBeforeUnmount, - onBeforeUpdate, - onMounted, - onScopeDispose, - onUnmounted, - onUpdated, - provide, - reactive, - readonly, - ref, - shallowRef, - toRef, - toRefs, - unref, - watch, - watchEffect -} from "./chunk-J5QUGD5J.js"; -import "./chunk-SDTWZDHJ.js"; -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// dep:@vueuse_core -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vueuse/core/index.mjs -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vueuse/shared/index.mjs -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/vue-demi/lib/index.mjs -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var isVue2 = false; -var isVue3 = true; -function set(target, key, val) { - if (Array.isArray(target)) { - target.length = Math.max(target.length, key); - target.splice(key, 1, val); - return val; - } - target[key] = val; - return val; -} -function del(target, key) { - if (Array.isArray(target)) { - target.splice(key, 1); - return; - } - delete target[key]; -} - -// node_modules/@vueuse/shared/index.mjs -var __defProp$8 = Object.defineProperty; -var __defProps$5 = Object.defineProperties; -var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$a = Object.getOwnPropertySymbols; -var __hasOwnProp$a = Object.prototype.hasOwnProperty; -var __propIsEnum$a = Object.prototype.propertyIsEnumerable; -var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$8 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$a.call(b, prop)) - __defNormalProp$8(a, prop, b[prop]); - if (__getOwnPropSymbols$a) - for (var prop of __getOwnPropSymbols$a(b)) { - if (__propIsEnum$a.call(b, prop)) - __defNormalProp$8(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b)); -function computedEager(fn, options) { - var _a2; - const result = shallowRef(); - watchEffect(() => { - result.value = fn(); - }, __spreadProps$5(__spreadValues$8({}, options), { - flush: (_a2 = options == null ? void 0 : options.flush) != null ? _a2 : "sync" - })); - return readonly(result); -} -function computedWithControl(source, fn) { - let v = void 0; - let track; - let trigger; - const dirty = ref(true); - watch(source, () => { - dirty.value = true; - trigger(); - }, { flush: "sync" }); - return customRef((_track, _trigger) => { - track = _track; - trigger = _trigger; - return { - get() { - if (dirty.value) { - v = fn(); - dirty.value = false; - } - track(); - return v; - }, - set() { - } - }; - }); -} -function createEventHook() { - const fns = []; - const off = (fn) => { - const index = fns.indexOf(fn); - if (index !== -1) - fns.splice(index, 1); - }; - const on = (fn) => { - fns.push(fn); - return { - off: () => off(fn) - }; - }; - const trigger = (param) => { - fns.forEach((fn) => fn(param)); - }; - return { - on, - off, - trigger - }; -} -function createGlobalState(stateFactory) { - let initialized = false; - let state; - const scope = effectScope(true); - return () => { - if (!initialized) { - state = scope.run(stateFactory); - initialized = true; - } - return state; - }; -} -function createInjectionState(composable) { - const key = Symbol("InjectionState"); - const useProvidingState = (...args) => { - provide(key, composable(...args)); - }; - const useInjectedState = () => inject(key); - return [useProvidingState, useInjectedState]; -} -function tryOnScopeDispose(fn) { - if (getCurrentScope()) { - onScopeDispose(fn); - return true; - } - return false; -} -function createSharedComposable(composable) { - let subscribers = 0; - let state; - let scope; - const dispose = () => { - subscribers -= 1; - if (scope && subscribers <= 0) { - scope.stop(); - state = void 0; - scope = void 0; - } - }; - return (...args) => { - subscribers += 1; - if (!state) { - scope = effectScope(true); - state = scope.run(() => composable(...args)); - } - tryOnScopeDispose(dispose); - return state; - }; -} -function __onlyVue3(name = "this function") { - if (isVue3) - return; - throw new Error(`[VueUse] ${name} is only works on Vue 3.`); -} -var directiveHooks = { - mounted: isVue3 ? "mounted" : "inserted", - updated: isVue3 ? "updated" : "componentUpdated", - unmounted: isVue3 ? "unmounted" : "unbind" -}; -function extendRef(ref2, extend, { enumerable = false, unwrap = true } = {}) { - __onlyVue3(); - for (const [key, value] of Object.entries(extend)) { - if (key === "value") - continue; - if (isRef(value) && unwrap) { - Object.defineProperty(ref2, key, { - get() { - return value.value; - }, - set(v) { - value.value = v; - }, - enumerable - }); - } else { - Object.defineProperty(ref2, key, { value, enumerable }); - } - } - return ref2; -} -function get(obj, key) { - if (key == null) - return unref(obj); - return unref(obj)[key]; -} -function isDefined(v) { - return unref(v) != null; -} -function logicAnd(...args) { - return computed(() => args.every((i) => unref(i))); -} -function logicNot(v) { - return computed(() => !unref(v)); -} -function logicOr(...args) { - return computed(() => args.some((i) => unref(i))); -} -var __defProp$7 = Object.defineProperty; -var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols; -var __hasOwnProp$9 = Object.prototype.hasOwnProperty; -var __propIsEnum$9 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$7 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$9.call(b, prop)) - __defNormalProp$7(a, prop, b[prop]); - if (__getOwnPropSymbols$9) - for (var prop of __getOwnPropSymbols$9(b)) { - if (__propIsEnum$9.call(b, prop)) - __defNormalProp$7(a, prop, b[prop]); - } - return a; -}; -function makeDestructurable(obj, arr) { - if (typeof Symbol !== "undefined") { - const clone = __spreadValues$7({}, obj); - Object.defineProperty(clone, Symbol.iterator, { - enumerable: false, - value() { - let index = 0; - return { - next: () => ({ - value: arr[index++], - done: index > arr.length - }) - }; - } - }); - return clone; - } else { - return Object.assign([...arr], obj); - } -} -function reactify(fn) { - return function(...args) { - return computed(() => fn.apply(this, args.map((i) => unref(i)))); - }; -} -function reactifyObject(obj, optionsOrKeys = {}) { - let keys2 = []; - if (Array.isArray(optionsOrKeys)) { - keys2 = optionsOrKeys; - } else { - const { includeOwnProperties = true } = optionsOrKeys; - keys2.push(...Object.keys(obj)); - if (includeOwnProperties) - keys2.push(...Object.getOwnPropertyNames(obj)); - } - return Object.fromEntries(keys2.map((key) => { - const value = obj[key]; - return [ - key, - typeof value === "function" ? reactify(value.bind(obj)) : value - ]; - })); -} -function toReactive(objectRef) { - if (!isRef(objectRef)) - return reactive(objectRef); - const proxy = new Proxy({}, { - get(_, p, receiver) { - return unref(Reflect.get(objectRef.value, p, receiver)); - }, - set(_, p, value) { - if (isRef(objectRef.value[p]) && !isRef(value)) - objectRef.value[p].value = value; - else - objectRef.value[p] = value; - return true; - }, - deleteProperty(_, p) { - return Reflect.deleteProperty(objectRef.value, p); - }, - has(_, p) { - return Reflect.has(objectRef.value, p); - }, - ownKeys() { - return Object.keys(objectRef.value); - }, - getOwnPropertyDescriptor() { - return { - enumerable: true, - configurable: true - }; - } - }); - return reactive(proxy); -} -function reactiveComputed(fn) { - return toReactive(computed(fn)); -} -function reactiveOmit(obj, ...keys2) { - return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs(obj)).filter((e) => !keys2.includes(e[0])))); -} -function reactivePick(obj, ...keys2) { - return reactive(Object.fromEntries(keys2.map((k) => [k, toRef(obj, k)]))); -} -function refAutoReset(defaultValue, afterMs = 1e4) { - return customRef((track, trigger) => { - let value = defaultValue; - let timer; - const resetAfter = () => setTimeout(() => { - value = defaultValue; - trigger(); - }, unref(afterMs)); - return { - get() { - track(); - return value; - }, - set(newValue) { - value = newValue; - trigger(); - clearTimeout(timer); - timer = resetAfter(); - } - }; - }); -} -var isClient = typeof window !== "undefined"; -var isDef = (val) => typeof val !== "undefined"; -var assert = (condition, ...infos) => { - if (!condition) - console.warn(...infos); -}; -var toString = Object.prototype.toString; -var isBoolean = (val) => typeof val === "boolean"; -var isFunction = (val) => typeof val === "function"; -var isNumber = (val) => typeof val === "number"; -var isString = (val) => typeof val === "string"; -var isObject = (val) => toString.call(val) === "[object Object]"; -var isWindow = (val) => typeof window !== "undefined" && toString.call(val) === "[object Window]"; -var now = () => Date.now(); -var timestamp = () => +Date.now(); -var clamp = (n, min, max) => Math.min(max, Math.max(min, n)); -var noop = () => { -}; -var rand = (min, max) => { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min + 1)) + min; -}; -function createFilterWrapper(filter, fn) { - function wrapper(...args) { - filter(() => fn.apply(this, args), { fn, thisArg: this, args }); - } - return wrapper; -} -var bypassFilter = (invoke2) => { - return invoke2(); -}; -function debounceFilter(ms, options = {}) { - let timer; - let maxTimer; - const filter = (invoke2) => { - const duration = unref(ms); - const maxDuration = unref(options.maxWait); - if (timer) - clearTimeout(timer); - if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { - if (maxTimer) { - clearTimeout(maxTimer); - maxTimer = null; - } - return invoke2(); - } - if (maxDuration && !maxTimer) { - maxTimer = setTimeout(() => { - if (timer) - clearTimeout(timer); - maxTimer = null; - invoke2(); - }, maxDuration); - } - timer = setTimeout(() => { - if (maxTimer) - clearTimeout(maxTimer); - maxTimer = null; - invoke2(); - }, duration); - }; - return filter; -} -function throttleFilter(ms, trailing = true, leading = true) { - let lastExec = 0; - let timer; - let preventLeading = !leading; - const clear = () => { - if (timer) { - clearTimeout(timer); - timer = void 0; - } - }; - const filter = (invoke2) => { - const duration = unref(ms); - const elapsed = Date.now() - lastExec; - clear(); - if (duration <= 0) { - lastExec = Date.now(); - return invoke2(); - } - if (elapsed > duration) { - lastExec = Date.now(); - if (preventLeading) - preventLeading = false; - else - invoke2(); - } - if (trailing) { - timer = setTimeout(() => { - lastExec = Date.now(); - if (!leading) - preventLeading = true; - clear(); - invoke2(); - }, duration); - } - if (!leading && !timer) - timer = setTimeout(() => preventLeading = true, duration); - }; - return filter; -} -function pausableFilter(extendFilter = bypassFilter) { - const isActive = ref(true); - function pause() { - isActive.value = false; - } - function resume() { - isActive.value = true; - } - const eventFilter = (...args) => { - if (isActive.value) - extendFilter(...args); - }; - return { isActive, pause, resume, eventFilter }; -} -function promiseTimeout(ms, throwOnTimeout = false, reason = "Timeout") { - return new Promise((resolve, reject) => { - if (throwOnTimeout) - setTimeout(() => reject(reason), ms); - else - setTimeout(resolve, ms); - }); -} -function identity(arg) { - return arg; -} -function createSingletonPromise(fn) { - let _promise; - function wrapper() { - if (!_promise) - _promise = fn(); - return _promise; - } - wrapper.reset = async () => { - const _prev = _promise; - _promise = void 0; - if (_prev) - await _prev; - }; - return wrapper; -} -function invoke(fn) { - return fn(); -} -function containsProp(obj, ...props) { - return props.some((k) => k in obj); -} -function increaseWithUnit(target, delta) { - var _a2; - if (typeof target === "number") - return target + delta; - const value = ((_a2 = target.match(/^-?[0-9]+\.?[0-9]*/)) == null ? void 0 : _a2[0]) || ""; - const unit = target.slice(value.length); - const result = parseFloat(value) + delta; - if (Number.isNaN(result)) - return target; - return result + unit; -} -function objectPick(obj, keys2, omitUndefined = false) { - return keys2.reduce((n, k) => { - if (k in obj) { - if (!omitUndefined || !obj[k] === void 0) - n[k] = obj[k]; - } - return n; - }, {}); -} -function useDebounceFn(fn, ms = 200, options = {}) { - return createFilterWrapper(debounceFilter(ms, options), fn); -} -function refDebounced(value, ms = 200, options = {}) { - if (ms <= 0) - return value; - const debounced = ref(value.value); - const updater = useDebounceFn(() => { - debounced.value = value.value; - }, ms, options); - watch(value, () => updater()); - return debounced; -} -function refDefault(source, defaultValue) { - return computed({ - get() { - var _a2; - return (_a2 = source.value) != null ? _a2 : defaultValue; - }, - set(value) { - source.value = value; - } - }); -} -function useThrottleFn(fn, ms = 200, trailing = true, leading = true) { - return createFilterWrapper(throttleFilter(ms, trailing, leading), fn); -} -function refThrottled(value, delay = 200, trailing = true, leading = true) { - if (delay <= 0) - return value; - const throttled = ref(value.value); - const updater = useThrottleFn(() => { - throttled.value = value.value; - }, delay, trailing, leading); - watch(value, () => updater()); - return throttled; -} -function refWithControl(initial, options = {}) { - let source = initial; - let track; - let trigger; - const ref2 = customRef((_track, _trigger) => { - track = _track; - trigger = _trigger; - return { - get() { - return get2(); - }, - set(v) { - set3(v); - } - }; - }); - function get2(tracking = true) { - if (tracking) - track(); - return source; - } - function set3(value, triggering = true) { - var _a2, _b2; - if (value === source) - return; - const old = source; - if (((_a2 = options.onBeforeChange) == null ? void 0 : _a2.call(options, value, old)) === false) - return; - source = value; - (_b2 = options.onChanged) == null ? void 0 : _b2.call(options, value, old); - if (triggering) - trigger(); - } - const untrackedGet = () => get2(false); - const silentSet = (v) => set3(v, false); - const peek = () => get2(false); - const lay = (v) => set3(v, false); - return extendRef(ref2, { - get: get2, - set: set3, - untrackedGet, - silentSet, - peek, - lay - }, { enumerable: true }); -} -var controlledRef = refWithControl; -function set2(...args) { - if (args.length === 2) { - const [ref2, value] = args; - ref2.value = value; - } - if (args.length === 3) { - if (isVue2) { - set(...args); - } else { - const [target, key, value] = args; - target[key] = value; - } - } -} -function syncRef(left, right, options = {}) { - const { - flush = "sync", - deep = false, - immediate = true, - direction = "both" - } = options; - let stop1, stop2; - if (direction === "both" || direction === "ltr") { - stop1 = watch(left, (newValue) => right.value = newValue, { flush, deep, immediate }); - } - if (direction === "both" || direction === "rtl") { - stop2 = watch(right, (newValue) => left.value = newValue, { flush, deep, immediate }); - } - return () => { - stop1 == null ? void 0 : stop1(); - stop2 == null ? void 0 : stop2(); - }; -} -function syncRefs(source, targets, options = {}) { - const { - flush = "sync", - deep = false, - immediate = true - } = options; - if (!Array.isArray(targets)) - targets = [targets]; - return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate }); -} -var __defProp$6 = Object.defineProperty; -var __defProps$4 = Object.defineProperties; -var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols; -var __hasOwnProp$8 = Object.prototype.hasOwnProperty; -var __propIsEnum$8 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$6 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$8.call(b, prop)) - __defNormalProp$6(a, prop, b[prop]); - if (__getOwnPropSymbols$8) - for (var prop of __getOwnPropSymbols$8(b)) { - if (__propIsEnum$8.call(b, prop)) - __defNormalProp$6(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b)); -function toRefs2(objectRef) { - if (!isRef(objectRef)) - return toRefs(objectRef); - const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {}; - for (const key in objectRef.value) { - result[key] = customRef(() => ({ - get() { - return objectRef.value[key]; - }, - set(v) { - if (Array.isArray(objectRef.value)) { - const copy = [...objectRef.value]; - copy[key] = v; - objectRef.value = copy; - } else { - objectRef.value = __spreadProps$4(__spreadValues$6({}, objectRef.value), { [key]: v }); - } - } - })); - } - return result; -} -function tryOnBeforeMount(fn, sync = true) { - if (getCurrentInstance()) - onBeforeMount(fn); - else if (sync) - fn(); - else - nextTick(fn); -} -function tryOnBeforeUnmount(fn) { - if (getCurrentInstance()) - onBeforeUnmount(fn); -} -function tryOnMounted(fn, sync = true) { - if (getCurrentInstance()) - onMounted(fn); - else if (sync) - fn(); - else - nextTick(fn); -} -function tryOnUnmounted(fn) { - if (getCurrentInstance()) - onUnmounted(fn); -} -function until(r) { - let isNot = false; - function toMatch(condition, { flush = "sync", deep = false, timeout, throwOnTimeout } = {}) { - let stop = null; - const watcher = new Promise((resolve) => { - stop = watch(r, (v) => { - if (condition(v) === !isNot) { - stop == null ? void 0 : stop(); - resolve(); - } - }, { - flush, - deep, - immediate: true - }); - }); - const promises = [watcher]; - if (timeout) { - promises.push(promiseTimeout(timeout, throwOnTimeout).finally(() => { - stop == null ? void 0 : stop(); - })); - } - return Promise.race(promises); - } - function toBe(value, options) { - return toMatch((v) => v === unref(value), options); - } - function toBeTruthy(options) { - return toMatch((v) => Boolean(v), options); - } - function toBeNull(options) { - return toBe(null, options); - } - function toBeUndefined(options) { - return toBe(void 0, options); - } - function toBeNaN(options) { - return toMatch(Number.isNaN, options); - } - function toContains(value, options) { - return toMatch((v) => { - const array = Array.from(v); - return array.includes(value) || array.includes(unref(value)); - }, options); - } - function changed(options) { - return changedTimes(1, options); - } - function changedTimes(n = 1, options) { - let count = -1; - return toMatch(() => { - count += 1; - return count >= n; - }, options); - } - if (Array.isArray(unref(r))) { - const instance = { - toMatch, - toContains, - changed, - changedTimes, - get not() { - isNot = !isNot; - return this; - } - }; - return instance; - } else { - const instance = { - toMatch, - toBe, - toBeTruthy, - toBeNull, - toBeNaN, - toBeUndefined, - changed, - changedTimes, - get not() { - isNot = !isNot; - return this; - } - }; - return instance; - } -} -function useCounter(initialValue = 0, options = {}) { - const count = ref(initialValue); - const { - max = Infinity, - min = -Infinity - } = options; - const inc = (delta = 1) => count.value = Math.min(max, count.value + delta); - const dec = (delta = 1) => count.value = Math.max(min, count.value - delta); - const get2 = () => count.value; - const set3 = (val) => count.value = val; - const reset = (val = initialValue) => { - initialValue = val; - return set3(val); - }; - return { count, inc, dec, get: get2, set: set3, reset }; -} -var REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/; -var REGEX_FORMAT = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g; -var formatDate = (date, formatStr) => { - const years = date.getFullYear(); - const month = date.getMonth(); - const days = date.getDate(); - const hours = date.getHours(); - const minutes = date.getMinutes(); - const seconds = date.getSeconds(); - const milliseconds = date.getMilliseconds(); - const day = date.getDay(); - const matches = { - YY: String(years).slice(-2), - YYYY: years, - M: month + 1, - MM: `${month + 1}`.padStart(2, "0"), - D: String(days), - DD: `${days}`.padStart(2, "0"), - H: String(hours), - HH: `${hours}`.padStart(2, "0"), - h: `${hours % 12 || 12}`.padStart(1, "0"), - hh: `${hours % 12 || 12}`.padStart(2, "0"), - m: String(minutes), - mm: `${minutes}`.padStart(2, "0"), - s: String(seconds), - ss: `${seconds}`.padStart(2, "0"), - SSS: `${milliseconds}`.padStart(3, "0"), - d: day - }; - return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]); -}; -var normalizeDate = (date) => { - if (date === null) - return new Date(NaN); - if (date === void 0) - return new Date(); - if (date instanceof Date) - return new Date(date); - if (typeof date === "string" && !/Z$/i.test(date)) { - const d = date.match(REGEX_PARSE); - if (d) { - const m = d[2] - 1 || 0; - const ms = (d[7] || "0").substring(0, 3); - return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms); - } - } - return new Date(date); -}; -function useDateFormat(date, formatStr = "HH:mm:ss") { - return computed(() => formatDate(normalizeDate(unref(date)), unref(formatStr))); -} -function useIntervalFn(cb, interval = 1e3, options = {}) { - const { - immediate = true, - immediateCallback = false - } = options; - let timer = null; - const isActive = ref(false); - function clean() { - if (timer) { - clearInterval(timer); - timer = null; - } - } - function pause() { - isActive.value = false; - clean(); - } - function resume() { - if (interval <= 0) - return; - isActive.value = true; - if (immediateCallback) - cb(); - clean(); - timer = setInterval(cb, unref(interval)); - } - if (immediate && isClient) - resume(); - if (isRef(interval)) { - const stopWatch = watch(interval, () => { - if (immediate && isClient) - resume(); - }); - tryOnScopeDispose(stopWatch); - } - tryOnScopeDispose(pause); - return { - isActive, - pause, - resume - }; -} -var __defProp$5 = Object.defineProperty; -var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols; -var __hasOwnProp$7 = Object.prototype.hasOwnProperty; -var __propIsEnum$7 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$5 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$7.call(b, prop)) - __defNormalProp$5(a, prop, b[prop]); - if (__getOwnPropSymbols$7) - for (var prop of __getOwnPropSymbols$7(b)) { - if (__propIsEnum$7.call(b, prop)) - __defNormalProp$5(a, prop, b[prop]); - } - return a; -}; -function useInterval(interval = 1e3, options = {}) { - const { - controls: exposeControls = false, - immediate = true - } = options; - const counter = ref(0); - const controls = useIntervalFn(() => counter.value += 1, interval, { immediate }); - if (exposeControls) { - return __spreadValues$5({ - counter - }, controls); - } else { - return counter; - } -} -function useLastChanged(source, options = {}) { - var _a2; - const ms = ref((_a2 = options.initialValue) != null ? _a2 : null); - watch(source, () => ms.value = timestamp(), options); - return ms; -} -function useTimeoutFn(cb, interval, options = {}) { - const { - immediate = true - } = options; - const isPending = ref(false); - let timer = null; - function clear() { - if (timer) { - clearTimeout(timer); - timer = null; - } - } - function stop() { - isPending.value = false; - clear(); - } - function start(...args) { - clear(); - isPending.value = true; - timer = setTimeout(() => { - isPending.value = false; - timer = null; - cb(...args); - }, unref(interval)); - } - if (immediate) { - isPending.value = true; - if (isClient) - start(); - } - tryOnScopeDispose(stop); - return { - isPending, - start, - stop - }; -} -var __defProp$4 = Object.defineProperty; -var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols; -var __hasOwnProp$6 = Object.prototype.hasOwnProperty; -var __propIsEnum$6 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$4 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$6.call(b, prop)) - __defNormalProp$4(a, prop, b[prop]); - if (__getOwnPropSymbols$6) - for (var prop of __getOwnPropSymbols$6(b)) { - if (__propIsEnum$6.call(b, prop)) - __defNormalProp$4(a, prop, b[prop]); - } - return a; -}; -function useTimeout(interval = 1e3, options = {}) { - const { - controls: exposeControls = false - } = options; - const controls = useTimeoutFn(noop, interval, options); - const ready = computed(() => !controls.isPending.value); - if (exposeControls) { - return __spreadValues$4({ - ready - }, controls); - } else { - return ready; - } -} -function useToggle(initialValue = false) { - if (isRef(initialValue)) { - return (value) => { - initialValue.value = typeof value === "boolean" ? value : !initialValue.value; - return initialValue.value; - }; - } else { - const boolean = ref(initialValue); - const toggle = (value) => { - boolean.value = typeof value === "boolean" ? value : !boolean.value; - return boolean.value; - }; - return [boolean, toggle]; - } -} -var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols; -var __hasOwnProp$5 = Object.prototype.hasOwnProperty; -var __propIsEnum$5 = Object.prototype.propertyIsEnumerable; -var __objRest$5 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$5) - for (var prop of __getOwnPropSymbols$5(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function watchWithFilter(source, cb, options = {}) { - const _a2 = options, { - eventFilter = bypassFilter - } = _a2, watchOptions = __objRest$5(_a2, [ - "eventFilter" - ]); - return watch(source, createFilterWrapper(eventFilter, cb), watchOptions); -} -var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols; -var __hasOwnProp$4 = Object.prototype.hasOwnProperty; -var __propIsEnum$4 = Object.prototype.propertyIsEnumerable; -var __objRest$4 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$4) - for (var prop of __getOwnPropSymbols$4(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function watchAtMost(source, cb, options) { - const _a2 = options, { - count - } = _a2, watchOptions = __objRest$4(_a2, [ - "count" - ]); - const current = ref(0); - const stop = watchWithFilter(source, (...args) => { - current.value += 1; - if (current.value >= unref(count)) - nextTick(() => stop()); - cb(...args); - }, watchOptions); - return { count: current, stop }; -} -var __defProp$3 = Object.defineProperty; -var __defProps$3 = Object.defineProperties; -var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols; -var __hasOwnProp$3 = Object.prototype.hasOwnProperty; -var __propIsEnum$3 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$3 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$3.call(b, prop)) - __defNormalProp$3(a, prop, b[prop]); - if (__getOwnPropSymbols$3) - for (var prop of __getOwnPropSymbols$3(b)) { - if (__propIsEnum$3.call(b, prop)) - __defNormalProp$3(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b)); -var __objRest$3 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$3) - for (var prop of __getOwnPropSymbols$3(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function watchDebounced(source, cb, options = {}) { - const _a2 = options, { - debounce = 0 - } = _a2, watchOptions = __objRest$3(_a2, [ - "debounce" - ]); - return watchWithFilter(source, cb, __spreadProps$3(__spreadValues$3({}, watchOptions), { - eventFilter: debounceFilter(debounce) - })); -} -var __defProp$2 = Object.defineProperty; -var __defProps$2 = Object.defineProperties; -var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols; -var __hasOwnProp$2 = Object.prototype.hasOwnProperty; -var __propIsEnum$2 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$2 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$2.call(b, prop)) - __defNormalProp$2(a, prop, b[prop]); - if (__getOwnPropSymbols$2) - for (var prop of __getOwnPropSymbols$2(b)) { - if (__propIsEnum$2.call(b, prop)) - __defNormalProp$2(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b)); -var __objRest$2 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$2) - for (var prop of __getOwnPropSymbols$2(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function watchIgnorable(source, cb, options = {}) { - const _a2 = options, { - eventFilter = bypassFilter - } = _a2, watchOptions = __objRest$2(_a2, [ - "eventFilter" - ]); - const filteredCb = createFilterWrapper(eventFilter, cb); - let ignoreUpdates; - let ignorePrevAsyncUpdates; - let stop; - if (watchOptions.flush === "sync") { - const ignore = ref(false); - ignorePrevAsyncUpdates = () => { - }; - ignoreUpdates = (updater) => { - ignore.value = true; - updater(); - ignore.value = false; - }; - stop = watch(source, (...args) => { - if (!ignore.value) - filteredCb(...args); - }, watchOptions); - } else { - const disposables = []; - const ignoreCounter = ref(0); - const syncCounter = ref(0); - ignorePrevAsyncUpdates = () => { - ignoreCounter.value = syncCounter.value; - }; - disposables.push(watch(source, () => { - syncCounter.value++; - }, __spreadProps$2(__spreadValues$2({}, watchOptions), { flush: "sync" }))); - ignoreUpdates = (updater) => { - const syncCounterPrev = syncCounter.value; - updater(); - ignoreCounter.value += syncCounter.value - syncCounterPrev; - }; - disposables.push(watch(source, (...args) => { - const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value; - ignoreCounter.value = 0; - syncCounter.value = 0; - if (ignore) - return; - filteredCb(...args); - }, watchOptions)); - stop = () => { - disposables.forEach((fn) => fn()); - }; - } - return { stop, ignoreUpdates, ignorePrevAsyncUpdates }; -} -function watchOnce(source, cb, options) { - const stop = watch(source, (...args) => { - nextTick(() => stop()); - return cb(...args); - }, options); -} -var __defProp$1 = Object.defineProperty; -var __defProps$1 = Object.defineProperties; -var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols; -var __hasOwnProp$1 = Object.prototype.hasOwnProperty; -var __propIsEnum$1 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$1 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$1.call(b, prop)) - __defNormalProp$1(a, prop, b[prop]); - if (__getOwnPropSymbols$1) - for (var prop of __getOwnPropSymbols$1(b)) { - if (__propIsEnum$1.call(b, prop)) - __defNormalProp$1(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b)); -var __objRest$1 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$1) - for (var prop of __getOwnPropSymbols$1(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function watchPausable(source, cb, options = {}) { - const _a2 = options, { - eventFilter: filter - } = _a2, watchOptions = __objRest$1(_a2, [ - "eventFilter" - ]); - const { eventFilter, pause, resume, isActive } = pausableFilter(filter); - const stop = watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), { - eventFilter - })); - return { stop, pause, resume, isActive }; -} -var __defProp = Object.defineProperty; -var __defProps = Object.defineProperties; -var __getOwnPropDescs = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols = Object.getOwnPropertySymbols; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __propIsEnum = Object.prototype.propertyIsEnumerable; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; -}; -var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); -var __objRest = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function watchThrottled(source, cb, options = {}) { - const _a2 = options, { - throttle = 0, - trailing = true, - leading = true - } = _a2, watchOptions = __objRest(_a2, [ - "throttle", - "trailing", - "leading" - ]); - return watchWithFilter(source, cb, __spreadProps(__spreadValues({}, watchOptions), { - eventFilter: throttleFilter(throttle, trailing, leading) - })); -} -function whenever(source, cb, options) { - return watch(source, (v, ov, onInvalidate) => { - if (v) - cb(v, ov, onInvalidate); - }, options); -} - -// node_modules/@vueuse/core/index.mjs -function computedAsync(evaluationCallback, initialState, optionsOrRef) { - let options; - if (isRef(optionsOrRef)) { - options = { - evaluating: optionsOrRef - }; - } else { - options = optionsOrRef || {}; - } - const { - lazy = false, - evaluating = void 0, - onError = noop - } = options; - const started = ref(!lazy); - const current = ref(initialState); - let counter = 0; - watchEffect(async (onInvalidate) => { - if (!started.value) - return; - counter++; - const counterAtBeginning = counter; - let hasFinished = false; - if (evaluating) { - Promise.resolve().then(() => { - evaluating.value = true; - }); - } - try { - const result = await evaluationCallback((cancelCallback) => { - onInvalidate(() => { - if (evaluating) - evaluating.value = false; - if (!hasFinished) - cancelCallback(); - }); - }); - if (counterAtBeginning === counter) - current.value = result; - } catch (e) { - onError(e); - } finally { - if (evaluating) - evaluating.value = false; - hasFinished = true; - } - }); - if (lazy) { - return computed(() => { - started.value = true; - return current.value; - }); - } else { - return current; - } -} -function computedInject(key, options, defaultSource, treatDefaultAsFactory) { - let source = inject(key); - if (defaultSource) - source = inject(key, defaultSource); - if (treatDefaultAsFactory) - source = inject(key, defaultSource, treatDefaultAsFactory); - if (typeof options === "function") { - return computed((ctx) => options(source, ctx)); - } else { - return computed({ - get: (ctx) => options.get(source, ctx), - set: options.set - }); - } -} -var createUnrefFn = (fn) => { - return function(...args) { - return fn.apply(this, args.map((i) => unref(i))); - }; -}; -function unrefElement(elRef) { - var _a2; - const plain = unref(elRef); - return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain; -} -var defaultWindow = isClient ? window : void 0; -var defaultDocument = isClient ? window.document : void 0; -var defaultNavigator = isClient ? window.navigator : void 0; -var defaultLocation = isClient ? window.location : void 0; -function useEventListener(...args) { - let target; - let event; - let listener; - let options; - if (isString(args[0])) { - [event, listener, options] = args; - target = defaultWindow; - } else { - [target, event, listener, options] = args; - } - if (!target) - return noop; - let cleanup = noop; - const stopWatch = watch(() => unrefElement(target), (el) => { - cleanup(); - if (!el) - return; - el.addEventListener(event, listener, options); - cleanup = () => { - el.removeEventListener(event, listener, options); - cleanup = noop; - }; - }, { immediate: true, flush: "post" }); - const stop = () => { - stopWatch(); - cleanup(); - }; - tryOnScopeDispose(stop); - return stop; -} -function onClickOutside(target, handler, options = {}) { - const { window: window2 = defaultWindow, ignore, capture = true } = options; - if (!window2) - return; - const shouldListen = ref(true); - const listener = (event) => { - const el = unrefElement(target); - const composedPath = event.composedPath(); - if (!el || el === event.target || composedPath.includes(el) || !shouldListen.value) - return; - if (ignore && ignore.length > 0) { - if (ignore.some((target2) => { - const el2 = unrefElement(target2); - return el2 && (event.target === el2 || composedPath.includes(el2)); - })) - return; - } - handler(event); - }; - const cleanup = [ - useEventListener(window2, "click", listener, { passive: true, capture }), - useEventListener(window2, "pointerdown", (e) => { - const el = unrefElement(target); - shouldListen.value = !!el && !e.composedPath().includes(el); - }, { passive: true }) - ]; - const stop = () => cleanup.forEach((fn) => fn()); - return stop; -} -var __defProp$h = Object.defineProperty; -var __defProps$8 = Object.defineProperties; -var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$j = Object.getOwnPropertySymbols; -var __hasOwnProp$j = Object.prototype.hasOwnProperty; -var __propIsEnum$j = Object.prototype.propertyIsEnumerable; -var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$h = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$j.call(b, prop)) - __defNormalProp$h(a, prop, b[prop]); - if (__getOwnPropSymbols$j) - for (var prop of __getOwnPropSymbols$j(b)) { - if (__propIsEnum$j.call(b, prop)) - __defNormalProp$h(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b)); -var createKeyPredicate = (keyFilter) => { - if (typeof keyFilter === "function") - return keyFilter; - else if (typeof keyFilter === "string") - return (event) => event.key === keyFilter; - else if (Array.isArray(keyFilter)) - return (event) => keyFilter.includes(event.key); - else if (keyFilter) - return () => true; - else - return () => false; -}; -function onKeyStroke(key, handler, options = {}) { - const { target = defaultWindow, eventName = "keydown", passive = false } = options; - const predicate = createKeyPredicate(key); - const listener = (e) => { - if (predicate(e)) - handler(e); - }; - return useEventListener(target, eventName, listener, passive); -} -function onKeyDown(key, handler, options = {}) { - return onKeyStroke(key, handler, __spreadProps$8(__spreadValues$h({}, options), { eventName: "keydown" })); -} -function onKeyPressed(key, handler, options = {}) { - return onKeyStroke(key, handler, __spreadProps$8(__spreadValues$h({}, options), { eventName: "keypress" })); -} -function onKeyUp(key, handler, options = {}) { - return onKeyStroke(key, handler, __spreadProps$8(__spreadValues$h({}, options), { eventName: "keyup" })); -} -var DEFAULT_DELAY = 500; -function onLongPress(target, handler, options) { - const elementRef = computed(() => unrefElement(target)); - let timeout = null; - function clear() { - if (timeout != null) { - clearTimeout(timeout); - timeout = null; - } - } - function onDown(ev) { - var _a2; - clear(); - timeout = setTimeout(() => handler(ev), (_a2 = options == null ? void 0 : options.delay) != null ? _a2 : DEFAULT_DELAY); - } - useEventListener(elementRef, "pointerdown", onDown); - useEventListener(elementRef, "pointerup", clear); - useEventListener(elementRef, "pointerleave", clear); -} -var isFocusedElementEditable = () => { - const { activeElement, body } = document; - if (!activeElement) - return false; - if (activeElement === body) - return false; - switch (activeElement.tagName) { - case "INPUT": - case "TEXTAREA": - return true; - } - return activeElement.hasAttribute("contenteditable"); -}; -var isTypedCharValid = ({ - keyCode, - metaKey, - ctrlKey, - altKey -}) => { - if (metaKey || ctrlKey || altKey) - return false; - if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) - return true; - if (keyCode >= 65 && keyCode <= 90) - return true; - return false; -}; -function onStartTyping(callback, options = {}) { - const { document: document2 = defaultDocument } = options; - const keydown = (event) => { - !isFocusedElementEditable() && isTypedCharValid(event) && callback(event); - }; - if (document2) - useEventListener(document2, "keydown", keydown, { passive: true }); -} -function templateRef(key, initialValue = null) { - const instance = getCurrentInstance(); - let _trigger = () => { - }; - const element = customRef((track, trigger) => { - _trigger = trigger; - return { - get() { - var _a2, _b2; - track(); - return (_b2 = (_a2 = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a2.$refs[key]) != null ? _b2 : initialValue; - }, - set() { - } - }; - }); - tryOnMounted(_trigger); - onUpdated(_trigger); - return element; -} -function useActiveElement(options = {}) { - const { window: window2 = defaultWindow } = options; - const counter = ref(0); - if (window2) { - useEventListener(window2, "blur", () => counter.value += 1, true); - useEventListener(window2, "focus", () => counter.value += 1, true); - } - return computed(() => { - counter.value; - return window2 == null ? void 0 : window2.document.activeElement; - }); -} -function useAsyncQueue(tasks, options = {}) { - const { - interrupt = true, - onError = noop, - onFinished = noop - } = options; - const promiseState = { - pending: "pending", - rejected: "rejected", - fulfilled: "fulfilled" - }; - const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null })); - const result = reactive(initialResult); - const activeIndex = ref(-1); - if (!tasks || tasks.length === 0) { - onFinished(); - return { - activeIndex, - result - }; - } - function updateResult(state, res) { - activeIndex.value++; - result[activeIndex.value].data = res; - result[activeIndex.value].state = state; - } - tasks.reduce((prev, curr) => { - return prev.then((prevRes) => { - var _a2; - if (((_a2 = result[activeIndex.value]) == null ? void 0 : _a2.state) === promiseState.rejected && interrupt) { - onFinished(); - return; - } - return curr(prevRes).then((currentRes) => { - updateResult(promiseState.fulfilled, currentRes); - activeIndex.value === tasks.length - 1 && onFinished(); - return currentRes; - }); - }).catch((e) => { - updateResult(promiseState.rejected, e); - onError(); - return e; - }); - }, Promise.resolve()); - return { - activeIndex, - result - }; -} -function useAsyncState(promise, initialState, options) { - const { - immediate = true, - delay = 0, - onError = noop, - resetOnExecute = true, - shallow = true - } = options != null ? options : {}; - const state = shallow ? shallowRef(initialState) : ref(initialState); - const isReady = ref(false); - const isLoading = ref(false); - const error = ref(void 0); - async function execute(delay2 = 0, ...args) { - if (resetOnExecute) - state.value = initialState; - error.value = void 0; - isReady.value = false; - isLoading.value = true; - if (delay2 > 0) - await promiseTimeout(delay2); - const _promise = typeof promise === "function" ? promise(...args) : promise; - try { - const data = await _promise; - state.value = data; - isReady.value = true; - } catch (e) { - error.value = e; - onError(e); - } - isLoading.value = false; - return state.value; - } - if (immediate) - execute(delay); - return { - state, - isReady, - isLoading, - error, - execute - }; -} -function useBase64(target, options) { - const base64 = ref(""); - const promise = ref(); - function execute() { - if (!isClient) - return; - promise.value = new Promise((resolve, reject) => { - try { - const _target = unref(target); - if (_target === void 0 || _target === null) { - resolve(""); - } else if (typeof _target === "string") { - resolve(blobToBase64(new Blob([_target], { type: "text/plain" }))); - } else if (_target instanceof Blob) { - resolve(blobToBase64(_target)); - } else if (_target instanceof ArrayBuffer) { - resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target)))); - } else if (_target instanceof HTMLCanvasElement) { - resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality)); - } else if (_target instanceof HTMLImageElement) { - const img = _target.cloneNode(false); - img.crossOrigin = "Anonymous"; - imgLoaded(img).then(() => { - const canvas = document.createElement("canvas"); - const ctx = canvas.getContext("2d"); - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality)); - }).catch(reject); - } else { - reject(new Error("target is unsupported types")); - } - } catch (error) { - reject(error); - } - }); - promise.value.then((res) => base64.value = res); - return promise.value; - } - watch(target, execute, { immediate: true }); - return { - base64, - promise, - execute - }; -} -function imgLoaded(img) { - return new Promise((resolve, reject) => { - if (!img.complete) { - img.onload = () => { - resolve(); - }; - img.onerror = reject; - } else { - resolve(); - } - }); -} -function blobToBase64(blob) { - return new Promise((resolve, reject) => { - const fr = new FileReader(); - fr.onload = (e) => { - resolve(e.target.result); - }; - fr.onerror = reject; - fr.readAsDataURL(blob); - }); -} -function useBattery({ navigator = defaultNavigator } = {}) { - const events2 = ["chargingchange", "chargingtimechange", "dischargingtimechange", "levelchange"]; - const isSupported = navigator && "getBattery" in navigator; - const charging = ref(false); - const chargingTime = ref(0); - const dischargingTime = ref(0); - const level = ref(1); - let battery; - function updateBatteryInfo() { - charging.value = this.charging; - chargingTime.value = this.chargingTime || 0; - dischargingTime.value = this.dischargingTime || 0; - level.value = this.level; - } - if (isSupported) { - navigator.getBattery().then((_battery) => { - battery = _battery; - updateBatteryInfo.call(battery); - for (const event of events2) - useEventListener(battery, event, updateBatteryInfo, { passive: true }); - }); - } - return { - isSupported, - charging, - chargingTime, - dischargingTime, - level - }; -} -function useMediaQuery(query, options = {}) { - const { window: window2 = defaultWindow } = options; - let mediaQuery; - const matches = ref(false); - const update = () => { - if (!window2) - return; - if (!mediaQuery) - mediaQuery = window2.matchMedia(query); - matches.value = mediaQuery.matches; - }; - tryOnBeforeMount(() => { - update(); - if (!mediaQuery) - return; - if ("addEventListener" in mediaQuery) - mediaQuery.addEventListener("change", update); - else - mediaQuery.addListener(update); - tryOnScopeDispose(() => { - if ("removeEventListener" in mediaQuery) - mediaQuery.removeEventListener("change", update); - else - mediaQuery.removeListener(update); - }); - }); - return matches; -} -var breakpointsTailwind = { - "sm": 640, - "md": 768, - "lg": 1024, - "xl": 1280, - "2xl": 1536 -}; -var breakpointsBootstrapV5 = { - sm: 576, - md: 768, - lg: 992, - xl: 1200, - xxl: 1400 -}; -var breakpointsVuetify = { - xs: 600, - sm: 960, - md: 1264, - lg: 1904 -}; -var breakpointsAntDesign = { - xs: 480, - sm: 576, - md: 768, - lg: 992, - xl: 1200, - xxl: 1600 -}; -var breakpointsQuasar = { - xs: 600, - sm: 1024, - md: 1440, - lg: 1920 -}; -var breakpointsSematic = { - mobileS: 320, - mobileM: 375, - mobileL: 425, - tablet: 768, - laptop: 1024, - laptopL: 1440, - desktop4K: 2560 -}; -var __defProp$g = Object.defineProperty; -var __getOwnPropSymbols$i = Object.getOwnPropertySymbols; -var __hasOwnProp$i = Object.prototype.hasOwnProperty; -var __propIsEnum$i = Object.prototype.propertyIsEnumerable; -var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$g = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$i.call(b, prop)) - __defNormalProp$g(a, prop, b[prop]); - if (__getOwnPropSymbols$i) - for (var prop of __getOwnPropSymbols$i(b)) { - if (__propIsEnum$i.call(b, prop)) - __defNormalProp$g(a, prop, b[prop]); - } - return a; -}; -function useBreakpoints(breakpoints, options = {}) { - function getValue2(k, delta) { - let v = breakpoints[k]; - if (delta != null) - v = increaseWithUnit(v, delta); - if (typeof v === "number") - v = `${v}px`; - return v; - } - const { window: window2 = defaultWindow } = options; - function match(query) { - if (!window2) - return false; - return window2.matchMedia(query).matches; - } - const greater = (k) => { - return useMediaQuery(`(min-width: ${getValue2(k)})`, options); - }; - const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => { - Object.defineProperty(shortcuts, k, { - get: () => greater(k), - enumerable: true, - configurable: true - }); - return shortcuts; - }, {}); - return __spreadValues$g({ - greater, - smaller(k) { - return useMediaQuery(`(max-width: ${getValue2(k, -0.1)})`, options); - }, - between(a, b) { - return useMediaQuery(`(min-width: ${getValue2(a)}) and (max-width: ${getValue2(b, -0.1)})`, options); - }, - isGreater(k) { - return match(`(min-width: ${getValue2(k)})`); - }, - isSmaller(k) { - return match(`(max-width: ${getValue2(k, -0.1)})`); - }, - isInBetween(a, b) { - return match(`(min-width: ${getValue2(a)}) and (max-width: ${getValue2(b, -0.1)})`); - } - }, shortcutMethods); -} -var useBroadcastChannel = (options) => { - const { - name, - window: window2 = defaultWindow - } = options; - const isSupported = window2 && "BroadcastChannel" in window2; - const isClosed = ref(false); - const channel = ref(); - const data = ref(); - const error = ref(null); - const post = (data2) => { - if (channel.value) - channel.value.postMessage(data2); - }; - const close = () => { - if (channel.value) - channel.value.close(); - isClosed.value = true; - }; - if (isSupported) { - tryOnMounted(() => { - error.value = null; - channel.value = new BroadcastChannel(name); - channel.value.addEventListener("message", (e) => { - data.value = e.data; - }, { passive: true }); - channel.value.addEventListener("messageerror", (e) => { - error.value = e; - }, { passive: true }); - channel.value.addEventListener("close", () => { - isClosed.value = true; - }); - }); - } - tryOnScopeDispose(() => { - close(); - }); - return { - isSupported, - channel, - data, - post, - close, - error, - isClosed - }; -}; -function useBrowserLocation({ window: window2 = defaultWindow } = {}) { - const buildState = (trigger) => { - const { state: state2, length } = (window2 == null ? void 0 : window2.history) || {}; - const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window2 == null ? void 0 : window2.location) || {}; - return { - trigger, - state: state2, - length, - hash, - host, - hostname, - href, - origin, - pathname, - port, - protocol, - search - }; - }; - const state = ref(buildState("load")); - if (window2) { - useEventListener(window2, "popstate", () => state.value = buildState("popstate"), { passive: true }); - useEventListener(window2, "hashchange", () => state.value = buildState("hashchange"), { passive: true }); - } - return state; -} -function useCached(refValue, comparator = (a, b) => a === b, watchOptions) { - const cachedValue = ref(refValue.value); - watch(() => refValue.value, (value) => { - if (!comparator(value, cachedValue.value)) - cachedValue.value = value; - }, watchOptions); - return cachedValue; -} -function useClamp(value, min, max) { - const _value = ref(value); - return computed({ - get() { - return _value.value = clamp(_value.value, unref(min), unref(max)); - }, - set(value2) { - _value.value = clamp(value2, unref(min), unref(max)); - } - }); -} -function useClipboard(options = {}) { - const { - navigator = defaultNavigator, - read = false, - source, - copiedDuring = 1500 - } = options; - const events2 = ["copy", "cut"]; - const isSupported = Boolean(navigator && "clipboard" in navigator); - const text = ref(""); - const copied = ref(false); - const timeout = useTimeoutFn(() => copied.value = false, copiedDuring); - function updateText() { - navigator.clipboard.readText().then((value) => { - text.value = value; - }); - } - if (isSupported && read) { - for (const event of events2) - useEventListener(event, updateText); - } - async function copy(value = unref(source)) { - if (isSupported && value != null) { - await navigator.clipboard.writeText(value); - text.value = value; - copied.value = true; - timeout.start(); - } - } - return { - isSupported, - text, - copied, - copy - }; -} -var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; -var globalKey = "__vueuse_ssr_handlers__"; -_global[globalKey] = _global[globalKey] || {}; -var handlers = _global[globalKey]; -function getSSRHandler(key, fallback) { - return handlers[key] || fallback; -} -function setSSRHandler(key, fn) { - handlers[key] = fn; -} -function guessSerializerType(rawInit) { - return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : Array.isArray(rawInit) ? "object" : !Number.isNaN(rawInit) ? "number" : "any"; -} -var StorageSerializers = { - boolean: { - read: (v) => v === "true", - write: (v) => String(v) - }, - object: { - read: (v) => JSON.parse(v), - write: (v) => JSON.stringify(v) - }, - number: { - read: (v) => Number.parseFloat(v), - write: (v) => String(v) - }, - any: { - read: (v) => v, - write: (v) => String(v) - }, - string: { - read: (v) => v, - write: (v) => String(v) - }, - map: { - read: (v) => new Map(JSON.parse(v)), - write: (v) => JSON.stringify(Array.from(v.entries())) - }, - set: { - read: (v) => new Set(JSON.parse(v)), - write: (v) => JSON.stringify(Array.from(v)) - }, - date: { - read: (v) => new Date(v), - write: (v) => v.toISOString() - } -}; -function useStorage(key, initialValue, storage, options = {}) { - var _a2; - const { - flush = "pre", - deep = true, - listenToStorageChanges = true, - writeDefaults = true, - shallow, - window: window2 = defaultWindow, - eventFilter, - onError = (e) => { - console.error(e); - } - } = options; - const data = (shallow ? shallowRef : ref)(initialValue); - if (!storage) { - try { - storage = getSSRHandler("getDefaultStorage", () => { - var _a22; - return (_a22 = defaultWindow) == null ? void 0 : _a22.localStorage; - })(); - } catch (e) { - onError(e); - } - } - if (!storage) - return data; - const rawInit = unref(initialValue); - const type = guessSerializerType(rawInit); - const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type]; - const { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, () => write(data.value), { flush, deep, eventFilter }); - if (window2 && listenToStorageChanges) - useEventListener(window2, "storage", update); - update(); - return data; - function write(v) { - try { - if (v == null) - storage.removeItem(key); - else - storage.setItem(key, serializer.write(v)); - } catch (e) { - onError(e); - } - } - function read(event) { - if (event && event.key !== key) - return; - pauseWatch(); - try { - const rawValue = event ? event.newValue : storage.getItem(key); - if (rawValue == null) { - if (writeDefaults && rawInit !== null) - storage.setItem(key, serializer.write(rawInit)); - return rawInit; - } else if (typeof rawValue !== "string") { - return rawValue; - } else { - return serializer.read(rawValue); - } - } catch (e) { - onError(e); - } finally { - resumeWatch(); - } - } - function update(event) { - if (event && event.key !== key) - return; - data.value = read(event); - } -} -function usePreferredDark(options) { - return useMediaQuery("(prefers-color-scheme: dark)", options); -} -var __defProp$f = Object.defineProperty; -var __getOwnPropSymbols$h = Object.getOwnPropertySymbols; -var __hasOwnProp$h = Object.prototype.hasOwnProperty; -var __propIsEnum$h = Object.prototype.propertyIsEnumerable; -var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$f = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$h.call(b, prop)) - __defNormalProp$f(a, prop, b[prop]); - if (__getOwnPropSymbols$h) - for (var prop of __getOwnPropSymbols$h(b)) { - if (__propIsEnum$h.call(b, prop)) - __defNormalProp$f(a, prop, b[prop]); - } - return a; -}; -function useColorMode(options = {}) { - const { - selector = "html", - attribute = "class", - window: window2 = defaultWindow, - storage, - storageKey = "vueuse-color-scheme", - listenToStorageChanges = true, - storageRef - } = options; - const modes = __spreadValues$f({ - auto: "", - light: "light", - dark: "dark" - }, options.modes || {}); - const preferredDark = usePreferredDark({ window: window2 }); - const preferredMode = computed(() => preferredDark.value ? "dark" : "light"); - const store = storageRef || (storageKey == null ? ref("auto") : useStorage(storageKey, "auto", storage, { window: window2, listenToStorageChanges })); - const state = computed({ - get() { - return store.value === "auto" ? preferredMode.value : store.value; - }, - set(v) { - store.value = v; - } - }); - const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector2, attribute2, value) => { - const el = window2 == null ? void 0 : window2.document.querySelector(selector2); - if (!el) - return; - if (attribute2 === "class") { - const current = value.split(/\s/g); - Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => { - if (current.includes(v)) - el.classList.add(v); - else - el.classList.remove(v); - }); - } else { - el.setAttribute(attribute2, value); - } - }); - function defaultOnChanged(mode) { - var _a2; - updateHTMLAttrs(selector, attribute, (_a2 = modes[mode]) != null ? _a2 : mode); - } - function onChanged(mode) { - if (options.onChanged) - options.onChanged(mode, defaultOnChanged); - else - defaultOnChanged(mode); - } - watch(state, onChanged, { flush: "post", immediate: true }); - tryOnMounted(() => onChanged(state.value)); - return state; -} -function useConfirmDialog(revealed = ref(false)) { - const confirmHook = createEventHook(); - const cancelHook = createEventHook(); - const revealHook = createEventHook(); - let _resolve = noop; - const reveal = (data) => { - revealHook.trigger(data); - revealed.value = true; - return new Promise((resolve) => { - _resolve = resolve; - }); - }; - const confirm = (data) => { - revealed.value = false; - confirmHook.trigger(data); - _resolve({ data, isCanceled: false }); - }; - const cancel = (data) => { - revealed.value = false; - cancelHook.trigger(data); - _resolve({ data, isCanceled: true }); - }; - return { - isRevealed: computed(() => revealed.value), - reveal, - confirm, - cancel, - onReveal: revealHook.on, - onConfirm: confirmHook.on, - onCancel: cancelHook.on - }; -} -function useCssVar(prop, target, { window: window2 = defaultWindow } = {}) { - const variable = ref(""); - const elRef = computed(() => { - var _a2; - return unrefElement(target) || ((_a2 = window2 == null ? void 0 : window2.document) == null ? void 0 : _a2.documentElement); - }); - watch([elRef, () => unref(prop)], ([el, prop2]) => { - if (el && window2) - variable.value = window2.getComputedStyle(el).getPropertyValue(prop2); - }, { immediate: true }); - watch(variable, (val) => { - var _a2; - if ((_a2 = elRef.value) == null ? void 0 : _a2.style) - elRef.value.style.setProperty(unref(prop), val); - }); - return variable; -} -function useCycleList(list, options) { - var _a2; - const state = shallowRef((_a2 = options == null ? void 0 : options.initialValue) != null ? _a2 : list[0]); - const index = computed({ - get() { - var _a22; - let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value); - if (index2 < 0) - index2 = (_a22 = options == null ? void 0 : options.fallbackIndex) != null ? _a22 : 0; - return index2; - }, - set(v) { - set3(v); - } - }); - function set3(i) { - const length = list.length; - const index2 = (i % length + length) % length; - const value = list[index2]; - state.value = value; - return value; - } - function shift(delta = 1) { - return set3(index.value + delta); - } - function next(n = 1) { - return shift(n); - } - function prev(n = 1) { - return shift(-n); - } - return { - state, - index, - next, - prev - }; -} -var __defProp$e = Object.defineProperty; -var __defProps$7 = Object.defineProperties; -var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$g = Object.getOwnPropertySymbols; -var __hasOwnProp$g = Object.prototype.hasOwnProperty; -var __propIsEnum$g = Object.prototype.propertyIsEnumerable; -var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$e = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$g.call(b, prop)) - __defNormalProp$e(a, prop, b[prop]); - if (__getOwnPropSymbols$g) - for (var prop of __getOwnPropSymbols$g(b)) { - if (__propIsEnum$g.call(b, prop)) - __defNormalProp$e(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b)); -function useDark(options = {}) { - const { - valueDark = "dark", - valueLight = "", - window: window2 = defaultWindow - } = options; - const mode = useColorMode(__spreadProps$7(__spreadValues$e({}, options), { - onChanged: (mode2, defaultHandler) => { - var _a2; - if (options.onChanged) - (_a2 = options.onChanged) == null ? void 0 : _a2.call(options, mode2 === "dark"); - else - defaultHandler(mode2); - }, - modes: { - dark: valueDark, - light: valueLight - } - })); - const preferredDark = usePreferredDark({ window: window2 }); - const isDark = computed({ - get() { - return mode.value === "dark"; - }, - set(v) { - if (v === preferredDark.value) - mode.value = "auto"; - else - mode.value = v ? "dark" : "light"; - } - }); - return isDark; -} -var fnClone = (v) => JSON.parse(JSON.stringify(v)); -var fnBypass = (v) => v; -var fnSetSource = (source, value) => source.value = value; -function defaultDump(clone) { - return clone ? isFunction(clone) ? clone : fnClone : fnBypass; -} -function defaultParse(clone) { - return clone ? isFunction(clone) ? clone : fnClone : fnBypass; -} -function useManualRefHistory(source, options = {}) { - const { - clone = false, - dump = defaultDump(clone), - parse = defaultParse(clone), - setSource = fnSetSource - } = options; - function _createHistoryRecord() { - return markRaw({ - snapshot: dump(source.value), - timestamp: timestamp() - }); - } - const last = ref(_createHistoryRecord()); - const undoStack = ref([]); - const redoStack = ref([]); - const _setSource = (record) => { - setSource(source, parse(record.snapshot)); - last.value = record; - }; - const commit = () => { - undoStack.value.unshift(last.value); - last.value = _createHistoryRecord(); - if (options.capacity && undoStack.value.length > options.capacity) - undoStack.value.splice(options.capacity, Infinity); - if (redoStack.value.length) - redoStack.value.splice(0, redoStack.value.length); - }; - const clear = () => { - undoStack.value.splice(0, undoStack.value.length); - redoStack.value.splice(0, redoStack.value.length); - }; - const undo = () => { - const state = undoStack.value.shift(); - if (state) { - redoStack.value.unshift(last.value); - _setSource(state); - } - }; - const redo = () => { - const state = redoStack.value.shift(); - if (state) { - undoStack.value.unshift(last.value); - _setSource(state); - } - }; - const reset = () => { - _setSource(last.value); - }; - const history = computed(() => [last.value, ...undoStack.value]); - const canUndo = computed(() => undoStack.value.length > 0); - const canRedo = computed(() => redoStack.value.length > 0); - return { - source, - undoStack, - redoStack, - last, - history, - canUndo, - canRedo, - clear, - commit, - reset, - undo, - redo - }; -} -var __defProp$d = Object.defineProperty; -var __defProps$6 = Object.defineProperties; -var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$f = Object.getOwnPropertySymbols; -var __hasOwnProp$f = Object.prototype.hasOwnProperty; -var __propIsEnum$f = Object.prototype.propertyIsEnumerable; -var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$d = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$f.call(b, prop)) - __defNormalProp$d(a, prop, b[prop]); - if (__getOwnPropSymbols$f) - for (var prop of __getOwnPropSymbols$f(b)) { - if (__propIsEnum$f.call(b, prop)) - __defNormalProp$d(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b)); -function useRefHistory(source, options = {}) { - const { - deep = false, - flush = "pre", - eventFilter - } = options; - const { - eventFilter: composedFilter, - pause, - resume: resumeTracking, - isActive: isTracking - } = pausableFilter(eventFilter); - const { - ignoreUpdates, - ignorePrevAsyncUpdates, - stop - } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter }); - function setSource(source2, value) { - ignorePrevAsyncUpdates(); - ignoreUpdates(() => { - source2.value = value; - }); - } - const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$d({}, options), { clone: options.clone || deep, setSource })); - const { clear, commit: manualCommit } = manualHistory; - function commit() { - ignorePrevAsyncUpdates(); - manualCommit(); - } - function resume(commitNow) { - resumeTracking(); - if (commitNow) - commit(); - } - function batch(fn) { - let canceled = false; - const cancel = () => canceled = true; - ignoreUpdates(() => { - fn(cancel); - }); - if (!canceled) - commit(); - } - function dispose() { - stop(); - clear(); - } - return __spreadProps$6(__spreadValues$d({}, manualHistory), { - isTracking, - pause, - resume, - commit, - batch, - dispose - }); -} -var __defProp$c = Object.defineProperty; -var __defProps$52 = Object.defineProperties; -var __getOwnPropDescs$52 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$e = Object.getOwnPropertySymbols; -var __hasOwnProp$e = Object.prototype.hasOwnProperty; -var __propIsEnum$e = Object.prototype.propertyIsEnumerable; -var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$c = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$e.call(b, prop)) - __defNormalProp$c(a, prop, b[prop]); - if (__getOwnPropSymbols$e) - for (var prop of __getOwnPropSymbols$e(b)) { - if (__propIsEnum$e.call(b, prop)) - __defNormalProp$c(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$52 = (a, b) => __defProps$52(a, __getOwnPropDescs$52(b)); -function useDebouncedRefHistory(source, options = {}) { - const filter = options.debounce ? debounceFilter(options.debounce) : void 0; - const history = useRefHistory(source, __spreadProps$52(__spreadValues$c({}, options), { eventFilter: filter })); - return __spreadValues$c({}, history); -} -function useDeviceMotion(options = {}) { - const { - window: window2 = defaultWindow, - eventFilter = bypassFilter - } = options; - const acceleration = ref({ x: null, y: null, z: null }); - const rotationRate = ref({ alpha: null, beta: null, gamma: null }); - const interval = ref(0); - const accelerationIncludingGravity = ref({ - x: null, - y: null, - z: null - }); - if (window2) { - const onDeviceMotion = createFilterWrapper(eventFilter, (event) => { - acceleration.value = event.acceleration; - accelerationIncludingGravity.value = event.accelerationIncludingGravity; - rotationRate.value = event.rotationRate; - interval.value = event.interval; - }); - useEventListener(window2, "devicemotion", onDeviceMotion); - } - return { - acceleration, - accelerationIncludingGravity, - rotationRate, - interval - }; -} -function useDeviceOrientation(options = {}) { - const { window: window2 = defaultWindow } = options; - const isSupported = Boolean(window2 && "DeviceOrientationEvent" in window2); - const isAbsolute = ref(false); - const alpha = ref(null); - const beta = ref(null); - const gamma = ref(null); - if (window2 && isSupported) { - useEventListener(window2, "deviceorientation", (event) => { - isAbsolute.value = event.absolute; - alpha.value = event.alpha; - beta.value = event.beta; - gamma.value = event.gamma; - }); - } - return { - isSupported, - isAbsolute, - alpha, - beta, - gamma - }; -} -var DEVICE_PIXEL_RATIO_SCALES = [ - 1, - 1.325, - 1.4, - 1.5, - 1.8, - 2, - 2.4, - 2.5, - 2.75, - 3, - 3.5, - 4 -]; -function useDevicePixelRatio({ - window: window2 = defaultWindow -} = {}) { - if (!window2) { - return { - pixelRatio: ref(1) - }; - } - const pixelRatio = ref(window2.devicePixelRatio); - const handleDevicePixelRatio = () => { - pixelRatio.value = window2.devicePixelRatio; - }; - useEventListener(window2, "resize", handleDevicePixelRatio, { passive: true }); - DEVICE_PIXEL_RATIO_SCALES.forEach((dppx) => { - const mqlMin = useMediaQuery(`screen and (min-resolution: ${dppx}dppx)`); - const mqlMax = useMediaQuery(`screen and (max-resolution: ${dppx}dppx)`); - watch([mqlMin, mqlMax], handleDevicePixelRatio); - }); - return { pixelRatio }; -} -function usePermission(permissionDesc, options = {}) { - const { - controls = false, - navigator = defaultNavigator - } = options; - const isSupported = Boolean(navigator && "permissions" in navigator); - let permissionStatus; - const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc; - const state = ref(); - const onChange = () => { - if (permissionStatus) - state.value = permissionStatus.state; - }; - const query = createSingletonPromise(async () => { - if (!isSupported) - return; - if (!permissionStatus) { - try { - permissionStatus = await navigator.permissions.query(desc); - useEventListener(permissionStatus, "change", onChange); - onChange(); - } catch (e) { - state.value = "prompt"; - } - } - return permissionStatus; - }); - query(); - if (controls) { - return { - state, - isSupported, - query - }; - } else { - return state; - } -} -function useDevicesList(options = {}) { - const { - navigator = defaultNavigator, - requestPermissions = false, - constraints = { audio: true, video: true }, - onUpdated: onUpdated2 - } = options; - const devices = ref([]); - const videoInputs = computed(() => devices.value.filter((i) => i.kind === "videoinput")); - const audioInputs = computed(() => devices.value.filter((i) => i.kind === "audioinput")); - const audioOutputs = computed(() => devices.value.filter((i) => i.kind === "audiooutput")); - let isSupported = false; - const permissionGranted = ref(false); - async function update() { - if (!isSupported) - return; - devices.value = await navigator.mediaDevices.enumerateDevices(); - onUpdated2 == null ? void 0 : onUpdated2(devices.value); - } - async function ensurePermissions() { - if (!isSupported) - return false; - if (permissionGranted.value) - return true; - const { state, query } = usePermission("camera", { controls: true }); - await query(); - if (state.value !== "granted") { - const stream = await navigator.mediaDevices.getUserMedia(constraints); - stream.getTracks().forEach((t) => t.stop()); - update(); - permissionGranted.value = true; - } else { - permissionGranted.value = true; - } - return permissionGranted.value; - } - if (navigator) { - isSupported = Boolean(navigator.mediaDevices && navigator.mediaDevices.enumerateDevices); - if (isSupported) { - if (requestPermissions) - ensurePermissions(); - useEventListener(navigator.mediaDevices, "devicechange", update); - update(); - } - } - return { - devices, - ensurePermissions, - permissionGranted, - videoInputs, - audioInputs, - audioOutputs, - isSupported - }; -} -function useDisplayMedia(options = {}) { - var _a2, _b2; - const enabled = ref((_a2 = options.enabled) != null ? _a2 : false); - const video = options.video; - const audio = options.audio; - const { navigator = defaultNavigator } = options; - const isSupported = Boolean((_b2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _b2.getDisplayMedia); - const constraint = { audio, video }; - const stream = shallowRef(); - async function _start() { - if (!isSupported || stream.value) - return; - stream.value = await navigator.mediaDevices.getDisplayMedia(constraint); - return stream.value; - } - async function _stop() { - var _a22; - (_a22 = stream.value) == null ? void 0 : _a22.getTracks().forEach((t) => t.stop()); - stream.value = void 0; - } - function stop() { - _stop(); - enabled.value = false; - } - async function start() { - await _start(); - if (stream.value) - enabled.value = true; - return stream.value; - } - watch(enabled, (v) => { - if (v) - _start(); - else - _stop(); - }, { immediate: true }); - return { - isSupported, - stream, - start, - stop, - enabled - }; -} -function useDocumentVisibility({ document: document2 = defaultDocument } = {}) { - if (!document2) - return ref("visible"); - const visibility = ref(document2.visibilityState); - useEventListener(document2, "visibilitychange", () => { - visibility.value = document2.visibilityState; - }); - return visibility; -} -var __defProp$b = Object.defineProperty; -var __defProps$42 = Object.defineProperties; -var __getOwnPropDescs$42 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$d = Object.getOwnPropertySymbols; -var __hasOwnProp$d = Object.prototype.hasOwnProperty; -var __propIsEnum$d = Object.prototype.propertyIsEnumerable; -var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$b = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$d.call(b, prop)) - __defNormalProp$b(a, prop, b[prop]); - if (__getOwnPropSymbols$d) - for (var prop of __getOwnPropSymbols$d(b)) { - if (__propIsEnum$d.call(b, prop)) - __defNormalProp$b(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$42 = (a, b) => __defProps$42(a, __getOwnPropDescs$42(b)); -function useDraggable(target, options = {}) { - var _a2, _b2; - const draggingElement = (_a2 = options.draggingElement) != null ? _a2 : defaultWindow; - const position = ref((_b2 = options.initialValue) != null ? _b2 : { x: 0, y: 0 }); - const pressedDelta = ref(); - const filterEvent = (e) => { - if (options.pointerTypes) - return options.pointerTypes.includes(e.pointerType); - return true; - }; - const handleEvent = (e) => { - if (unref(options.preventDefault)) - e.preventDefault(); - if (unref(options.stopPropagation)) - e.stopPropagation(); - }; - const start = (e) => { - var _a22; - if (!filterEvent(e)) - return; - if (unref(options.exact) && e.target !== unref(target)) - return; - const rect = unref(target).getBoundingClientRect(); - const pos = { - x: e.pageX - rect.left, - y: e.pageY - rect.top - }; - if (((_a22 = options.onStart) == null ? void 0 : _a22.call(options, pos, e)) === false) - return; - pressedDelta.value = pos; - handleEvent(e); - }; - const move = (e) => { - var _a22; - if (!filterEvent(e)) - return; - if (!pressedDelta.value) - return; - position.value = { - x: e.pageX - pressedDelta.value.x, - y: e.pageY - pressedDelta.value.y - }; - (_a22 = options.onMove) == null ? void 0 : _a22.call(options, position.value, e); - handleEvent(e); - }; - const end = (e) => { - var _a22; - if (!filterEvent(e)) - return; - if (!pressedDelta.value) - return; - pressedDelta.value = void 0; - (_a22 = options.onEnd) == null ? void 0 : _a22.call(options, position.value, e); - handleEvent(e); - }; - if (isClient) { - useEventListener(target, "pointerdown", start, true); - useEventListener(draggingElement, "pointermove", move, true); - useEventListener(draggingElement, "pointerup", end, true); - } - return __spreadProps$42(__spreadValues$b({}, toRefs2(position)), { - position, - isDragging: computed(() => !!pressedDelta.value), - style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`) - }); -} -var __getOwnPropSymbols$c = Object.getOwnPropertySymbols; -var __hasOwnProp$c = Object.prototype.hasOwnProperty; -var __propIsEnum$c = Object.prototype.propertyIsEnumerable; -var __objRest$22 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$c.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$c) - for (var prop of __getOwnPropSymbols$c(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$c.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function useResizeObserver(target, callback, options = {}) { - const _a2 = options, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$22(_a2, ["window"]); - let observer; - const isSupported = window2 && "ResizeObserver" in window2; - const cleanup = () => { - if (observer) { - observer.disconnect(); - observer = void 0; - } - }; - const stopWatch = watch(() => unrefElement(target), (el) => { - cleanup(); - if (isSupported && window2 && el) { - observer = new ResizeObserver(callback); - observer.observe(el, observerOptions); - } - }, { immediate: true, flush: "post" }); - const stop = () => { - cleanup(); - stopWatch(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop - }; -} -function useElementBounding(target, options = {}) { - const { - reset = true, - windowResize = true, - windowScroll = true - } = options; - const height = ref(0); - const bottom = ref(0); - const left = ref(0); - const right = ref(0); - const top = ref(0); - const width = ref(0); - const x = ref(0); - const y = ref(0); - function update() { - const el = unrefElement(target); - if (!el) { - if (reset) { - height.value = 0; - bottom.value = 0; - left.value = 0; - right.value = 0; - top.value = 0; - width.value = 0; - x.value = 0; - y.value = 0; - } - return; - } - const rect = el.getBoundingClientRect(); - height.value = rect.height; - bottom.value = rect.bottom; - left.value = rect.left; - right.value = rect.right; - top.value = rect.top; - width.value = rect.width; - x.value = rect.x; - y.value = rect.y; - } - useResizeObserver(target, update); - watch(() => unrefElement(target), (ele) => !ele && update()); - if (windowScroll) - useEventListener("scroll", update, { passive: true }); - if (windowResize) - useEventListener("resize", update, { passive: true }); - return { - height, - bottom, - left, - right, - top, - width, - x, - y, - update - }; -} -function useRafFn(fn, options = {}) { - const { - immediate = true, - window: window2 = defaultWindow - } = options; - const isActive = ref(false); - function loop() { - if (!isActive.value || !window2) - return; - fn(); - window2.requestAnimationFrame(loop); - } - function resume() { - if (!isActive.value && window2) { - isActive.value = true; - loop(); - } - } - function pause() { - isActive.value = false; - } - if (immediate) - resume(); - tryOnScopeDispose(pause); - return { - isActive, - pause, - resume - }; -} -var __defProp$a = Object.defineProperty; -var __getOwnPropSymbols$b = Object.getOwnPropertySymbols; -var __hasOwnProp$b = Object.prototype.hasOwnProperty; -var __propIsEnum$b = Object.prototype.propertyIsEnumerable; -var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$a = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$b.call(b, prop)) - __defNormalProp$a(a, prop, b[prop]); - if (__getOwnPropSymbols$b) - for (var prop of __getOwnPropSymbols$b(b)) { - if (__propIsEnum$b.call(b, prop)) - __defNormalProp$a(a, prop, b[prop]); - } - return a; -}; -function useElementByPoint(options) { - const element = ref(null); - const { x, y } = options; - const controls = useRafFn(() => { - element.value = document.elementFromPoint(unref(x), unref(y)); - }); - return __spreadValues$a({ - element - }, controls); -} -function useElementHover(el) { - const isHovered = ref(false); - useEventListener(el, "mouseenter", () => isHovered.value = true); - useEventListener(el, "mouseleave", () => isHovered.value = false); - return isHovered; -} -function useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) { - const width = ref(initialSize.width); - const height = ref(initialSize.height); - useResizeObserver(target, ([entry]) => { - width.value = entry.contentRect.width; - height.value = entry.contentRect.height; - }, options); - watch(() => unrefElement(target), (ele) => { - width.value = ele ? initialSize.width : 0; - height.value = ele ? initialSize.height : 0; - }); - return { - width, - height - }; -} -function useElementVisibility(element, { window: window2 = defaultWindow, scrollTarget } = {}) { - const elementIsVisible = ref(false); - const testBounding = () => { - if (!window2) - return; - const document2 = window2.document; - if (!unref(element)) { - elementIsVisible.value = false; - } else { - const rect = unref(element).getBoundingClientRect(); - elementIsVisible.value = rect.top <= (window2.innerHeight || document2.documentElement.clientHeight) && rect.left <= (window2.innerWidth || document2.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0; - } - }; - tryOnMounted(testBounding); - if (window2) - tryOnMounted(() => useEventListener(unref(scrollTarget) || window2, "scroll", testBounding, { capture: false, passive: true })); - return elementIsVisible; -} -var events = /* @__PURE__ */ new Map(); -function useEventBus(key) { - const scope = getCurrentScope(); - function on(listener) { - const listeners = events.get(key) || []; - listeners.push(listener); - events.set(key, listeners); - const _off = () => off(listener); - scope == null ? void 0 : scope.cleanups.push(_off); - return _off; - } - function once(listener) { - function _listener(...args) { - off(_listener); - listener(...args); - } - return on(_listener); - } - function off(listener) { - const listeners = events.get(key); - if (!listeners) - return; - const index = listeners.indexOf(listener); - if (index > -1) - listeners.splice(index, 1); - if (!listeners.length) - events.delete(key); - } - function reset() { - events.delete(key); - } - function emit(event, payload) { - var _a2; - (_a2 = events.get(key)) == null ? void 0 : _a2.forEach((v) => v(event, payload)); - } - return { on, once, off, emit, reset }; -} -function useEventSource(url, events2 = [], options = {}) { - const event = ref(null); - const data = ref(null); - const status = ref("CONNECTING"); - const eventSource = ref(null); - const error = ref(null); - const { - withCredentials = false - } = options; - const close = () => { - if (eventSource.value) { - eventSource.value.close(); - eventSource.value = null; - status.value = "CLOSED"; - } - }; - const es = new EventSource(url, { withCredentials }); - eventSource.value = es; - es.onopen = () => { - status.value = "OPEN"; - error.value = null; - }; - es.onerror = (e) => { - status.value = "CLOSED"; - error.value = e; - }; - es.onmessage = (e) => { - event.value = null; - data.value = e.data; - }; - for (const event_name of events2) { - useEventListener(es, event_name, (e) => { - event.value = event_name; - data.value = e.data || null; - }); - } - tryOnScopeDispose(() => { - close(); - }); - return { - eventSource, - event, - data, - status, - error, - close - }; -} -function useEyeDropper(options = {}) { - const { initialValue = "" } = options; - const isSupported = Boolean(typeof window !== "undefined" && "EyeDropper" in window); - const sRGBHex = ref(initialValue); - async function open(openOptions) { - if (!isSupported) - return; - const eyeDropper = new window.EyeDropper(); - const result = await eyeDropper.open(openOptions); - sRGBHex.value = result.sRGBHex; - return result; - } - return { isSupported, sRGBHex, open }; -} -function useFavicon(newIcon = null, options = {}) { - const { - baseUrl = "", - rel = "icon", - document: document2 = defaultDocument - } = options; - const favicon = isRef(newIcon) ? newIcon : ref(newIcon); - const applyIcon = (icon) => { - document2 == null ? void 0 : document2.head.querySelectorAll(`link[rel*="${rel}"]`).forEach((el) => el.href = `${baseUrl}${icon}`); - }; - watch(favicon, (i, o) => { - if (isString(i) && i !== o) - applyIcon(i); - }, { immediate: true }); - return favicon; -} -var __defProp$9 = Object.defineProperty; -var __defProps$32 = Object.defineProperties; -var __getOwnPropDescs$32 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$a2 = Object.getOwnPropertySymbols; -var __hasOwnProp$a2 = Object.prototype.hasOwnProperty; -var __propIsEnum$a2 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$9 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$a2.call(b, prop)) - __defNormalProp$9(a, prop, b[prop]); - if (__getOwnPropSymbols$a2) - for (var prop of __getOwnPropSymbols$a2(b)) { - if (__propIsEnum$a2.call(b, prop)) - __defNormalProp$9(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$32 = (a, b) => __defProps$32(a, __getOwnPropDescs$32(b)); -var payloadMapping = { - json: "application/json", - text: "text/plain", - formData: "multipart/form-data" -}; -function isFetchOptions(obj) { - return containsProp(obj, "immediate", "refetch", "initialData", "timeout", "beforeFetch", "afterFetch", "onFetchError"); -} -function headersToObject(headers) { - if (headers instanceof Headers) - return Object.fromEntries([...headers.entries()]); - return headers; -} -function createFetch(config = {}) { - const _options = config.options || {}; - const _fetchOptions = config.fetchOptions || {}; - function useFactoryFetch(url, ...args) { - const computedUrl = computed(() => config.baseUrl ? joinPaths(unref(config.baseUrl), unref(url)) : unref(url)); - let options = _options; - let fetchOptions = _fetchOptions; - if (args.length > 0) { - if (isFetchOptions(args[0])) { - options = __spreadValues$9(__spreadValues$9({}, options), args[0]); - } else { - fetchOptions = __spreadProps$32(__spreadValues$9(__spreadValues$9({}, fetchOptions), args[0]), { - headers: __spreadValues$9(__spreadValues$9({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {}) - }); - } - } - if (args.length > 1 && isFetchOptions(args[1])) - options = __spreadValues$9(__spreadValues$9({}, options), args[1]); - return useFetch(computedUrl, fetchOptions, options); - } - return useFactoryFetch; -} -function useFetch(url, ...args) { - var _a2; - const supportsAbort = typeof AbortController === "function"; - let fetchOptions = {}; - let options = { immediate: true, refetch: false, timeout: 0 }; - const config = { - method: "GET", - type: "text", - payload: void 0 - }; - if (args.length > 0) { - if (isFetchOptions(args[0])) - options = __spreadValues$9(__spreadValues$9({}, options), args[0]); - else - fetchOptions = args[0]; - } - if (args.length > 1) { - if (isFetchOptions(args[1])) - options = __spreadValues$9(__spreadValues$9({}, options), args[1]); - } - const { - fetch = (_a2 = defaultWindow) == null ? void 0 : _a2.fetch, - initialData, - timeout - } = options; - const responseEvent = createEventHook(); - const errorEvent = createEventHook(); - const finallyEvent = createEventHook(); - const isFinished = ref(false); - const isFetching = ref(false); - const aborted = ref(false); - const statusCode = ref(null); - const response = shallowRef(null); - const error = shallowRef(null); - const data = shallowRef(initialData); - const canAbort = computed(() => supportsAbort && isFetching.value); - let controller; - let timer; - const abort = () => { - if (supportsAbort && controller) - controller.abort(); - }; - const loading = (isLoading) => { - isFetching.value = isLoading; - isFinished.value = !isLoading; - }; - if (timeout) - timer = useTimeoutFn(abort, timeout, { immediate: false }); - const execute = async (throwOnFailed = false) => { - var _a22; - loading(true); - error.value = null; - statusCode.value = null; - aborted.value = false; - controller = void 0; - if (supportsAbort) { - controller = new AbortController(); - controller.signal.onabort = () => aborted.value = true; - fetchOptions = __spreadProps$32(__spreadValues$9({}, fetchOptions), { - signal: controller.signal - }); - } - const defaultFetchOptions = { - method: config.method, - headers: {} - }; - if (config.payload) { - const headers = headersToObject(defaultFetchOptions.headers); - if (config.payloadType) - headers["Content-Type"] = (_a22 = payloadMapping[config.payloadType]) != null ? _a22 : config.payloadType; - defaultFetchOptions.body = config.payloadType === "json" ? JSON.stringify(unref(config.payload)) : unref(config.payload); - } - let isCanceled = false; - const context = { url: unref(url), options: fetchOptions, cancel: () => { - isCanceled = true; - } }; - if (options.beforeFetch) - Object.assign(context, await options.beforeFetch(context)); - if (isCanceled || !fetch) { - loading(false); - return Promise.resolve(null); - } - let responseData = null; - if (timer) - timer.start(); - return new Promise((resolve, reject) => { - var _a3; - fetch(context.url, __spreadProps$32(__spreadValues$9(__spreadValues$9({}, defaultFetchOptions), context.options), { - headers: __spreadValues$9(__spreadValues$9({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers)) - })).then(async (fetchResponse) => { - response.value = fetchResponse; - statusCode.value = fetchResponse.status; - responseData = await fetchResponse[config.type](); - if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300) - ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse })); - data.value = responseData; - if (!fetchResponse.ok) - throw new Error(fetchResponse.statusText); - responseEvent.trigger(fetchResponse); - return resolve(fetchResponse); - }).catch(async (fetchError) => { - let errorData = fetchError.message || fetchError.name; - if (options.onFetchError) - ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value })); - data.value = responseData; - error.value = errorData; - errorEvent.trigger(fetchError); - if (throwOnFailed) - return reject(fetchError); - return resolve(null); - }).finally(() => { - loading(false); - if (timer) - timer.stop(); - finallyEvent.trigger(null); - }); - }); - }; - watch(() => [ - unref(url), - unref(options.refetch) - ], () => unref(options.refetch) && execute(), { deep: true }); - const shell = { - isFinished, - statusCode, - response, - error, - data, - isFetching, - canAbort, - aborted, - abort, - execute, - onFetchResponse: responseEvent.on, - onFetchError: errorEvent.on, - onFetchFinally: finallyEvent.on, - get: setMethod("GET"), - put: setMethod("PUT"), - post: setMethod("POST"), - delete: setMethod("DELETE"), - patch: setMethod("PATCH"), - head: setMethod("HEAD"), - options: setMethod("OPTIONS"), - json: setType("json"), - text: setType("text"), - blob: setType("blob"), - arrayBuffer: setType("arrayBuffer"), - formData: setType("formData") - }; - function setMethod(method) { - return (payload, payloadType) => { - if (!isFetching.value) { - config.method = method; - config.payload = payload; - config.payloadType = payloadType; - if (isRef(config.payload)) { - watch(() => [ - unref(config.payload), - unref(options.refetch) - ], () => unref(options.refetch) && execute(), { deep: true }); - } - if (!payloadType && unref(payload) && Object.getPrototypeOf(unref(payload)) === Object.prototype) - config.payloadType = "json"; - return shell; - } - return void 0; - }; - } - function waitUntilFinished() { - return new Promise((resolve, reject) => { - until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2)); - }); - } - function setType(type) { - return () => { - if (!isFetching.value) { - config.type = type; - return __spreadProps$32(__spreadValues$9({}, shell), { - then(onFulfilled, onRejected) { - return waitUntilFinished().then(onFulfilled, onRejected); - } - }); - } - return void 0; - }; - } - if (options.immediate) - setTimeout(execute, 0); - return __spreadProps$32(__spreadValues$9({}, shell), { - then(onFulfilled, onRejected) { - return waitUntilFinished().then(onFulfilled, onRejected); - } - }); -} -function joinPaths(start, end) { - if (!start.endsWith("/") && !end.startsWith("/")) - return `${start}/${end}`; - return `${start}${end}`; -} -var __defProp$82 = Object.defineProperty; -var __getOwnPropSymbols$92 = Object.getOwnPropertySymbols; -var __hasOwnProp$92 = Object.prototype.hasOwnProperty; -var __propIsEnum$92 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$82 = (obj, key, value) => key in obj ? __defProp$82(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$82 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$92.call(b, prop)) - __defNormalProp$82(a, prop, b[prop]); - if (__getOwnPropSymbols$92) - for (var prop of __getOwnPropSymbols$92(b)) { - if (__propIsEnum$92.call(b, prop)) - __defNormalProp$82(a, prop, b[prop]); - } - return a; -}; -function useFileSystemAccess(options = {}) { - const { - window: _window = defaultWindow, - dataType = "Text" - } = unref(options); - const window2 = _window; - const isSupported = Boolean(window2 && "showSaveFilePicker" in window2 && "showOpenFilePicker" in window2); - const fileHandle = ref(); - const data = ref(); - const file = ref(); - const fileName = computed(() => { - var _a2, _b2; - return (_b2 = (_a2 = file.value) == null ? void 0 : _a2.name) != null ? _b2 : ""; - }); - const fileMIME = computed(() => { - var _a2, _b2; - return (_b2 = (_a2 = file.value) == null ? void 0 : _a2.type) != null ? _b2 : ""; - }); - const fileSize = computed(() => { - var _a2, _b2; - return (_b2 = (_a2 = file.value) == null ? void 0 : _a2.size) != null ? _b2 : 0; - }); - const fileLastModified = computed(() => { - var _a2, _b2; - return (_b2 = (_a2 = file.value) == null ? void 0 : _a2.lastModified) != null ? _b2 : 0; - }); - async function open(_options = {}) { - if (!isSupported) - return; - const [handle] = await window2.showOpenFilePicker(__spreadValues$82(__spreadValues$82({}, unref(options)), _options)); - fileHandle.value = handle; - await updateFile(); - await updateData(); - } - async function create(_options = {}) { - if (!isSupported) - return; - fileHandle.value = await window2.showSaveFilePicker(__spreadValues$82(__spreadValues$82({}, unref(options)), _options)); - data.value = void 0; - await updateFile(); - await updateData(); - } - async function save(_options = {}) { - if (!isSupported) - return; - if (!fileHandle.value) - return saveAs(_options); - if (data.value) { - const writableStream = await fileHandle.value.createWritable(); - await writableStream.write(data.value); - await writableStream.close(); - } - await updateFile(); - } - async function saveAs(_options = {}) { - if (!isSupported) - return; - fileHandle.value = await window2.showSaveFilePicker(__spreadValues$82(__spreadValues$82({}, unref(options)), _options)); - if (data.value) { - const writableStream = await fileHandle.value.createWritable(); - await writableStream.write(data.value); - await writableStream.close(); - } - await updateFile(); - } - async function updateFile() { - var _a2; - file.value = await ((_a2 = fileHandle.value) == null ? void 0 : _a2.getFile()); - } - async function updateData() { - var _a2, _b2; - if (unref(dataType) === "Text") - data.value = await ((_a2 = file.value) == null ? void 0 : _a2.text()); - if (unref(dataType) === "ArrayBuffer") - data.value = await ((_b2 = file.value) == null ? void 0 : _b2.arrayBuffer()); - if (unref(dataType) === "Blob") - data.value = file.value; - } - watch(() => unref(dataType), updateData); - return { - isSupported, - data, - file, - fileName, - fileMIME, - fileSize, - fileLastModified, - open, - create, - save, - saveAs, - updateData - }; -} -function useFocus(target, options = {}) { - const { initialValue = false } = options; - const activeElement = useActiveElement(options); - const targetElement = computed(() => unrefElement(target)); - const focused = computed({ - get() { - return activeElement.value === targetElement.value; - }, - set(value) { - var _a2, _b2; - if (!value && focused.value) - (_a2 = targetElement.value) == null ? void 0 : _a2.blur(); - if (value && !focused.value) - (_b2 = targetElement.value) == null ? void 0 : _b2.focus(); - } - }); - watch(targetElement, () => { - focused.value = initialValue; - }, { immediate: true, flush: "post" }); - return { focused }; -} -function useFocusWithin(target, options = {}) { - const activeElement = useActiveElement(options); - const targetElement = computed(() => unrefElement(target)); - const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false); - return { focused }; -} -function useFps(options) { - var _a2; - const fps = ref(0); - if (typeof performance === "undefined") - return fps; - const every = (_a2 = options == null ? void 0 : options.every) != null ? _a2 : 10; - let last = performance.now(); - let ticks = 0; - useRafFn(() => { - ticks += 1; - if (ticks >= every) { - const now2 = performance.now(); - const diff = now2 - last; - fps.value = Math.round(1e3 / (diff / ticks)); - last = now2; - ticks = 0; - } - }); - return fps; -} -var functionsMap = [ - [ - "requestFullscreen", - "exitFullscreen", - "fullscreenElement", - "fullscreenEnabled", - "fullscreenchange", - "fullscreenerror" - ], - [ - "webkitRequestFullscreen", - "webkitExitFullscreen", - "webkitFullscreenElement", - "webkitFullscreenEnabled", - "webkitfullscreenchange", - "webkitfullscreenerror" - ], - [ - "webkitRequestFullScreen", - "webkitCancelFullScreen", - "webkitCurrentFullScreenElement", - "webkitCancelFullScreen", - "webkitfullscreenchange", - "webkitfullscreenerror" - ], - [ - "mozRequestFullScreen", - "mozCancelFullScreen", - "mozFullScreenElement", - "mozFullScreenEnabled", - "mozfullscreenchange", - "mozfullscreenerror" - ], - [ - "msRequestFullscreen", - "msExitFullscreen", - "msFullscreenElement", - "msFullscreenEnabled", - "MSFullscreenChange", - "MSFullscreenError" - ] -]; -function useFullscreen(target, options = {}) { - const { document: document2 = defaultDocument, autoExit = false } = options; - const targetRef = target || (document2 == null ? void 0 : document2.querySelector("html")); - const isFullscreen = ref(false); - let isSupported = false; - let map = functionsMap[0]; - if (!document2) { - isSupported = false; - } else { - for (const m of functionsMap) { - if (m[1] in document2) { - map = m; - isSupported = true; - break; - } - } - } - const [REQUEST, EXIT, ELEMENT, , EVENT] = map; - async function exit() { - if (!isSupported) - return; - if (document2 == null ? void 0 : document2[ELEMENT]) - await document2[EXIT](); - isFullscreen.value = false; - } - async function enter() { - if (!isSupported) - return; - await exit(); - const target2 = unrefElement(targetRef); - if (target2) { - await target2[REQUEST](); - isFullscreen.value = true; - } - } - async function toggle() { - if (isFullscreen.value) - await exit(); - else - await enter(); - } - if (document2) { - useEventListener(document2, EVENT, () => { - isFullscreen.value = !!(document2 == null ? void 0 : document2[ELEMENT]); - }, false); - } - if (autoExit) - tryOnScopeDispose(exit); - return { - isSupported, - isFullscreen, - enter, - exit, - toggle - }; -} -function mapGamepadToXbox360Controller(gamepad) { - return computed(() => { - if (gamepad.value) { - return { - buttons: { - a: gamepad.value.buttons[0], - b: gamepad.value.buttons[1], - x: gamepad.value.buttons[2], - y: gamepad.value.buttons[3] - }, - bumper: { - left: gamepad.value.buttons[4], - right: gamepad.value.buttons[5] - }, - triggers: { - left: gamepad.value.buttons[6], - right: gamepad.value.buttons[7] - }, - stick: { - left: { - horizontal: gamepad.value.axes[0], - vertical: gamepad.value.axes[1], - button: gamepad.value.buttons[10] - }, - right: { - horizontal: gamepad.value.axes[2], - vertical: gamepad.value.axes[3], - button: gamepad.value.buttons[11] - } - }, - dpad: { - up: gamepad.value.buttons[12], - down: gamepad.value.buttons[13], - left: gamepad.value.buttons[14], - right: gamepad.value.buttons[15] - }, - back: gamepad.value.buttons[8], - start: gamepad.value.buttons[9] - }; - } - return null; - }); -} -function useGamepad(options = {}) { - const { - navigator = defaultNavigator - } = options; - const isSupported = navigator && "getGamepads" in navigator; - const gamepads = ref([]); - const onConnectedHook = createEventHook(); - const onDisconnectedHook = createEventHook(); - const stateFromGamepad = (gamepad) => { - const hapticActuators = []; - const vibrationActuator = "vibrationActuator" in gamepad ? gamepad.vibrationActuator : null; - if (vibrationActuator) - hapticActuators.push(vibrationActuator); - if (gamepad.hapticActuators) - hapticActuators.push(...gamepad.hapticActuators); - return { - id: gamepad.id, - hapticActuators, - index: gamepad.index, - mapping: gamepad.mapping, - connected: gamepad.connected, - timestamp: gamepad.timestamp, - axes: gamepad.axes.map((axes) => axes), - buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value })) - }; - }; - const updateGamepadState = () => { - const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || []; - for (let i = 0; i < _gamepads.length; ++i) { - const gamepad = _gamepads[i]; - if (gamepad) { - const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index); - if (index > -1) - gamepads.value[index] = stateFromGamepad(gamepad); - } - } - }; - const { isActive, pause, resume } = useRafFn(updateGamepadState); - const onGamepadConnected = (gamepad) => { - if (!gamepads.value.some(({ index }) => index === gamepad.index)) { - gamepads.value.push(stateFromGamepad(gamepad)); - onConnectedHook.trigger(gamepad.index); - } - resume(); - }; - const onGamepadDisconnected = (gamepad) => { - gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index); - onDisconnectedHook.trigger(gamepad.index); - }; - useEventListener("gamepadconnected", (e) => onGamepadConnected(e.gamepad)); - useEventListener("gamepaddisconnected", (e) => onGamepadDisconnected(e.gamepad)); - tryOnMounted(() => { - const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || []; - if (_gamepads) { - for (let i = 0; i < _gamepads.length; ++i) { - const gamepad = _gamepads[i]; - if (gamepad) - onGamepadConnected(gamepad); - } - } - }); - pause(); - return { - isSupported, - onConnected: onConnectedHook.on, - onDisconnected: onDisconnectedHook.on, - gamepads, - pause, - resume, - isActive - }; -} -function useGeolocation(options = {}) { - const { - enableHighAccuracy = true, - maximumAge = 3e4, - timeout = 27e3, - navigator = defaultNavigator - } = options; - const isSupported = navigator && "geolocation" in navigator; - const locatedAt = ref(null); - const error = ref(null); - const coords = ref({ - accuracy: 0, - latitude: Infinity, - longitude: Infinity, - altitude: null, - altitudeAccuracy: null, - heading: null, - speed: null - }); - function updatePosition(position) { - locatedAt.value = position.timestamp; - coords.value = position.coords; - error.value = null; - } - let watcher; - if (isSupported) { - watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, { - enableHighAccuracy, - maximumAge, - timeout - }); - } - tryOnScopeDispose(() => { - if (watcher && navigator) - navigator.geolocation.clearWatch(watcher); - }); - return { - isSupported, - coords, - locatedAt, - error - }; -} -var defaultEvents$1 = ["mousemove", "mousedown", "resize", "keydown", "touchstart", "wheel"]; -var oneMinute = 6e4; -function useIdle(timeout = oneMinute, options = {}) { - const { - initialState = false, - listenForVisibilityChange = true, - events: events2 = defaultEvents$1, - window: window2 = defaultWindow, - eventFilter = throttleFilter(50) - } = options; - const idle = ref(initialState); - const lastActive = ref(timestamp()); - let timer; - const onEvent = createFilterWrapper(eventFilter, () => { - idle.value = false; - lastActive.value = timestamp(); - clearTimeout(timer); - timer = setTimeout(() => idle.value = true, timeout); - }); - if (window2) { - const document2 = window2.document; - for (const event of events2) - useEventListener(window2, event, onEvent, { passive: true }); - if (listenForVisibilityChange) { - useEventListener(document2, "visibilitychange", () => { - if (!document2.hidden) - onEvent(); - }); - } - } - timer = setTimeout(() => idle.value = true, timeout); - return { idle, lastActive }; -} -function useScroll(element, options = {}) { - const { - throttle = 0, - idle = 200, - onStop = noop, - onScroll = noop, - offset = { - left: 0, - right: 0, - top: 0, - bottom: 0 - }, - eventListenerOptions = { - capture: false, - passive: true - } - } = options; - const x = ref(0); - const y = ref(0); - const isScrolling = ref(false); - const arrivedState = reactive({ - left: true, - right: false, - top: true, - bottom: false - }); - const directions = reactive({ - left: false, - right: false, - top: false, - bottom: false - }); - if (element) { - const onScrollEnd = useDebounceFn((e) => { - isScrolling.value = false; - directions.left = false; - directions.right = false; - directions.top = false; - directions.bottom = false; - onStop(e); - }, throttle + idle); - const onScrollHandler = (e) => { - const eventTarget = e.target === document ? e.target.documentElement : e.target; - const scrollLeft = eventTarget.scrollLeft; - directions.left = scrollLeft < x.value; - directions.right = scrollLeft > x.value; - arrivedState.left = scrollLeft <= 0 + (offset.left || 0); - arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0); - x.value = scrollLeft; - const scrollTop = eventTarget.scrollTop; - directions.top = scrollTop < y.value; - directions.bottom = scrollTop > y.value; - arrivedState.top = scrollTop <= 0 + (offset.top || 0); - arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0); - y.value = scrollTop; - isScrolling.value = true; - onScrollEnd(e); - onScroll(e); - }; - useEventListener(element, "scroll", throttle ? useThrottleFn(onScrollHandler, throttle) : onScrollHandler, eventListenerOptions); - } - return { - x, - y, - isScrolling, - arrivedState, - directions - }; -} -var __defProp$72 = Object.defineProperty; -var __defProps$22 = Object.defineProperties; -var __getOwnPropDescs$22 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$82 = Object.getOwnPropertySymbols; -var __hasOwnProp$82 = Object.prototype.hasOwnProperty; -var __propIsEnum$82 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$72 = (obj, key, value) => key in obj ? __defProp$72(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$72 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$82.call(b, prop)) - __defNormalProp$72(a, prop, b[prop]); - if (__getOwnPropSymbols$82) - for (var prop of __getOwnPropSymbols$82(b)) { - if (__propIsEnum$82.call(b, prop)) - __defNormalProp$72(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$22 = (a, b) => __defProps$22(a, __getOwnPropDescs$22(b)); -function useInfiniteScroll(element, onLoadMore, options = {}) { - var _a2; - const state = reactive(useScroll(element, __spreadProps$22(__spreadValues$72({}, options), { - offset: __spreadValues$72({ - bottom: (_a2 = options.distance) != null ? _a2 : 0 - }, options.offset) - }))); - watch(() => state.arrivedState.bottom, (v) => { - if (v) - onLoadMore(state); - }); -} -function useIntersectionObserver(target, callback, options = {}) { - const { - root, - rootMargin = "0px", - threshold = 0.1, - window: window2 = defaultWindow - } = options; - const isSupported = window2 && "IntersectionObserver" in window2; - let cleanup = noop; - const stopWatch = isSupported ? watch(() => ({ - el: unrefElement(target), - root: unrefElement(root) - }), ({ el, root: root2 }) => { - cleanup(); - if (!el) - return; - const observer = new IntersectionObserver(callback, { - root: root2, - rootMargin, - threshold - }); - observer.observe(el); - cleanup = () => { - observer.disconnect(); - cleanup = noop; - }; - }, { immediate: true, flush: "post" }) : noop; - const stop = () => { - cleanup(); - stopWatch(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop - }; -} -var defaultEvents = ["mousedown", "mouseup", "keydown", "keyup"]; -function useKeyModifier(modifier, options = {}) { - const { - events: events2 = defaultEvents, - document: document2 = defaultDocument, - initial = null - } = options; - const state = ref(initial); - if (document2) { - events2.forEach((listenerEvent) => { - useEventListener(document2, listenerEvent, (evt) => { - if (typeof evt.getModifierState === "function") - state.value = evt.getModifierState(modifier); - }); - }); - } - return state; -} -function useLocalStorage(key, initialValue, options = {}) { - const { window: window2 = defaultWindow } = options; - return useStorage(key, initialValue, window2 == null ? void 0 : window2.localStorage, options); -} -var DefaultMagicKeysAliasMap = { - ctrl: "control", - command: "meta", - cmd: "meta", - option: "alt", - up: "arrowup", - down: "arrowdown", - left: "arrowleft", - right: "arrowright" -}; -function useMagicKeys(options = {}) { - const { - reactive: useReactive = false, - target = defaultWindow, - aliasMap = DefaultMagicKeysAliasMap, - passive = true, - onEventFired = noop - } = options; - const current = reactive(/* @__PURE__ */ new Set()); - const obj = { toJSON() { - return {}; - }, current }; - const refs = useReactive ? reactive(obj) : obj; - const metaDeps = /* @__PURE__ */ new Set(); - function setRefs(key, value) { - if (key in refs) { - if (useReactive) - refs[key] = value; - else - refs[key].value = value; - } - } - function updateRefs(e, value) { - var _a2, _b2; - const key = (_a2 = e.key) == null ? void 0 : _a2.toLowerCase(); - const code = (_b2 = e.code) == null ? void 0 : _b2.toLowerCase(); - const values = [code, key].filter(Boolean); - if (code) { - if (value) - current.add(e.code); - else - current.delete(e.code); - } - for (const key2 of values) - setRefs(key2, value); - if (key === "meta" && !value) { - metaDeps.forEach((key2) => { - current.delete(key2); - setRefs(key2, false); - }); - metaDeps.clear(); - } else if (e.getModifierState("Meta") && value) { - [...current, ...values].forEach((key2) => metaDeps.add(key2)); - } - } - if (target) { - useEventListener(target, "keydown", (e) => { - updateRefs(e, true); - return onEventFired(e); - }, { passive }); - useEventListener(target, "keyup", (e) => { - updateRefs(e, false); - return onEventFired(e); - }, { passive }); - } - const proxy = new Proxy(refs, { - get(target2, prop, rec) { - if (typeof prop !== "string") - return Reflect.get(target2, prop, rec); - prop = prop.toLowerCase(); - if (prop in aliasMap) - prop = aliasMap[prop]; - if (!(prop in refs)) { - if (/[+_-]/.test(prop)) { - const keys2 = prop.split(/[+_-]/g).map((i) => i.trim()); - refs[prop] = computed(() => keys2.every((key) => unref(proxy[key]))); - } else { - refs[prop] = ref(false); - } - } - const r = Reflect.get(target2, prop, rec); - return useReactive ? unref(r) : r; - } - }); - return proxy; -} -var __defProp$62 = Object.defineProperty; -var __getOwnPropSymbols$72 = Object.getOwnPropertySymbols; -var __hasOwnProp$72 = Object.prototype.hasOwnProperty; -var __propIsEnum$72 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$62 = (obj, key, value) => key in obj ? __defProp$62(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$62 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$72.call(b, prop)) - __defNormalProp$62(a, prop, b[prop]); - if (__getOwnPropSymbols$72) - for (var prop of __getOwnPropSymbols$72(b)) { - if (__propIsEnum$72.call(b, prop)) - __defNormalProp$62(a, prop, b[prop]); - } - return a; -}; -function usingElRef(source, cb) { - if (unref(source)) - cb(unref(source)); -} -function timeRangeToArray(timeRanges) { - let ranges = []; - for (let i = 0; i < timeRanges.length; ++i) - ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]]; - return ranges; -} -function tracksToArray(tracks) { - return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType })); -} -var defaultOptions = { - src: "", - tracks: [] -}; -function useMediaControls(target, options = {}) { - options = __spreadValues$62(__spreadValues$62({}, defaultOptions), options); - const { - document: document2 = defaultDocument - } = options; - const currentTime = ref(0); - const duration = ref(0); - const seeking = ref(false); - const volume = ref(1); - const waiting = ref(false); - const ended = ref(false); - const playing = ref(false); - const rate = ref(1); - const stalled = ref(false); - const buffered = ref([]); - const tracks = ref([]); - const selectedTrack = ref(-1); - const isPictureInPicture = ref(false); - const muted = ref(false); - const supportsPictureInPicture = document2 && "pictureInPictureEnabled" in document2; - const sourceErrorEvent = createEventHook(); - const disableTrack = (track) => { - usingElRef(target, (el) => { - if (track) { - const id = isNumber(track) ? track : track.id; - el.textTracks[id].mode = "disabled"; - } else { - for (let i = 0; i < el.textTracks.length; ++i) - el.textTracks[i].mode = "disabled"; - } - selectedTrack.value = -1; - }); - }; - const enableTrack = (track, disableTracks = true) => { - usingElRef(target, (el) => { - const id = isNumber(track) ? track : track.id; - if (disableTracks) - disableTrack(); - el.textTracks[id].mode = "showing"; - selectedTrack.value = id; - }); - }; - const togglePictureInPicture = () => { - return new Promise((resolve, reject) => { - usingElRef(target, async (el) => { - if (supportsPictureInPicture) { - if (!isPictureInPicture.value) { - el.requestPictureInPicture().then(resolve).catch(reject); - } else { - document2.exitPictureInPicture().then(resolve).catch(reject); - } - } - }); - }); - }; - watchEffect(() => { - if (!document2) - return; - const el = unref(target); - if (!el) - return; - const src = unref(options.src); - let sources = []; - if (!src) - return; - if (isString(src)) - sources = [{ src }]; - else if (Array.isArray(src)) - sources = src; - else if (isObject(src)) - sources = [src]; - el.querySelectorAll("source").forEach((e) => { - e.removeEventListener("error", sourceErrorEvent.trigger); - e.remove(); - }); - sources.forEach(({ src: src2, type }) => { - const source = document2.createElement("source"); - source.setAttribute("src", src2); - source.setAttribute("type", type || ""); - source.addEventListener("error", sourceErrorEvent.trigger); - el.appendChild(source); - }); - el.load(); - }); - tryOnScopeDispose(() => { - const el = unref(target); - if (!el) - return; - el.querySelectorAll("source").forEach((e) => e.removeEventListener("error", sourceErrorEvent.trigger)); - }); - watch(volume, (vol) => { - const el = unref(target); - if (!el) - return; - el.volume = vol; - }); - watch(muted, (mute) => { - const el = unref(target); - if (!el) - return; - el.muted = mute; - }); - watch(rate, (rate2) => { - const el = unref(target); - if (!el) - return; - el.playbackRate = rate2; - }); - watchEffect(() => { - if (!document2) - return; - const textTracks = unref(options.tracks); - const el = unref(target); - if (!textTracks || !textTracks.length || !el) - return; - el.querySelectorAll("track").forEach((e) => e.remove()); - textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => { - const track = document2.createElement("track"); - track.default = isDefault || false; - track.kind = kind; - track.label = label; - track.src = src; - track.srclang = srcLang; - if (track.default) - selectedTrack.value = i; - el.appendChild(track); - }); - }); - const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => { - const el = unref(target); - if (!el) - return; - el.currentTime = time; - }); - const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => { - const el = unref(target); - if (!el) - return; - isPlaying ? el.play() : el.pause(); - }); - useEventListener(target, "timeupdate", () => ignoreCurrentTimeUpdates(() => currentTime.value = unref(target).currentTime)); - useEventListener(target, "durationchange", () => duration.value = unref(target).duration); - useEventListener(target, "progress", () => buffered.value = timeRangeToArray(unref(target).buffered)); - useEventListener(target, "seeking", () => seeking.value = true); - useEventListener(target, "seeked", () => seeking.value = false); - useEventListener(target, "waiting", () => waiting.value = true); - useEventListener(target, "playing", () => waiting.value = false); - useEventListener(target, "ratechange", () => rate.value = unref(target).playbackRate); - useEventListener(target, "stalled", () => stalled.value = true); - useEventListener(target, "ended", () => ended.value = true); - useEventListener(target, "pause", () => ignorePlayingUpdates(() => playing.value = false)); - useEventListener(target, "play", () => ignorePlayingUpdates(() => playing.value = true)); - useEventListener(target, "enterpictureinpicture", () => isPictureInPicture.value = true); - useEventListener(target, "leavepictureinpicture", () => isPictureInPicture.value = false); - useEventListener(target, "volumechange", () => { - const el = unref(target); - if (!el) - return; - volume.value = el.volume; - muted.value = el.muted; - }); - const listeners = []; - const stop = watch([target], () => { - const el = unref(target); - if (!el) - return; - stop(); - listeners[0] = useEventListener(el.textTracks, "addtrack", () => tracks.value = tracksToArray(el.textTracks)); - listeners[1] = useEventListener(el.textTracks, "removetrack", () => tracks.value = tracksToArray(el.textTracks)); - listeners[2] = useEventListener(el.textTracks, "change", () => tracks.value = tracksToArray(el.textTracks)); - }); - tryOnScopeDispose(() => listeners.forEach((listener) => listener())); - return { - currentTime, - duration, - waiting, - seeking, - ended, - stalled, - buffered, - playing, - rate, - volume, - muted, - tracks, - selectedTrack, - enableTrack, - disableTrack, - supportsPictureInPicture, - togglePictureInPicture, - isPictureInPicture, - onSourceError: sourceErrorEvent.on - }; -} -var getMapVue2Compat = () => { - const data = reactive({}); - return { - get: (key) => data[key], - set: (key, value) => set(data, key, value), - has: (key) => Object.prototype.hasOwnProperty.call(data, key), - delete: (key) => del(data, key), - clear: () => { - Object.keys(data).forEach((key) => { - del(data, key); - }); - } - }; -}; -function useMemoize(resolver, options) { - const initCache = () => { - if (options == null ? void 0 : options.cache) - return reactive(options.cache); - if (isVue2) - return getMapVue2Compat(); - return reactive(/* @__PURE__ */ new Map()); - }; - const cache = initCache(); - const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args); - const _loadData = (key, ...args) => { - cache.set(key, resolver(...args)); - return cache.get(key); - }; - const loadData = (...args) => _loadData(generateKey(...args), ...args); - const deleteData = (...args) => { - cache.delete(generateKey(...args)); - }; - const clearData = () => { - cache.clear(); - }; - const memoized = (...args) => { - const key = generateKey(...args); - if (cache.has(key)) - return cache.get(key); - return _loadData(key, ...args); - }; - memoized.load = loadData; - memoized.delete = deleteData; - memoized.clear = clearData; - memoized.generateKey = generateKey; - memoized.cache = cache; - return memoized; -} -function useMemory(options = {}) { - const memory = ref(); - const isSupported = typeof performance !== "undefined" && "memory" in performance; - if (isSupported) { - const { interval = 1e3 } = options; - useIntervalFn(() => { - memory.value = performance.memory; - }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback }); - } - return { isSupported, memory }; -} -function useMounted() { - const isMounted = ref(false); - onMounted(() => { - isMounted.value = true; - }); - return isMounted; -} -function useMouse(options = {}) { - const { - type = "page", - touch = true, - resetOnTouchEnds = false, - initialValue = { x: 0, y: 0 }, - window: window2 = defaultWindow, - eventFilter - } = options; - const x = ref(initialValue.x); - const y = ref(initialValue.y); - const sourceType = ref(null); - const mouseHandler = (event) => { - if (type === "page") { - x.value = event.pageX; - y.value = event.pageY; - } else if (type === "client") { - x.value = event.clientX; - y.value = event.clientY; - } - sourceType.value = "mouse"; - }; - const reset = () => { - x.value = initialValue.x; - y.value = initialValue.y; - }; - const touchHandler = (event) => { - if (event.touches.length > 0) { - const touch2 = event.touches[0]; - if (type === "page") { - x.value = touch2.pageX; - y.value = touch2.pageY; - } else if (type === "client") { - x.value = touch2.clientX; - y.value = touch2.clientY; - } - sourceType.value = "touch"; - } - }; - const mouseHandlerWrapper = (event) => { - return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {}); - }; - const touchHandlerWrapper = (event) => { - return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {}); - }; - if (window2) { - useEventListener(window2, "mousemove", mouseHandlerWrapper, { passive: true }); - useEventListener(window2, "dragover", mouseHandlerWrapper, { passive: true }); - if (touch) { - useEventListener(window2, "touchstart", touchHandlerWrapper, { passive: true }); - useEventListener(window2, "touchmove", touchHandlerWrapper, { passive: true }); - if (resetOnTouchEnds) - useEventListener(window2, "touchend", reset, { passive: true }); - } - } - return { - x, - y, - sourceType - }; -} -function useMouseInElement(target, options = {}) { - const { - handleOutside = true, - window: window2 = defaultWindow - } = options; - const { x, y, sourceType } = useMouse(options); - const targetRef = ref(target != null ? target : window2 == null ? void 0 : window2.document.body); - const elementX = ref(0); - const elementY = ref(0); - const elementPositionX = ref(0); - const elementPositionY = ref(0); - const elementHeight = ref(0); - const elementWidth = ref(0); - const isOutside = ref(false); - let stop = () => { - }; - if (window2) { - stop = watch([targetRef, x, y], () => { - const el = unrefElement(targetRef); - if (!el) - return; - const { - left, - top, - width, - height - } = el.getBoundingClientRect(); - elementPositionX.value = left + window2.pageXOffset; - elementPositionY.value = top + window2.pageYOffset; - elementHeight.value = height; - elementWidth.value = width; - const elX = x.value - elementPositionX.value; - const elY = y.value - elementPositionY.value; - isOutside.value = elX < 0 || elY < 0 || elX > elementWidth.value || elY > elementHeight.value; - if (handleOutside || !isOutside.value) { - elementX.value = elX; - elementY.value = elY; - } - }, { immediate: true }); - } - return { - x, - y, - sourceType, - elementX, - elementY, - elementPositionX, - elementPositionY, - elementHeight, - elementWidth, - isOutside, - stop - }; -} -function useMousePressed(options = {}) { - const { - touch = true, - drag = true, - initialValue = false, - window: window2 = defaultWindow - } = options; - const pressed = ref(initialValue); - const sourceType = ref(null); - if (!window2) { - return { - pressed, - sourceType - }; - } - const onPressed = (srcType) => () => { - pressed.value = true; - sourceType.value = srcType; - }; - const onReleased = () => { - pressed.value = false; - sourceType.value = null; - }; - const target = computed(() => unrefElement(options.target) || window2); - useEventListener(target, "mousedown", onPressed("mouse"), { passive: true }); - useEventListener(window2, "mouseleave", onReleased, { passive: true }); - useEventListener(window2, "mouseup", onReleased, { passive: true }); - if (drag) { - useEventListener(target, "dragstart", onPressed("mouse"), { passive: true }); - useEventListener(window2, "drop", onReleased, { passive: true }); - useEventListener(window2, "dragend", onReleased, { passive: true }); - } - if (touch) { - useEventListener(target, "touchstart", onPressed("touch"), { passive: true }); - useEventListener(window2, "touchend", onReleased, { passive: true }); - useEventListener(window2, "touchcancel", onReleased, { passive: true }); - } - return { - pressed, - sourceType - }; -} -var __getOwnPropSymbols$62 = Object.getOwnPropertySymbols; -var __hasOwnProp$62 = Object.prototype.hasOwnProperty; -var __propIsEnum$62 = Object.prototype.propertyIsEnumerable; -var __objRest$12 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$62.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$62) - for (var prop of __getOwnPropSymbols$62(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$62.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -function useMutationObserver(target, callback, options = {}) { - const _a2 = options, { window: window2 = defaultWindow } = _a2, mutationOptions = __objRest$12(_a2, ["window"]); - let observer; - const isSupported = window2 && "IntersectionObserver" in window2; - const cleanup = () => { - if (observer) { - observer.disconnect(); - observer = void 0; - } - }; - const stopWatch = watch(() => unrefElement(target), (el) => { - cleanup(); - if (isSupported && window2 && el) { - observer = new MutationObserver(callback); - observer.observe(el, mutationOptions); - } - }, { immediate: true }); - const stop = () => { - cleanup(); - stopWatch(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop - }; -} -var useNavigatorLanguage = (options = {}) => { - const { window: window2 = defaultWindow } = options; - const navigator = window2 == null ? void 0 : window2.navigator; - const isSupported = Boolean(navigator && "language" in navigator); - const language = ref(navigator == null ? void 0 : navigator.language); - useEventListener(window2, "languagechange", () => { - if (navigator) - language.value = navigator.language; - }); - return { - isSupported, - language - }; -}; -function useNetwork(options = {}) { - const { window: window2 = defaultWindow } = options; - const navigator = window2 == null ? void 0 : window2.navigator; - const isSupported = Boolean(navigator && "connection" in navigator); - const isOnline = ref(true); - const saveData = ref(false); - const offlineAt = ref(void 0); - const downlink = ref(void 0); - const downlinkMax = ref(void 0); - const rtt = ref(void 0); - const effectiveType = ref(void 0); - const type = ref("unknown"); - const connection = isSupported && navigator.connection; - function updateNetworkInformation() { - if (!navigator) - return; - isOnline.value = navigator.onLine; - offlineAt.value = isOnline.value ? void 0 : Date.now(); - if (connection) { - downlink.value = connection.downlink; - downlinkMax.value = connection.downlinkMax; - effectiveType.value = connection.effectiveType; - rtt.value = connection.rtt; - saveData.value = connection.saveData; - type.value = connection.type; - } - } - if (window2) { - useEventListener(window2, "offline", () => { - isOnline.value = false; - offlineAt.value = Date.now(); - }); - useEventListener(window2, "online", () => { - isOnline.value = true; - }); - } - if (connection) - useEventListener(connection, "change", updateNetworkInformation, false); - updateNetworkInformation(); - return { - isSupported, - isOnline, - saveData, - offlineAt, - downlink, - downlinkMax, - effectiveType, - rtt, - type - }; -} -var __defProp$52 = Object.defineProperty; -var __getOwnPropSymbols$52 = Object.getOwnPropertySymbols; -var __hasOwnProp$52 = Object.prototype.hasOwnProperty; -var __propIsEnum$52 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$52 = (obj, key, value) => key in obj ? __defProp$52(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$52 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$52.call(b, prop)) - __defNormalProp$52(a, prop, b[prop]); - if (__getOwnPropSymbols$52) - for (var prop of __getOwnPropSymbols$52(b)) { - if (__propIsEnum$52.call(b, prop)) - __defNormalProp$52(a, prop, b[prop]); - } - return a; -}; -function useNow(options = {}) { - const { - controls: exposeControls = false, - interval = "requestAnimationFrame" - } = options; - const now2 = ref(new Date()); - const update = () => now2.value = new Date(); - const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true }); - if (exposeControls) { - return __spreadValues$52({ - now: now2 - }, controls); - } else { - return now2; - } -} -function useOffsetPagination(options) { - const { - total = Infinity, - pageSize = 10, - page = 1, - onPageChange = noop, - onPageSizeChange = noop, - onPageCountChange = noop - } = options; - const currentPageSize = useClamp(pageSize, 1, Infinity); - const pageCount = computed(() => Math.ceil(unref(total) / unref(currentPageSize))); - const currentPage = useClamp(page, 1, pageCount); - const isFirstPage = computed(() => currentPage.value === 1); - const isLastPage = computed(() => currentPage.value === pageCount.value); - if (isRef(page)) - syncRef(page, currentPage); - if (isRef(pageSize)) - syncRef(pageSize, currentPageSize); - function prev() { - currentPage.value--; - } - function next() { - currentPage.value++; - } - const returnValue = { - currentPage, - currentPageSize, - pageCount, - isFirstPage, - isLastPage, - prev, - next - }; - watch(currentPage, () => { - onPageChange(reactive(returnValue)); - }); - watch(currentPageSize, () => { - onPageSizeChange(reactive(returnValue)); - }); - watch(pageCount, () => { - onPageCountChange(reactive(returnValue)); - }); - return returnValue; -} -function useOnline(options = {}) { - const { isOnline } = useNetwork(options); - return isOnline; -} -function usePageLeave(options = {}) { - const { window: window2 = defaultWindow } = options; - const isLeft = ref(false); - const handler = (event) => { - if (!window2) - return; - event = event || window2.event; - const from = event.relatedTarget || event.toElement; - isLeft.value = !from; - }; - if (window2) { - useEventListener(window2, "mouseout", handler, { passive: true }); - useEventListener(window2.document, "mouseleave", handler, { passive: true }); - useEventListener(window2.document, "mouseenter", handler, { passive: true }); - } - return isLeft; -} -function useParallax(target, options = {}) { - const { - deviceOrientationTiltAdjust = (i) => i, - deviceOrientationRollAdjust = (i) => i, - mouseTiltAdjust = (i) => i, - mouseRollAdjust = (i) => i, - window: window2 = defaultWindow - } = options; - const orientation = reactive(useDeviceOrientation({ window: window2 })); - const { - elementX: x, - elementY: y, - elementWidth: width, - elementHeight: height - } = useMouseInElement(target, { handleOutside: false, window: window2 }); - const source = computed(() => { - if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) - return "deviceOrientation"; - return "mouse"; - }); - const roll = computed(() => { - if (source.value === "deviceOrientation") { - const value = -orientation.beta / 90; - return deviceOrientationRollAdjust(value); - } else { - const value = -(y.value - height.value / 2) / height.value; - return mouseRollAdjust(value); - } - }); - const tilt = computed(() => { - if (source.value === "deviceOrientation") { - const value = orientation.gamma / 90; - return deviceOrientationTiltAdjust(value); - } else { - const value = (x.value - width.value / 2) / width.value; - return mouseTiltAdjust(value); - } - }); - return { roll, tilt, source }; -} -var __defProp$42 = Object.defineProperty; -var __defProps$12 = Object.defineProperties; -var __getOwnPropDescs$12 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$42 = Object.getOwnPropertySymbols; -var __hasOwnProp$42 = Object.prototype.hasOwnProperty; -var __propIsEnum$42 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$42 = (obj, key, value) => key in obj ? __defProp$42(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$42 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$42.call(b, prop)) - __defNormalProp$42(a, prop, b[prop]); - if (__getOwnPropSymbols$42) - for (var prop of __getOwnPropSymbols$42(b)) { - if (__propIsEnum$42.call(b, prop)) - __defNormalProp$42(a, prop, b[prop]); - } - return a; -}; -var __spreadProps$12 = (a, b) => __defProps$12(a, __getOwnPropDescs$12(b)); -var defaultState = { - x: 0, - y: 0, - pointerId: 0, - pressure: 0, - tiltX: 0, - tiltY: 0, - width: 0, - height: 0, - twist: 0, - pointerType: null -}; -var keys = Object.keys(defaultState); -function usePointer(options = {}) { - const { - target = defaultWindow - } = options; - const isInside = ref(false); - const state = ref(options.initialValue || {}); - Object.assign(state.value, defaultState, state.value); - const handler = (event) => { - isInside.value = true; - if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) - return; - state.value = objectPick(event, keys, false); - }; - if (target) { - useEventListener(target, "pointerdown", handler, { passive: true }); - useEventListener(target, "pointermove", handler, { passive: true }); - useEventListener(target, "pointerleave", () => isInside.value = false, { passive: true }); - } - return __spreadProps$12(__spreadValues$42({}, toRefs2(state)), { - isInside - }); -} -var SwipeDirection = ((SwipeDirection2) => { - SwipeDirection2["UP"] = "UP"; - SwipeDirection2["RIGHT"] = "RIGHT"; - SwipeDirection2["DOWN"] = "DOWN"; - SwipeDirection2["LEFT"] = "LEFT"; - SwipeDirection2["NONE"] = "NONE"; - return SwipeDirection2; -})(SwipeDirection || {}); -function useSwipe(target, options = {}) { - const { - threshold = 50, - onSwipe, - onSwipeEnd, - onSwipeStart, - passive = true, - window: window2 = defaultWindow - } = options; - const coordsStart = reactive({ x: 0, y: 0 }); - const coordsEnd = reactive({ x: 0, y: 0 }); - const diffX = computed(() => coordsStart.x - coordsEnd.x); - const diffY = computed(() => coordsStart.y - coordsEnd.y); - const { max, abs } = Math; - const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold); - const isSwiping = ref(false); - const direction = computed(() => { - if (!isThresholdExceeded.value) - return "NONE"; - if (abs(diffX.value) > abs(diffY.value)) { - return diffX.value > 0 ? "LEFT" : "RIGHT"; - } else { - return diffY.value > 0 ? "UP" : "DOWN"; - } - }); - const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY]; - const updateCoordsStart = (x, y) => { - coordsStart.x = x; - coordsStart.y = y; - }; - const updateCoordsEnd = (x, y) => { - coordsEnd.x = x; - coordsEnd.y = y; - }; - let listenerOptions; - const isPassiveEventSupported = checkPassiveEventSupport(window2 == null ? void 0 : window2.document); - if (!passive) - listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true }; - else - listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false }; - const onTouchEnd = (e) => { - if (isSwiping.value) - onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value); - isSwiping.value = false; - }; - const stops = [ - useEventListener(target, "touchstart", (e) => { - if (listenerOptions.capture && !listenerOptions.passive) - e.preventDefault(); - const [x, y] = getTouchEventCoords(e); - updateCoordsStart(x, y); - updateCoordsEnd(x, y); - onSwipeStart == null ? void 0 : onSwipeStart(e); - }, listenerOptions), - useEventListener(target, "touchmove", (e) => { - const [x, y] = getTouchEventCoords(e); - updateCoordsEnd(x, y); - if (!isSwiping.value && isThresholdExceeded.value) - isSwiping.value = true; - if (isSwiping.value) - onSwipe == null ? void 0 : onSwipe(e); - }, listenerOptions), - useEventListener(target, "touchend", onTouchEnd, listenerOptions), - useEventListener(target, "touchcancel", onTouchEnd, listenerOptions) - ]; - const stop = () => stops.forEach((s) => s()); - return { - isPassiveEventSupported, - isSwiping, - direction, - coordsStart, - coordsEnd, - lengthX: diffX, - lengthY: diffY, - stop - }; -} -function checkPassiveEventSupport(document2) { - if (!document2) - return false; - let supportsPassive = false; - const optionsBlock = { - get passive() { - supportsPassive = true; - return false; - } - }; - document2.addEventListener("x", noop, optionsBlock); - document2.removeEventListener("x", noop); - return supportsPassive; -} -function usePointerSwipe(target, options = {}) { - const targetRef = ref(target); - const { - threshold = 50, - onSwipe, - onSwipeEnd, - onSwipeStart - } = options; - const posStart = reactive({ x: 0, y: 0 }); - const updatePosStart = (x, y) => { - posStart.x = x; - posStart.y = y; - }; - const posEnd = reactive({ x: 0, y: 0 }); - const updatePosEnd = (x, y) => { - posEnd.x = x; - posEnd.y = y; - }; - const distanceX = computed(() => posStart.x - posEnd.x); - const distanceY = computed(() => posStart.y - posEnd.y); - const { max, abs } = Math; - const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold); - const isSwiping = ref(false); - const isPointerDown = ref(false); - const direction = computed(() => { - if (!isThresholdExceeded.value) - return SwipeDirection.NONE; - if (abs(distanceX.value) > abs(distanceY.value)) { - return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT; - } else { - return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN; - } - }); - const filterEvent = (e) => { - if (options.pointerTypes) - return options.pointerTypes.includes(e.pointerType); - return true; - }; - const stops = [ - useEventListener(target, "pointerdown", (e) => { - var _a2, _b2; - if (!filterEvent(e)) - return; - isPointerDown.value = true; - (_b2 = (_a2 = targetRef.value) == null ? void 0 : _a2.style) == null ? void 0 : _b2.setProperty("touch-action", "none"); - const eventTarget = e.target; - eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId); - const { clientX: x, clientY: y } = e; - updatePosStart(x, y); - updatePosEnd(x, y); - onSwipeStart == null ? void 0 : onSwipeStart(e); - }), - useEventListener(target, "pointermove", (e) => { - if (!filterEvent(e)) - return; - if (!isPointerDown.value) - return; - const { clientX: x, clientY: y } = e; - updatePosEnd(x, y); - if (!isSwiping.value && isThresholdExceeded.value) - isSwiping.value = true; - if (isSwiping.value) - onSwipe == null ? void 0 : onSwipe(e); - }), - useEventListener(target, "pointerup", (e) => { - var _a2, _b2; - if (!filterEvent(e)) - return; - if (isSwiping.value) - onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value); - isPointerDown.value = false; - isSwiping.value = false; - (_b2 = (_a2 = targetRef.value) == null ? void 0 : _a2.style) == null ? void 0 : _b2.setProperty("touch-action", "initial"); - }) - ]; - const stop = () => stops.forEach((s) => s()); - return { - isSwiping: readonly(isSwiping), - direction: readonly(direction), - posStart: readonly(posStart), - posEnd: readonly(posEnd), - distanceX, - distanceY, - stop - }; -} -function usePreferredColorScheme(options) { - const isLight = useMediaQuery("(prefers-color-scheme: light)", options); - const isDark = useMediaQuery("(prefers-color-scheme: dark)", options); - return computed(() => { - if (isDark.value) - return "dark"; - if (isLight.value) - return "light"; - return "no-preference"; - }); -} -function usePreferredLanguages(options = {}) { - const { window: window2 = defaultWindow } = options; - if (!window2) - return ref(["en"]); - const navigator = window2.navigator; - const value = ref(navigator.languages); - useEventListener(window2, "languagechange", () => { - value.value = navigator.languages; - }); - return value; -} -var topVarName = "--vueuse-safe-area-top"; -var rightVarName = "--vueuse-safe-area-right"; -var bottomVarName = "--vueuse-safe-area-bottom"; -var leftVarName = "--vueuse-safe-area-left"; -function useScreenSafeArea() { - const top = ref(""); - const right = ref(""); - const bottom = ref(""); - const left = ref(""); - if (isClient) { - const topCssVar = useCssVar(topVarName); - const rightCssVar = useCssVar(rightVarName); - const bottomCssVar = useCssVar(bottomVarName); - const leftCssVar = useCssVar(leftVarName); - topCssVar.value = "env(safe-area-inset-top, 0px)"; - rightCssVar.value = "env(safe-area-inset-right, 0px)"; - bottomCssVar.value = "env(safe-area-inset-bottom, 0px)"; - leftCssVar.value = "env(safe-area-inset-left, 0px)"; - update(); - useEventListener("resize", useDebounceFn(update)); - } - function update() { - top.value = getValue(topVarName); - right.value = getValue(rightVarName); - bottom.value = getValue(bottomVarName); - left.value = getValue(leftVarName); - } - return { - top, - right, - bottom, - left, - update - }; -} -function getValue(position) { - return getComputedStyle(document.documentElement).getPropertyValue(position); -} -function useScriptTag(src, onLoaded = noop, options = {}) { - const { - immediate = true, - manual = false, - type = "text/javascript", - async = true, - crossOrigin, - referrerPolicy, - noModule, - defer, - document: document2 = defaultDocument, - attrs = {} - } = options; - const scriptTag = ref(null); - let _promise = null; - const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => { - const resolveWithElement = (el2) => { - scriptTag.value = el2; - resolve(el2); - return el2; - }; - if (!document2) { - resolve(false); - return; - } - let shouldAppend = false; - let el = document2.querySelector(`script[src="${src}"]`); - if (!el) { - el = document2.createElement("script"); - el.type = type; - el.async = async; - el.src = unref(src); - if (defer) - el.defer = defer; - if (crossOrigin) - el.crossOrigin = crossOrigin; - if (noModule) - el.noModule = noModule; - if (referrerPolicy) - el.referrerPolicy = referrerPolicy; - for (const attr in attrs) - el[attr] = attrs[attr]; - shouldAppend = true; - } else if (el.hasAttribute("data-loaded")) { - resolveWithElement(el); - } - el.addEventListener("error", (event) => reject(event)); - el.addEventListener("abort", (event) => reject(event)); - el.addEventListener("load", () => { - el.setAttribute("data-loaded", "true"); - onLoaded(el); - resolveWithElement(el); - }); - if (shouldAppend) - el = document2.head.appendChild(el); - if (!waitForScriptLoad) - resolveWithElement(el); - }); - const load = (waitForScriptLoad = true) => { - if (!_promise) - _promise = loadScript(waitForScriptLoad); - return _promise; - }; - const unload = () => { - if (!document2) - return; - _promise = null; - if (scriptTag.value) - scriptTag.value = null; - const el = document2.querySelector(`script[src="${src}"]`); - if (el) - document2.head.removeChild(el); - }; - if (immediate && !manual) - tryOnMounted(load); - if (!manual) - tryOnUnmounted(unload); - return { scriptTag, load, unload }; -} -var _a; -var _b; -function preventDefault(rawEvent) { - const e = rawEvent || window.event; - if (e.touches.length > 1) - return true; - if (e.preventDefault) - e.preventDefault(); - return false; -} -var isIOS = isClient && (window == null ? void 0 : window.navigator) && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.platform) && /iP(ad|hone|od)/.test((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.platform); -function useScrollLock(element, initialState = false) { - const isLocked = ref(initialState); - let touchMoveListener = null; - let initialOverflow; - watch(() => unref(element), (el) => { - if (el) { - const ele = el; - initialOverflow = ele.style.overflow; - if (isLocked.value) - ele.style.overflow = "hidden"; - } - }, { - immediate: true - }); - const lock = () => { - const ele = unref(element); - if (!ele || isLocked.value) - return; - if (isIOS) { - touchMoveListener = useEventListener(document, "touchmove", preventDefault, { passive: false }); - } - ele.style.overflow = "hidden"; - isLocked.value = true; - }; - const unlock = () => { - const ele = unref(element); - if (!ele || !isLocked.value) - return; - isIOS && (touchMoveListener == null ? void 0 : touchMoveListener()); - ele.style.overflow = initialOverflow; - isLocked.value = false; - }; - return computed({ - get() { - return isLocked.value; - }, - set(v) { - if (v) - lock(); - else - unlock(); - } - }); -} -function useSessionStorage(key, initialValue, options = {}) { - const { window: window2 = defaultWindow } = options; - return useStorage(key, initialValue, window2 == null ? void 0 : window2.sessionStorage, options); -} -var __defProp$32 = Object.defineProperty; -var __getOwnPropSymbols$32 = Object.getOwnPropertySymbols; -var __hasOwnProp$32 = Object.prototype.hasOwnProperty; -var __propIsEnum$32 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$32 = (obj, key, value) => key in obj ? __defProp$32(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$32 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$32.call(b, prop)) - __defNormalProp$32(a, prop, b[prop]); - if (__getOwnPropSymbols$32) - for (var prop of __getOwnPropSymbols$32(b)) { - if (__propIsEnum$32.call(b, prop)) - __defNormalProp$32(a, prop, b[prop]); - } - return a; -}; -function useShare(shareOptions = {}, options = {}) { - const { navigator = defaultNavigator } = options; - const _navigator = navigator; - const isSupported = _navigator && "canShare" in _navigator; - const share = async (overrideOptions = {}) => { - if (isSupported) { - const data = __spreadValues$32(__spreadValues$32({}, unref(shareOptions)), unref(overrideOptions)); - let granted = true; - if (data.files && _navigator.canShare) - granted = _navigator.canShare({ files: data.files }); - if (granted) - return _navigator.share(data); - } - }; - return { - isSupported, - share - }; -} -function useSpeechRecognition(options = {}) { - const { - interimResults = true, - continuous = true, - window: window2 = defaultWindow - } = options; - const lang = ref(options.lang || "en-US"); - const isListening = ref(false); - const isFinal = ref(false); - const result = ref(""); - const error = shallowRef(void 0); - const toggle = (value = !isListening.value) => { - isListening.value = value; - }; - const start = () => { - isListening.value = true; - }; - const stop = () => { - isListening.value = false; - }; - const SpeechRecognition = window2 && (window2.SpeechRecognition || window2.webkitSpeechRecognition); - const isSupported = Boolean(SpeechRecognition); - let recognition; - if (isSupported) { - recognition = new SpeechRecognition(); - recognition.continuous = continuous; - recognition.interimResults = interimResults; - recognition.lang = unref(lang); - recognition.onstart = () => { - isFinal.value = false; - }; - watch(lang, (lang2) => { - if (recognition && !isListening.value) - recognition.lang = lang2; - }); - recognition.onresult = (event) => { - const transcript = Array.from(event.results).map((result2) => { - isFinal.value = result2.isFinal; - return result2[0]; - }).map((result2) => result2.transcript).join(""); - result.value = transcript; - error.value = void 0; - }; - recognition.onerror = (event) => { - error.value = event; - }; - recognition.onend = () => { - isListening.value = false; - recognition.lang = unref(lang); - }; - watch(isListening, () => { - if (isListening.value) - recognition.start(); - else - recognition.stop(); - }); - } - tryOnScopeDispose(() => { - isListening.value = false; - }); - return { - isSupported, - isListening, - isFinal, - recognition, - result, - error, - toggle, - start, - stop - }; -} -function useSpeechSynthesis(text, options = {}) { - var _a2, _b2; - const { - pitch = 1, - rate = 1, - volume = 1, - window: window2 = defaultWindow - } = options; - const synth = window2 && window2.speechSynthesis; - const isSupported = Boolean(synth); - const isPlaying = ref(false); - const status = ref("init"); - const voiceInfo = { - lang: ((_a2 = options.voice) == null ? void 0 : _a2.lang) || "default", - name: ((_b2 = options.voice) == null ? void 0 : _b2.name) || "" - }; - const spokenText = ref(text || ""); - const lang = ref(options.lang || "en-US"); - const error = shallowRef(void 0); - const toggle = (value = !isPlaying.value) => { - isPlaying.value = value; - }; - const bindEventsForUtterance = (utterance2) => { - utterance2.lang = unref(lang); - options.voice && (utterance2.voice = options.voice); - utterance2.pitch = pitch; - utterance2.rate = rate; - utterance2.volume = volume; - utterance2.onstart = () => { - isPlaying.value = true; - status.value = "play"; - }; - utterance2.onpause = () => { - isPlaying.value = false; - status.value = "pause"; - }; - utterance2.onresume = () => { - isPlaying.value = true; - status.value = "play"; - }; - utterance2.onend = () => { - isPlaying.value = false; - status.value = "end"; - }; - utterance2.onerror = (event) => { - error.value = event; - }; - utterance2.onend = () => { - isPlaying.value = false; - utterance2.lang = unref(lang); - }; - }; - const utterance = computed(() => { - isPlaying.value = false; - status.value = "init"; - const newUtterance = new SpeechSynthesisUtterance(spokenText.value); - bindEventsForUtterance(newUtterance); - return newUtterance; - }); - const speak = () => { - synth.cancel(); - utterance && synth.speak(utterance.value); - }; - if (isSupported) { - bindEventsForUtterance(utterance.value); - watch(lang, (lang2) => { - if (utterance.value && !isPlaying.value) - utterance.value.lang = lang2; - }); - watch(isPlaying, () => { - if (isPlaying.value) - synth.resume(); - else - synth.pause(); - }); - } - tryOnScopeDispose(() => { - isPlaying.value = false; - }); - return { - isSupported, - isPlaying, - status, - voiceInfo, - utterance, - error, - toggle, - speak - }; -} -function useStorageAsync(key, initialValue, storage, options = {}) { - var _a2; - const { - flush = "pre", - deep = true, - listenToStorageChanges = true, - writeDefaults = true, - shallow, - window: window2 = defaultWindow, - eventFilter, - onError = (e) => { - console.error(e); - } - } = options; - const rawInit = unref(initialValue); - const type = guessSerializerType(rawInit); - const data = (shallow ? shallowRef : ref)(initialValue); - const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type]; - if (!storage) { - try { - storage = getSSRHandler("getDefaultStorage", () => { - var _a22; - return (_a22 = defaultWindow) == null ? void 0 : _a22.localStorage; - })(); - } catch (e) { - onError(e); - } - } - async function read(event) { - if (!storage || event && event.key !== key) - return; - try { - const rawValue = event ? event.newValue : await storage.getItem(key); - if (rawValue == null) { - data.value = rawInit; - if (writeDefaults && rawInit !== null) - await storage.setItem(key, await serializer.write(rawInit)); - } else { - data.value = await serializer.read(rawValue); - } - } catch (e) { - onError(e); - } - } - read(); - if (window2 && listenToStorageChanges) - useEventListener(window2, "storage", (e) => setTimeout(() => read(e), 0)); - if (storage) { - watchWithFilter(data, async () => { - try { - if (data.value == null) - await storage.removeItem(key); - else - await storage.setItem(key, await serializer.write(data.value)); - } catch (e) { - onError(e); - } - }, { - flush, - deep, - eventFilter - }); - } - return data; -} -var _id = 0; -function useStyleTag(css, options = {}) { - const isLoaded = ref(false); - const { - document: document2 = defaultDocument, - immediate = true, - manual = false, - id = `vueuse_styletag_${++_id}` - } = options; - const cssRef = ref(css); - let stop = () => { - }; - const load = () => { - if (!document2) - return; - const el = document2.getElementById(id) || document2.createElement("style"); - el.type = "text/css"; - el.id = id; - if (options.media) - el.media = options.media; - document2.head.appendChild(el); - if (isLoaded.value) - return; - stop = watch(cssRef, (value) => { - el.innerText = value; - }, { immediate: true }); - isLoaded.value = true; - }; - const unload = () => { - if (!document2 || !isLoaded.value) - return; - stop(); - document2.head.removeChild(document2.getElementById(id)); - isLoaded.value = false; - }; - if (immediate && !manual) - load(); - if (!manual) - tryOnScopeDispose(unload); - return { - id, - css: cssRef, - unload, - load, - isLoaded: readonly(isLoaded) - }; -} -function useTemplateRefsList() { - const refs = ref([]); - refs.value.set = (el) => { - if (el) - refs.value.push(el); - }; - onBeforeUpdate(() => { - refs.value.length = 0; - }); - return refs; -} -function getRangesFromSelection(selection) { - var _a2; - const rangeCount = (_a2 = selection.rangeCount) != null ? _a2 : 0; - const ranges = new Array(rangeCount); - for (let i = 0; i < rangeCount; i++) { - const range = selection.getRangeAt(i); - ranges[i] = range; - } - return ranges; -} -function useTextSelection(options = {}) { - const { - window: window2 = defaultWindow - } = options; - const selection = ref(null); - const text = computed(() => { - var _a2, _b2; - return (_b2 = (_a2 = selection.value) == null ? void 0 : _a2.toString()) != null ? _b2 : ""; - }); - const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []); - const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect())); - function onSelectionChange() { - selection.value = null; - if (window2) - selection.value = window2.getSelection(); - } - if (window2) - useEventListener(window2.document, "selectionchange", onSelectionChange); - return { - text, - rects, - ranges, - selection - }; -} -var __defProp$22 = Object.defineProperty; -var __defProps2 = Object.defineProperties; -var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors; -var __getOwnPropSymbols$22 = Object.getOwnPropertySymbols; -var __hasOwnProp$22 = Object.prototype.hasOwnProperty; -var __propIsEnum$22 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$22 = (obj, key, value) => key in obj ? __defProp$22(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$22 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$22.call(b, prop)) - __defNormalProp$22(a, prop, b[prop]); - if (__getOwnPropSymbols$22) - for (var prop of __getOwnPropSymbols$22(b)) { - if (__propIsEnum$22.call(b, prop)) - __defNormalProp$22(a, prop, b[prop]); - } - return a; -}; -var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b)); -function useThrottledRefHistory(source, options = {}) { - const { throttle = 200, trailing = true } = options; - const filter = throttleFilter(throttle, trailing); - const history = useRefHistory(source, __spreadProps2(__spreadValues$22({}, options), { eventFilter: filter })); - return __spreadValues$22({}, history); -} -var __defProp$12 = Object.defineProperty; -var __getOwnPropSymbols$12 = Object.getOwnPropertySymbols; -var __hasOwnProp$12 = Object.prototype.hasOwnProperty; -var __propIsEnum$12 = Object.prototype.propertyIsEnumerable; -var __defNormalProp$12 = (obj, key, value) => key in obj ? __defProp$12(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues$12 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$12.call(b, prop)) - __defNormalProp$12(a, prop, b[prop]); - if (__getOwnPropSymbols$12) - for (var prop of __getOwnPropSymbols$12(b)) { - if (__propIsEnum$12.call(b, prop)) - __defNormalProp$12(a, prop, b[prop]); - } - return a; -}; -var __objRest2 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$12.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$12) - for (var prop of __getOwnPropSymbols$12(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$12.call(source, prop)) - target[prop] = source[prop]; - } - return target; -}; -var UNITS = [ - { max: 6e4, value: 1e3, name: "second" }, - { max: 276e4, value: 6e4, name: "minute" }, - { max: 72e6, value: 36e5, name: "hour" }, - { max: 5184e5, value: 864e5, name: "day" }, - { max: 24192e5, value: 6048e5, name: "week" }, - { max: 28512e6, value: 2592e6, name: "month" }, - { max: Infinity, value: 31536e6, name: "year" } -]; -var DEFAULT_MESSAGES = { - justNow: "just now", - past: (n) => n.match(/\d/) ? `${n} ago` : n, - future: (n) => n.match(/\d/) ? `in ${n}` : n, - month: (n, past) => n === 1 ? past ? "last month" : "next month" : `${n} month${n > 1 ? "s" : ""}`, - year: (n, past) => n === 1 ? past ? "last year" : "next year" : `${n} year${n > 1 ? "s" : ""}`, - day: (n, past) => n === 1 ? past ? "yesterday" : "tomorrow" : `${n} day${n > 1 ? "s" : ""}`, - week: (n, past) => n === 1 ? past ? "last week" : "next week" : `${n} week${n > 1 ? "s" : ""}`, - hour: (n) => `${n} hour${n > 1 ? "s" : ""}`, - minute: (n) => `${n} minute${n > 1 ? "s" : ""}`, - second: (n) => `${n} second${n > 1 ? "s" : ""}` -}; -var DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10); -function useTimeAgo(time, options = {}) { - const { - controls: exposeControls = false, - max, - updateInterval = 3e4, - messages = DEFAULT_MESSAGES, - fullDateFormatter = DEFAULT_FORMATTER - } = options; - const { abs, round } = Math; - const _a2 = useNow({ interval: updateInterval, controls: true }), { now: now2 } = _a2, controls = __objRest2(_a2, ["now"]); - function getTimeago(from, now22) { - var _a22; - const diff = +now22 - +from; - const absDiff = abs(diff); - if (absDiff < 6e4) - return messages.justNow; - if (typeof max === "number" && absDiff > max) - return fullDateFormatter(new Date(from)); - if (typeof max === "string") { - const unitMax = (_a22 = UNITS.find((i) => i.name === max)) == null ? void 0 : _a22.max; - if (unitMax && absDiff > unitMax) - return fullDateFormatter(new Date(from)); - } - for (const unit of UNITS) { - if (absDiff < unit.max) - return format(diff, unit); - } - } - function applyFormat(name, val, isPast) { - const formatter = messages[name]; - if (typeof formatter === "function") - return formatter(val, isPast); - return formatter.replace("{0}", val.toString()); - } - function format(diff, unit) { - const val = round(abs(diff) / unit.value); - const past = diff > 0; - const str = applyFormat(unit.name, val, past); - return applyFormat(past ? "past" : "future", str, past); - } - const timeAgo = computed(() => getTimeago(new Date(unref(time)), unref(now2.value))); - if (exposeControls) { - return __spreadValues$12({ - timeAgo - }, controls); - } else { - return timeAgo; - } -} -function useTimeoutPoll(fn, interval, timeoutPollOptions) { - const { start } = useTimeoutFn(loop, interval); - const isActive = ref(false); - async function loop() { - if (!isActive.value) - return; - await fn(); - start(); - } - function resume() { - if (!isActive.value) { - isActive.value = true; - loop(); - } - } - function pause() { - isActive.value = false; - } - if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate) - resume(); - tryOnScopeDispose(pause); - return { - isActive, - pause, - resume - }; -} -var __defProp2 = Object.defineProperty; -var __getOwnPropSymbols2 = Object.getOwnPropertySymbols; -var __hasOwnProp2 = Object.prototype.hasOwnProperty; -var __propIsEnum2 = Object.prototype.propertyIsEnumerable; -var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues2 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp2.call(b, prop)) - __defNormalProp2(a, prop, b[prop]); - if (__getOwnPropSymbols2) - for (var prop of __getOwnPropSymbols2(b)) { - if (__propIsEnum2.call(b, prop)) - __defNormalProp2(a, prop, b[prop]); - } - return a; -}; -function useTimestamp(options = {}) { - const { - controls: exposeControls = false, - offset = 0, - immediate = true, - interval = "requestAnimationFrame" - } = options; - const ts = ref(timestamp() + offset); - const update = () => ts.value = timestamp() + offset; - const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate }) : useIntervalFn(update, interval, { immediate }); - if (exposeControls) { - return __spreadValues2({ - timestamp: ts - }, controls); - } else { - return ts; - } -} -function useTitle(newTitle = null, options = {}) { - var _a2, _b2; - const { - document: document2 = defaultDocument, - observe = false, - titleTemplate = "%s" - } = options; - const title = ref((_a2 = newTitle != null ? newTitle : document2 == null ? void 0 : document2.title) != null ? _a2 : null); - watch(title, (t, o) => { - if (isString(t) && t !== o && document2) - document2.title = titleTemplate.replace("%s", t); - }, { immediate: true }); - if (observe && document2) { - useMutationObserver((_b2 = document2.head) == null ? void 0 : _b2.querySelector("title"), () => { - if (document2 && document2.title !== title.value) - title.value = titleTemplate.replace("%s", document2.title); - }, { childList: true }); - } - return title; -} -var TransitionPresets = { - linear: identity, - easeInSine: [0.12, 0, 0.39, 0], - easeOutSine: [0.61, 1, 0.88, 1], - easeInOutSine: [0.37, 0, 0.63, 1], - easeInQuad: [0.11, 0, 0.5, 0], - easeOutQuad: [0.5, 1, 0.89, 1], - easeInOutQuad: [0.45, 0, 0.55, 1], - easeInCubic: [0.32, 0, 0.67, 0], - easeOutCubic: [0.33, 1, 0.68, 1], - easeInOutCubic: [0.65, 0, 0.35, 1], - easeInQuart: [0.5, 0, 0.75, 0], - easeOutQuart: [0.25, 1, 0.5, 1], - easeInOutQuart: [0.76, 0, 0.24, 1], - easeInQuint: [0.64, 0, 0.78, 0], - easeOutQuint: [0.22, 1, 0.36, 1], - easeInOutQuint: [0.83, 0, 0.17, 1], - easeInExpo: [0.7, 0, 0.84, 0], - easeOutExpo: [0.16, 1, 0.3, 1], - easeInOutExpo: [0.87, 0, 0.13, 1], - easeInCirc: [0.55, 0, 1, 0.45], - easeOutCirc: [0, 0.55, 0.45, 1], - easeInOutCirc: [0.85, 0, 0.15, 1], - easeInBack: [0.36, 0, 0.66, -0.56], - easeOutBack: [0.34, 1.56, 0.64, 1], - easeInOutBack: [0.68, -0.6, 0.32, 1.6] -}; -function createEasingFunction([p0, p1, p2, p3]) { - const a = (a1, a2) => 1 - 3 * a2 + 3 * a1; - const b = (a1, a2) => 3 * a2 - 6 * a1; - const c = (a1) => 3 * a1; - const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t; - const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1); - const getTforX = (x) => { - let aGuessT = x; - for (let i = 0; i < 4; ++i) { - const currentSlope = getSlope(aGuessT, p0, p2); - if (currentSlope === 0) - return aGuessT; - const currentX = calcBezier(aGuessT, p0, p2) - x; - aGuessT -= currentX / currentSlope; - } - return aGuessT; - }; - return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3); -} -function useTransition(source, options = {}) { - const { - delay = 0, - disabled = false, - duration = 1e3, - onFinished = noop, - onStarted = noop, - transition = identity - } = options; - const currentTransition = computed(() => { - const t = unref(transition); - return isFunction(t) ? t : createEasingFunction(t); - }); - const sourceValue = computed(() => { - const s = unref(source); - return isNumber(s) ? s : s.map(unref); - }); - const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value); - const outputVector = ref(sourceVector.value.slice(0)); - let currentDuration; - let diffVector; - let endAt; - let startAt; - let startVector; - const { resume, pause } = useRafFn(() => { - const now2 = Date.now(); - const progress = clamp(1 - (endAt - now2) / currentDuration, 0, 1); - outputVector.value = startVector.map((val, i) => { - var _a2; - return val + ((_a2 = diffVector[i]) != null ? _a2 : 0) * currentTransition.value(progress); - }); - if (progress >= 1) { - pause(); - onFinished(); - } - }, { immediate: false }); - const start = () => { - pause(); - currentDuration = unref(duration); - diffVector = outputVector.value.map((n, i) => { - var _a2, _b2; - return ((_a2 = sourceVector.value[i]) != null ? _a2 : 0) - ((_b2 = outputVector.value[i]) != null ? _b2 : 0); - }); - startVector = outputVector.value.slice(0); - startAt = Date.now(); - endAt = startAt + currentDuration; - resume(); - onStarted(); - }; - const timeout = useTimeoutFn(start, delay, { immediate: false }); - watch(sourceVector, () => { - if (unref(disabled)) { - outputVector.value = sourceVector.value.slice(0); - } else { - if (unref(delay) <= 0) - start(); - else - timeout.start(); - } - }, { deep: true }); - return computed(() => { - const targetVector = unref(disabled) ? sourceVector : outputVector; - return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value; - }); -} -function useUrlSearchParams(mode = "history", options = {}) { - const { - initialValue = {}, - removeNullishValues = true, - removeFalsyValues = false, - window: window2 = defaultWindow - } = options; - if (!window2) - return reactive(initialValue); - const state = reactive(initialValue); - function getRawParams() { - if (mode === "history") { - return window2.location.search || ""; - } else if (mode === "hash") { - const hash = window2.location.hash || ""; - const index = hash.indexOf("?"); - return index > 0 ? hash.slice(index) : ""; - } else { - return (window2.location.hash || "").replace(/^#/, ""); - } - } - function constructQuery(params) { - const stringified = params.toString(); - if (mode === "history") - return `${stringified ? `?${stringified}` : ""}${location.hash || ""}`; - if (mode === "hash-params") - return `${location.search || ""}${stringified ? `#${stringified}` : ""}`; - const hash = window2.location.hash || "#"; - const index = hash.indexOf("?"); - if (index > 0) - return `${hash.slice(0, index)}${stringified ? `?${stringified}` : ""}`; - return `${hash}${stringified ? `?${stringified}` : ""}`; - } - function read() { - return new URLSearchParams(getRawParams()); - } - function updateState(params) { - const unusedKeys = new Set(Object.keys(state)); - for (const key of params.keys()) { - const paramsForKey = params.getAll(key); - state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || ""; - unusedKeys.delete(key); - } - Array.from(unusedKeys).forEach((key) => delete state[key]); - } - const { pause, resume } = watchPausable(state, () => { - const params = new URLSearchParams(""); - Object.keys(state).forEach((key) => { - const mapEntry = state[key]; - if (Array.isArray(mapEntry)) - mapEntry.forEach((value) => params.append(key, value)); - else if (removeNullishValues && mapEntry == null) - params.delete(key); - else if (removeFalsyValues && !mapEntry) - params.delete(key); - else - params.set(key, mapEntry); - }); - write(params); - }, { deep: true }); - function write(params, shouldUpdate) { - pause(); - if (shouldUpdate) - updateState(params); - window2.history.replaceState({}, "", window2.location.pathname + constructQuery(params)); - resume(); - } - function onChanged() { - write(read(), true); - } - useEventListener(window2, "popstate", onChanged, false); - if (mode !== "history") - useEventListener(window2, "hashchange", onChanged, false); - updateState(read()); - return state; -} -function useUserMedia(options = {}) { - var _a2, _b2, _c; - const enabled = ref((_a2 = options.enabled) != null ? _a2 : false); - const autoSwitch = ref((_b2 = options.autoSwitch) != null ? _b2 : true); - const videoDeviceId = ref(options.videoDeviceId); - const audioDeviceId = ref(options.audioDeviceId); - const { navigator = defaultNavigator } = options; - const isSupported = Boolean((_c = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _c.getUserMedia); - const stream = shallowRef(); - function getDeviceOptions(device) { - if (device.value === "none" || device.value === false) - return false; - if (device.value == null) - return true; - return { - deviceId: device.value - }; - } - async function _start() { - if (!isSupported || stream.value) - return; - stream.value = await navigator.mediaDevices.getUserMedia({ - video: getDeviceOptions(videoDeviceId), - audio: getDeviceOptions(audioDeviceId) - }); - return stream.value; - } - async function _stop() { - var _a22; - (_a22 = stream.value) == null ? void 0 : _a22.getTracks().forEach((t) => t.stop()); - stream.value = void 0; - } - function stop() { - _stop(); - enabled.value = false; - } - async function start() { - await _start(); - if (stream.value) - enabled.value = true; - return stream.value; - } - async function restart() { - _stop(); - return await start(); - } - watch(enabled, (v) => { - if (v) - _start(); - else - _stop(); - }, { immediate: true }); - watch([videoDeviceId, audioDeviceId], () => { - if (autoSwitch.value && stream.value) - restart(); - }, { immediate: true }); - return { - isSupported, - stream, - start, - stop, - restart, - videoDeviceId, - audioDeviceId, - enabled, - autoSwitch - }; -} -function useVModel(props, key, emit, options = {}) { - var _a2, _b2, _c; - const { - passive = false, - eventName, - deep = false - } = options; - const vm = getCurrentInstance(); - const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a2 = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a2.bind(vm)); - let event = eventName; - if (!key) { - if (isVue2) { - const modelOptions = (_c = (_b2 = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b2.$options) == null ? void 0 : _c.model; - key = (modelOptions == null ? void 0 : modelOptions.value) || "value"; - if (!eventName) - event = (modelOptions == null ? void 0 : modelOptions.event) || "input"; - } else { - key = "modelValue"; - } - } - event = eventName || event || `update:${key}`; - if (passive) { - const proxy = ref(props[key]); - watch(() => props[key], (v) => proxy.value = v); - watch(proxy, (v) => { - if (v !== props[key] || deep) - _emit(event, v); - }, { - deep - }); - return proxy; - } else { - return computed({ - get() { - return props[key]; - }, - set(value) { - _emit(event, value); - } - }); - } -} -function useVModels(props, emit, options = {}) { - const ret = {}; - for (const key in props) - ret[key] = useVModel(props, key, emit, options); - return ret; -} -function useVibrate(options) { - const { - pattern = [], - interval = 0, - navigator = defaultNavigator - } = options || {}; - const isSupported = typeof navigator !== "undefined" && "vibrate" in navigator; - const patternRef = ref(pattern); - let intervalControls; - const vibrate = (pattern2 = patternRef.value) => { - if (isSupported) - navigator.vibrate(pattern2); - }; - const stop = () => { - if (isSupported) - navigator.vibrate(0); - intervalControls == null ? void 0 : intervalControls.pause(); - }; - if (interval > 0) { - intervalControls = useIntervalFn(vibrate, interval, { - immediate: false, - immediateCallback: false - }); - } - return { - isSupported, - pattern, - intervalControls, - vibrate, - stop - }; -} -function useVirtualList(list, options) { - const containerRef = ref(); - const size = useElementSize(containerRef); - const currentList = ref([]); - const source = shallowRef(list); - const state = ref({ start: 0, end: 10 }); - const { itemHeight, overscan = 5 } = options; - const getViewCapacity = (containerHeight) => { - if (typeof itemHeight === "number") - return Math.ceil(containerHeight / itemHeight); - const { start = 0 } = state.value; - let sum = 0; - let capacity = 0; - for (let i = start; i < source.value.length; i++) { - const height = itemHeight(i); - sum += height; - if (sum >= containerHeight) { - capacity = i; - break; - } - } - return capacity - start; - }; - const getOffset = (scrollTop) => { - if (typeof itemHeight === "number") - return Math.floor(scrollTop / itemHeight) + 1; - let sum = 0; - let offset = 0; - for (let i = 0; i < source.value.length; i++) { - const height = itemHeight(i); - sum += height; - if (sum >= scrollTop) { - offset = i; - break; - } - } - return offset + 1; - }; - const calculateRange = () => { - const element = containerRef.value; - if (element) { - const offset = getOffset(element.scrollTop); - const viewCapacity = getViewCapacity(element.clientHeight); - const from = offset - overscan; - const to = offset + viewCapacity + overscan; - state.value = { - start: from < 0 ? 0 : from, - end: to > source.value.length ? source.value.length : to - }; - currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({ - data: ele, - index: index + state.value.start - })); - } - }; - watch([size.width, size.height, list], () => { - calculateRange(); - }); - const totalHeight = computed(() => { - if (typeof itemHeight === "number") - return source.value.length * itemHeight; - return source.value.reduce((sum, _, index) => sum + itemHeight(index), 0); - }); - const getDistanceTop = (index) => { - if (typeof itemHeight === "number") { - const height2 = index * itemHeight; - return height2; - } - const height = source.value.slice(0, index).reduce((sum, _, i) => sum + itemHeight(i), 0); - return height; - }; - const scrollTo = (index) => { - if (containerRef.value) { - containerRef.value.scrollTop = getDistanceTop(index); - calculateRange(); - } - }; - const offsetTop = computed(() => getDistanceTop(state.value.start)); - const wrapperProps = computed(() => { - return { - style: { - width: "100%", - height: `${totalHeight.value - offsetTop.value}px`, - marginTop: `${offsetTop.value}px` - } - }; - }); - const containerStyle = { overflowY: "auto" }; - return { - list: currentList, - scrollTo, - containerProps: { - ref: containerRef, - onScroll: () => { - calculateRange(); - }, - style: containerStyle - }, - wrapperProps - }; -} -var useWakeLock = (options = {}) => { - const { - navigator = defaultNavigator, - document: document2 = defaultDocument - } = options; - let wakeLock; - const isSupported = navigator && "wakeLock" in navigator; - const isActive = ref(false); - async function onVisibilityChange() { - if (!isSupported || !wakeLock) - return; - if (document2 && document2.visibilityState === "visible") - wakeLock = await navigator.wakeLock.request("screen"); - isActive.value = !wakeLock.released; - } - if (document2) - useEventListener(document2, "visibilitychange", onVisibilityChange, { passive: true }); - async function request(type) { - if (!isSupported) - return; - wakeLock = await navigator.wakeLock.request(type); - isActive.value = !wakeLock.released; - } - async function release() { - if (!isSupported || !wakeLock) - return; - await wakeLock.release(); - isActive.value = !wakeLock.released; - wakeLock = null; - } - return { - isSupported, - isActive, - request, - release - }; -}; -var useWebNotification = (defaultOptions2 = {}) => { - const { - window: window2 = defaultWindow - } = defaultOptions2; - const isSupported = !!window2 && "Notification" in window2; - const notification = ref(null); - const requestPermission = async () => { - if (!isSupported) - return; - if ("permission" in Notification && Notification.permission !== "denied") - await Notification.requestPermission(); - }; - const onClick = createEventHook(); - const onShow = createEventHook(); - const onError = createEventHook(); - const onClose = createEventHook(); - const show = async (overrides) => { - if (!isSupported) - return; - await requestPermission(); - const options = Object.assign({}, defaultOptions2, overrides); - notification.value = new Notification(options.title || "", options); - notification.value.onclick = (event) => onClick.trigger(event); - notification.value.onshow = (event) => onShow.trigger(event); - notification.value.onerror = (event) => onError.trigger(event); - notification.value.onclose = (event) => onClose.trigger(event); - return notification.value; - }; - const close = () => { - if (notification.value) - notification.value.close(); - notification.value = null; - }; - tryOnMounted(async () => { - if (isSupported) - await requestPermission(); - }); - tryOnScopeDispose(close); - if (isSupported && window2) { - const document2 = window2.document; - useEventListener(document2, "visibilitychange", (e) => { - e.preventDefault(); - if (document2.visibilityState === "visible") { - close(); - } - }); - } - return { - isSupported, - notification, - show, - close, - onClick, - onShow, - onError, - onClose - }; -}; -function resolveNestedOptions(options) { - if (options === true) - return {}; - return options; -} -function useWebSocket(url, options = {}) { - const { - onConnected, - onDisconnected, - onError, - onMessage, - immediate = true, - autoClose = true, - protocols = [] - } = options; - const data = ref(null); - const status = ref("CONNECTING"); - const wsRef = ref(); - let heartbeatPause; - let heartbeatResume; - let explicitlyClosed = false; - let retried = 0; - let bufferedData = []; - const close = (code = 1e3, reason) => { - if (!wsRef.value) - return; - explicitlyClosed = true; - heartbeatPause == null ? void 0 : heartbeatPause(); - wsRef.value.close(code, reason); - }; - const _sendBuffer = () => { - if (bufferedData.length && wsRef.value && status.value === "OPEN") { - for (const buffer of bufferedData) - wsRef.value.send(buffer); - bufferedData = []; - } - }; - const send = (data2, useBuffer = true) => { - if (!wsRef.value || status.value !== "OPEN") { - if (useBuffer) - bufferedData.push(data2); - return false; - } - _sendBuffer(); - wsRef.value.send(data2); - return true; - }; - const _init = () => { - const ws = new WebSocket(url, protocols); - wsRef.value = ws; - status.value = "CONNECTING"; - explicitlyClosed = false; - ws.onopen = () => { - status.value = "OPEN"; - onConnected == null ? void 0 : onConnected(ws); - heartbeatResume == null ? void 0 : heartbeatResume(); - _sendBuffer(); - }; - ws.onclose = (ev) => { - status.value = "CLOSED"; - wsRef.value = void 0; - onDisconnected == null ? void 0 : onDisconnected(ws, ev); - if (!explicitlyClosed && options.autoReconnect) { - const { - retries = -1, - delay = 1e3, - onFailed - } = resolveNestedOptions(options.autoReconnect); - retried += 1; - if (typeof retries === "number" && (retries < 0 || retried < retries)) - setTimeout(_init, delay); - else if (typeof retries === "function" && retries()) - setTimeout(_init, delay); - else - onFailed == null ? void 0 : onFailed(); - } - }; - ws.onerror = (e) => { - onError == null ? void 0 : onError(ws, e); - }; - ws.onmessage = (e) => { - data.value = e.data; - onMessage == null ? void 0 : onMessage(ws, e); - }; - }; - if (options.heartbeat) { - const { - message = "ping", - interval = 1e3 - } = resolveNestedOptions(options.heartbeat); - const { pause, resume } = useIntervalFn(() => send(message, false), interval, { immediate: false }); - heartbeatPause = pause; - heartbeatResume = resume; - } - if (immediate) - _init(); - if (autoClose) { - useEventListener(window, "beforeunload", () => close()); - tryOnScopeDispose(close); - } - const open = () => { - close(); - retried = 0; - _init(); - }; - return { - data, - status, - close, - send, - open, - ws: wsRef - }; -} -function useWebWorker(url, workerOptions, options = {}) { - const { - window: window2 = defaultWindow - } = options; - const data = ref(null); - const worker = shallowRef(); - const post = function post2(val) { - if (!worker.value) - return; - worker.value.postMessage(val); - }; - const terminate = function terminate2() { - if (!worker.value) - return; - worker.value.terminate(); - }; - if (window2) { - worker.value = new Worker(url, workerOptions); - worker.value.onmessage = (e) => { - data.value = e.data; - }; - tryOnScopeDispose(() => { - if (worker.value) - worker.value.terminate(); - }); - } - return { - data, - post, - terminate, - worker - }; -} -var jobRunner = (userFunc) => (e) => { - const userFuncArgs = e.data[0]; - return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => { - postMessage(["SUCCESS", result]); - }).catch((error) => { - postMessage(["ERROR", error]); - }); -}; -var depsParser = (deps) => { - if (deps.length === 0) - return ""; - const depsString = deps.map((dep) => `'${dep}'`).toString(); - return `importScripts(${depsString})`; -}; -var createWorkerBlobUrl = (fn, deps) => { - const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`; - const blob = new Blob([blobCode], { type: "text/javascript" }); - const url = URL.createObjectURL(blob); - return url; -}; -var useWebWorkerFn = (fn, options = {}) => { - const { - dependencies = [], - timeout, - window: window2 = defaultWindow - } = options; - const worker = ref(); - const workerStatus = ref("PENDING"); - const promise = ref({}); - const timeoutId = ref(); - const workerTerminate = (status = "PENDING") => { - if (worker.value && worker.value._url && window2) { - worker.value.terminate(); - URL.revokeObjectURL(worker.value._url); - promise.value = {}; - worker.value = void 0; - window2.clearTimeout(timeoutId.value); - workerStatus.value = status; - } - }; - workerTerminate(); - tryOnScopeDispose(workerTerminate); - const generateWorker = () => { - const blobUrl = createWorkerBlobUrl(fn, dependencies); - const newWorker = new Worker(blobUrl); - newWorker._url = blobUrl; - newWorker.onmessage = (e) => { - const { resolve = () => { - }, reject = () => { - } } = promise.value; - const [status, result] = e.data; - switch (status) { - case "SUCCESS": - resolve(result); - workerTerminate(status); - break; - default: - reject(result); - workerTerminate("ERROR"); - break; - } - }; - newWorker.onerror = (e) => { - const { reject = () => { - } } = promise.value; - reject(e); - workerTerminate("ERROR"); - }; - if (timeout) { - timeoutId.value = setTimeout(() => workerTerminate("TIMEOUT_EXPIRED"), timeout); - } - return newWorker; - }; - const callWorker = (...fnArgs) => new Promise((resolve, reject) => { - promise.value = { - resolve, - reject - }; - worker.value && worker.value.postMessage([[...fnArgs]]); - workerStatus.value = "RUNNING"; - }); - const workerFn = (...fnArgs) => { - if (workerStatus.value === "RUNNING") { - console.error("[useWebWorkerFn] You can only run one instance of the worker at a time."); - return Promise.reject(); - } - worker.value = generateWorker(); - return callWorker(...fnArgs); - }; - return { - workerFn, - workerStatus, - workerTerminate - }; -}; -function useWindowFocus({ window: window2 = defaultWindow } = {}) { - if (!window2) - return ref(false); - const focused = ref(window2.document.hasFocus()); - useEventListener(window2, "blur", () => { - focused.value = false; - }); - useEventListener(window2, "focus", () => { - focused.value = true; - }); - return focused; -} -function useWindowScroll({ window: window2 = defaultWindow } = {}) { - if (!window2) { - return { - x: ref(0), - y: ref(0) - }; - } - const x = ref(window2.pageXOffset); - const y = ref(window2.pageYOffset); - useEventListener("scroll", () => { - x.value = window2.pageXOffset; - y.value = window2.pageYOffset; - }, { - capture: false, - passive: true - }); - return { x, y }; -} -function useWindowSize({ window: window2 = defaultWindow, initialWidth = Infinity, initialHeight = Infinity } = {}) { - const width = ref(initialWidth); - const height = ref(initialHeight); - const update = () => { - if (window2) { - width.value = window2.innerWidth; - height.value = window2.innerHeight; - } - }; - update(); - tryOnMounted(update); - useEventListener("resize", update, { passive: true }); - return { width, height }; -} -export { - DefaultMagicKeysAliasMap, - StorageSerializers, - SwipeDirection, - TransitionPresets, - __onlyVue3, - logicAnd as and, - assert, - computedAsync as asyncComputed, - refAutoReset as autoResetRef, - breakpointsAntDesign, - breakpointsBootstrapV5, - breakpointsQuasar, - breakpointsSematic, - breakpointsTailwind, - breakpointsVuetify, - bypassFilter, - clamp, - computedAsync, - computedEager, - computedInject, - computedWithControl, - containsProp, - computedWithControl as controlledComputed, - controlledRef, - createEventHook, - createFetch, - createFilterWrapper, - createGlobalState, - createInjectionState, - reactify as createReactiveFn, - createSharedComposable, - createSingletonPromise, - createUnrefFn, - debounceFilter, - refDebounced as debouncedRef, - watchDebounced as debouncedWatch, - defaultDocument, - defaultLocation, - defaultNavigator, - defaultWindow, - directiveHooks, - computedEager as eagerComputed, - extendRef, - formatDate, - get, - getSSRHandler, - identity, - watchIgnorable as ignorableWatch, - increaseWithUnit, - invoke, - isBoolean, - isClient, - isDef, - isDefined, - isFunction, - isNumber, - isObject, - isString, - isWindow, - logicAnd, - logicNot, - logicOr, - makeDestructurable, - mapGamepadToXbox360Controller, - noop, - normalizeDate, - logicNot as not, - now, - objectPick, - onClickOutside, - onKeyDown, - onKeyPressed, - onKeyStroke, - onKeyUp, - onLongPress, - onStartTyping, - logicOr as or, - pausableFilter, - watchPausable as pausableWatch, - promiseTimeout, - rand, - reactify, - reactifyObject, - reactiveComputed, - reactiveOmit, - reactivePick, - refAutoReset, - refDebounced, - refDefault, - refThrottled, - refWithControl, - set2 as set, - setSSRHandler, - syncRef, - syncRefs, - templateRef, - throttleFilter, - refThrottled as throttledRef, - watchThrottled as throttledWatch, - timestamp, - toReactive, - toRefs2 as toRefs, - tryOnBeforeMount, - tryOnBeforeUnmount, - tryOnMounted, - tryOnScopeDispose, - tryOnUnmounted, - unrefElement, - until, - useActiveElement, - useAsyncQueue, - useAsyncState, - useBase64, - useBattery, - useBreakpoints, - useBroadcastChannel, - useBrowserLocation, - useCached, - useClamp, - useClipboard, - useColorMode, - useConfirmDialog, - useCounter, - useCssVar, - useCycleList, - useDark, - useDateFormat, - refDebounced as useDebounce, - useDebounceFn, - useDebouncedRefHistory, - useDeviceMotion, - useDeviceOrientation, - useDevicePixelRatio, - useDevicesList, - useDisplayMedia, - useDocumentVisibility, - useDraggable, - useElementBounding, - useElementByPoint, - useElementHover, - useElementSize, - useElementVisibility, - useEventBus, - useEventListener, - useEventSource, - useEyeDropper, - useFavicon, - useFetch, - useFileSystemAccess, - useFocus, - useFocusWithin, - useFps, - useFullscreen, - useGamepad, - useGeolocation, - useIdle, - useInfiniteScroll, - useIntersectionObserver, - useInterval, - useIntervalFn, - useKeyModifier, - useLastChanged, - useLocalStorage, - useMagicKeys, - useManualRefHistory, - useMediaControls, - useMediaQuery, - useMemoize, - useMemory, - useMounted, - useMouse, - useMouseInElement, - useMousePressed, - useMutationObserver, - useNavigatorLanguage, - useNetwork, - useNow, - useOffsetPagination, - useOnline, - usePageLeave, - useParallax, - usePermission, - usePointer, - usePointerSwipe, - usePreferredColorScheme, - usePreferredDark, - usePreferredLanguages, - useRafFn, - useRefHistory, - useResizeObserver, - useScreenSafeArea, - useScriptTag, - useScroll, - useScrollLock, - useSessionStorage, - useShare, - useSpeechRecognition, - useSpeechSynthesis, - useStorage, - useStorageAsync, - useStyleTag, - useSwipe, - useTemplateRefsList, - useTextSelection, - refThrottled as useThrottle, - useThrottleFn, - useThrottledRefHistory, - useTimeAgo, - useTimeout, - useTimeoutFn, - useTimeoutPoll, - useTimestamp, - useTitle, - useToggle, - useTransition, - useUrlSearchParams, - useUserMedia, - useVModel, - useVModels, - useVibrate, - useVirtualList, - useWakeLock, - useWebNotification, - useWebSocket, - useWebWorker, - useWebWorkerFn, - useWindowFocus, - useWindowScroll, - useWindowSize, - watchAtMost, - watchDebounced, - watchIgnorable, - watchOnce, - watchPausable, - watchThrottled, - watchWithFilter, - whenever -}; -//# sourceMappingURL=@vueuse_core.js.map diff --git a/docs/.vuepress/.cache/deps/@vueuse_core.js.map b/docs/.vuepress/.cache/deps/@vueuse_core.js.map deleted file mode 100644 index ddae8a7..0000000 --- a/docs/.vuepress/.cache/deps/@vueuse_core.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["dep:@vueuse_core", "../../../../node_modules/@vueuse/core/index.mjs", "../../../../node_modules/@vueuse/shared/index.mjs", "../../../../node_modules/vue-demi/lib/index.mjs"], - "sourcesContent": ["\nexport * from \"../../../../node_modules/@vueuse/core/index.mjs\"", "import { noop, isClient, isString, tryOnScopeDispose, tryOnMounted, promiseTimeout, tryOnBeforeMount, increaseWithUnit, clamp, useTimeoutFn, pausableWatch, createEventHook, isFunction, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, containsProp, until, throttleFilter, useDebounceFn, useThrottleFn, isObject, isNumber, useIntervalFn, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, watchEffect, computed, inject, unref, watch, getCurrentInstance, customRef, onUpdated, reactive, shallowRef, markRaw, getCurrentScope, isVue2, set, del, onMounted, readonly, onBeforeUpdate } from 'vue-demi';\nimport { unrefElement as unrefElement$1, useEventListener as useEventListener$1, useRafFn as useRafFn$1 } from '@vueuse/core';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nconst createUnrefFn = (fn) => {\n return function(...args) {\n return fn.apply(this, args.map((i) => unref(i)));\n };\n};\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = unref(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let event;\n let listener;\n let options;\n if (isString(args[0])) {\n [event, listener, options] = args;\n target = defaultWindow;\n } else {\n [target, event, listener, options] = args;\n }\n if (!target)\n return noop;\n let cleanup = noop;\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (!el)\n return;\n el.addEventListener(event, listener, options);\n cleanup = () => {\n el.removeEventListener(event, listener, options);\n cleanup = noop;\n };\n }, { immediate: true, flush: \"post\" });\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore, capture = true } = options;\n if (!window)\n return;\n const shouldListen = ref(true);\n const listener = (event) => {\n const el = unrefElement(target);\n const composedPath = event.composedPath();\n if (!el || el === event.target || composedPath.includes(el) || !shouldListen.value)\n return;\n if (ignore && ignore.length > 0) {\n if (ignore.some((target2) => {\n const el2 = unrefElement(target2);\n return el2 && (event.target === el2 || composedPath.includes(el2));\n }))\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen.value = !!el && !e.composedPath().includes(el);\n }, { passive: true })\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n if (__getOwnPropSymbols$j)\n for (var prop of __getOwnPropSymbols$j(b)) {\n if (__propIsEnum$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nconst createKeyPredicate = (keyFilter) => {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n else if (keyFilter)\n return () => true;\n else\n return () => false;\n};\nfunction onKeyStroke(key, handler, options = {}) {\n const { target = defaultWindow, eventName = \"keydown\", passive = false } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$8(__spreadValues$h({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$8(__spreadValues$h({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$8(__spreadValues$h({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n const elementRef = computed(() => unrefElement$1(target));\n let timeout = null;\n function clear() {\n if (timeout != null) {\n clearTimeout(timeout);\n timeout = null;\n }\n }\n function onDown(ev) {\n var _a;\n clear();\n timeout = setTimeout(() => handler(ev), (_a = options == null ? void 0 : options.delay) != null ? _a : DEFAULT_DELAY);\n }\n useEventListener$1(elementRef, \"pointerdown\", onDown);\n useEventListener$1(elementRef, \"pointerup\", clear);\n useEventListener$1(elementRef, \"pointerleave\", clear);\n}\n\nconst isFocusedElementEditable = () => {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n};\nconst isTypedCharValid = ({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) => {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n return false;\n};\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n const { window = defaultWindow } = options;\n const counter = ref(0);\n if (window) {\n useEventListener(window, \"blur\", () => counter.value += 1, true);\n useEventListener(window, \"focus\", () => counter.value += 1, true);\n }\n return computed(() => {\n counter.value;\n return window == null ? void 0 : window.document.activeElement;\n });\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop\n } = options;\n const promiseState = {\n pending: \"pending\",\n rejected: \"rejected\",\n fulfilled: \"fulfilled\"\n };\n const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n return curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n activeIndex.value === tasks.length - 1 && onFinished();\n return currentRes;\n });\n }).catch((e) => {\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n resetOnExecute = true,\n shallow = true\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = ref(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n } catch (e) {\n error.value = e;\n onError(e);\n }\n isLoading.value = false;\n return state.value;\n }\n if (immediate)\n execute(delay);\n return {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = unref(target);\n if (_target === void 0 || _target === null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n watch(target, execute, { immediate: true });\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = navigator && \"getBattery\" in navigator;\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n for (const event of events)\n useEventListener(battery, event, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n let mediaQuery;\n const matches = ref(false);\n const update = () => {\n if (!window)\n return;\n if (!mediaQuery)\n mediaQuery = window.matchMedia(query);\n matches.value = mediaQuery.matches;\n };\n tryOnBeforeMount(() => {\n update();\n if (!mediaQuery)\n return;\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", update);\n else\n mediaQuery.addListener(update);\n tryOnScopeDispose(() => {\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", update);\n else\n mediaQuery.removeListener(update);\n });\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetify = {\n xs: 600,\n sm: 960,\n md: 1264,\n lg: 1904\n};\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 600,\n sm: 1024,\n md: 1440,\n lg: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\n\nvar __defProp$g = Object.defineProperty;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n if (__getOwnPropSymbols$i)\n for (var prop of __getOwnPropSymbols$i(b)) {\n if (__propIsEnum$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n }\n return a;\n};\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = breakpoints[k];\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greater = (k) => {\n return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => greater(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n return __spreadValues$g({\n greater,\n smaller(k) {\n return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n }\n }, shortcutMethods);\n}\n\nconst useBroadcastChannel = (options) => {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = window && \"BroadcastChannel\" in window;\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = ref(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n};\n\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n const buildState = (trigger) => {\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window == null ? void 0 : window.location) || {};\n return {\n trigger,\n state: state2,\n length,\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n };\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction useClamp(value, min, max) {\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, unref(min), unref(max));\n },\n set(value2) {\n _value.value = clamp(value2, unref(min), unref(max));\n }\n });\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const events = [\"copy\", \"cut\"];\n const isSupported = Boolean(navigator && \"clipboard\" in navigator);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n }\n if (isSupported && read) {\n for (const event of events)\n useEventListener(event, updateText);\n }\n async function copy(value = unref(source)) {\n if (isSupported && value != null) {\n await navigator.clipboard.writeText(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\n_global[globalKey] = _global[globalKey] || {};\nconst handlers = _global[globalKey];\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : Array.isArray(rawInit) ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nfunction useStorage(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const data = (shallow ? shallowRef : ref)(initialValue);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = unref(initialValue);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, () => write(data.value), { flush, deep, eventFilter });\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", update);\n update();\n return data;\n function write(v) {\n try {\n if (v == null)\n storage.removeItem(key);\n else\n storage.setItem(key, serializer.write(v));\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit !== null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n } finally {\n resumeWatch();\n }\n }\n function update(event) {\n if (event && event.key !== key)\n return;\n data.value = read(event);\n }\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$h.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n if (__getOwnPropSymbols$h)\n for (var prop of __getOwnPropSymbols$h(b)) {\n if (__propIsEnum$h.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n }\n return a;\n};\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef\n } = options;\n const modes = __spreadValues$f({\n auto: \"\",\n light: \"light\",\n dark: \"dark\"\n }, options.modes || {});\n const preferredDark = usePreferredDark({ window });\n const preferredMode = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? ref(\"auto\") : useStorage(storageKey, \"auto\", storage, { window, listenToStorageChanges }));\n const state = computed({\n get() {\n return store.value === \"auto\" ? preferredMode.value : store.value;\n },\n set(v) {\n store.value = v;\n }\n });\n const updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector2, attribute2, value) => {\n const el = window == null ? void 0 : window.document.querySelector(selector2);\n if (!el)\n return;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n });\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n return state;\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, { window = defaultWindow } = {}) {\n const variable = ref(\"\");\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n watch([elRef, () => unref(prop)], ([el, prop2]) => {\n if (el && window)\n variable.value = window.getComputedStyle(el).getPropertyValue(prop2);\n }, { immediate: true });\n watch(variable, (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(unref(prop), val);\n });\n return variable;\n}\n\nfunction useCycleList(list, options) {\n var _a;\n const state = shallowRef((_a = options == null ? void 0 : options.initialValue) != null ? _a : list[0]);\n const index = computed({\n get() {\n var _a2;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a2 = options == null ? void 0 : options.fallbackIndex) != null ? _a2 : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const length = list.length;\n const index2 = (i % length + length) % length;\n const value = list[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n return {\n state,\n index,\n next,\n prev\n };\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$g.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n if (__getOwnPropSymbols$g)\n for (var prop of __getOwnPropSymbols$g(b)) {\n if (__propIsEnum$g.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode(__spreadProps$7(__spreadValues$e({}, options), {\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\");\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n }));\n const preferredDark = usePreferredDark({ window });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n if (v === preferredDark.value)\n mode.value = \"auto\";\n else\n mode.value = v ? \"dark\" : \"light\";\n }\n });\n return isDark;\n}\n\nconst fnClone = (v) => JSON.parse(JSON.stringify(v));\nconst fnBypass = (v) => v;\nconst fnSetSource = (source, value) => source.value = value;\nfunction defaultDump(clone) {\n return clone ? isFunction(clone) ? clone : fnClone : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? isFunction(clone) ? clone : fnClone : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Infinity);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$f.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n if (__getOwnPropSymbols$f)\n for (var prop of __getOwnPropSymbols$f(b)) {\n if (__propIsEnum$f.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$d({}, options), { clone: options.clone || deep, setSource }));\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return __spreadProps$6(__spreadValues$d({}, manualHistory), {\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n });\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$e.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n if (__getOwnPropSymbols$e)\n for (var prop of __getOwnPropSymbols$e(b)) {\n if (__propIsEnum$e.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, __spreadProps$5(__spreadValues$c({}, options), { eventFilter: filter }));\n return __spreadValues$c({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n });\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = Boolean(window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nconst DEVICE_PIXEL_RATIO_SCALES = [\n 1,\n 1.325,\n 1.4,\n 1.5,\n 1.8,\n 2,\n 2.4,\n 2.5,\n 2.75,\n 3,\n 3.5,\n 4\n];\nfunction useDevicePixelRatio({\n window = defaultWindow\n} = {}) {\n if (!window) {\n return {\n pixelRatio: ref(1)\n };\n }\n const pixelRatio = ref(window.devicePixelRatio);\n const handleDevicePixelRatio = () => {\n pixelRatio.value = window.devicePixelRatio;\n };\n useEventListener(window, \"resize\", handleDevicePixelRatio, { passive: true });\n DEVICE_PIXEL_RATIO_SCALES.forEach((dppx) => {\n const mqlMin = useMediaQuery(`screen and (min-resolution: ${dppx}dppx)`);\n const mqlMax = useMediaQuery(`screen and (max-resolution: ${dppx}dppx)`);\n watch([mqlMin, mqlMax], handleDevicePixelRatio);\n });\n return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = Boolean(navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n let isSupported = false;\n const permissionGranted = ref(false);\n async function update() {\n if (!isSupported)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n }\n async function ensurePermissions() {\n if (!isSupported)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n stream.getTracks().forEach((t) => t.stop());\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (navigator) {\n isSupported = Boolean(navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n if (isSupported) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = Boolean((_b = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _b.getDisplayMedia);\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n if (!isSupported || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(enabled, (v) => {\n if (v)\n _start();\n else\n _stop();\n }, { immediate: true });\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$d.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n if (__getOwnPropSymbols$d)\n for (var prop of __getOwnPropSymbols$d(b)) {\n if (__propIsEnum$d.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const draggingElement = (_a = options.draggingElement) != null ? _a : defaultWindow;\n const position = ref((_b = options.initialValue) != null ? _b : { x: 0, y: 0 });\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (options.pointerTypes)\n return options.pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (unref(options.preventDefault))\n e.preventDefault();\n if (unref(options.stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (unref(options.exact) && e.target !== unref(target))\n return;\n const rect = unref(target).getBoundingClientRect();\n const pos = {\n x: e.pageX - rect.left,\n y: e.pageY - rect.top\n };\n if (((_a2 = options.onStart) == null ? void 0 : _a2.call(options, pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n position.value = {\n x: e.pageX - pressedDelta.value.x,\n y: e.pageY - pressedDelta.value.y\n };\n (_a2 = options.onMove) == null ? void 0 : _a2.call(options, position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n (_a2 = options.onEnd) == null ? void 0 : _a2.call(options, position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n useEventListener(target, \"pointerdown\", start, true);\n useEventListener(draggingElement, \"pointermove\", move, true);\n useEventListener(draggingElement, \"pointerup\", end, true);\n }\n return __spreadProps$4(__spreadValues$b({}, toRefs(position)), {\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n });\n}\n\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$c.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$c)\n for (var prop of __getOwnPropSymbols$c(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$c.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n let observer;\n const isSupported = window && \"ResizeObserver\" in window;\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (isSupported && window && el) {\n observer = new ResizeObserver(callback);\n observer.observe(el, observerOptions);\n }\n }, { immediate: true, flush: \"post\" });\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function update() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n if (windowScroll)\n useEventListener(\"scroll\", update, { passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n function loop() {\n if (!isActive.value || !window)\n return;\n fn();\n window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n }\n return a;\n};\nfunction useElementByPoint(options) {\n const element = ref(null);\n const { x, y } = options;\n const controls = useRafFn(() => {\n element.value = document.elementFromPoint(unref(x), unref(y));\n });\n return __spreadValues$a({\n element\n }, controls);\n}\n\nfunction useElementHover(el) {\n const isHovered = ref(false);\n useEventListener(el, \"mouseenter\", () => isHovered.value = true);\n useEventListener(el, \"mouseleave\", () => isHovered.value = false);\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n useResizeObserver(target, ([entry]) => {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }, options);\n watch(() => unrefElement(target), (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n });\n return {\n width,\n height\n };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n const elementIsVisible = ref(false);\n const testBounding = () => {\n if (!window)\n return;\n const document = window.document;\n if (!unref(element)) {\n elementIsVisible.value = false;\n } else {\n const rect = unref(element).getBoundingClientRect();\n elementIsVisible.value = rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;\n }\n };\n tryOnMounted(testBounding);\n if (window)\n tryOnMounted(() => useEventListener(unref(scrollTarget) || window, \"scroll\", testBounding, { capture: false, passive: true }));\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n const listeners = events.get(key) || [];\n listeners.push(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n scope == null ? void 0 : scope.cleanups.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n const index = listeners.indexOf(listener);\n if (index > -1)\n listeners.splice(index, 1);\n if (!listeners.length)\n events.delete(key);\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = ref(null);\n const {\n withCredentials = false\n } = options;\n const close = () => {\n if (eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n }\n };\n const es = new EventSource(url, { withCredentials });\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n eventSource,\n event,\n data,\n status,\n error,\n close\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = Boolean(typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = isRef(newIcon) ? newIcon : ref(newIcon);\n const applyIcon = (icon) => {\n document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(favicon, (i, o) => {\n if (isString(i) && i !== o)\n applyIcon(i);\n }, { immediate: true });\n return favicon;\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\",\n formData: \"multipart/form-data\"\n};\nfunction isFetchOptions(obj) {\n return containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\");\n}\nfunction headersToObject(headers) {\n if (headers instanceof Headers)\n return Object.fromEntries([...headers.entries()]);\n return headers;\n}\nfunction createFetch(config = {}) {\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => config.baseUrl ? joinPaths(unref(config.baseUrl), unref(url)) : unref(url));\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = __spreadValues$9(__spreadValues$9({}, options), args[0]);\n } else {\n fetchOptions = __spreadProps$3(__spreadValues$9(__spreadValues$9({}, fetchOptions), args[0]), {\n headers: __spreadValues$9(__spreadValues$9({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n });\n }\n }\n if (args.length > 1 && isFetchOptions(args[1]))\n options = __spreadValues$9(__spreadValues$9({}, options), args[1]);\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = { immediate: true, refetch: false, timeout: 0 };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = __spreadValues$9(__spreadValues$9({}, options), args[0]);\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = __spreadValues$9(__spreadValues$9({}, options), args[1]);\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort && controller)\n controller.abort();\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n const execute = async (throwOnFailed = false) => {\n var _a2;\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n controller = void 0;\n if (supportsAbort) {\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = __spreadProps$3(__spreadValues$9({}, fetchOptions), {\n signal: controller.signal\n });\n }\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(unref(config.payload)) : unref(config.payload);\n }\n let isCanceled = false;\n const context = { url: unref(url), options: fetchOptions, cancel: () => {\n isCanceled = true;\n } };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return new Promise((resolve, reject) => {\n var _a3;\n fetch(context.url, __spreadProps$3(__spreadValues$9(__spreadValues$9({}, defaultFetchOptions), context.options), {\n headers: __spreadValues$9(__spreadValues$9({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n })).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse[config.type]();\n if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)\n ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n data.value = responseData;\n if (!fetchResponse.ok)\n throw new Error(fetchResponse.statusText);\n responseEvent.trigger(fetchResponse);\n return resolve(fetchResponse);\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError)\n ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n data.value = responseData;\n error.value = errorData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n return reject(fetchError);\n return resolve(null);\n }).finally(() => {\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n });\n };\n watch(() => [\n unref(url),\n unref(options.refetch)\n ], () => unref(options.refetch) && execute(), { deep: true });\n const shell = {\n isFinished,\n statusCode,\n response,\n error,\n data,\n isFetching,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(() => [\n unref(config.payload),\n unref(options.refetch)\n ], () => unref(options.refetch) && execute(), { deep: true });\n }\n if (!payloadType && unref(payload) && Object.getPrototypeOf(unref(payload)) === Object.prototype)\n config.payloadType = \"json\";\n return shell;\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return __spreadProps$3(__spreadValues$9({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n if (options.immediate)\n setTimeout(execute, 0);\n return __spreadProps$3(__spreadValues$9({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = unref(options);\n const window = _window;\n const isSupported = Boolean(window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported)\n return;\n const [handle] = await window.showOpenFilePicker(__spreadValues$8(__spreadValues$8({}, unref(options)), _options));\n fileHandle.value = handle;\n await updateFile();\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$8(__spreadValues$8({}, unref(options)), _options));\n data.value = void 0;\n await updateFile();\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$8(__spreadValues$8({}, unref(options)), _options));\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n if (unref(dataType) === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n if (unref(dataType) === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n if (unref(dataType) === \"Blob\")\n data.value = file.value;\n }\n watch(() => unref(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false } = options;\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed({\n get() {\n return activeElement.value === targetElement.value;\n },\n set(value) {\n var _a, _b;\n if (!value && focused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n if (value && !focused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus();\n }\n });\n watch(targetElement, () => {\n focused.value = initialValue;\n }, { immediate: true, flush: \"post\" });\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst functionsMap = [\n [\n \"requestFullscreen\",\n \"exitFullscreen\",\n \"fullscreenElement\",\n \"fullscreenEnabled\",\n \"fullscreenchange\",\n \"fullscreenerror\"\n ],\n [\n \"webkitRequestFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitFullscreenElement\",\n \"webkitFullscreenEnabled\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\"\n ],\n [\n \"webkitRequestFullScreen\",\n \"webkitCancelFullScreen\",\n \"webkitCurrentFullScreenElement\",\n \"webkitCancelFullScreen\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\"\n ],\n [\n \"mozRequestFullScreen\",\n \"mozCancelFullScreen\",\n \"mozFullScreenElement\",\n \"mozFullScreenEnabled\",\n \"mozfullscreenchange\",\n \"mozfullscreenerror\"\n ],\n [\n \"msRequestFullscreen\",\n \"msExitFullscreen\",\n \"msFullscreenElement\",\n \"msFullscreenEnabled\",\n \"MSFullscreenChange\",\n \"MSFullscreenError\"\n ]\n];\nfunction useFullscreen(target, options = {}) {\n const { document = defaultDocument, autoExit = false } = options;\n const targetRef = target || (document == null ? void 0 : document.querySelector(\"html\"));\n const isFullscreen = ref(false);\n let isSupported = false;\n let map = functionsMap[0];\n if (!document) {\n isSupported = false;\n } else {\n for (const m of functionsMap) {\n if (m[1] in document) {\n map = m;\n isSupported = true;\n break;\n }\n }\n }\n const [REQUEST, EXIT, ELEMENT, , EVENT] = map;\n async function exit() {\n if (!isSupported)\n return;\n if (document == null ? void 0 : document[ELEMENT])\n await document[EXIT]();\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported)\n return;\n await exit();\n const target2 = unrefElement(targetRef);\n if (target2) {\n await target2[REQUEST]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n if (isFullscreen.value)\n await exit();\n else\n await enter();\n }\n if (document) {\n useEventListener(document, EVENT, () => {\n isFullscreen.value = !!(document == null ? void 0 : document[ELEMENT]);\n }, false);\n }\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = navigator && \"getGamepads\" in navigator;\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n hapticActuators,\n index: gamepad.index,\n mapping: gamepad.mapping,\n connected: gamepad.connected,\n timestamp: gamepad.timestamp,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad) {\n const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n if (index > -1)\n gamepads.value[index] = stateFromGamepad(gamepad);\n }\n }\n };\n const { isActive, pause, resume } = useRafFn$1(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener$1(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener$1(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n if (_gamepads) {\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad)\n onGamepadConnected(gamepad);\n }\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator\n } = options;\n const isSupported = navigator && \"geolocation\" in navigator;\n const locatedAt = ref(null);\n const error = ref(null);\n const coords = ref({\n accuracy: 0,\n latitude: Infinity,\n longitude: Infinity,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n if (isSupported) {\n watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n enableHighAccuracy,\n maximumAge,\n timeout\n });\n }\n tryOnScopeDispose(() => {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const onEvent = createFilterWrapper(eventFilter, () => {\n idle.value = false;\n lastActive.value = timestamp();\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n });\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n }\n timer = setTimeout(() => idle.value = true, timeout);\n return { idle, lastActive };\n}\n\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n }\n } = options;\n const x = ref(0);\n const y = ref(0);\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n if (element) {\n const onScrollEnd = useDebounceFn((e) => {\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n }, throttle + idle);\n const onScrollHandler = (e) => {\n const eventTarget = e.target === document ? e.target.documentElement : e.target;\n const scrollLeft = eventTarget.scrollLeft;\n directions.left = scrollLeft < x.value;\n directions.right = scrollLeft > x.value;\n arrivedState.left = scrollLeft <= 0 + (offset.left || 0);\n arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0);\n x.value = scrollLeft;\n const scrollTop = eventTarget.scrollTop;\n directions.top = scrollTop < y.value;\n directions.bottom = scrollTop > y.value;\n arrivedState.top = scrollTop <= 0 + (offset.top || 0);\n arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0);\n y.value = scrollTop;\n isScrolling.value = true;\n onScrollEnd(e);\n onScroll(e);\n };\n useEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle) : onScrollHandler, eventListenerOptions);\n }\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions\n };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$8.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(b)) {\n if (__propIsEnum$8.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const state = reactive(useScroll(element, __spreadProps$2(__spreadValues$7({}, options), {\n offset: __spreadValues$7({\n bottom: (_a = options.distance) != null ? _a : 0\n }, options.offset)\n })));\n watch(() => state.arrivedState.bottom, (v) => {\n if (v)\n onLoadMore(state);\n });\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow\n } = options;\n const isSupported = window && \"IntersectionObserver\" in window;\n let cleanup = noop;\n const stopWatch = isSupported ? watch(() => ({\n el: unrefElement(target),\n root: unrefElement(root)\n }), ({ el, root: root2 }) => {\n cleanup();\n if (!el)\n return;\n const observer = new IntersectionObserver(callback, {\n root: root2,\n rootMargin,\n threshold\n });\n observer.observe(el);\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n }, { immediate: true, flush: \"post\" }) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = { toJSON() {\n return {};\n }, current };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (code) {\n if (value)\n current.add(e.code);\n else\n current.delete(e.code);\n }\n for (const key2 of values)\n setRefs(key2, value);\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n if (target) {\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n }\n const proxy = new Proxy(refs, {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => unref(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? unref(r) : r;\n }\n });\n return proxy;\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$7.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(b)) {\n if (__propIsEnum$7.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nfunction usingElRef(source, cb) {\n if (unref(source))\n cb(unref(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n options = __spreadValues$6(__spreadValues$6({}, defaultOptions), options);\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = isNumber(track) ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = isNumber(track) ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = unref(target);\n if (!el)\n return;\n const src = unref(options.src);\n let sources = [];\n if (!src)\n return;\n if (isString(src))\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = unref(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch(volume, (vol) => {\n const el = unref(target);\n if (!el)\n return;\n el.volume = vol;\n });\n watch(muted, (mute) => {\n const el = unref(target);\n if (!el)\n return;\n el.muted = mute;\n });\n watch(rate, (rate2) => {\n const el = unref(target);\n if (!el)\n return;\n el.playbackRate = rate2;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = unref(options.tracks);\n const el = unref(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = unref(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = unref(target);\n if (!el)\n return;\n isPlaying ? el.play() : el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = unref(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = unref(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(unref(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, \"waiting\", () => waiting.value = true);\n useEventListener(target, \"playing\", () => waiting.value = false);\n useEventListener(target, \"ratechange\", () => rate.value = unref(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = unref(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = unref(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n volume,\n muted,\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n onSourceError: sourceErrorEvent.on\n };\n}\n\nconst getMapVue2Compat = () => {\n const data = reactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => Object.prototype.hasOwnProperty.call(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n};\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return reactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return reactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = typeof performance !== \"undefined\" && \"memory\" in performance;\n if (isSupported) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n onMounted(() => {\n isMounted.value = true;\n });\n return isMounted;\n}\n\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n eventFilter\n } = options;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const mouseHandler = (event) => {\n if (type === \"page\") {\n x.value = event.pageX;\n y.value = event.pageY;\n } else if (type === \"client\") {\n x.value = event.clientX;\n y.value = event.clientY;\n }\n sourceType.value = \"mouse\";\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const touch2 = event.touches[0];\n if (type === \"page\") {\n x.value = touch2.pageX;\n y.value = touch2.pageY;\n } else if (type === \"client\") {\n x.value = touch2.clientX;\n y.value = touch2.clientY;\n }\n sourceType.value = \"touch\";\n }\n };\n const mouseHandlerWrapper = (event) => {\n return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});\n };\n const touchHandlerWrapper = (event) => {\n return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});\n };\n if (window) {\n useEventListener(window, \"mousemove\", mouseHandlerWrapper, { passive: true });\n useEventListener(window, \"dragover\", mouseHandlerWrapper, { passive: true });\n if (touch) {\n useEventListener(window, \"touchstart\", touchHandlerWrapper, { passive: true });\n useEventListener(window, \"touchmove\", touchHandlerWrapper, { passive: true });\n if (resetOnTouchEnds)\n useEventListener(window, \"touchend\", reset, { passive: true });\n }\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(false);\n let stop = () => {\n };\n if (window) {\n stop = watch([targetRef, x, y], () => {\n const el = unrefElement(targetRef);\n if (!el)\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + window.pageXOffset;\n elementPositionY.value = top + window.pageYOffset;\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = elX < 0 || elY < 0 || elX > elementWidth.value || elY > elementHeight.value;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n }, { immediate: true });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n useEventListener(window, \"mouseup\", onReleased, { passive: true });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"drop\", onReleased, { passive: true });\n useEventListener(window, \"dragend\", onReleased, { passive: true });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n useEventListener(window, \"touchend\", onReleased, { passive: true });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, [\"window\"]);\n let observer;\n const isSupported = window && \"IntersectionObserver\" in window;\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (isSupported && window && el) {\n observer = new MutationObserver(callback);\n observer.observe(el, mutationOptions);\n }\n }, { immediate: true });\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nconst useNavigatorLanguage = (options = {}) => {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = Boolean(navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n};\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = Boolean(navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(b)) {\n if (__propIsEnum$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(new Date());\n const update = () => now.value = new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return __spreadValues$5({\n now\n }, controls);\n } else {\n return now;\n }\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Infinity,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Infinity);\n const pageCount = computed(() => Math.ceil(unref(total) / unref(currentPageSize)));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page))\n syncRef(page, currentPage);\n if (isRef(pageSize))\n syncRef(pageSize, currentPageSize);\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n return \"deviceOrientation\";\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = -orientation.beta / 90;\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = orientation.gamma / 90;\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n useEventListener(target, \"pointerdown\", handler, { passive: true });\n useEventListener(target, \"pointermove\", handler, { passive: true });\n useEventListener(target, \"pointerleave\", () => isInside.value = false, { passive: true });\n }\n return __spreadProps$1(__spreadValues$4({}, toRefs(state)), {\n isInside\n });\n}\n\nvar SwipeDirection = /* @__PURE__ */ ((SwipeDirection2) => {\n SwipeDirection2[\"UP\"] = \"UP\";\n SwipeDirection2[\"RIGHT\"] = \"RIGHT\";\n SwipeDirection2[\"DOWN\"] = \"DOWN\";\n SwipeDirection2[\"LEFT\"] = \"LEFT\";\n SwipeDirection2[\"NONE\"] = \"NONE\";\n return SwipeDirection2;\n})(SwipeDirection || {});\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"NONE\" /* NONE */;\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"LEFT\" /* LEFT */ : \"RIGHT\" /* RIGHT */;\n } else {\n return diffY.value > 0 ? \"UP\" /* UP */ : \"DOWN\" /* DOWN */;\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"touchend\", onTouchEnd, listenerOptions),\n useEventListener(target, \"touchcancel\", onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = ref(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return SwipeDirection.NONE;\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n } else {\n return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n }\n });\n const filterEvent = (e) => {\n if (options.pointerTypes)\n return options.pointerTypes.includes(e.pointerType);\n return true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n var _a, _b;\n if (!filterEvent(e))\n return;\n isPointerDown.value = true;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!filterEvent(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n var _a, _b;\n if (!filterEvent(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n })\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${src}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = unref(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n for (const attr in attrs)\n el[attr] = attrs[attr];\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${src}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nvar _a, _b;\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst isIOS = isClient && (window == null ? void 0 : window.navigator) && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.platform) && /iP(ad|hone|od)/.test((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.platform);\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let touchMoveListener = null;\n let initialOverflow;\n watch(() => unref(element), (el) => {\n if (el) {\n const ele = el;\n initialOverflow = ele.style.overflow;\n if (isLocked.value)\n ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const ele = unref(element);\n if (!ele || isLocked.value)\n return;\n if (isIOS) {\n touchMoveListener = useEventListener(document, \"touchmove\", preventDefault, { passive: false });\n }\n ele.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const ele = unref(element);\n if (!ele || !isLocked.value)\n return;\n isIOS && (touchMoveListener == null ? void 0 : touchMoveListener());\n ele.style.overflow = initialOverflow;\n isLocked.value = false;\n };\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else\n unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = _navigator && \"canShare\" in _navigator;\n const share = async (overrideOptions = {}) => {\n if (isSupported) {\n const data = __spreadValues$3(__spreadValues$3({}, unref(shareOptions)), unref(overrideOptions));\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n window = defaultWindow\n } = options;\n const lang = ref(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = Boolean(SpeechRecognition);\n let recognition;\n if (isSupported) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = unref(lang);\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const transcript = Array.from(event.results).map((result2) => {\n isFinal.value = result2.isFinal;\n return result2[0];\n }).map((result2) => result2.transcript).join(\"\");\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = unref(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n var _a, _b;\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = Boolean(synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const voiceInfo = {\n lang: ((_a = options.voice) == null ? void 0 : _a.lang) || \"default\",\n name: ((_b = options.voice) == null ? void 0 : _b.name) || \"\"\n };\n const spokenText = ref(text || \"\");\n const lang = ref(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = unref(lang);\n options.voice && (utterance2.voice = options.voice);\n utterance2.pitch = pitch;\n utterance2.rate = rate;\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n utterance2.lang = unref(lang);\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n utterance && synth.speak(utterance.value);\n };\n if (isSupported) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n voiceInfo,\n utterance,\n error,\n toggle,\n speak\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = unref(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => setTimeout(() => read(e), 0));\n if (storage) {\n watchWithFilter(data, async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n }, {\n flush,\n deep,\n eventFilter\n });\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n el.type = \"text/css\";\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n if (isLoaded.value)\n return;\n stop = watch(cssRef, (value) => {\n el.innerText = value;\n }, { immediate: true });\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n load();\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n const ranges = new Array(rangeCount);\n for (let i = 0; i < rangeCount; i++) {\n const range = selection.getRangeAt(i);\n ranges[i] = range;\n }\n return ranges;\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, __spreadProps(__spreadValues$2({}, options), { eventFilter: filter }));\n return __spreadValues$2({}, history);\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nconst UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Infinity, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`\n};\nconst DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n max,\n updateInterval = 3e4,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER\n } = options;\n const { abs, round } = Math;\n const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n function getTimeago(from, now2) {\n var _a2;\n const diff = +now2 - +from;\n const absDiff = abs(diff);\n if (absDiff < 6e4)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a2 = UNITS.find((i) => i.name === max)) == null ? void 0 : _a2.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const unit of UNITS) {\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n function format(diff, unit) {\n const val = round(abs(diff) / unit.value);\n const past = diff > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n const timeAgo = computed(() => getTimeago(new Date(unref(time)), unref(now.value)));\n if (exposeControls) {\n return __spreadValues$1({\n timeAgo\n }, controls);\n } else {\n return timeAgo;\n }\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval);\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\"\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate }) : useIntervalFn(update, interval, { immediate });\n if (exposeControls) {\n return __spreadValues({\n timestamp: ts\n }, controls);\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b;\n const {\n document = defaultDocument,\n observe = false,\n titleTemplate = \"%s\"\n } = options;\n const title = ref((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n watch(title, (t, o) => {\n if (isString(t) && t !== o && document)\n document.title = titleTemplate.replace(\"%s\", t);\n }, { immediate: true });\n if (observe && document) {\n useMutationObserver((_b = document.head) == null ? void 0 : _b.querySelector(\"title\"), () => {\n if (document && document.title !== title.value)\n title.value = titleTemplate.replace(\"%s\", document.title);\n }, { childList: true });\n }\n return title;\n}\n\nconst TransitionPresets = {\n linear: identity,\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction useTransition(source, options = {}) {\n const {\n delay = 0,\n disabled = false,\n duration = 1e3,\n onFinished = noop,\n onStarted = noop,\n transition = identity\n } = options;\n const currentTransition = computed(() => {\n const t = unref(transition);\n return isFunction(t) ? t : createEasingFunction(t);\n });\n const sourceValue = computed(() => {\n const s = unref(source);\n return isNumber(s) ? s : s.map(unref);\n });\n const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);\n const outputVector = ref(sourceVector.value.slice(0));\n let currentDuration;\n let diffVector;\n let endAt;\n let startAt;\n let startVector;\n const { resume, pause } = useRafFn(() => {\n const now = Date.now();\n const progress = clamp(1 - (endAt - now) / currentDuration, 0, 1);\n outputVector.value = startVector.map((val, i) => {\n var _a;\n return val + ((_a = diffVector[i]) != null ? _a : 0) * currentTransition.value(progress);\n });\n if (progress >= 1) {\n pause();\n onFinished();\n }\n }, { immediate: false });\n const start = () => {\n pause();\n currentDuration = unref(duration);\n diffVector = outputVector.value.map((n, i) => {\n var _a, _b;\n return ((_a = sourceVector.value[i]) != null ? _a : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);\n });\n startVector = outputVector.value.slice(0);\n startAt = Date.now();\n endAt = startAt + currentDuration;\n resume();\n onStarted();\n };\n const timeout = useTimeoutFn(start, delay, { immediate: false });\n watch(sourceVector, () => {\n if (unref(disabled)) {\n outputVector.value = sourceVector.value.slice(0);\n } else {\n if (unref(delay) <= 0)\n start();\n else\n timeout.start();\n }\n }, { deep: true });\n return computed(() => {\n const targetVector = unref(disabled) ? sourceVector : outputVector;\n return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;\n });\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive(initialValue);\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(state, () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n }, { deep: true });\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState({}, \"\", window.location.pathname + constructQuery(params));\n resume();\n }\n function onChanged() {\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n updateState(read());\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b, _c;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const videoDeviceId = ref(options.videoDeviceId);\n const audioDeviceId = ref(options.audioDeviceId);\n const { navigator = defaultNavigator } = options;\n const isSupported = Boolean((_c = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _c.getUserMedia);\n const stream = shallowRef();\n function getDeviceOptions(device) {\n if (device.value === \"none\" || device.value === false)\n return false;\n if (device.value == null)\n return true;\n return {\n deviceId: device.value\n };\n }\n async function _start() {\n if (!isSupported || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(videoDeviceId),\n audio: getDeviceOptions(audioDeviceId)\n });\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(enabled, (v) => {\n if (v)\n _start();\n else\n _stop();\n }, { immediate: true });\n watch([videoDeviceId, audioDeviceId], () => {\n if (autoSwitch.value && stream.value)\n restart();\n }, { immediate: true });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n videoDeviceId,\n audioDeviceId,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c;\n const {\n passive = false,\n eventName,\n deep = false\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$options) == null ? void 0 : _c.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = eventName || event || `update:${key}`;\n if (passive) {\n const proxy = ref(props[key]);\n watch(() => props[key], (v) => proxy.value = v);\n watch(proxy, (v) => {\n if (v !== props[key] || deep)\n _emit(event, v);\n }, {\n deep\n });\n return proxy;\n } else {\n return computed({\n get() {\n return props[key];\n },\n set(value) {\n _emit(event, value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props)\n ret[key] = useVModel(props, key, emit, options);\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = typeof navigator !== \"undefined\" && \"vibrate\" in navigator;\n const patternRef = ref(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(vibrate, interval, {\n immediate: false,\n immediateCallback: false\n });\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const containerRef = ref();\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = (containerHeight) => {\n if (typeof itemHeight === \"number\")\n return Math.ceil(containerHeight / itemHeight);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const height = itemHeight(i);\n sum += height;\n if (sum >= containerHeight) {\n capacity = i;\n break;\n }\n }\n return capacity - start;\n };\n const getOffset = (scrollTop) => {\n if (typeof itemHeight === \"number\")\n return Math.floor(scrollTop / itemHeight) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const height = itemHeight(i);\n sum += height;\n if (sum >= scrollTop) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n const calculateRange = () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(element.scrollTop);\n const viewCapacity = getViewCapacity(element.clientHeight);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n watch([size.width, size.height, list], () => {\n calculateRange();\n });\n const totalHeight = computed(() => {\n if (typeof itemHeight === \"number\")\n return source.value.length * itemHeight;\n return source.value.reduce((sum, _, index) => sum + itemHeight(index), 0);\n });\n const getDistanceTop = (index) => {\n if (typeof itemHeight === \"number\") {\n const height2 = index * itemHeight;\n return height2;\n }\n const height = source.value.slice(0, index).reduce((sum, _, i) => sum + itemHeight(i), 0);\n return height;\n };\n const scrollTo = (index) => {\n if (containerRef.value) {\n containerRef.value.scrollTop = getDistanceTop(index);\n calculateRange();\n }\n };\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n const containerStyle = { overflowY: \"auto\" };\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\n\nconst useWakeLock = (options = {}) => {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n let wakeLock;\n const isSupported = navigator && \"wakeLock\" in navigator;\n const isActive = ref(false);\n async function onVisibilityChange() {\n if (!isSupported || !wakeLock)\n return;\n if (document && document.visibilityState === \"visible\")\n wakeLock = await navigator.wakeLock.request(\"screen\");\n isActive.value = !wakeLock.released;\n }\n if (document)\n useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n async function request(type) {\n if (!isSupported)\n return;\n wakeLock = await navigator.wakeLock.request(type);\n isActive.value = !wakeLock.released;\n }\n async function release() {\n if (!isSupported || !wakeLock)\n return;\n await wakeLock.release();\n isActive.value = !wakeLock.released;\n wakeLock = null;\n }\n return {\n isSupported,\n isActive,\n request,\n release\n };\n};\n\nconst useWebNotification = (defaultOptions = {}) => {\n const {\n window = defaultWindow\n } = defaultOptions;\n const isSupported = !!window && \"Notification\" in window;\n const notification = ref(null);\n const requestPermission = async () => {\n if (!isSupported)\n return;\n if (\"permission\" in Notification && Notification.permission !== \"denied\")\n await Notification.requestPermission();\n };\n const onClick = createEventHook();\n const onShow = createEventHook();\n const onError = createEventHook();\n const onClose = createEventHook();\n const show = async (overrides) => {\n if (!isSupported)\n return;\n await requestPermission();\n const options = Object.assign({}, defaultOptions, overrides);\n notification.value = new Notification(options.title || \"\", options);\n notification.value.onclick = (event) => onClick.trigger(event);\n notification.value.onshow = (event) => onShow.trigger(event);\n notification.value.onerror = (event) => onError.trigger(event);\n notification.value.onclose = (event) => onClose.trigger(event);\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n tryOnMounted(async () => {\n if (isSupported)\n await requestPermission();\n });\n tryOnScopeDispose(close);\n if (isSupported && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n};\n\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const wsRef = ref();\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n const close = (code = 1e3, reason) => {\n if (!wsRef.value)\n return;\n explicitlyClosed = true;\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n };\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n const ws = new WebSocket(url, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n explicitlyClosed = false;\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n wsRef.value = void 0;\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = \"ping\",\n interval = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(() => send(message, false), interval, { immediate: false });\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (immediate)\n _init();\n if (autoClose) {\n useEventListener(window, \"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n close();\n retried = 0;\n _init();\n };\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(url, workerOptions, options = {}) {\n const {\n window = defaultWindow\n } = options;\n const data = ref(null);\n const worker = shallowRef();\n const post = function post2(val) {\n if (!worker.value)\n return;\n worker.value.postMessage(val);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n worker.value = new Worker(url, workerOptions);\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nconst jobRunner = (userFunc) => (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n};\n\nconst depsParser = (deps) => {\n if (deps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n return `importScripts(${depsString})`;\n};\n\nconst createWorkerBlobUrl = (fn, deps) => {\n const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n};\n\nconst useWebWorkerFn = (fn, options = {}) => {\n const {\n dependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n promise.value = {\n resolve,\n reject\n };\n worker.value && worker.value.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n};\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const x = ref(window.pageXOffset);\n const y = ref(window.pageYOffset);\n useEventListener(\"scroll\", () => {\n x.value = window.pageXOffset;\n y.value = window.pageYOffset;\n }, {\n capture: false,\n passive: true\n });\n return { x, y };\n}\n\nfunction useWindowSize({ window = defaultWindow, initialWidth = Infinity, initialHeight = Infinity } = {}) {\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, SwipeDirection, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, computedAsync, computedInject, createFetch, createUnrefFn, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAsyncQueue, useAsyncState, useBase64, useBattery, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClamp, useClipboard, useColorMode, useConfirmDialog, useCssVar, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useOffsetPagination, useOnline, usePageLeave, useParallax, usePermission, usePointer, usePointerSwipe, usePreferredColorScheme, usePreferredDark, usePreferredLanguages, useRafFn, useRefHistory, useResizeObserver, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSpeechRecognition, useSpeechSynthesis, useStorage, useStorageAsync, useStyleTag, useSwipe, useTemplateRefsList, useTextSelection, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n", "import { shallowRef, watchEffect, readonly, ref, watch, customRef, effectScope, provide, inject, getCurrentScope, onScopeDispose, isVue3, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted } from 'vue-demi';\n\nvar __defProp$8 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, __spreadProps$5(__spreadValues$8({}, options), {\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n }));\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n watch(source, () => {\n dirty.value = true;\n trigger();\n }, { flush: \"sync\" });\n return customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = fn();\n dirty.value = false;\n }\n track();\n return v;\n },\n set() {\n }\n };\n });\n}\n\nfunction createEventHook() {\n const fns = [];\n const off = (fn) => {\n const index = fns.indexOf(fn);\n if (index !== -1)\n fns.splice(index, 1);\n };\n const on = (fn) => {\n fns.push(fn);\n return {\n off: () => off(fn)\n };\n };\n const trigger = (param) => {\n fns.forEach((fn) => fn(param));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return () => {\n if (!initialized) {\n state = scope.run(stateFactory);\n initialized = true;\n }\n return state;\n };\n}\n\nfunction createInjectionState(composable) {\n const key = Symbol(\"InjectionState\");\n const useProvidingState = (...args) => {\n provide(key, composable(...args));\n };\n const useInjectedState = () => inject(key);\n return [useProvidingState, useInjectedState];\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n if (isVue3)\n return;\n throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n __onlyVue3();\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction logicAnd(...args) {\n return computed(() => args.every((i) => unref(i)));\n}\n\nfunction logicNot(v) {\n return computed(() => !unref(v));\n}\n\nfunction logicOr(...args) {\n return computed(() => args.some((i) => unref(i)));\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = __spreadValues$7({}, obj);\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn) {\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unref(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj)) : value\n ];\n }));\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !keys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n return reactive(Object.fromEntries(keys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = defaultValue;\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = defaultValue;\n trigger();\n }, unref(afterMs));\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n filter(() => fn.apply(this, args), { fn, thisArg: this, args });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n const filter = (invoke) => {\n const duration = unref(ms);\n const maxDuration = unref(options.maxWait);\n if (timer)\n clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n clearTimeout(maxTimer);\n maxTimer = null;\n }\n return invoke();\n }\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n clearTimeout(timer);\n maxTimer = null;\n invoke();\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n clearTimeout(maxTimer);\n maxTimer = null;\n invoke();\n }, duration);\n };\n return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true) {\n let lastExec = 0;\n let timer;\n let preventLeading = !leading;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n };\n const filter = (invoke) => {\n const duration = unref(ms);\n const elapsed = Date.now() - lastExec;\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration) {\n lastExec = Date.now();\n if (preventLeading)\n preventLeading = false;\n else\n invoke();\n }\n if (trailing) {\n timer = setTimeout(() => {\n lastExec = Date.now();\n if (!leading)\n preventLeading = true;\n clear();\n invoke();\n }, duration);\n }\n if (!leading && !timer)\n timer = setTimeout(() => preventLeading = true, duration);\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive, pause, resume, eventFilter };\n}\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || !obj[k] === void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n if (ms <= 0)\n return value;\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = true, leading = true) {\n return createFilterWrapper(throttleFilter(ms, trailing, leading), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(ref, {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction syncRef(left, right, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\"\n } = options;\n let stop1, stop2;\n if (direction === \"both\" || direction === \"ltr\") {\n stop1 = watch(left, (newValue) => right.value = newValue, { flush, deep, immediate });\n }\n if (direction === \"both\" || direction === \"rtl\") {\n stop2 = watch(right, (newValue) => left.value = newValue, { flush, deep, immediate });\n }\n return () => {\n stop1 == null ? void 0 : stop1();\n stop2 == null ? void 0 : stop2();\n };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$8.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(b)) {\n if (__propIsEnum$8.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction toRefs(objectRef) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n objectRef.value = __spreadProps$4(__spreadValues$6({}, objectRef.value), { [key]: v });\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n if (getCurrentInstance())\n onBeforeMount(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n if (getCurrentInstance())\n onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n if (getCurrentInstance())\n onMounted(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n if (getCurrentInstance())\n onUnmounted(fn);\n}\n\nfunction until(r) {\n let isNot = false;\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(r, (v) => {\n if (condition(v) === !isNot) {\n stop == null ? void 0 : stop();\n resolve();\n }\n }, {\n flush,\n deep,\n immediate: true\n });\n });\n const promises = [watcher];\n if (timeout) {\n promises.push(promiseTimeout(timeout, throwOnTimeout).finally(() => {\n stop == null ? void 0 : stop();\n }));\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n return toMatch((v) => v === unref(value), options);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(unref(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(unref(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n isNot = !isNot;\n return this;\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n isNot = !isNot;\n return this;\n }\n };\n return instance;\n }\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n const count = ref(initialValue);\n const {\n max = Infinity,\n min = -Infinity\n } = options;\n const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n const get = () => count.value;\n const set = (val) => count.value = val;\n const reset = (val = initialValue) => {\n initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst formatDate = (date, formatStr) => {\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const matches = {\n YY: String(years).slice(-2),\n YYYY: years,\n M: month + 1,\n MM: `${month + 1}`.padStart(2, \"0\"),\n D: String(days),\n DD: `${days}`.padStart(2, \"0\"),\n H: String(hours),\n HH: `${hours}`.padStart(2, \"0\"),\n h: `${hours % 12 || 12}`.padStart(1, \"0\"),\n hh: `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: String(minutes),\n mm: `${minutes}`.padStart(2, \"0\"),\n s: String(seconds),\n ss: `${seconds}`.padStart(2, \"0\"),\n SSS: `${milliseconds}`.padStart(3, \"0\"),\n d: day\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]);\n};\nconst normalizeDate = (date) => {\n if (date === null)\n return new Date(NaN);\n if (date === void 0)\n return new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\") {\n return computed(() => formatDate(normalizeDate(unref(date)), unref(formatStr)));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n if (interval <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, unref(interval));\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval)) {\n const stopWatch = watch(interval, () => {\n if (immediate && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$7.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(b)) {\n if (__propIsEnum$7.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true\n } = options;\n const counter = ref(0);\n const controls = useIntervalFn(() => counter.value += 1, interval, { immediate });\n if (exposeControls) {\n return __spreadValues$5({\n counter\n }, controls);\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(source, () => ms.value = timestamp(), options);\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, unref(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending,\n start,\n stop\n };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$6.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(b)) {\n if (__propIsEnum$6.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false\n } = options;\n const controls = useTimeoutFn(noop, interval, options);\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return __spreadValues$4({\n ready\n }, controls);\n } else {\n return ready;\n }\n}\n\nfunction useToggle(initialValue = false) {\n if (isRef(initialValue)) {\n return (value) => {\n initialValue.value = typeof value === \"boolean\" ? value : !initialValue.value;\n return initialValue.value;\n };\n } else {\n const boolean = ref(initialValue);\n const toggle = (value) => {\n boolean.value = typeof value === \"boolean\" ? value : !boolean.value;\n return boolean.value;\n };\n return [boolean, toggle];\n }\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$5(_a, [\n \"eventFilter\"\n ]);\n return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchAtMost(source, cb, options) {\n const _a = options, {\n count\n } = _a, watchOptions = __objRest$4(_a, [\n \"count\"\n ]);\n const current = ref(0);\n const stop = watchWithFilter(source, (...args) => {\n current.value += 1;\n if (current.value >= unref(count))\n nextTick(() => stop());\n cb(...args);\n }, watchOptions);\n return { count: current, stop };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$3 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n const _a = options, {\n debounce = 0\n } = _a, watchOptions = __objRest$3(_a, [\n \"debounce\"\n ]);\n return watchWithFilter(source, cb, __spreadProps$3(__spreadValues$3({}, watchOptions), {\n eventFilter: debounceFilter(debounce)\n }));\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$2(_a, [\n \"eventFilter\"\n ]);\n const filteredCb = createFilterWrapper(eventFilter, cb);\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(source, (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n }, watchOptions);\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(watch(source, () => {\n syncCounter.value++;\n }, __spreadProps$2(__spreadValues$2({}, watchOptions), { flush: \"sync\" })));\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(watch(source, (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n }, watchOptions));\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n const _a = options, {\n eventFilter: filter\n } = _a, watchOptions = __objRest$1(_a, [\n \"eventFilter\"\n ]);\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n eventFilter\n }));\n return { stop, pause, resume, isActive };\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n const _a = options, {\n throttle = 0,\n trailing = true,\n leading = true\n } = _a, watchOptions = __objRest(_a, [\n \"throttle\",\n \"trailing\",\n \"leading\"\n ]);\n return watchWithFilter(source, cb, __spreadProps(__spreadValues({}, watchOptions), {\n eventFilter: throttleFilter(throttle, trailing, leading)\n }));\n}\n\nfunction whenever(source, cb, options) {\n return watch(source, (v, ov, onInvalidate) => {\n if (v)\n cb(v, ov, onInvalidate);\n }, options);\n}\n\nexport { __onlyVue3, logicAnd as and, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isNumber, isObject, isString, isWindow, logicAnd, logicNot, logicOr, makeDestructurable, noop, normalizeDate, logicNot as not, now, objectPick, logicOr as or, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToggle, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchWithFilter, whenever };\n", "import * as Vue from 'vue'\n\nvar isVue2 = false\nvar isVue3 = true\nvar Vue2 = undefined\n\nfunction install() {}\n\nexport function set(target, key, val) {\n if (Array.isArray(target)) {\n target.length = Math.max(target.length, key)\n target.splice(key, 1, val)\n return val\n }\n target[key] = val\n return val\n}\n\nexport function del(target, key) {\n if (Array.isArray(target)) {\n target.splice(key, 1)\n return\n }\n delete target[key]\n}\n\nexport * from 'vue'\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n}\n"], - "mappings": "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", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/_metadata.json b/docs/.vuepress/.cache/deps/_metadata.json deleted file mode 100644 index f7fba22..0000000 --- a/docs/.vuepress/.cache/deps/_metadata.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "hash": "b1589631", - "browserHash": "c000c366", - "optimized": { - "@vue/devtools-api": { - "src": "../../../../node_modules/@vue/devtools-api/lib/esm/index.js", - "file": "@vue_devtools-api.js", - "fileHash": "5af9d1a0", - "needsInterop": false - }, - "@vueuse/core": { - "src": "../../../../node_modules/@vueuse/core/index.mjs", - "file": "@vueuse_core.js", - "fileHash": "67c1bb0c", - "needsInterop": false - }, - "vue": { - "src": "../../../../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js", - "file": "vue.js", - "fileHash": "22dcdaac", - "needsInterop": false - }, - "vue-router": { - "src": "../../../../node_modules/vue-router/dist/vue-router.esm-bundler.js", - "file": "vue-router.js", - "fileHash": "0f951dc0", - "needsInterop": false - }, - "nprogress": { - "src": "../../../../node_modules/nprogress/nprogress.js", - "file": "nprogress.js", - "fileHash": "8a8a501a", - "needsInterop": true - }, - "@vuepress/shared": { - "src": "../../../../node_modules/@vuepress/shared/lib/esm/index.js", - "file": "@vuepress_shared.js", - "fileHash": "790174eb", - "needsInterop": false - } - }, - "chunks": { - "chunk-WT46H2UR": { - "file": "chunk-WT46H2UR.js" - }, - "chunk-J5QUGD5J": { - "file": "chunk-J5QUGD5J.js" - }, - "chunk-SDTWZDHJ": { - "file": "chunk-SDTWZDHJ.js" - }, - "chunk-JQISXBHW": { - "file": "chunk-JQISXBHW.js" - } - } -} \ No newline at end of file diff --git a/docs/.vuepress/.cache/deps/chunk-J5QUGD5J.js b/docs/.vuepress/.cache/deps/chunk-J5QUGD5J.js deleted file mode 100644 index 0873473..0000000 --- a/docs/.vuepress/.cache/deps/chunk-J5QUGD5J.js +++ /dev/null @@ -1,8443 +0,0 @@ -import { - EMPTY_ARR, - EMPTY_OBJ, - NO, - NOOP, - camelize, - capitalize, - def, - extend, - getGlobalThis, - hasChanged, - hasOwn, - hyphenate, - includeBooleanAttr, - invokeArrayFns, - isArray, - isBuiltInDirective, - isFunction, - isGloballyWhitelisted, - isHTMLTag, - isIntegerKey, - isMap, - isModelListener, - isObject, - isOn, - isPlainObject, - isPromise, - isReservedProp, - isSVGTag, - isSet, - isSpecialBooleanAttr, - isString, - isSymbol, - looseEqual, - looseIndexOf, - makeMap, - normalizeClass, - normalizeStyle, - remove, - toHandlerKey, - toNumber, - toRawType -} from "./chunk-SDTWZDHJ.js"; -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -function warn(msg, ...args) { - console.warn(`[Vue warn] ${msg}`, ...args); -} -var activeEffectScope; -var EffectScope = class { - constructor(detached = false) { - this.active = true; - this.effects = []; - this.cleanups = []; - if (!detached && activeEffectScope) { - this.parent = activeEffectScope; - this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; - } - } - 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.`); - } - } - on() { - activeEffectScope = this; - } - 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.parent && !fromParent) { - const last = this.parent.scopes.pop(); - if (last && last !== this) { - this.parent.scopes[this.index] = last; - last.index = this.index; - } - } - 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)) { - depsMap.forEach((dep, key2) => { - if (key2 === "length" || key2 >= newValue) { - 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) { - for (const effect2 of isArray(dep) ? dep : [...dep]) { - if (effect2 !== activeEffect || effect2.allowRecurse) { - if (effect2.onTrigger) { - effect2.onTrigger(extend({ effect: effect2 }, debuggerEventExtraInfo)); - } - if (effect2.scheduler) { - effect2.scheduler(); - } else { - effect2.run(); - } - } - } -} -var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); -var builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(isSymbol)); -var get = 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 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 && targetIsArray && hasOwn(arrayInstrumentations, key)) { - return Reflect.get(arrayInstrumentations, key, receiver); - } - 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)) { - const shouldUnwrap = !targetIsArray || !isIntegerKey(key); - return shouldUnwrap ? res.value : res; - } - if (isObject(res)) { - return isReadonly2 ? readonly(res) : reactive(res); - } - return res; - }; -} -var set = 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 && !isReadonly(value)) { - if (!isShallow(value)) { - value = toRaw(value); - oldValue = toRaw(oldValue); - } - 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(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, - set, - deleteProperty, - has, - 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$1(target, key, isReadonly2 = false, isShallow3 = false) { - target = target["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (key !== rawKey) { - !isReadonly2 && track(rawTarget, "get", key); - } - !isReadonly2 && 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$1(key, isReadonly2 = false) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (key !== rawKey) { - !isReadonly2 && track(rawTarget, "has", key); - } - !isReadonly2 && 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"]; - !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$1(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"]; - 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"]; - 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 { - next() { - const { value, done } = innerIterator.next(); - return done ? { value, done } : { - value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), - done - }; - }, - [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$1(this, key); - }, - get size() { - return size(this); - }, - has: has$1, - add, - set: set$1, - delete: deleteEntry, - clear, - forEach: createForEach(false, false) - }; - const shallowInstrumentations2 = { - get(key) { - return get$1(this, key, false, true); - }, - get size() { - return size(this); - }, - has: has$1, - add, - set: set$1, - delete: deleteEntry, - clear, - forEach: createForEach(false, true) - }; - const readonlyInstrumentations2 = { - get(key) { - return get$1(this, key, true); - }, - get size() { - return size(this, true); - }, - has(key) { - return has$1.call(this, key, true); - }, - add: createReadonlyMethod("add"), - set: createReadonlyMethod("set"), - delete: createReadonlyMethod("delete"), - clear: createReadonlyMethod("clear"), - forEach: createForEach(true, false) - }; - const shallowReadonlyInstrumentations2 = { - get(key) { - return get$1(this, key, true, true); - }, - get size() { - return size(this, true); - }, - has(key) { - return has$1.call(this, key, true); - }, - add: createReadonlyMethod("add"), - set: createReadonlyMethod("set"), - delete: createReadonlyMethod("delete"), - clear: createReadonlyMethod("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"] || !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"] && !(isReadonly2 && target["__v_isReactive"])) { - 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"]); - } - return !!(value && value["__v_isReactive"]); -} -function isReadonly(value) { - return !!(value && value["__v_isReadonly"]); -} -function isShallow(value) { - return !!(value && value["__v_isShallow"]); -} -function isProxy(value) { - return isReactive(value) || isReadonly(value); -} -function toRaw(observed) { - const raw = observed && observed["__v_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); - if (ref2.dep) { - if (true) { - triggerEffects(ref2.dep, { - target: ref2, - type: "set", - key: "value", - newValue: newVal - }); - } else { - triggerEffects(ref2.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) { - newVal = this.__v_isShallow ? newVal : toRaw(newVal); - if (hasChanged(newVal, this._rawValue)) { - this._rawValue = newVal; - this._value = this.__v_isShallow ? 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; - } -}; -function toRef(object, key, defaultValue) { - const val = object[key]; - return isRef(val) ? val : new ObjectRefImpl(object, key, defaultValue); -} -var ComputedRefImpl = class { - constructor(getter, _setter, isReadonly2, isSSR) { - this._setter = _setter; - this.dep = void 0; - this.__v_isRef = true; - 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"] = isReadonly2; - } - get value() { - const self = toRaw(this); - trackRefValue(self); - if (self._dirty || !self._cacheable) { - self._dirty = false; - self._value = self.effect.run(); - } - return self._value; - } - set value(newValue) { - this._setter(newValue); - } -}; -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 -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var stack = []; -function pushWarningContext(vnode) { - stack.push(vnode); -} -function popWarningContext() { - stack.pop(); -} -function warn2(msg, ...args) { - 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 && 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]; - } -} -var ErrorTypeStrings = { - ["sp"]: "serverPrefetch hook", - ["bc"]: "beforeCreate hook", - ["c"]: "created hook", - ["bm"]: "beforeMount hook", - ["m"]: "mounted hook", - ["bu"]: "beforeUpdate hook", - ["u"]: "updated", - ["bum"]: "beforeUnmount hook", - ["um"]: "unmounted hook", - ["a"]: "activated hook", - ["da"]: "deactivated hook", - ["ec"]: "errorCaptured hook", - ["rtc"]: "renderTracked hook", - ["rtg"]: "renderTriggered hook", - [0]: "setup function", - [1]: "render function", - [2]: "watcher getter", - [3]: "watcher callback", - [4]: "watcher cleanup function", - [5]: "native event handler", - [6]: "component event handler", - [7]: "vnode hook", - [8]: "directive hook", - [9]: "transition hook", - [10]: "app errorHandler", - [11]: "app warnHandler", - [12]: "ref function", - [13]: "async component loader", - [14]: "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 pendingPreFlushCbs = []; -var activePreFlushCbs = null; -var preFlushIndex = 0; -var pendingPostFlushCbs = []; -var activePostFlushCbs = null; -var postFlushIndex = 0; -var resolvedPromise = Promise.resolve(); -var currentFlushPromise = null; -var currentPreFlushParentJob = 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)) && job !== currentPreFlushParentJob) { - 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 queueCb(cb, activeQueue, pendingQueue, index) { - if (!isArray(cb)) { - if (!activeQueue || !activeQueue.includes(cb, cb.allowRecurse ? index + 1 : index)) { - pendingQueue.push(cb); - } - } else { - pendingQueue.push(...cb); - } - queueFlush(); -} -function queuePreFlushCb(cb) { - queueCb(cb, activePreFlushCbs, pendingPreFlushCbs, preFlushIndex); -} -function queuePostFlushCb(cb) { - queueCb(cb, activePostFlushCbs, pendingPostFlushCbs, postFlushIndex); -} -function flushPreFlushCbs(seen, parentJob = null) { - if (pendingPreFlushCbs.length) { - currentPreFlushParentJob = parentJob; - activePreFlushCbs = [...new Set(pendingPreFlushCbs)]; - pendingPreFlushCbs.length = 0; - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - for (preFlushIndex = 0; preFlushIndex < activePreFlushCbs.length; preFlushIndex++) { - if (checkRecursiveUpdates(seen, activePreFlushCbs[preFlushIndex])) { - continue; - } - activePreFlushCbs[preFlushIndex](); - } - activePreFlushCbs = null; - preFlushIndex = 0; - currentPreFlushParentJob = null; - flushPreFlushCbs(seen, parentJob); - } -} -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; -function flushJobs(seen) { - isFlushPending = false; - isFlushing = true; - if (true) { - seen = seen || /* @__PURE__ */ new Map(); - } - flushPreFlushCbs(seen); - queue.sort((a, b) => getId(a) - getId(b)); - 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); - } - } - } finally { - flushIndex = 0; - queue.length = 0; - flushPostFlushCbs(seen); - isFlushing = false; - currentFlushPromise = null; - if (queue.length || pendingPreFlushCbs.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); - if (instance.parent.type.__asyncLoader && instance.parent.ceReload) { - instance.parent.ceReload(newComp.styles); - } - } 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(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 (typeof window !== "undefined" && window.HTMLElement && !((_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("app:init", app, version2, { - Fragment, - Text, - Comment, - Static - }); -} -function devtoolsUnmountApp(app) { - emit("app:unmount", app); -} -var devtoolsComponentAdded = createDevtoolsComponentHook("component:added"); -var devtoolsComponentUpdated = createDevtoolsComponentHook("component:updated"); -var devtoolsComponentRemoved = createDevtoolsComponentHook("component:removed"); -function createDevtoolsComponentHook(hook) { - return (component) => { - emit(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : void 0, component); - }; -} -var devtoolsPerfStart = createDevtoolsPerformanceHook("perf:start"); -var devtoolsPerfEnd = createDevtoolsPerformanceHook("perf:end"); -function createDevtoolsPerformanceHook(hook) { - return (component, type, time) => { - emit(hook, component.appContext.app, component.uid, component, type, time); - }; -} -function devtoolsComponentEmit(component, event, params) { - emit("component:emit", component.appContext.app, component, event, params); -} -function emit$1(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) => a.trim()); - } else if (number) { - args = rawArgs.map(toNumber); - } - } - 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)] || 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 (!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) { - cache.set(comp, null); - return null; - } - if (isArray(raw)) { - raw.forEach((key) => normalized[key] = null); - } else { - extend(normalized, raw); - } - 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); - const res = fn(...args); - 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)); - fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); - } - } catch (err) { - blockStack.length = 0; - handleError(err, instance, 1); - 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.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; - } - if (vnode.transition) { - if (!isElementRoot(root)) { - warn2(`Component inside <Transition> 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", - __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, 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, 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, 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"](`<Suspense> 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 = toNumber(vnode.props && vnode.props.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); - } - }; - } - let { anchor: anchor2 } = suspense; - if (activeBranch) { - anchor2 = next(activeBranch); - unmount(activeBranch, parentComponent2, suspense, true); - } - if (!delayEnter) { - move(pendingBranch, container2, anchor2, 0); - } - } - 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, 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, true); - 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); - }).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, parentNode(hydratedEl || instance.subTree.el), 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); - 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(`<Suspense> 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 = currentInstance; - 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(isReactive); - 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); - } else { - warnInvalidSource(s); - } - }); - } else if (isFunction(source)) { - if (cb) { - getter = () => callWithErrorHandling(source, instance, 2); - } 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); - }; - }; - if (isInSSRComponentSetup) { - onCleanup = NOOP; - if (!cb) { - getter(); - } else if (immediate) { - callWithAsyncErrorHandling(cb, instance, 3, [ - getter(), - isMultiSource ? [] : void 0, - onCleanup - ]); - } - return NOOP; - } - let oldValue = isMultiSource ? [] : 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, - oldValue === INITIAL_WATCHER_VALUE ? void 0 : 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 { - scheduler = () => { - if (!instance || instance.isMounted) { - queuePreFlushCb(job); - } else { - 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(); - } - return () => { - effect2.stop(); - if (instance && instance.scope) { - remove(instance.scope.effects, effect2); - } - }; -} -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"]) { - 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, - onBeforeEnter: TransitionHookValidator, - onEnter: TransitionHookValidator, - onAfterEnter: TransitionHookValidator, - onEnterCancelled: TransitionHookValidator, - onBeforeLeave: TransitionHookValidator, - onLeave: TransitionHookValidator, - onAfterLeave: TransitionHookValidator, - onLeaveCancelled: TransitionHookValidator, - 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("<transition> can only be used on a single element or component. Use <transition-group> 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 <transition> 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; - 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 hooks = { - mode, - persisted, - beforeEnter(el) { - let hook = onBeforeEnter; - if (!state.isMounted) { - if (appear) { - hook = onBeforeAppear || onBeforeEnter; - } else { - return; - } - } - if (el._leaveCb) { - el._leaveCb(true); - } - 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) { - hook(el, done); - if (hook.length <= 1) { - done(); - } - } else { - done(); - } - }, - leave(el, remove2) { - const key2 = String(vnode.key); - if (el._enterCb) { - el._enterCb(true); - } - 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) { - onLeave(el, done); - if (onLeave.length <= 1) { - 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, - 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); - }; - 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, { vnode: { ref: ref2, props, children } }) { - const vnode = createVNode(comp, props, children); - vnode.ref = ref2; - return vnode; -} -var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; -var KeepAliveImpl = { - name: `KeepAlive`, - __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 slots.default; - } - 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 || cached.type !== current.type) { - 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)); - }, { 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) { - 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 rawVNode; - }; - } -}; -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 (pattern.test) { - 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); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); -} -function resetShapeFlag(vnode) { - let shapeFlag = vnode.shapeFlag; - if (shapeFlag & 256) { - shapeFlag -= 256; - } - if (shapeFlag & 512) { - shapeFlag -= 512; - } - vnode.shapeFlag = shapeFlag; -} -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) => (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, hook, target); -var onBeforeMount = createHook("bm"); -var onMounted = createHook("m"); -var onBeforeUpdate = createHook("bu"); -var onUpdated = createHook("u"); -var onBeforeUnmount = createHook("bum"); -var onUnmounted = createHook("um"); -var onServerPrefetch = createHook("sp"); -var onRenderTriggered = createHook("rtg"); -var onRenderTracked = createHook("rtc"); -function onErrorCaptured(hook, target = currentInstance) { - injectHook("ec", hook, target); -} -function createDuplicateChecker() { - const cache = /* @__PURE__ */ Object.create(null); - return (type, key) => { - if (cache[key]) { - warn2(`${type} property "${key}" is already defined in ${cache[key]}.`); - } else { - cache[key] = type; - } - }; -} -var shouldCacheAccess = true; -function applyOptions(instance) { - const options = resolveMergedOptions(instance); - const publicThis = instance.proxy; - const ctx = instance.ctx; - shouldCacheAccess = false; - if (options.beforeCreate) { - callHook(options.beforeCreate, instance, "bc"); - } - const { - data: dataOptions, - computed: computedOptions, - methods, - watch: watchOptions, - provide: provideOptions, - inject: injectOptions, - created, - beforeMount, - mounted, - beforeUpdate, - updated, - activated, - deactivated, - beforeDestroy, - beforeUnmount, - destroyed, - unmounted, - render: render2, - renderTracked, - renderTriggered, - errorCaptured, - serverPrefetch, - expose, - inheritAttrs, - components, - directives, - filters - } = options; - const checkDuplicateProperties = true ? createDuplicateChecker() : null; - if (true) { - const [propsOptions] = instance.propsOptions; - if (propsOptions) { - for (const key in propsOptions) { - checkDuplicateProperties("Props", key); - } - } - } - if (injectOptions) { - resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef); - } - if (methods) { - for (const key in methods) { - const methodHandler = methods[key]; - if (isFunction(methodHandler)) { - if (true) { - Object.defineProperty(ctx, key, { - value: methodHandler.bind(publicThis), - configurable: true, - enumerable: true, - writable: true - }); - } else { - ctx[key] = methodHandler.bind(publicThis); - } - if (true) { - checkDuplicateProperties("Methods", key); - } - } else if (true) { - warn2(`Method "${key}" has type "${typeof methodHandler}" in the component definition. Did you reference the function correctly?`); - } - } - } - if (dataOptions) { - if (!isFunction(dataOptions)) { - warn2(`The data option must be a function. Plain object usage is no longer supported.`); - } - const data = dataOptions.call(publicThis, publicThis); - if (isPromise(data)) { - warn2(`data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`); - } - if (!isObject(data)) { - warn2(`data() should return an object.`); - } else { - instance.data = reactive(data); - if (true) { - for (const key in data) { - checkDuplicateProperties("Data", key); - if (key[0] !== "$" && key[0] !== "_") { - Object.defineProperty(ctx, key, { - configurable: true, - enumerable: true, - get: () => data[key], - set: NOOP - }); - } - } - } - } - } - shouldCacheAccess = true; - if (computedOptions) { - for (const key in computedOptions) { - const opt = computedOptions[key]; - const get2 = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; - if (get2 === NOOP) { - warn2(`Computed property "${key}" has no getter.`); - } - const set2 = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : true ? () => { - warn2(`Write operation failed: computed property "${key}" is readonly.`); - } : NOOP; - const c = computed2({ - get: get2, - set: set2 - }); - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => c.value, - set: (v) => c.value = v - }); - if (true) { - checkDuplicateProperties("Computed", key); - } - } - } - if (watchOptions) { - for (const key in watchOptions) { - createWatcher(watchOptions[key], ctx, publicThis, key); - } - } - if (provideOptions) { - const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions; - Reflect.ownKeys(provides).forEach((key) => { - provide(key, provides[key]); - }); - } - if (created) { - callHook(created, instance, "c"); - } - function registerLifecycleHook(register, hook) { - if (isArray(hook)) { - hook.forEach((_hook) => register(_hook.bind(publicThis))); - } else if (hook) { - register(hook.bind(publicThis)); - } - } - registerLifecycleHook(onBeforeMount, beforeMount); - registerLifecycleHook(onMounted, mounted); - registerLifecycleHook(onBeforeUpdate, beforeUpdate); - registerLifecycleHook(onUpdated, updated); - registerLifecycleHook(onActivated, activated); - registerLifecycleHook(onDeactivated, deactivated); - registerLifecycleHook(onErrorCaptured, errorCaptured); - registerLifecycleHook(onRenderTracked, renderTracked); - registerLifecycleHook(onRenderTriggered, renderTriggered); - registerLifecycleHook(onBeforeUnmount, beforeUnmount); - registerLifecycleHook(onUnmounted, unmounted); - registerLifecycleHook(onServerPrefetch, serverPrefetch); - if (isArray(expose)) { - if (expose.length) { - const exposed = instance.exposed || (instance.exposed = {}); - expose.forEach((key) => { - Object.defineProperty(exposed, key, { - get: () => publicThis[key], - set: (val) => publicThis[key] = val - }); - }); - } else if (!instance.exposed) { - instance.exposed = {}; - } - } - if (render2 && instance.render === NOOP) { - instance.render = render2; - } - if (inheritAttrs != null) { - instance.inheritAttrs = inheritAttrs; - } - if (components) - instance.components = components; - if (directives) - instance.directives = directives; -} -function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) { - if (isArray(injectOptions)) { - injectOptions = normalizeInject(injectOptions); - } - for (const key in injectOptions) { - const opt = injectOptions[key]; - let injected; - if (isObject(opt)) { - if ("default" in opt) { - injected = inject(opt.from || key, opt.default, true); - } else { - injected = inject(opt.from || key); - } - } else { - injected = inject(opt); - } - if (isRef(injected)) { - if (unwrapRef) { - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => injected.value, - set: (v) => injected.value = v - }); - } else { - if (true) { - warn2(`injected property "${key}" is a ref and will be auto-unwrapped and no longer needs \`.value\` in the next minor release. To opt-in to the new behavior now, set \`app.config.unwrapInjectedRef = true\` (this config is temporary and will not be needed in the future.)`); - } - ctx[key] = injected; - } - } else { - ctx[key] = injected; - } - if (true) { - checkDuplicateProperties("Inject", key); - } - } -} -function callHook(hook, instance, type) { - callWithAsyncErrorHandling(isArray(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy), instance, type); -} -function createWatcher(raw, ctx, publicThis, key) { - const getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key]; - if (isString(raw)) { - const handler = ctx[raw]; - if (isFunction(handler)) { - watch(getter, handler); - } else if (true) { - warn2(`Invalid watch handler specified by key "${raw}"`, handler); - } - } else if (isFunction(raw)) { - watch(getter, raw.bind(publicThis)); - } else if (isObject(raw)) { - if (isArray(raw)) { - raw.forEach((r) => createWatcher(r, ctx, publicThis, key)); - } else { - const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler]; - if (isFunction(handler)) { - watch(getter, handler, raw); - } else if (true) { - warn2(`Invalid watch handler specified by key "${raw.handler}"`, handler); - } - } - } else if (true) { - warn2(`Invalid watch option: "${key}"`, raw); - } -} -function resolveMergedOptions(instance) { - const base = instance.type; - const { mixins, extends: extendsOptions } = base; - const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext; - const cached = cache.get(base); - let resolved; - if (cached) { - resolved = cached; - } else if (!globalMixins.length && !mixins && !extendsOptions) { - { - resolved = base; - } - } else { - resolved = {}; - if (globalMixins.length) { - globalMixins.forEach((m) => mergeOptions(resolved, m, optionMergeStrategies, true)); - } - mergeOptions(resolved, base, optionMergeStrategies); - } - cache.set(base, resolved); - return resolved; -} -function mergeOptions(to, from, strats, asMixin = false) { - const { mixins, extends: extendsOptions } = from; - if (extendsOptions) { - mergeOptions(to, extendsOptions, strats, true); - } - if (mixins) { - mixins.forEach((m) => mergeOptions(to, m, strats, true)); - } - for (const key in from) { - if (asMixin && key === "expose") { - warn2(`"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`); - } else { - const strat = internalOptionMergeStrats[key] || strats && strats[key]; - to[key] = strat ? strat(to[key], from[key]) : from[key]; - } - } - return to; -} -var internalOptionMergeStrats = { - data: mergeDataFn, - props: mergeObjectOptions, - emits: mergeObjectOptions, - methods: mergeObjectOptions, - computed: mergeObjectOptions, - beforeCreate: mergeAsArray, - created: mergeAsArray, - beforeMount: mergeAsArray, - mounted: mergeAsArray, - beforeUpdate: mergeAsArray, - updated: mergeAsArray, - beforeDestroy: mergeAsArray, - beforeUnmount: mergeAsArray, - destroyed: mergeAsArray, - unmounted: mergeAsArray, - activated: mergeAsArray, - deactivated: mergeAsArray, - errorCaptured: mergeAsArray, - serverPrefetch: mergeAsArray, - components: mergeObjectOptions, - directives: mergeObjectOptions, - watch: mergeWatchOptions, - provide: mergeDataFn, - inject: mergeInject -}; -function mergeDataFn(to, from) { - if (!from) { - return to; - } - if (!to) { - return from; - } - return function mergedDataFn() { - return extend(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from); - }; -} -function mergeInject(to, from) { - return mergeObjectOptions(normalizeInject(to), normalizeInject(from)); -} -function normalizeInject(raw) { - if (isArray(raw)) { - const res = {}; - for (let i = 0; i < raw.length; i++) { - res[raw[i]] = raw[i]; - } - return res; - } - return raw; -} -function mergeAsArray(to, from) { - return to ? [...new Set([].concat(to, from))] : from; -} -function mergeObjectOptions(to, from) { - return to ? extend(extend(/* @__PURE__ */ Object.create(null), to), from) : from; -} -function mergeWatchOptions(to, from) { - if (!to) - return from; - if (!from) - return to; - const merged = extend(/* @__PURE__ */ Object.create(null), to); - for (const key in from) { - merged[key] = mergeAsArray(to[key], from[key]); - } - return merged; -} -function initProps(instance, rawProps, isStateful, isSSR = false) { - const props = {}; - const attrs = {}; - def(attrs, InternalObjectKey, 1); - instance.propsDefaults = /* @__PURE__ */ Object.create(null); - setFullProps(instance, rawProps, props, attrs); - for (const key in instance.propsOptions[0]) { - if (!(key in props)) { - props[key] = void 0; - } - } - if (true) { - validateProps(rawProps || {}, props, instance); - } - if (isStateful) { - instance.props = isSSR ? props : shallowReactive(props); - } else { - if (!instance.type.props) { - instance.props = attrs; - } else { - instance.props = props; - } - } - instance.attrs = attrs; -} -function updateProps(instance, rawProps, rawPrevProps, optimized) { - const { props, attrs, vnode: { patchFlag } } = instance; - const rawCurrentProps = toRaw(props); - const [options] = instance.propsOptions; - let hasAttrsChanged = false; - if (!(instance.type.__hmrId || instance.parent && instance.parent.type.__hmrId) && (optimized || patchFlag > 0) && !(patchFlag & 16)) { - if (patchFlag & 8) { - const propsToUpdate = instance.vnode.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - let key = propsToUpdate[i]; - if (isEmitListener(instance.emitsOptions, key)) { - continue; - } - const value = rawProps[key]; - if (options) { - if (hasOwn(attrs, key)) { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } else { - const camelizedKey = camelize(key); - props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false); - } - } else { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } - } - } - } else { - if (setFullProps(instance, rawProps, props, attrs)) { - hasAttrsChanged = true; - } - let kebabKey; - for (const key in rawCurrentProps) { - if (!rawProps || !hasOwn(rawProps, key) && ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) { - if (options) { - if (rawPrevProps && (rawPrevProps[key] !== void 0 || rawPrevProps[kebabKey] !== void 0)) { - props[key] = resolvePropValue(options, rawCurrentProps, key, void 0, instance, true); - } - } else { - delete props[key]; - } - } - } - if (attrs !== rawCurrentProps) { - for (const key in attrs) { - if (!rawProps || !hasOwn(rawProps, key) && true) { - delete attrs[key]; - hasAttrsChanged = true; - } - } - } - } - if (hasAttrsChanged) { - trigger(instance, "set", "$attrs"); - } - if (true) { - validateProps(rawProps || {}, props, instance); - } -} -function setFullProps(instance, rawProps, props, attrs) { - const [options, needCastKeys] = instance.propsOptions; - let hasAttrsChanged = false; - let rawCastValues; - if (rawProps) { - for (let key in rawProps) { - if (isReservedProp(key)) { - continue; - } - const value = rawProps[key]; - let camelKey; - if (options && hasOwn(options, camelKey = camelize(key))) { - if (!needCastKeys || !needCastKeys.includes(camelKey)) { - props[camelKey] = value; - } else { - (rawCastValues || (rawCastValues = {}))[camelKey] = value; - } - } else if (!isEmitListener(instance.emitsOptions, key)) { - if (!(key in attrs) || value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } - } - } - if (needCastKeys) { - const rawCurrentProps = toRaw(props); - const castValues = rawCastValues || EMPTY_OBJ; - for (let i = 0; i < needCastKeys.length; i++) { - const key = needCastKeys[i]; - props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key)); - } - } - return hasAttrsChanged; -} -function resolvePropValue(options, props, key, value, instance, isAbsent) { - const opt = options[key]; - if (opt != null) { - const hasDefault = hasOwn(opt, "default"); - if (hasDefault && value === void 0) { - const defaultValue = opt.default; - if (opt.type !== Function && isFunction(defaultValue)) { - const { propsDefaults } = instance; - if (key in propsDefaults) { - value = propsDefaults[key]; - } else { - setCurrentInstance(instance); - value = propsDefaults[key] = defaultValue.call(null, props); - unsetCurrentInstance(); - } - } else { - value = defaultValue; - } - } - if (opt[0]) { - if (isAbsent && !hasDefault) { - value = false; - } else if (opt[1] && (value === "" || value === hyphenate(key))) { - value = true; - } - } - } - return value; -} -function normalizePropsOptions(comp, appContext, asMixin = false) { - const cache = appContext.propsCache; - const cached = cache.get(comp); - if (cached) { - return cached; - } - const raw = comp.props; - const normalized = {}; - const needCastKeys = []; - let hasExtends = false; - if (!isFunction(comp)) { - const extendProps = (raw2) => { - hasExtends = true; - const [props, keys] = normalizePropsOptions(raw2, appContext, true); - extend(normalized, props); - if (keys) - needCastKeys.push(...keys); - }; - if (!asMixin && appContext.mixins.length) { - appContext.mixins.forEach(extendProps); - } - if (comp.extends) { - extendProps(comp.extends); - } - if (comp.mixins) { - comp.mixins.forEach(extendProps); - } - } - if (!raw && !hasExtends) { - cache.set(comp, EMPTY_ARR); - return EMPTY_ARR; - } - if (isArray(raw)) { - for (let i = 0; i < raw.length; i++) { - if (!isString(raw[i])) { - warn2(`props must be strings when using array syntax.`, raw[i]); - } - const normalizedKey = camelize(raw[i]); - if (validatePropName(normalizedKey)) { - normalized[normalizedKey] = EMPTY_OBJ; - } - } - } else if (raw) { - if (!isObject(raw)) { - warn2(`invalid props options`, raw); - } - for (const key in raw) { - const normalizedKey = camelize(key); - if (validatePropName(normalizedKey)) { - const opt = raw[key]; - const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : opt; - if (prop) { - const booleanIndex = getTypeIndex(Boolean, prop.type); - const stringIndex = getTypeIndex(String, prop.type); - prop[0] = booleanIndex > -1; - prop[1] = stringIndex < 0 || booleanIndex < stringIndex; - if (booleanIndex > -1 || hasOwn(prop, "default")) { - needCastKeys.push(normalizedKey); - } - } - } - } - } - const res = [normalized, needCastKeys]; - cache.set(comp, res); - return res; -} -function validatePropName(key) { - if (key[0] !== "$") { - return true; - } else if (true) { - warn2(`Invalid prop name: "${key}" is a reserved property.`); - } - return false; -} -function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ctor === null ? "null" : ""; -} -function isSameType(a, b) { - return getType(a) === getType(b); -} -function getTypeIndex(type, expectedTypes) { - if (isArray(expectedTypes)) { - return expectedTypes.findIndex((t) => isSameType(t, type)); - } else if (isFunction(expectedTypes)) { - return isSameType(expectedTypes, type) ? 0 : -1; - } - return -1; -} -function validateProps(rawProps, props, instance) { - const resolvedValues = toRaw(props); - const options = instance.propsOptions[0]; - for (const key in options) { - let opt = options[key]; - if (opt == null) - continue; - validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key))); - } -} -function validateProp(name, value, prop, isAbsent) { - const { type, required, validator } = prop; - if (required && isAbsent) { - warn2('Missing required prop: "' + name + '"'); - return; - } - if (value == null && !prop.required) { - return; - } - if (type != null && type !== true) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ""); - isValid = valid; - } - if (!isValid) { - warn2(getInvalidTypeMessage(name, value, expectedTypes)); - return; - } - } - if (validator && !validator(value)) { - warn2('Invalid prop: custom validator check failed for prop "' + name + '".'); - } -} -var isSimpleType = makeMap("String,Number,Boolean,Function,Symbol,BigInt"); -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const t = typeof value; - valid = t === expectedType.toLowerCase(); - if (!valid && t === "object") { - valid = value instanceof type; - } - } else if (expectedType === "Object") { - valid = isObject(value); - } else if (expectedType === "Array") { - valid = isArray(value); - } else if (expectedType === "null") { - valid = value === null; - } else { - valid = value instanceof type; - } - return { - valid, - expectedType - }; -} -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = `Invalid prop: type check failed for prop "${name}". Expected ${expectedTypes.map(capitalize).join(" | ")}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message; -} -function styleValue(value, type) { - if (type === "String") { - return `"${value}"`; - } else if (type === "Number") { - return `${Number(value)}`; - } else { - return `${value}`; - } -} -function isExplicable(type) { - const explicitTypes = ["string", "number", "boolean"]; - return explicitTypes.some((elem) => type.toLowerCase() === elem); -} -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === "boolean"); -} -var isInternalKey = (key) => key[0] === "_" || key === "$stable"; -var normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; -var normalizeSlot = (key, rawSlot, ctx) => { - const normalized = withCtx((...args) => { - if (currentInstance) { - warn2(`Slot "${key}" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`); - } - return normalizeSlotValue(rawSlot(...args)); - }, ctx); - normalized._c = false; - return normalized; -}; -var normalizeObjectSlots = (rawSlots, slots, instance) => { - const ctx = rawSlots._ctx; - for (const key in rawSlots) { - if (isInternalKey(key)) - continue; - const value = rawSlots[key]; - if (isFunction(value)) { - slots[key] = normalizeSlot(key, value, ctx); - } else if (value != null) { - if (true) { - warn2(`Non-function value encountered for slot "${key}". Prefer function slots for better performance.`); - } - const normalized = normalizeSlotValue(value); - slots[key] = () => normalized; - } - } -}; -var normalizeVNodeSlots = (instance, children) => { - if (!isKeepAlive(instance.vnode) && true) { - warn2(`Non-function value encountered for default slot. Prefer function slots for better performance.`); - } - const normalized = normalizeSlotValue(children); - instance.slots.default = () => normalized; -}; -var initSlots = (instance, children) => { - if (instance.vnode.shapeFlag & 32) { - const type = children._; - if (type) { - instance.slots = toRaw(children); - def(children, "_", type); - } else { - normalizeObjectSlots(children, instance.slots = {}); - } - } else { - instance.slots = {}; - if (children) { - normalizeVNodeSlots(instance, children); - } - } - def(instance.slots, InternalObjectKey, 1); -}; -var updateSlots = (instance, children, optimized) => { - const { vnode, slots } = instance; - let needDeletionCheck = true; - let deletionComparisonTarget = EMPTY_OBJ; - if (vnode.shapeFlag & 32) { - const type = children._; - if (type) { - if (isHmrUpdating) { - extend(slots, children); - } else if (optimized && type === 1) { - needDeletionCheck = false; - } else { - extend(slots, children); - if (!optimized && type === 1) { - delete slots._; - } - } - } else { - needDeletionCheck = !children.$stable; - normalizeObjectSlots(children, slots); - } - deletionComparisonTarget = children; - } else if (children) { - normalizeVNodeSlots(instance, children); - deletionComparisonTarget = { default: 1 }; - } - if (needDeletionCheck) { - for (const key in slots) { - if (!isInternalKey(key) && !(key in deletionComparisonTarget)) { - delete slots[key]; - } - } - } -}; -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 (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(); - } - } -} -function createAppContext() { - return { - app: null, - config: { - isNativeTag: NO, - performance: false, - globalProperties: {}, - optionMergeStrategies: {}, - errorHandler: void 0, - warnHandler: void 0, - compilerOptions: {} - }, - mixins: [], - components: {}, - directives: {}, - provides: /* @__PURE__ */ Object.create(null), - optionsCache: /* @__PURE__ */ new WeakMap(), - propsCache: /* @__PURE__ */ new WeakMap(), - emitsCache: /* @__PURE__ */ new WeakMap() - }; -} -var uid = 0; -function createAppAPI(render2, hydrate2) { - return function createApp2(rootComponent, rootProps = null) { - if (!isFunction(rootComponent)) { - rootComponent = Object.assign({}, rootComponent); - } - if (rootProps != null && !isObject(rootProps)) { - warn2(`root props passed to app.mount() must be an object.`); - rootProps = null; - } - const context = createAppContext(); - const installedPlugins = /* @__PURE__ */ new Set(); - let isMounted = false; - const app = context.app = { - _uid: uid++, - _component: rootComponent, - _props: rootProps, - _container: null, - _context: context, - _instance: null, - version, - get config() { - return context.config; - }, - set config(v) { - if (true) { - warn2(`app.config cannot be replaced. Modify individual options instead.`); - } - }, - use(plugin, ...options) { - if (installedPlugins.has(plugin)) { - warn2(`Plugin has already been applied to target app.`); - } else if (plugin && isFunction(plugin.install)) { - installedPlugins.add(plugin); - plugin.install(app, ...options); - } else if (isFunction(plugin)) { - installedPlugins.add(plugin); - plugin(app, ...options); - } else if (true) { - warn2(`A plugin must either be a function or an object with an "install" function.`); - } - return app; - }, - mixin(mixin) { - if (true) { - if (!context.mixins.includes(mixin)) { - context.mixins.push(mixin); - } else if (true) { - warn2("Mixin has already been applied to target app" + (mixin.name ? `: ${mixin.name}` : "")); - } - } else if (true) { - warn2("Mixins are only available in builds supporting Options API"); - } - return app; - }, - component(name, component) { - if (true) { - validateComponentName(name, context.config); - } - if (!component) { - return context.components[name]; - } - if (context.components[name]) { - warn2(`Component "${name}" has already been registered in target app.`); - } - context.components[name] = component; - return app; - }, - directive(name, directive) { - if (true) { - validateDirectiveName(name); - } - if (!directive) { - return context.directives[name]; - } - if (context.directives[name]) { - warn2(`Directive "${name}" has already been registered in target app.`); - } - context.directives[name] = directive; - return app; - }, - mount(rootContainer, isHydrate, isSVG) { - if (!isMounted) { - const vnode = createVNode(rootComponent, rootProps); - vnode.appContext = context; - if (true) { - context.reload = () => { - render2(cloneVNode(vnode), rootContainer, isSVG); - }; - } - if (isHydrate && hydrate2) { - hydrate2(vnode, rootContainer); - } else { - render2(vnode, rootContainer, isSVG); - } - isMounted = true; - app._container = rootContainer; - rootContainer.__vue_app__ = app; - if (true) { - app._instance = vnode.component; - devtoolsInitApp(app, version); - } - return getExposeProxy(vnode.component) || vnode.component.proxy; - } else if (true) { - warn2(`App has already been mounted. -If you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \`const createMyApp = () => createApp(App)\``); - } - }, - unmount() { - if (isMounted) { - render2(null, app._container); - if (true) { - app._instance = null; - devtoolsUnmountApp(app); - } - delete app._container.__vue_app__; - } else if (true) { - warn2(`Cannot unmount an app that is not mounted.`); - } - }, - provide(key, value) { - if (key in context.provides) { - warn2(`App already provides property with key "${String(key)}". It will be overwritten with the new value.`); - } - context.provides[key] = value; - return app; - } - }; - return app; - }; -} -function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { - if (isArray(rawRef)) { - rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount)); - return; - } - if (isAsyncWrapper(vnode) && !isUnmount) { - return; - } - const refValue = vnode.shapeFlag & 4 ? getExposeProxy(vnode.component) || vnode.component.proxy : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref2 } = rawRef; - if (!owner) { - warn2(`Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`); - return; - } - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - const setupState = owner.setupState; - if (oldRef != null && oldRef !== ref2) { - if (isString(oldRef)) { - refs[oldRef] = null; - if (hasOwn(setupState, oldRef)) { - setupState[oldRef] = null; - } - } else if (isRef(oldRef)) { - oldRef.value = null; - } - } - if (isFunction(ref2)) { - callWithErrorHandling(ref2, owner, 12, [value, refs]); - } else { - const _isString = isString(ref2); - const _isRef = isRef(ref2); - if (_isString || _isRef) { - const doSet = () => { - if (rawRef.f) { - const existing = _isString ? refs[ref2] : ref2.value; - if (isUnmount) { - isArray(existing) && remove(existing, refValue); - } else { - if (!isArray(existing)) { - if (_isString) { - refs[ref2] = [refValue]; - if (hasOwn(setupState, ref2)) { - setupState[ref2] = refs[ref2]; - } - } else { - ref2.value = [refValue]; - if (rawRef.k) - refs[rawRef.k] = ref2.value; - } - } else if (!existing.includes(refValue)) { - existing.push(refValue); - } - } - } else if (_isString) { - refs[ref2] = value; - if (hasOwn(setupState, ref2)) { - setupState[ref2] = value; - } - } else if (isRef(ref2)) { - ref2.value = value; - if (rawRef.k) - refs[rawRef.k] = value; - } else if (true) { - warn2("Invalid template ref type:", ref2, `(${typeof ref2})`); - } - }; - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else if (true) { - warn2("Invalid template ref type:", ref2, `(${typeof ref2})`); - } - } -} -var hasMismatch = false; -var isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== "foreignObject"; -var isComment = (node) => node.nodeType === 8; -function createHydrationFunctions(rendererInternals) { - const { mt: mountComponent, p: patch, o: { patchProp: patchProp2, nextSibling, parentNode, remove: remove2, insert, createComment } } = rendererInternals; - const hydrate2 = (vnode, container) => { - if (!container.hasChildNodes()) { - warn2(`Attempting to hydrate existing markup but container is empty. Performing full mount instead.`); - patch(null, vnode, container); - flushPostFlushCbs(); - return; - } - hasMismatch = false; - hydrateNode(container.firstChild, vnode, null, null, null); - flushPostFlushCbs(); - if (hasMismatch && true) { - console.error(`Hydration completed but contains mismatches.`); - } - }; - const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => { - const isFragmentStart = isComment(node) && node.data === "["; - const onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart); - const { type, ref: ref2, shapeFlag } = vnode; - const domType = node.nodeType; - vnode.el = node; - let nextNode = null; - switch (type) { - case Text: - if (domType !== 3) { - nextNode = onMismatch(); - } else { - if (node.data !== vnode.children) { - hasMismatch = true; - warn2(`Hydration text mismatch: -- Client: ${JSON.stringify(node.data)} -- Server: ${JSON.stringify(vnode.children)}`); - node.data = vnode.children; - } - nextNode = nextSibling(node); - } - break; - case Comment: - if (domType !== 8 || isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = nextSibling(node); - } - break; - case Static: - if (domType !== 1) { - nextNode = onMismatch(); - } else { - nextNode = node; - const needToAdoptContent = !vnode.children.length; - for (let i = 0; i < vnode.staticCount; i++) { - if (needToAdoptContent) - vnode.children += nextNode.outerHTML; - if (i === vnode.staticCount - 1) { - vnode.anchor = nextNode; - } - nextNode = nextSibling(nextNode); - } - return nextNode; - } - break; - case Fragment: - if (!isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized); - } - break; - default: - if (shapeFlag & 1) { - if (domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) { - nextNode = onMismatch(); - } else { - nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized); - } - } else if (shapeFlag & 6) { - vnode.slotScopeIds = slotScopeIds; - const container = parentNode(node); - mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized); - nextNode = isFragmentStart ? locateClosingAsyncAnchor(node) : nextSibling(node); - if (isAsyncWrapper(vnode)) { - let subTree; - if (isFragmentStart) { - subTree = createVNode(Fragment); - subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; - } else { - subTree = node.nodeType === 3 ? createTextVNode("") : createVNode("div"); - } - subTree.el = node; - vnode.component.subTree = subTree; - } - } else if (shapeFlag & 64) { - if (domType !== 8) { - nextNode = onMismatch(); - } else { - nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren); - } - } else if (shapeFlag & 128) { - nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode); - } else if (true) { - warn2("Invalid HostVNode type:", type, `(${typeof type})`); - } - } - if (ref2 != null) { - setRef(ref2, null, parentSuspense, vnode); - } - return nextNode; - }; - const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!vnode.dynamicChildren; - const { type, props, patchFlag, shapeFlag, dirs } = vnode; - const forcePatchValue = type === "input" && dirs || type === "option"; - if (true) { - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - if (props) { - if (forcePatchValue || !optimized || patchFlag & (16 | 32)) { - for (const key in props) { - if (forcePatchValue && key.endsWith("value") || isOn(key) && !isReservedProp(key)) { - patchProp2(el, key, null, props[key], false, void 0, parentComponent); - } - } - } else if (props.onClick) { - patchProp2(el, "onClick", null, props.onClick, false, void 0, parentComponent); - } - } - let vnodeHooks; - if (vnodeHooks = props && props.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHooks, parentComponent, vnode); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs) { - queueEffectWithSuspense(() => { - vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - if (shapeFlag & 16 && !(props && (props.innerHTML || props.textContent))) { - let next = hydrateChildren(el.firstChild, vnode, el, parentComponent, parentSuspense, slotScopeIds, optimized); - let hasWarned2 = false; - while (next) { - hasMismatch = true; - if (!hasWarned2) { - warn2(`Hydration children mismatch in <${vnode.type}>: server rendered element contains more child nodes than client vdom.`); - hasWarned2 = true; - } - const cur = next; - next = next.nextSibling; - remove2(cur); - } - } else if (shapeFlag & 8) { - if (el.textContent !== vnode.children) { - hasMismatch = true; - warn2(`Hydration text content mismatch in <${vnode.type}>: -- Client: ${el.textContent} -- Server: ${vnode.children}`); - el.textContent = vnode.children; - } - } - } - return el.nextSibling; - }; - const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!parentVNode.dynamicChildren; - const children = parentVNode.children; - const l = children.length; - let hasWarned2 = false; - for (let i = 0; i < l; i++) { - const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]); - if (node) { - node = hydrateNode(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized); - } else if (vnode.type === Text && !vnode.children) { - continue; - } else { - hasMismatch = true; - if (!hasWarned2) { - warn2(`Hydration children mismatch in <${container.tagName.toLowerCase()}>: server rendered element contains fewer child nodes than client vdom.`); - hasWarned2 = true; - } - patch(null, vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds); - } - } - return node; - }; - const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - const { slotScopeIds: fragmentSlotScopeIds } = vnode; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - const container = parentNode(node); - const next = hydrateChildren(nextSibling(node), vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized); - if (next && isComment(next) && next.data === "]") { - return nextSibling(vnode.anchor = next); - } else { - hasMismatch = true; - insert(vnode.anchor = createComment(`]`), container, next); - return next; - } - }; - const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => { - hasMismatch = true; - warn2(`Hydration node mismatch: -- Client vnode:`, vnode.type, ` -- Server rendered DOM:`, node, node.nodeType === 3 ? `(text)` : isComment(node) && node.data === "[" ? `(start of fragment)` : ``); - vnode.el = null; - if (isFragment) { - const end = locateClosingAsyncAnchor(node); - while (true) { - const next2 = nextSibling(node); - if (next2 && next2 !== end) { - remove2(next2); - } else { - break; - } - } - } - const next = nextSibling(node); - const container = parentNode(node); - remove2(node); - patch(null, vnode, container, next, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds); - return next; - }; - const locateClosingAsyncAnchor = (node) => { - let match = 0; - while (node) { - node = nextSibling(node); - if (node && isComment(node)) { - if (node.data === "[") - match++; - if (node.data === "]") { - if (match === 0) { - return nextSibling(node); - } else { - match--; - } - } - } - } - return node; - }; - return [hydrate2, hydrateNode]; -} -var supported; -var perf; -function startMeasure(instance, type) { - if (instance.appContext.config.performance && isSupported()) { - perf.mark(`vue-${type}-${instance.uid}`); - } - if (true) { - devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now()); - } -} -function endMeasure(instance, type) { - if (instance.appContext.config.performance && isSupported()) { - const startTag = `vue-${type}-${instance.uid}`; - const endTag = startTag + `:end`; - perf.mark(endTag); - perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag); - perf.clearMarks(startTag); - perf.clearMarks(endTag); - } - if (true) { - devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now()); - } -} -function isSupported() { - if (supported !== void 0) { - return supported; - } - if (typeof window !== "undefined" && window.performance) { - supported = true; - perf = window.performance; - } else { - supported = false; - } - return supported; -} -function initFeatureFlags() { - const needWarn = []; - if (false) { - needWarn.push(`__VUE_OPTIONS_API__`); - getGlobalThis().__VUE_OPTIONS_API__ = true; - } - if (false) { - needWarn.push(`__VUE_PROD_DEVTOOLS__`); - getGlobalThis().__VUE_PROD_DEVTOOLS__ = false; - } - if (needWarn.length) { - const multi = needWarn.length > 1; - console.warn(`Feature flag${multi ? `s` : ``} ${needWarn.join(", ")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle. - -For more details, see https://link.vuejs.org/feature-flags.`); - } -} -var queuePostRenderEffect = queueEffectWithSuspense; -function createRenderer(options) { - return baseCreateRenderer(options); -} -function createHydrationRenderer(options) { - return baseCreateRenderer(options, createHydrationFunctions); -} -function baseCreateRenderer(options, createHydrationFns) { - { - initFeatureFlags(); - } - const target = getGlobalThis(); - target.__VUE__ = true; - if (true) { - setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target); - } - const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, cloneNode: hostCloneNode, insertStaticContent: hostInsertStaticContent } = options; - const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = isHmrUpdating ? false : !!n2.dynamicChildren) => { - if (n1 === n2) { - return; - } - if (n1 && !isSameVNodeType(n1, n2)) { - anchor = getNextHostNode(n1); - unmount(n1, parentComponent, parentSuspense, true); - n1 = null; - } - if (n2.patchFlag === -2) { - optimized = false; - n2.dynamicChildren = null; - } - const { type, ref: ref2, shapeFlag } = n2; - switch (type) { - case Text: - processText(n1, n2, container, anchor); - break; - case Comment: - processCommentNode(n1, n2, container, anchor); - break; - case Static: - if (n1 == null) { - mountStaticNode(n2, container, anchor, isSVG); - } else if (true) { - patchStaticNode(n1, n2, container, isSVG); - } - break; - case Fragment: - processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - break; - default: - if (shapeFlag & 1) { - processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else if (shapeFlag & 6) { - processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else if (shapeFlag & 64) { - type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals); - } else if (shapeFlag & 128) { - type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals); - } else if (true) { - warn2("Invalid VNode type:", type, `(${typeof type})`); - } - } - if (ref2 != null && parentComponent) { - setRef(ref2, n1 && n1.ref, parentSuspense, n2 || n1, !n2); - } - }; - const processText = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert(n2.el = hostCreateText(n2.children), container, anchor); - } else { - const el = n2.el = n1.el; - if (n2.children !== n1.children) { - hostSetText(el, n2.children); - } - } - }; - const processCommentNode = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert(n2.el = hostCreateComment(n2.children || ""), container, anchor); - } else { - n2.el = n1.el; - } - }; - const mountStaticNode = (n2, container, anchor, isSVG) => { - [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor); - }; - const patchStaticNode = (n1, n2, container, isSVG) => { - if (n2.children !== n1.children) { - const anchor = hostNextSibling(n1.anchor); - removeStaticNode(n1); - [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG); - } else { - n2.el = n1.el; - n2.anchor = n1.anchor; - } - }; - const moveStaticNode = ({ el, anchor }, container, nextSibling) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostInsert(el, container, nextSibling); - el = next; - } - hostInsert(anchor, container, nextSibling); - }; - const removeStaticNode = ({ el, anchor }) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostRemove(el); - el = next; - } - hostRemove(anchor); - }; - const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - isSVG = isSVG || n2.type === "svg"; - if (n1 == null) { - mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - }; - const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - let el; - let vnodeHook; - const { type, props, shapeFlag, transition, patchFlag, dirs } = vnode; - if (false) { - el = vnode.el = hostCloneNode(vnode.el); - } else { - el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props); - if (shapeFlag & 8) { - hostSetElementText(el, vnode.children); - } else if (shapeFlag & 16) { - mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== "foreignObject", slotScopeIds, optimized); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - if (props) { - for (const key in props) { - if (key !== "value" && !isReservedProp(key)) { - hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren); - } - } - if ("value" in props) { - hostPatchProp(el, "value", null, props.value); - } - if (vnodeHook = props.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHook, parentComponent, vnode); - } - } - setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent); - } - if (true) { - Object.defineProperty(el, "__vnode", { - value: vnode, - enumerable: false - }); - Object.defineProperty(el, "__vueParentComponent", { - value: parentComponent, - enumerable: false - }); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - const needCallTransitionHooks = (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted; - if (needCallTransitionHooks) { - transition.beforeEnter(el); - } - hostInsert(el, container, anchor); - if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); - needCallTransitionHooks && transition.enter(el); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - }; - const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => { - if (scopeId) { - hostSetScopeId(el, scopeId); - } - if (slotScopeIds) { - for (let i = 0; i < slotScopeIds.length; i++) { - hostSetScopeId(el, slotScopeIds[i]); - } - } - if (parentComponent) { - let subTree = parentComponent.subTree; - if (subTree.patchFlag > 0 && subTree.patchFlag & 2048) { - subTree = filterSingleRoot(subTree.children) || subTree; - } - if (vnode === subTree) { - const parentVNode = parentComponent.vnode; - setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent); - } - } - }; - const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => { - for (let i = start; i < children.length; i++) { - const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]); - patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - }; - const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - const el = n2.el = n1.el; - let { patchFlag, dynamicChildren, dirs } = n2; - patchFlag |= n1.patchFlag & 16; - const oldProps = n1.props || EMPTY_OBJ; - const newProps = n2.props || EMPTY_OBJ; - let vnodeHook; - parentComponent && toggleRecurse(parentComponent, false); - if (vnodeHook = newProps.onVnodeBeforeUpdate) { - invokeVNodeHook(vnodeHook, parentComponent, n2, n1); - } - if (dirs) { - invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate"); - } - parentComponent && toggleRecurse(parentComponent, true); - if (isHmrUpdating) { - patchFlag = 0; - optimized = false; - dynamicChildren = null; - } - const areChildrenSVG = isSVG && n2.type !== "foreignObject"; - if (dynamicChildren) { - patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds); - if (parentComponent && parentComponent.type.__hmrId) { - traverseStaticChildren(n1, n2); - } - } else if (!optimized) { - patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false); - } - if (patchFlag > 0) { - if (patchFlag & 16) { - patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG); - } else { - if (patchFlag & 2) { - if (oldProps.class !== newProps.class) { - hostPatchProp(el, "class", null, newProps.class, isSVG); - } - } - if (patchFlag & 4) { - hostPatchProp(el, "style", oldProps.style, newProps.style, isSVG); - } - if (patchFlag & 8) { - const propsToUpdate = n2.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - const key = propsToUpdate[i]; - const prev = oldProps[key]; - const next = newProps[key]; - if (next !== prev || key === "value") { - hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren); - } - } - } - } - if (patchFlag & 1) { - if (n1.children !== n2.children) { - hostSetElementText(el, n2.children); - } - } - } else if (!optimized && dynamicChildren == null) { - patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG); - } - if ((vnodeHook = newProps.onVnodeUpdated) || dirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1); - dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated"); - }, parentSuspense); - } - }; - const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => { - for (let i = 0; i < newChildren.length; i++) { - const oldVNode = oldChildren[i]; - const newVNode = newChildren[i]; - const container = oldVNode.el && (oldVNode.type === Fragment || !isSameVNodeType(oldVNode, newVNode) || oldVNode.shapeFlag & (6 | 64)) ? hostParentNode(oldVNode.el) : fallbackContainer; - patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true); - } - }; - const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => { - if (oldProps !== newProps) { - for (const key in newProps) { - if (isReservedProp(key)) - continue; - const next = newProps[key]; - const prev = oldProps[key]; - if (next !== prev && key !== "value") { - hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren); - } - } - if (oldProps !== EMPTY_OBJ) { - for (const key in oldProps) { - if (!isReservedProp(key) && !(key in newProps)) { - hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren); - } - } - } - if ("value" in newProps) { - hostPatchProp(el, "value", oldProps.value, newProps.value); - } - } - }; - const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(""); - const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(""); - let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2; - if (isHmrUpdating) { - patchFlag = 0; - optimized = false; - dynamicChildren = null; - } - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - if (n1 == null) { - hostInsert(fragmentStartAnchor, container, anchor); - hostInsert(fragmentEndAnchor, container, anchor); - mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && n1.dynamicChildren) { - patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds); - if (parentComponent && parentComponent.type.__hmrId) { - traverseStaticChildren(n1, n2); - } else if (n2.key != null || parentComponent && n2 === parentComponent.subTree) { - traverseStaticChildren(n1, n2, true); - } - } else { - patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - } - }; - const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - n2.slotScopeIds = slotScopeIds; - if (n1 == null) { - if (n2.shapeFlag & 512) { - parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized); - } else { - mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized); - } - } else { - updateComponent(n1, n2, optimized); - } - }; - const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => { - const instance = initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense); - if (instance.type.__hmrId) { - registerHMR(instance); - } - if (true) { - pushWarningContext(initialVNode); - startMeasure(instance, `mount`); - } - if (isKeepAlive(initialVNode)) { - instance.ctx.renderer = internals; - } - { - if (true) { - startMeasure(instance, `init`); - } - setupComponent(instance); - if (true) { - endMeasure(instance, `init`); - } - } - if (instance.asyncDep) { - parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect); - if (!initialVNode.el) { - const placeholder = instance.subTree = createVNode(Comment); - processCommentNode(null, placeholder, container, anchor); - } - return; - } - setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized); - if (true) { - popWarningContext(); - endMeasure(instance, `mount`); - } - }; - const updateComponent = (n1, n2, optimized) => { - const instance = n2.component = n1.component; - if (shouldUpdateComponent(n1, n2, optimized)) { - if (instance.asyncDep && !instance.asyncResolved) { - if (true) { - pushWarningContext(n2); - } - updateComponentPreRender(instance, n2, optimized); - if (true) { - popWarningContext(); - } - return; - } else { - instance.next = n2; - invalidateJob(instance.update); - instance.update(); - } - } else { - n2.component = n1.component; - n2.el = n1.el; - instance.vnode = n2; - } - }; - const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => { - const componentUpdateFn = () => { - if (!instance.isMounted) { - let vnodeHook; - const { el, props } = initialVNode; - const { bm, m, parent } = instance; - const isAsyncWrapperVNode = isAsyncWrapper(initialVNode); - toggleRecurse(instance, false); - if (bm) { - invokeArrayFns(bm); - } - if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) { - invokeVNodeHook(vnodeHook, parent, initialVNode); - } - toggleRecurse(instance, true); - if (el && hydrateNode) { - const hydrateSubTree = () => { - if (true) { - startMeasure(instance, `render`); - } - instance.subTree = renderComponentRoot(instance); - if (true) { - endMeasure(instance, `render`); - } - if (true) { - startMeasure(instance, `hydrate`); - } - hydrateNode(el, instance.subTree, instance, parentSuspense, null); - if (true) { - endMeasure(instance, `hydrate`); - } - }; - if (isAsyncWrapperVNode) { - initialVNode.type.__asyncLoader().then(() => !instance.isUnmounted && hydrateSubTree()); - } else { - hydrateSubTree(); - } - } else { - if (true) { - startMeasure(instance, `render`); - } - const subTree = instance.subTree = renderComponentRoot(instance); - if (true) { - endMeasure(instance, `render`); - } - if (true) { - startMeasure(instance, `patch`); - } - patch(null, subTree, container, anchor, instance, parentSuspense, isSVG); - if (true) { - endMeasure(instance, `patch`); - } - initialVNode.el = subTree.el; - } - if (m) { - queuePostRenderEffect(m, parentSuspense); - } - if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) { - const scopedInitialVNode = initialVNode; - queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense); - } - if (initialVNode.shapeFlag & 256) { - instance.a && queuePostRenderEffect(instance.a, parentSuspense); - } - instance.isMounted = true; - if (true) { - devtoolsComponentAdded(instance); - } - initialVNode = container = anchor = null; - } else { - let { next, bu, u, parent, vnode } = instance; - let originNext = next; - let vnodeHook; - if (true) { - pushWarningContext(next || instance.vnode); - } - toggleRecurse(instance, false); - if (next) { - next.el = vnode.el; - updateComponentPreRender(instance, next, optimized); - } else { - next = vnode; - } - if (bu) { - invokeArrayFns(bu); - } - if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) { - invokeVNodeHook(vnodeHook, parent, next, vnode); - } - toggleRecurse(instance, true); - if (true) { - startMeasure(instance, `render`); - } - const nextTree = renderComponentRoot(instance); - if (true) { - endMeasure(instance, `render`); - } - const prevTree = instance.subTree; - instance.subTree = nextTree; - if (true) { - startMeasure(instance, `patch`); - } - patch(prevTree, nextTree, hostParentNode(prevTree.el), getNextHostNode(prevTree), instance, parentSuspense, isSVG); - if (true) { - endMeasure(instance, `patch`); - } - next.el = nextTree.el; - if (originNext === null) { - updateHOCHostEl(instance, nextTree.el); - } - if (u) { - queuePostRenderEffect(u, parentSuspense); - } - if (vnodeHook = next.props && next.props.onVnodeUpdated) { - queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense); - } - if (true) { - devtoolsComponentUpdated(instance); - } - if (true) { - popWarningContext(); - } - } - }; - const effect2 = instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(instance.update), instance.scope); - const update = instance.update = effect2.run.bind(effect2); - update.id = instance.uid; - toggleRecurse(instance, true); - if (true) { - effect2.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0; - effect2.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0; - update.ownerInstance = instance; - } - update(); - }; - const updateComponentPreRender = (instance, nextVNode, optimized) => { - nextVNode.component = instance; - const prevProps = instance.vnode.props; - instance.vnode = nextVNode; - instance.next = null; - updateProps(instance, nextVNode.props, prevProps, optimized); - updateSlots(instance, nextVNode.children, optimized); - pauseTracking(); - flushPreFlushCbs(void 0, instance.update); - resetTracking(); - }; - const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => { - const c1 = n1 && n1.children; - const prevShapeFlag = n1 ? n1.shapeFlag : 0; - const c2 = n2.children; - const { patchFlag, shapeFlag } = n2; - if (patchFlag > 0) { - if (patchFlag & 128) { - patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - return; - } else if (patchFlag & 256) { - patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - return; - } - } - if (shapeFlag & 8) { - if (prevShapeFlag & 16) { - unmountChildren(c1, parentComponent, parentSuspense); - } - if (c2 !== c1) { - hostSetElementText(container, c2); - } - } else { - if (prevShapeFlag & 16) { - if (shapeFlag & 16) { - patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - unmountChildren(c1, parentComponent, parentSuspense, true); - } - } else { - if (prevShapeFlag & 8) { - hostSetElementText(container, ""); - } - if (shapeFlag & 16) { - mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - } - } - }; - const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - c1 = c1 || EMPTY_ARR; - c2 = c2 || EMPTY_ARR; - const oldLength = c1.length; - const newLength = c2.length; - const commonLength = Math.min(oldLength, newLength); - let i; - for (i = 0; i < commonLength; i++) { - const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - if (oldLength > newLength) { - unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength); - } else { - mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength); - } - }; - const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - let i = 0; - const l2 = c2.length; - let e1 = c1.length - 1; - let e2 = l2 - 1; - while (i <= e1 && i <= e2) { - const n1 = c1[i]; - const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - if (isSameVNodeType(n1, n2)) { - patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - break; - } - i++; - } - while (i <= e1 && i <= e2) { - const n1 = c1[e1]; - const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]); - if (isSameVNodeType(n1, n2)) { - patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - break; - } - e1--; - e2--; - } - if (i > e1) { - if (i <= e2) { - const nextPos = e2 + 1; - const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor; - while (i <= e2) { - patch(null, c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - i++; - } - } - } else if (i > e2) { - while (i <= e1) { - unmount(c1[i], parentComponent, parentSuspense, true); - i++; - } - } else { - const s1 = i; - const s2 = i; - const keyToNewIndexMap = /* @__PURE__ */ new Map(); - for (i = s2; i <= e2; i++) { - const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - if (nextChild.key != null) { - if (keyToNewIndexMap.has(nextChild.key)) { - warn2(`Duplicate keys found during update:`, JSON.stringify(nextChild.key), `Make sure keys are unique.`); - } - keyToNewIndexMap.set(nextChild.key, i); - } - } - let j; - let patched = 0; - const toBePatched = e2 - s2 + 1; - let moved = false; - let maxNewIndexSoFar = 0; - const newIndexToOldIndexMap = new Array(toBePatched); - for (i = 0; i < toBePatched; i++) - newIndexToOldIndexMap[i] = 0; - for (i = s1; i <= e1; i++) { - const prevChild = c1[i]; - if (patched >= toBePatched) { - unmount(prevChild, parentComponent, parentSuspense, true); - continue; - } - let newIndex; - if (prevChild.key != null) { - newIndex = keyToNewIndexMap.get(prevChild.key); - } else { - for (j = s2; j <= e2; j++) { - if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) { - newIndex = j; - break; - } - } - } - if (newIndex === void 0) { - unmount(prevChild, parentComponent, parentSuspense, true); - } else { - newIndexToOldIndexMap[newIndex - s2] = i + 1; - if (newIndex >= maxNewIndexSoFar) { - maxNewIndexSoFar = newIndex; - } else { - moved = true; - } - patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - patched++; - } - } - const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR; - j = increasingNewIndexSequence.length - 1; - for (i = toBePatched - 1; i >= 0; i--) { - const nextIndex = s2 + i; - const nextChild = c2[nextIndex]; - const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor; - if (newIndexToOldIndexMap[i] === 0) { - patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else if (moved) { - if (j < 0 || i !== increasingNewIndexSequence[j]) { - move(nextChild, container, anchor, 2); - } else { - j--; - } - } - } - } - }; - const move = (vnode, container, anchor, moveType, parentSuspense = null) => { - const { el, type, transition, children, shapeFlag } = vnode; - if (shapeFlag & 6) { - move(vnode.component.subTree, container, anchor, moveType); - return; - } - if (shapeFlag & 128) { - vnode.suspense.move(container, anchor, moveType); - return; - } - if (shapeFlag & 64) { - type.move(vnode, container, anchor, internals); - return; - } - if (type === Fragment) { - hostInsert(el, container, anchor); - for (let i = 0; i < children.length; i++) { - move(children[i], container, anchor, moveType); - } - hostInsert(vnode.anchor, container, anchor); - return; - } - if (type === Static) { - moveStaticNode(vnode, container, anchor); - return; - } - const needTransition = moveType !== 2 && shapeFlag & 1 && transition; - if (needTransition) { - if (moveType === 0) { - transition.beforeEnter(el); - hostInsert(el, container, anchor); - queuePostRenderEffect(() => transition.enter(el), parentSuspense); - } else { - const { leave, delayLeave, afterLeave } = transition; - const remove3 = () => hostInsert(el, container, anchor); - const performLeave = () => { - leave(el, () => { - remove3(); - afterLeave && afterLeave(); - }); - }; - if (delayLeave) { - delayLeave(el, remove3, performLeave); - } else { - performLeave(); - } - } - } else { - hostInsert(el, container, anchor); - } - }; - const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => { - const { type, props, ref: ref2, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode; - if (ref2 != null) { - setRef(ref2, null, parentSuspense, vnode, true); - } - if (shapeFlag & 256) { - parentComponent.ctx.deactivate(vnode); - return; - } - const shouldInvokeDirs = shapeFlag & 1 && dirs; - const shouldInvokeVnodeHook = !isAsyncWrapper(vnode); - let vnodeHook; - if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) { - invokeVNodeHook(vnodeHook, parentComponent, vnode); - } - if (shapeFlag & 6) { - unmountComponent(vnode.component, parentSuspense, doRemove); - } else { - if (shapeFlag & 128) { - vnode.suspense.unmount(parentSuspense, doRemove); - return; - } - if (shouldInvokeDirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeUnmount"); - } - if (shapeFlag & 64) { - vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove); - } else if (dynamicChildren && (type !== Fragment || patchFlag > 0 && patchFlag & 64)) { - unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true); - } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) { - unmountChildren(children, parentComponent, parentSuspense); - } - if (doRemove) { - remove2(vnode); - } - } - if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); - shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted"); - }, parentSuspense); - } - }; - const remove2 = (vnode) => { - const { type, el, anchor, transition } = vnode; - if (type === Fragment) { - if (vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) { - vnode.children.forEach((child) => { - if (child.type === Comment) { - hostRemove(child.el); - } else { - remove2(child); - } - }); - } else { - removeFragment(el, anchor); - } - return; - } - if (type === Static) { - removeStaticNode(vnode); - return; - } - const performRemove = () => { - hostRemove(el); - if (transition && !transition.persisted && transition.afterLeave) { - transition.afterLeave(); - } - }; - if (vnode.shapeFlag & 1 && transition && !transition.persisted) { - const { leave, delayLeave } = transition; - const performLeave = () => leave(el, performRemove); - if (delayLeave) { - delayLeave(vnode.el, performRemove, performLeave); - } else { - performLeave(); - } - } else { - performRemove(); - } - }; - const removeFragment = (cur, end) => { - let next; - while (cur !== end) { - next = hostNextSibling(cur); - hostRemove(cur); - cur = next; - } - hostRemove(end); - }; - const unmountComponent = (instance, parentSuspense, doRemove) => { - if (instance.type.__hmrId) { - unregisterHMR(instance); - } - const { bum, scope, update, subTree, um } = instance; - if (bum) { - invokeArrayFns(bum); - } - scope.stop(); - if (update) { - update.active = false; - unmount(subTree, instance, parentSuspense, doRemove); - } - if (um) { - queuePostRenderEffect(um, parentSuspense); - } - queuePostRenderEffect(() => { - instance.isUnmounted = true; - }, parentSuspense); - if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) { - parentSuspense.deps--; - if (parentSuspense.deps === 0) { - parentSuspense.resolve(); - } - } - if (true) { - devtoolsComponentRemoved(instance); - } - }; - const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => { - for (let i = start; i < children.length; i++) { - unmount(children[i], parentComponent, parentSuspense, doRemove, optimized); - } - }; - const getNextHostNode = (vnode) => { - if (vnode.shapeFlag & 6) { - return getNextHostNode(vnode.component.subTree); - } - if (vnode.shapeFlag & 128) { - return vnode.suspense.next(); - } - return hostNextSibling(vnode.anchor || vnode.el); - }; - const render2 = (vnode, container, isSVG) => { - if (vnode == null) { - if (container._vnode) { - unmount(container._vnode, null, null, true); - } - } else { - patch(container._vnode || null, vnode, container, null, null, null, isSVG); - } - flushPostFlushCbs(); - container._vnode = vnode; - }; - const internals = { - p: patch, - um: unmount, - m: move, - r: remove2, - mt: mountComponent, - mc: mountChildren, - pc: patchChildren, - pbc: patchBlockChildren, - n: getNextHostNode, - o: options - }; - let hydrate2; - let hydrateNode; - if (createHydrationFns) { - [hydrate2, hydrateNode] = createHydrationFns(internals); - } - return { - render: render2, - hydrate: hydrate2, - createApp: createAppAPI(render2, hydrate2) - }; -} -function toggleRecurse({ effect: effect2, update }, allowed) { - effect2.allowRecurse = update.allowRecurse = allowed; -} -function traverseStaticChildren(n1, n2, shallow = false) { - const ch1 = n1.children; - const ch2 = n2.children; - if (isArray(ch1) && isArray(ch2)) { - for (let i = 0; i < ch1.length; i++) { - const c1 = ch1[i]; - let c2 = ch2[i]; - if (c2.shapeFlag & 1 && !c2.dynamicChildren) { - if (c2.patchFlag <= 0 || c2.patchFlag === 32) { - c2 = ch2[i] = cloneIfMounted(ch2[i]); - c2.el = c1.el; - } - if (!shallow) - traverseStaticChildren(c1, c2); - } - if (c2.type === Comment && !c2.el) { - c2.el = c1.el; - } - } - } -} -function getSequence(arr) { - const p2 = arr.slice(); - const result = [0]; - let i, j, u, v, c; - const len = arr.length; - for (i = 0; i < len; i++) { - const arrI = arr[i]; - if (arrI !== 0) { - j = result[result.length - 1]; - if (arr[j] < arrI) { - p2[i] = j; - result.push(i); - continue; - } - u = 0; - v = result.length - 1; - while (u < v) { - c = u + v >> 1; - if (arr[result[c]] < arrI) { - u = c + 1; - } else { - v = c; - } - } - if (arrI < arr[result[u]]) { - if (u > 0) { - p2[i] = result[u - 1]; - } - result[u] = i; - } - } - } - u = result.length; - v = result[u - 1]; - while (u-- > 0) { - result[u] = v; - v = p2[v]; - } - return result; -} -var isTeleport = (type) => type.__isTeleport; -var isTeleportDisabled = (props) => props && (props.disabled || props.disabled === ""); -var isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement; -var resolveTarget = (props, select) => { - const targetSelector = props && props.to; - if (isString(targetSelector)) { - if (!select) { - warn2(`Current renderer does not support string target for Teleports. (missing querySelector renderer option)`); - return null; - } else { - const target = select(targetSelector); - if (!target) { - warn2(`Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`); - } - return target; - } - } else { - if (!targetSelector && !isTeleportDisabled(props)) { - warn2(`Invalid Teleport target: ${targetSelector}`); - } - return targetSelector; - } -}; -var TeleportImpl = { - __isTeleport: true, - process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) { - const { mc: mountChildren, pc: patchChildren, pbc: patchBlockChildren, o: { insert, querySelector, createText, createComment } } = internals; - const disabled = isTeleportDisabled(n2.props); - let { shapeFlag, children, dynamicChildren } = n2; - if (isHmrUpdating) { - optimized = false; - dynamicChildren = null; - } - if (n1 == null) { - const placeholder = n2.el = true ? createComment("teleport start") : createText(""); - const mainAnchor = n2.anchor = true ? createComment("teleport end") : createText(""); - insert(placeholder, container, anchor); - insert(mainAnchor, container, anchor); - const target = n2.target = resolveTarget(n2.props, querySelector); - const targetAnchor = n2.targetAnchor = createText(""); - if (target) { - insert(targetAnchor, target); - isSVG = isSVG || isTargetSVG(target); - } else if (!disabled) { - warn2("Invalid Teleport target on mount:", target, `(${typeof target})`); - } - const mount = (container2, anchor2) => { - if (shapeFlag & 16) { - mountChildren(children, container2, anchor2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - }; - if (disabled) { - mount(container, mainAnchor); - } else if (target) { - mount(target, targetAnchor); - } - } else { - n2.el = n1.el; - const mainAnchor = n2.anchor = n1.anchor; - const target = n2.target = n1.target; - const targetAnchor = n2.targetAnchor = n1.targetAnchor; - const wasDisabled = isTeleportDisabled(n1.props); - const currentContainer = wasDisabled ? container : target; - const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; - isSVG = isSVG || isTargetSVG(target); - if (dynamicChildren) { - patchBlockChildren(n1.dynamicChildren, dynamicChildren, currentContainer, parentComponent, parentSuspense, isSVG, slotScopeIds); - traverseStaticChildren(n1, n2, true); - } else if (!optimized) { - patchChildren(n1, n2, currentContainer, currentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, false); - } - if (disabled) { - if (!wasDisabled) { - moveTeleport(n2, container, mainAnchor, internals, 1); - } - } else { - if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { - const nextTarget = n2.target = resolveTarget(n2.props, querySelector); - if (nextTarget) { - moveTeleport(n2, nextTarget, null, internals, 0); - } else if (true) { - warn2("Invalid Teleport target on update:", target, `(${typeof target})`); - } - } else if (wasDisabled) { - moveTeleport(n2, target, targetAnchor, internals, 1); - } - } - } - }, - remove(vnode, parentComponent, parentSuspense, optimized, { um: unmount, o: { remove: hostRemove } }, doRemove) { - const { shapeFlag, children, anchor, targetAnchor, target, props } = vnode; - if (target) { - hostRemove(targetAnchor); - } - if (doRemove || !isTeleportDisabled(props)) { - hostRemove(anchor); - if (shapeFlag & 16) { - for (let i = 0; i < children.length; i++) { - const child = children[i]; - unmount(child, parentComponent, parentSuspense, true, !!child.dynamicChildren); - } - } - } - }, - move: moveTeleport, - hydrate: hydrateTeleport -}; -function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) { - if (moveType === 0) { - insert(vnode.targetAnchor, container, parentAnchor); - } - const { el, anchor, shapeFlag, children, props } = vnode; - const isReorder = moveType === 2; - if (isReorder) { - insert(el, container, parentAnchor); - } - if (!isReorder || isTeleportDisabled(props)) { - if (shapeFlag & 16) { - for (let i = 0; i < children.length; i++) { - move(children[i], container, parentAnchor, 2); - } - } - } - if (isReorder) { - insert(anchor, container, parentAnchor); - } -} -function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { o: { nextSibling, parentNode, querySelector } }, hydrateChildren) { - const target = vnode.target = resolveTarget(vnode.props, querySelector); - if (target) { - const targetNode = target._lpa || target.firstChild; - if (vnode.shapeFlag & 16) { - if (isTeleportDisabled(vnode.props)) { - vnode.anchor = hydrateChildren(nextSibling(node), vnode, parentNode(node), parentComponent, parentSuspense, slotScopeIds, optimized); - vnode.targetAnchor = targetNode; - } else { - vnode.anchor = nextSibling(node); - vnode.targetAnchor = hydrateChildren(targetNode, vnode, target, parentComponent, parentSuspense, slotScopeIds, optimized); - } - target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor); - } - } - return vnode.anchor && nextSibling(vnode.anchor); -} -var Teleport = TeleportImpl; -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); - if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { - return Component; - } - } - const res = resolve(instance[type] || Component[type], name) || 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))]); -} -var Fragment = Symbol(true ? "Fragment" : void 0); -var Text = Symbol(true ? "Text" : void 0); -var Comment = Symbol(true ? "Comment" : void 0); -var Static = Symbol(true ? "Static" : void 0); -var blockStack = []; -var currentBlock = null; -function openBlock(disableTracking = false) { - blockStack.push(currentBlock = disableTracking ? null : []); -} -function closeBlock() { - blockStack.pop(); - currentBlock = blockStack[blockStack.length - 1] || null; -} -var isBlockTreeEnabled = 1; -function setBlockTracking(value) { - isBlockTreeEnabled += value; -} -function setupBlock(vnode) { - vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null; - closeBlock(); - if (isBlockTreeEnabled > 0 && currentBlock) { - currentBlock.push(vnode); - } - return vnode; -} -function createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) { - return setupBlock(createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, true)); -} -function createBlock(type, props, children, patchFlag, dynamicProps) { - return setupBlock(createVNode(type, props, children, patchFlag, dynamicProps, true)); -} -function isVNode(value) { - return value ? value.__v_isVNode === true : false; -} -function isSameVNodeType(n1, n2) { - if (n2.shapeFlag & 6 && hmrDirtyComponents.has(n2.type)) { - return false; - } - return n1.type === n2.type && n1.key === n2.key; -} -var vnodeArgsTransformer; -function transformVNodeArgs(transformer) { - vnodeArgsTransformer = transformer; -} -var createVNodeWithArgsTransform = (...args) => { - return _createVNode(...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args); -}; -var InternalObjectKey = `__vInternal`; -var normalizeKey = ({ key }) => key != null ? key : null; -var normalizeRef = ({ ref: ref2, ref_key, ref_for }) => { - return ref2 != null ? isString(ref2) || isRef(ref2) || isFunction(ref2) ? { i: currentRenderingInstance, r: ref2, k: ref_key, f: !!ref_for } : ref2 : null; -}; -function createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) { - const vnode = { - __v_isVNode: true, - __v_skip: true, - type, - props, - key: props && normalizeKey(props), - ref: props && normalizeRef(props), - scopeId: currentScopeId, - slotScopeIds: null, - children, - component: null, - suspense: null, - ssContent: null, - ssFallback: null, - dirs: null, - transition: null, - el: null, - anchor: null, - target: null, - targetAnchor: null, - staticCount: 0, - shapeFlag, - patchFlag, - dynamicProps, - dynamicChildren: null, - appContext: null - }; - if (needFullChildrenNormalization) { - normalizeChildren(vnode, children); - if (shapeFlag & 128) { - type.normalize(vnode); - } - } else if (children) { - vnode.shapeFlag |= isString(children) ? 8 : 16; - } - if (vnode.key !== vnode.key) { - warn2(`VNode created with invalid key (NaN). VNode type:`, vnode.type); - } - if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock && (vnode.patchFlag > 0 || shapeFlag & 6) && vnode.patchFlag !== 32) { - currentBlock.push(vnode); - } - return vnode; -} -var createVNode = true ? createVNodeWithArgsTransform : _createVNode; -function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) { - if (!type || type === NULL_DYNAMIC_COMPONENT) { - if (!type) { - warn2(`Invalid vnode type when creating vnode: ${type}.`); - } - type = Comment; - } - if (isVNode(type)) { - const cloned = cloneVNode(type, props, true); - if (children) { - normalizeChildren(cloned, children); - } - return cloned; - } - if (isClassComponent(type)) { - type = type.__vccOpts; - } - if (props) { - props = guardReactiveProps(props); - let { class: klass, style } = props; - if (klass && !isString(klass)) { - props.class = normalizeClass(klass); - } - if (isObject(style)) { - if (isProxy(style) && !isArray(style)) { - style = extend({}, style); - } - props.style = normalizeStyle(style); - } - } - const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0; - if (shapeFlag & 4 && isProxy(type)) { - type = toRaw(type); - warn2(`Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with \`markRaw\` or using \`shallowRef\` instead of \`ref\`.`, ` -Component that was made reactive: `, type); - } - return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true); -} -function guardReactiveProps(props) { - if (!props) - return null; - return isProxy(props) || InternalObjectKey in props ? extend({}, props) : props; -} -function cloneVNode(vnode, extraProps, mergeRef = false) { - const { props, ref: ref2, patchFlag, children } = vnode; - const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props; - const cloned = { - __v_isVNode: true, - __v_skip: true, - type: vnode.type, - props: mergedProps, - key: mergedProps && normalizeKey(mergedProps), - ref: extraProps && extraProps.ref ? mergeRef && ref2 ? isArray(ref2) ? ref2.concat(normalizeRef(extraProps)) : [ref2, normalizeRef(extraProps)] : normalizeRef(extraProps) : ref2, - scopeId: vnode.scopeId, - slotScopeIds: vnode.slotScopeIds, - children: patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children, - target: vnode.target, - targetAnchor: vnode.targetAnchor, - staticCount: vnode.staticCount, - shapeFlag: vnode.shapeFlag, - patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag, - dynamicProps: vnode.dynamicProps, - dynamicChildren: vnode.dynamicChildren, - appContext: vnode.appContext, - dirs: vnode.dirs, - transition: vnode.transition, - component: vnode.component, - suspense: vnode.suspense, - ssContent: vnode.ssContent && cloneVNode(vnode.ssContent), - ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback), - el: vnode.el, - anchor: vnode.anchor - }; - return cloned; -} -function deepCloneVNode(vnode) { - const cloned = cloneVNode(vnode); - if (isArray(vnode.children)) { - cloned.children = vnode.children.map(deepCloneVNode); - } - return cloned; -} -function createTextVNode(text = " ", flag = 0) { - return createVNode(Text, null, text, flag); -} -function createStaticVNode(content, numberOfNodes) { - const vnode = createVNode(Static, null, content); - vnode.staticCount = numberOfNodes; - return vnode; -} -function createCommentVNode(text = "", asBlock = false) { - return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text); -} -function normalizeVNode(child) { - if (child == null || typeof child === "boolean") { - return createVNode(Comment); - } else if (isArray(child)) { - return createVNode(Fragment, null, child.slice()); - } else if (typeof child === "object") { - return cloneIfMounted(child); - } else { - return createVNode(Text, null, String(child)); - } -} -function cloneIfMounted(child) { - return child.el === null || child.memo ? child : cloneVNode(child); -} -function normalizeChildren(vnode, children) { - let type = 0; - const { shapeFlag } = vnode; - if (children == null) { - children = null; - } else if (isArray(children)) { - type = 16; - } else if (typeof children === "object") { - if (shapeFlag & (1 | 64)) { - const slot = children.default; - if (slot) { - slot._c && (slot._d = false); - normalizeChildren(vnode, slot()); - slot._c && (slot._d = true); - } - return; - } else { - type = 32; - const slotFlag = children._; - if (!slotFlag && !(InternalObjectKey in children)) { - children._ctx = currentRenderingInstance; - } else if (slotFlag === 3 && currentRenderingInstance) { - if (currentRenderingInstance.slots._ === 1) { - children._ = 1; - } else { - children._ = 2; - vnode.patchFlag |= 1024; - } - } - } - } else if (isFunction(children)) { - children = { default: children, _ctx: currentRenderingInstance }; - type = 32; - } else { - children = String(children); - if (shapeFlag & 64) { - type = 16; - children = [createTextVNode(children)]; - } else { - type = 8; - } - } - vnode.children = children; - vnode.shapeFlag |= type; -} -function mergeProps(...args) { - const ret = {}; - for (let i = 0; i < args.length; i++) { - const toMerge = args[i]; - for (const key in toMerge) { - if (key === "class") { - if (ret.class !== toMerge.class) { - ret.class = normalizeClass([ret.class, toMerge.class]); - } - } else if (key === "style") { - ret.style = normalizeStyle([ret.style, toMerge.style]); - } else if (isOn(key)) { - const existing = ret[key]; - const incoming = toMerge[key]; - if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) { - ret[key] = existing ? [].concat(existing, incoming) : incoming; - } - } else if (key !== "") { - ret[key] = toMerge[key]; - } - } - } - return ret; -} -function invokeVNodeHook(hook, instance, vnode, prevVNode = null) { - callWithAsyncErrorHandling(hook, instance, 7, [ - vnode, - prevVNode - ]); -} -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}.`); - return []; - } - 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.fn; - } - } - return slots; -} -function renderSlot(slots, name, props = {}, fallback, noSlotted) { - if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) { - return createVNode("slot", name === "default" ? null : { name }, 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 || `_${name}` }, validSlotContent || (fallback ? fallback() : []), validSlotContent && slots._ === 1 ? 64 : -2); - 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) { - const ret = {}; - if (!isObject(obj)) { - warn2(`v-on with no argument expects an object value.`); - return ret; - } - for (const key in obj) { - ret[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 = 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) => true ? resolveMergedOptions(i) : i.type, - $forceUpdate: (i) => () => queueJob(i.update), - $nextTick: (i) => nextTick.bind(i.proxy), - $watch: (i) => true ? instanceWatch.bind(i) : NOOP -}); -var PublicInstanceProxyHandlers = { - get({ _: instance }, key) { - const { ctx, setupState, data, props, accessCache, type, appContext } = instance; - if (key === "__isVue") { - return true; - } - if (setupState !== EMPTY_OBJ && setupState.__isScriptSetup && hasOwn(setupState, key)) { - return setupState[key]; - } - 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 (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) { - accessCache[key] = 1; - return setupState[key]; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - accessCache[key] = 2; - return data[key]; - } else if ((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 (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 ((cssModule = type.__cssModules) && (cssModule = cssModule[key])) { - return cssModule; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4; - return ctx[key]; - } else if (globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)) { - { - return globalProperties[key]; - } - } else if (currentRenderingInstance && (!isString(key) || key.indexOf("__v") !== 0)) { - if (data !== EMPTY_OBJ && (key[0] === "$" || 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 (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) { - setupState[key] = value; - return true; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - data[key] = value; - return true; - } else if (hasOwn(instance.props, key)) { - warn2(`Attempting to mutate prop "${key}". Props are readonly.`, instance); - return false; - } - if (key[0] === "$" && key.slice(1) in instance) { - warn2(`Attempting to mutate public property "${key}". Properties starting with $ are reserved and readonly.`, instance); - return false; - } else { - if (key in instance.appContext.config.globalProperties) { - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - value - }); - } else { - ctx[key] = value; - } - } - return true; - }, - has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) { - let normalizedProps; - return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || setupState !== EMPTY_OBJ && hasOwn(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key); - }, - defineProperty(target, key, descriptor) { - if (descriptor.get != null) { - target._.accessCache[key] = 0; - } else if (hasOwn(descriptor, "value")) { - this.set(target, key, descriptor.value, null); - } - return Reflect.defineProperty(target, key, descriptor); - } -}; -if (true) { - PublicInstanceProxyHandlers.ownKeys = (target) => { - warn2(`Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`); - return Reflect.ownKeys(target); - }; -} -var RuntimeCompiledPublicInstanceProxyHandlers = extend({}, PublicInstanceProxyHandlers, { - get(target, key) { - if (key === Symbol.unscopables) { - return; - } - return PublicInstanceProxyHandlers.get(target, key, target); - }, - has(_, key) { - const has2 = key[0] !== "_" && !isGloballyWhitelisted(key); - if (!has2 && PublicInstanceProxyHandlers.has(_, key)) { - warn2(`Property ${JSON.stringify(key)} should not start with _ which is a reserved prefix for Vue internals.`); - } - return has2; - } -}); -function createDevRenderContext(instance) { - const target = {}; - Object.defineProperty(target, `_`, { - configurable: true, - enumerable: false, - get: () => instance - }); - Object.keys(publicPropertiesMap).forEach((key) => { - Object.defineProperty(target, key, { - configurable: true, - enumerable: false, - get: () => publicPropertiesMap[key](instance), - set: NOOP - }); - }); - return target; -} -function exposePropsOnRenderContext(instance) { - const { ctx, propsOptions: [propsOptions] } = instance; - if (propsOptions) { - Object.keys(propsOptions).forEach((key) => { - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => instance.props[key], - set: NOOP - }); - }); - } -} -function exposeSetupStateOnRenderContext(instance) { - const { ctx, setupState } = instance; - Object.keys(toRaw(setupState)).forEach((key) => { - if (!setupState.__isScriptSetup) { - if (key[0] === "$" || key[0] === "_") { - warn2(`setup() return property ${JSON.stringify(key)} should not start with "$" or "_" which are reserved prefixes for Vue internals.`); - return; - } - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => setupState[key], - set: NOOP - }); - } - }); -} -var emptyAppContext = createAppContext(); -var uid$1 = 0; -function createComponentInstance(vnode, parent, suspense) { - const type = vnode.type; - const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext; - const instance = { - uid: uid$1++, - vnode, - type, - parent, - appContext, - root: null, - next: null, - subTree: null, - effect: null, - update: null, - scope: new EffectScope(true), - render: null, - proxy: null, - exposed: null, - exposeProxy: null, - withProxy: null, - provides: parent ? parent.provides : Object.create(appContext.provides), - accessCache: null, - renderCache: [], - components: null, - directives: null, - propsOptions: normalizePropsOptions(type, appContext), - emitsOptions: normalizeEmitsOptions(type, appContext), - emit: null, - emitted: null, - propsDefaults: EMPTY_OBJ, - inheritAttrs: type.inheritAttrs, - ctx: EMPTY_OBJ, - data: EMPTY_OBJ, - props: EMPTY_OBJ, - attrs: EMPTY_OBJ, - slots: EMPTY_OBJ, - refs: EMPTY_OBJ, - setupState: EMPTY_OBJ, - setupContext: null, - suspense, - suspenseId: suspense ? suspense.pendingId : 0, - asyncDep: null, - asyncResolved: false, - isMounted: false, - isUnmounted: false, - isDeactivated: false, - bc: null, - c: null, - bm: null, - m: null, - bu: null, - u: null, - um: null, - bum: null, - da: null, - a: null, - rtg: null, - rtc: null, - ec: null, - sp: null - }; - if (true) { - instance.ctx = createDevRenderContext(instance); - } else { - instance.ctx = { _: instance }; - } - instance.root = parent ? parent.root : instance; - instance.emit = emit$1.bind(null, instance); - if (vnode.ce) { - vnode.ce(instance); - } - return instance; -} -var currentInstance = null; -var getCurrentInstance = () => currentInstance || currentRenderingInstance; -var setCurrentInstance = (instance) => { - currentInstance = instance; - instance.scope.on(); -}; -var unsetCurrentInstance = () => { - currentInstance && currentInstance.scope.off(); - currentInstance = null; -}; -var isBuiltInTag = makeMap("slot,component"); -function validateComponentName(name, config) { - const appIsNativeTag = config.isNativeTag || NO; - if (isBuiltInTag(name) || appIsNativeTag(name)) { - warn2("Do not use built-in or reserved HTML elements as component id: " + name); - } -} -function isStatefulComponent(instance) { - return instance.vnode.shapeFlag & 4; -} -var isInSSRComponentSetup = false; -function setupComponent(instance, isSSR = false) { - isInSSRComponentSetup = isSSR; - const { props, children } = instance.vnode; - const isStateful = isStatefulComponent(instance); - initProps(instance, props, isStateful, isSSR); - initSlots(instance, children); - const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0; - isInSSRComponentSetup = false; - return setupResult; -} -function setupStatefulComponent(instance, isSSR) { - var _a2; - const Component = instance.type; - if (true) { - if (Component.name) { - validateComponentName(Component.name, instance.appContext.config); - } - if (Component.components) { - const names = Object.keys(Component.components); - for (let i = 0; i < names.length; i++) { - validateComponentName(names[i], instance.appContext.config); - } - } - if (Component.directives) { - const names = Object.keys(Component.directives); - for (let i = 0; i < names.length; i++) { - validateDirectiveName(names[i]); - } - } - if (Component.compilerOptions && isRuntimeOnly()) { - warn2(`"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`); - } - } - instance.accessCache = /* @__PURE__ */ Object.create(null); - instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers)); - if (true) { - exposePropsOnRenderContext(instance); - } - const { setup } = Component; - if (setup) { - const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null; - setCurrentInstance(instance); - pauseTracking(); - const setupResult = callWithErrorHandling(setup, instance, 0, [true ? shallowReadonly(instance.props) : instance.props, setupContext]); - resetTracking(); - unsetCurrentInstance(); - if (isPromise(setupResult)) { - setupResult.then(unsetCurrentInstance, unsetCurrentInstance); - if (isSSR) { - return setupResult.then((resolvedResult) => { - handleSetupResult(instance, resolvedResult, isSSR); - }).catch((e) => { - handleError(e, instance, 0); - }); - } else { - instance.asyncDep = setupResult; - if (!instance.suspense) { - const name = (_a2 = Component.name) !== null && _a2 !== void 0 ? _a2 : "Anonymous"; - warn2(`Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`); - } - } - } else { - handleSetupResult(instance, setupResult, isSSR); - } - } else { - finishComponentSetup(instance, isSSR); - } -} -function handleSetupResult(instance, setupResult, isSSR) { - if (isFunction(setupResult)) { - if (instance.type.__ssrInlineRender) { - instance.ssrRender = setupResult; - } else { - instance.render = setupResult; - } - } else if (isObject(setupResult)) { - if (isVNode(setupResult)) { - warn2(`setup() should not return VNodes directly - return a render function instead.`); - } - if (true) { - instance.devtoolsRawSetupState = setupResult; - } - instance.setupState = proxyRefs(setupResult); - if (true) { - exposeSetupStateOnRenderContext(instance); - } - } else if (setupResult !== void 0) { - warn2(`setup() should return an object. Received: ${setupResult === null ? "null" : typeof setupResult}`); - } - finishComponentSetup(instance, isSSR); -} -var compile; -var installWithProxy; -function registerRuntimeCompiler(_compile) { - compile = _compile; - installWithProxy = (i) => { - if (i.render._rc) { - i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers); - } - }; -} -var isRuntimeOnly = () => !compile; -function finishComponentSetup(instance, isSSR, skipOptions) { - const Component = instance.type; - if (!instance.render) { - if (!isSSR && compile && !Component.render) { - const template = Component.template; - if (template) { - if (true) { - startMeasure(instance, `compile`); - } - const { isCustomElement, compilerOptions } = instance.appContext.config; - const { delimiters, compilerOptions: componentCompilerOptions } = Component; - const finalCompilerOptions = extend(extend({ - isCustomElement, - delimiters - }, compilerOptions), componentCompilerOptions); - Component.render = compile(template, finalCompilerOptions); - if (true) { - endMeasure(instance, `compile`); - } - } - } - instance.render = Component.render || NOOP; - if (installWithProxy) { - installWithProxy(instance); - } - } - if (true) { - setCurrentInstance(instance); - pauseTracking(); - applyOptions(instance); - resetTracking(); - unsetCurrentInstance(); - } - if (!Component.render && instance.render === NOOP && !isSSR) { - if (!compile && Component.template) { - warn2(`Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".`); - } else { - warn2(`Component is missing template or render function.`); - } - } -} -function createAttrsProxy(instance) { - return new Proxy(instance.attrs, true ? { - get(target, key) { - markAttrsAccessed(); - track(instance, "get", "$attrs"); - return target[key]; - }, - set() { - warn2(`setupContext.attrs is readonly.`); - return false; - }, - deleteProperty() { - warn2(`setupContext.attrs is readonly.`); - return false; - } - } : { - get(target, key) { - track(instance, "get", "$attrs"); - return target[key]; - } - }); -} -function createSetupContext(instance) { - const expose = (exposed) => { - if (instance.exposed) { - warn2(`expose() should be called only once per setup().`); - } - instance.exposed = exposed || {}; - }; - let attrs; - if (true) { - return Object.freeze({ - get attrs() { - return attrs || (attrs = createAttrsProxy(instance)); - }, - get slots() { - return shallowReadonly(instance.slots); - }, - get emit() { - return (event, ...args) => instance.emit(event, ...args); - }, - expose - }); - } else { - return { - get attrs() { - return attrs || (attrs = createAttrsProxy(instance)); - }, - slots: instance.slots, - emit: instance.emit, - expose - }; - } -} -function getExposeProxy(instance) { - if (instance.exposed) { - return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), { - get(target, key) { - if (key in target) { - return target[key]; - } else if (key in publicPropertiesMap) { - return publicPropertiesMap[key](instance); - } - } - })); - } -} -var classifyRE = /(?:^|[-_])(\w)/g; -var classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, ""); -function getComponentName(Component) { - return isFunction(Component) ? Component.displayName || Component.name : Component.name; -} -function formatComponentName(instance, Component, isRoot = false) { - let name = getComponentName(Component); - if (!name && Component.__file) { - const match = Component.__file.match(/([^/\\]+)\.\w+$/); - if (match) { - name = match[1]; - } - } - if (!name && instance && instance.parent) { - const inferFromRegistry = (registry) => { - for (const key in registry) { - if (registry[key] === Component) { - return key; - } - } - }; - name = inferFromRegistry(instance.components || instance.parent.type.components) || inferFromRegistry(instance.appContext.components); - } - return name ? classify(name) : isRoot ? `App` : `Anonymous`; -} -function isClassComponent(value) { - return isFunction(value) && "__vccOpts" in value; -} -var computed2 = (getterOrOptions, debugOptions) => { - return computed(getterOrOptions, debugOptions, isInSSRComponentSetup); -}; -var warnRuntimeUsage = (method) => warn2(`${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`); -function defineProps() { - if (true) { - warnRuntimeUsage(`defineProps`); - } - return null; -} -function defineEmits() { - if (true) { - warnRuntimeUsage(`defineEmits`); - } - return null; -} -function defineExpose(exposed) { - if (true) { - warnRuntimeUsage(`defineExpose`); - } -} -function withDefaults(props, defaults) { - if (true) { - warnRuntimeUsage(`withDefaults`); - } - return null; -} -function useSlots() { - return getContext().slots; -} -function useAttrs() { - return getContext().attrs; -} -function getContext() { - const i = getCurrentInstance(); - if (!i) { - warn2(`useContext() called without active instance.`); - } - return i.setupContext || (i.setupContext = createSetupContext(i)); -} -function mergeDefaults(raw, defaults) { - const props = isArray(raw) ? raw.reduce((normalized, p2) => (normalized[p2] = {}, normalized), {}) : raw; - for (const key in defaults) { - const opt = props[key]; - if (opt) { - if (isArray(opt) || isFunction(opt)) { - props[key] = { type: opt, default: defaults[key] }; - } else { - opt.default = defaults[key]; - } - } else if (opt === null) { - props[key] = { default: defaults[key] }; - } else if (true) { - warn2(`props default key "${key}" has no corresponding declaration.`); - } - } - return props; -} -function createPropsRestProxy(props, excludedKeys) { - const ret = {}; - for (const key in props) { - if (!excludedKeys.includes(key)) { - Object.defineProperty(ret, key, { - enumerable: true, - get: () => props[key] - }); - } - } - return ret; -} -function withAsyncContext(getAwaitable) { - const ctx = getCurrentInstance(); - if (!ctx) { - warn2(`withAsyncContext called without active current instance. This is likely a bug.`); - } - let awaitable = getAwaitable(); - unsetCurrentInstance(); - if (isPromise(awaitable)) { - awaitable = awaitable.catch((e) => { - setCurrentInstance(ctx); - throw e; - }); - } - return [awaitable, () => setCurrentInstance(ctx)]; -} -function h(type, propsOrChildren, children) { - const l = arguments.length; - if (l === 2) { - if (isObject(propsOrChildren) && !isArray(propsOrChildren)) { - if (isVNode(propsOrChildren)) { - return createVNode(type, null, [propsOrChildren]); - } - return createVNode(type, propsOrChildren); - } else { - return createVNode(type, null, propsOrChildren); - } - } else { - if (l > 3) { - children = Array.prototype.slice.call(arguments, 2); - } else if (l === 3 && isVNode(children)) { - children = [children]; - } - return createVNode(type, propsOrChildren, children); - } -} -var ssrContextKey = Symbol(true ? `ssrContext` : ``); -var useSSRContext = () => { - { - const ctx = inject(ssrContextKey); - if (!ctx) { - warn2(`Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`); - } - return ctx; - } -}; -function isShallow2(value) { - return !!(value && value["__v_isShallow"]); -} -function initCustomFormatter() { - if (typeof window === "undefined") { - return; - } - const vueStyle = { style: "color:#3ba776" }; - const numberStyle = { style: "color:#0b1bc9" }; - const stringStyle = { style: "color:#b62e24" }; - const keywordStyle = { style: "color:#9d288c" }; - const formatter = { - header(obj) { - if (!isObject(obj)) { - return null; - } - if (obj.__isVue) { - return ["div", vueStyle, `VueInstance`]; - } else if (isRef(obj)) { - return [ - "div", - {}, - ["span", vueStyle, genRefFlag(obj)], - "<", - formatValue(obj.value), - `>` - ]; - } else if (isReactive(obj)) { - return [ - "div", - {}, - ["span", vueStyle, isShallow2(obj) ? "ShallowReactive" : "Reactive"], - "<", - formatValue(obj), - `>${isReadonly(obj) ? ` (readonly)` : ``}` - ]; - } else if (isReadonly(obj)) { - return [ - "div", - {}, - ["span", vueStyle, isShallow2(obj) ? "ShallowReadonly" : "Readonly"], - "<", - formatValue(obj), - ">" - ]; - } - return null; - }, - hasBody(obj) { - return obj && obj.__isVue; - }, - body(obj) { - if (obj && obj.__isVue) { - return [ - "div", - {}, - ...formatInstance(obj.$) - ]; - } - } - }; - function formatInstance(instance) { - const blocks = []; - if (instance.type.props && instance.props) { - blocks.push(createInstanceBlock("props", toRaw(instance.props))); - } - if (instance.setupState !== EMPTY_OBJ) { - blocks.push(createInstanceBlock("setup", instance.setupState)); - } - if (instance.data !== EMPTY_OBJ) { - blocks.push(createInstanceBlock("data", toRaw(instance.data))); - } - const computed3 = extractKeys(instance, "computed"); - if (computed3) { - blocks.push(createInstanceBlock("computed", computed3)); - } - const injected = extractKeys(instance, "inject"); - if (injected) { - blocks.push(createInstanceBlock("injected", injected)); - } - blocks.push([ - "div", - {}, - [ - "span", - { - style: keywordStyle.style + ";opacity:0.66" - }, - "$ (internal): " - ], - ["object", { object: instance }] - ]); - return blocks; - } - function createInstanceBlock(type, target) { - target = extend({}, target); - if (!Object.keys(target).length) { - return ["span", {}]; - } - return [ - "div", - { style: "line-height:1.25em;margin-bottom:0.6em" }, - [ - "div", - { - style: "color:#476582" - }, - type - ], - [ - "div", - { - style: "padding-left:1.25em" - }, - ...Object.keys(target).map((key) => { - return [ - "div", - {}, - ["span", keywordStyle, key + ": "], - formatValue(target[key], false) - ]; - }) - ] - ]; - } - function formatValue(v, asRaw = true) { - if (typeof v === "number") { - return ["span", numberStyle, v]; - } else if (typeof v === "string") { - return ["span", stringStyle, JSON.stringify(v)]; - } else if (typeof v === "boolean") { - return ["span", keywordStyle, v]; - } else if (isObject(v)) { - return ["object", { object: asRaw ? toRaw(v) : v }]; - } else { - return ["span", stringStyle, String(v)]; - } - } - function extractKeys(instance, type) { - const Comp = instance.type; - if (isFunction(Comp)) { - return; - } - const extracted = {}; - for (const key in instance.ctx) { - if (isKeyOfType(Comp, key, type)) { - extracted[key] = instance.ctx[key]; - } - } - return extracted; - } - function isKeyOfType(Comp, key, type) { - const opts = Comp[type]; - if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) { - return true; - } - if (Comp.extends && isKeyOfType(Comp.extends, key, type)) { - return true; - } - if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) { - return true; - } - } - function genRefFlag(v) { - if (isShallow2(v)) { - return `ShallowRef`; - } - if (v.effect) { - return `ComputedRef`; - } - return `Ref`; - } - if (window.devtoolsFormatters) { - window.devtoolsFormatters.push(formatter); - } else { - window.devtoolsFormatters = [formatter]; - } -} -function withMemo(memo, render2, cache, index) { - const cached = cache[index]; - if (cached && isMemoSame(cached, memo)) { - return cached; - } - const ret = render2(); - ret.memo = memo.slice(); - return cache[index] = ret; -} -function isMemoSame(cached, memo) { - const prev = cached.memo; - if (prev.length != memo.length) { - return false; - } - for (let i = 0; i < prev.length; i++) { - if (prev[i] !== memo[i]) { - return false; - } - } - if (isBlockTreeEnabled > 0 && currentBlock) { - currentBlock.push(cached); - } - return true; -} -var version = "3.2.33"; -var _ssrUtils = { - createComponentInstance, - setupComponent, - renderComponentRoot, - setCurrentRenderingInstance, - isVNode, - normalizeVNode -}; -var ssrUtils = _ssrUtils; -var resolveFilter = null; -var compatUtils = null; - -// node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var svgNS = "http://www.w3.org/2000/svg"; -var doc = typeof document !== "undefined" ? document : null; -var templateContainer = doc && doc.createElement("template"); -var nodeOps = { - insert: (child, parent, anchor) => { - parent.insertBefore(child, anchor || null); - }, - remove: (child) => { - const parent = child.parentNode; - if (parent) { - parent.removeChild(child); - } - }, - createElement: (tag, isSVG, is, props) => { - const el = isSVG ? doc.createElementNS(svgNS, tag) : doc.createElement(tag, is ? { is } : void 0); - if (tag === "select" && props && props.multiple != null) { - el.setAttribute("multiple", props.multiple); - } - return el; - }, - createText: (text) => doc.createTextNode(text), - createComment: (text) => doc.createComment(text), - setText: (node, text) => { - node.nodeValue = text; - }, - setElementText: (el, text) => { - el.textContent = text; - }, - parentNode: (node) => node.parentNode, - nextSibling: (node) => node.nextSibling, - querySelector: (selector) => doc.querySelector(selector), - setScopeId(el, id) { - el.setAttribute(id, ""); - }, - cloneNode(el) { - const cloned = el.cloneNode(true); - if (`_value` in el) { - cloned._value = el._value; - } - return cloned; - }, - insertStaticContent(content, parent, anchor, isSVG, start, end) { - const before = anchor ? anchor.previousSibling : parent.lastChild; - if (start && (start === end || start.nextSibling)) { - while (true) { - parent.insertBefore(start.cloneNode(true), anchor); - if (start === end || !(start = start.nextSibling)) - break; - } - } else { - templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content; - const template = templateContainer.content; - if (isSVG) { - const wrapper = template.firstChild; - while (wrapper.firstChild) { - template.appendChild(wrapper.firstChild); - } - template.removeChild(wrapper); - } - parent.insertBefore(template, anchor); - } - return [ - before ? before.nextSibling : parent.firstChild, - anchor ? anchor.previousSibling : parent.lastChild - ]; - } -}; -function patchClass(el, value, isSVG) { - const transitionClasses = el._vtc; - if (transitionClasses) { - value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); - } - if (value == null) { - el.removeAttribute("class"); - } else if (isSVG) { - el.setAttribute("class", value); - } else { - el.className = value; - } -} -function patchStyle(el, prev, next) { - const style = el.style; - const isCssString = isString(next); - if (next && !isCssString) { - for (const key in next) { - setStyle(style, key, next[key]); - } - if (prev && !isString(prev)) { - for (const key in prev) { - if (next[key] == null) { - setStyle(style, key, ""); - } - } - } - } else { - const currentDisplay = style.display; - if (isCssString) { - if (prev !== next) { - style.cssText = next; - } - } else if (prev) { - el.removeAttribute("style"); - } - if ("_vod" in el) { - style.display = currentDisplay; - } - } -} -var importantRE = /\s*!important$/; -function setStyle(style, name, val) { - if (isArray(val)) { - val.forEach((v) => setStyle(style, name, v)); - } else { - if (val == null) - val = ""; - if (name.startsWith("--")) { - style.setProperty(name, val); - } else { - const prefixed = autoPrefix(style, name); - if (importantRE.test(val)) { - style.setProperty(hyphenate(prefixed), val.replace(importantRE, ""), "important"); - } else { - style[prefixed] = val; - } - } - } -} -var prefixes = ["Webkit", "Moz", "ms"]; -var prefixCache = {}; -function autoPrefix(style, rawName) { - const cached = prefixCache[rawName]; - if (cached) { - return cached; - } - let name = camelize(rawName); - if (name !== "filter" && name in style) { - return prefixCache[rawName] = name; - } - name = capitalize(name); - for (let i = 0; i < prefixes.length; i++) { - const prefixed = prefixes[i] + name; - if (prefixed in style) { - return prefixCache[rawName] = prefixed; - } - } - return rawName; -} -var xlinkNS = "http://www.w3.org/1999/xlink"; -function patchAttr(el, key, value, isSVG, instance) { - if (isSVG && key.startsWith("xlink:")) { - if (value == null) { - el.removeAttributeNS(xlinkNS, key.slice(6, key.length)); - } else { - el.setAttributeNS(xlinkNS, key, value); - } - } else { - const isBoolean2 = isSpecialBooleanAttr(key); - if (value == null || isBoolean2 && !includeBooleanAttr(value)) { - el.removeAttribute(key); - } else { - el.setAttribute(key, isBoolean2 ? "" : value); - } - } -} -function patchDOMProp(el, key, value, prevChildren, parentComponent, parentSuspense, unmountChildren) { - if (key === "innerHTML" || key === "textContent") { - if (prevChildren) { - unmountChildren(prevChildren, parentComponent, parentSuspense); - } - el[key] = value == null ? "" : value; - return; - } - if (key === "value" && el.tagName !== "PROGRESS" && !el.tagName.includes("-")) { - el._value = value; - const newValue = value == null ? "" : value; - if (el.value !== newValue || el.tagName === "OPTION") { - el.value = newValue; - } - if (value == null) { - el.removeAttribute(key); - } - return; - } - let needRemove = false; - if (value === "" || value == null) { - const type = typeof el[key]; - if (type === "boolean") { - value = includeBooleanAttr(value); - } else if (value == null && type === "string") { - value = ""; - needRemove = true; - } else if (type === "number") { - value = 0; - needRemove = true; - } - } - try { - el[key] = value; - } catch (e) { - if (true) { - warn2(`Failed setting prop "${key}" on <${el.tagName.toLowerCase()}>: value ${value} is invalid.`, e); - } - } - needRemove && el.removeAttribute(key); -} -var [_getNow, skipTimestampCheck] = (() => { - let _getNow2 = Date.now; - let skipTimestampCheck2 = false; - if (typeof window !== "undefined") { - if (Date.now() > document.createEvent("Event").timeStamp) { - _getNow2 = () => performance.now(); - } - const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i); - skipTimestampCheck2 = !!(ffMatch && Number(ffMatch[1]) <= 53); - } - return [_getNow2, skipTimestampCheck2]; -})(); -var cachedNow = 0; -var p = Promise.resolve(); -var reset = () => { - cachedNow = 0; -}; -var getNow = () => cachedNow || (p.then(reset), cachedNow = _getNow()); -function addEventListener(el, event, handler, options) { - el.addEventListener(event, handler, options); -} -function removeEventListener(el, event, handler, options) { - el.removeEventListener(event, handler, options); -} -function patchEvent(el, rawName, prevValue, nextValue, instance = null) { - const invokers = el._vei || (el._vei = {}); - const existingInvoker = invokers[rawName]; - if (nextValue && existingInvoker) { - existingInvoker.value = nextValue; - } else { - const [name, options] = parseName(rawName); - if (nextValue) { - const invoker = invokers[rawName] = createInvoker(nextValue, instance); - addEventListener(el, name, invoker, options); - } else if (existingInvoker) { - removeEventListener(el, name, existingInvoker, options); - invokers[rawName] = void 0; - } - } -} -var optionsModifierRE = /(?:Once|Passive|Capture)$/; -function parseName(name) { - let options; - if (optionsModifierRE.test(name)) { - options = {}; - let m; - while (m = name.match(optionsModifierRE)) { - name = name.slice(0, name.length - m[0].length); - options[m[0].toLowerCase()] = true; - } - } - return [hyphenate(name.slice(2)), options]; -} -function createInvoker(initialValue, instance) { - const invoker = (e) => { - const timeStamp = e.timeStamp || _getNow(); - if (skipTimestampCheck || timeStamp >= invoker.attached - 1) { - callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5, [e]); - } - }; - invoker.value = initialValue; - invoker.attached = getNow(); - return invoker; -} -function patchStopImmediatePropagation(e, value) { - if (isArray(value)) { - const originalStop = e.stopImmediatePropagation; - e.stopImmediatePropagation = () => { - originalStop.call(e); - e._stopped = true; - }; - return value.map((fn) => (e2) => !e2._stopped && fn && fn(e2)); - } else { - return value; - } -} -var nativeOnRE = /^on[a-z]/; -var patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => { - if (key === "class") { - patchClass(el, nextValue, isSVG); - } else if (key === "style") { - patchStyle(el, prevValue, nextValue); - } else if (isOn(key)) { - if (!isModelListener(key)) { - patchEvent(el, key, prevValue, nextValue, parentComponent); - } - } else if (key[0] === "." ? (key = key.slice(1), true) : key[0] === "^" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) { - patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren); - } else { - if (key === "true-value") { - el._trueValue = nextValue; - } else if (key === "false-value") { - el._falseValue = nextValue; - } - patchAttr(el, key, nextValue, isSVG); - } -}; -function shouldSetAsProp(el, key, value, isSVG) { - if (isSVG) { - if (key === "innerHTML" || key === "textContent") { - return true; - } - if (key in el && nativeOnRE.test(key) && isFunction(value)) { - return true; - } - return false; - } - if (key === "spellcheck" || key === "draggable" || key === "translate") { - return false; - } - if (key === "form") { - return false; - } - if (key === "list" && el.tagName === "INPUT") { - return false; - } - if (key === "type" && el.tagName === "TEXTAREA") { - return false; - } - if (nativeOnRE.test(key) && isString(value)) { - return false; - } - return key in el; -} -function defineCustomElement(options, hydate) { - const Comp = defineComponent(options); - class VueCustomElement extends VueElement { - constructor(initialProps) { - super(Comp, initialProps, hydate); - } - } - VueCustomElement.def = Comp; - return VueCustomElement; -} -var defineSSRCustomElement = (options) => { - return defineCustomElement(options, hydrate); -}; -var BaseClass = typeof HTMLElement !== "undefined" ? HTMLElement : class { -}; -var VueElement = class extends BaseClass { - constructor(_def, _props = {}, hydrate2) { - super(); - this._def = _def; - this._props = _props; - this._instance = null; - this._connected = false; - this._resolved = false; - this._numberProps = null; - if (this.shadowRoot && hydrate2) { - hydrate2(this._createVNode(), this.shadowRoot); - } else { - if (this.shadowRoot) { - warn2(`Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \`defineSSRCustomElement\`.`); - } - this.attachShadow({ mode: "open" }); - } - } - connectedCallback() { - this._connected = true; - if (!this._instance) { - this._resolveDef(); - } - } - disconnectedCallback() { - this._connected = false; - nextTick(() => { - if (!this._connected) { - render(null, this.shadowRoot); - this._instance = null; - } - }); - } - _resolveDef() { - if (this._resolved) { - return; - } - this._resolved = true; - for (let i = 0; i < this.attributes.length; i++) { - this._setAttr(this.attributes[i].name); - } - new MutationObserver((mutations) => { - for (const m of mutations) { - this._setAttr(m.attributeName); - } - }).observe(this, { attributes: true }); - const resolve2 = (def2) => { - const { props, styles } = def2; - const hasOptions = !isArray(props); - const rawKeys = props ? hasOptions ? Object.keys(props) : props : []; - let numberProps; - if (hasOptions) { - for (const key in this._props) { - const opt = props[key]; - if (opt === Number || opt && opt.type === Number) { - this._props[key] = toNumber(this._props[key]); - (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[key] = true; - } - } - } - this._numberProps = numberProps; - for (const key of Object.keys(this)) { - if (key[0] !== "_") { - this._setProp(key, this[key], true, false); - } - } - for (const key of rawKeys.map(camelize)) { - Object.defineProperty(this, key, { - get() { - return this._getProp(key); - }, - set(val) { - this._setProp(key, val); - } - }); - } - this._applyStyles(styles); - this._update(); - }; - const asyncDef = this._def.__asyncLoader; - if (asyncDef) { - asyncDef().then(resolve2); - } else { - resolve2(this._def); - } - } - _setAttr(key) { - let value = this.getAttribute(key); - if (this._numberProps && this._numberProps[key]) { - value = toNumber(value); - } - this._setProp(camelize(key), value, false); - } - _getProp(key) { - return this._props[key]; - } - _setProp(key, val, shouldReflect = true, shouldUpdate = true) { - if (val !== this._props[key]) { - this._props[key] = val; - if (shouldUpdate && this._instance) { - this._update(); - } - if (shouldReflect) { - if (val === true) { - this.setAttribute(hyphenate(key), ""); - } else if (typeof val === "string" || typeof val === "number") { - this.setAttribute(hyphenate(key), val + ""); - } else if (!val) { - this.removeAttribute(hyphenate(key)); - } - } - } - } - _update() { - render(this._createVNode(), this.shadowRoot); - } - _createVNode() { - const vnode = createVNode(this._def, extend({}, this._props)); - if (!this._instance) { - vnode.ce = (instance) => { - this._instance = instance; - instance.isCE = true; - if (true) { - instance.ceReload = (newStyles) => { - if (this._styles) { - this._styles.forEach((s) => this.shadowRoot.removeChild(s)); - this._styles.length = 0; - } - this._applyStyles(newStyles); - if (!this._def.__asyncLoader) { - this._instance = null; - this._update(); - } - }; - } - instance.emit = (event, ...args) => { - this.dispatchEvent(new CustomEvent(event, { - detail: args - })); - }; - let parent = this; - while (parent = parent && (parent.parentNode || parent.host)) { - if (parent instanceof VueElement) { - instance.parent = parent._instance; - break; - } - } - }; - } - return vnode; - } - _applyStyles(styles) { - if (styles) { - styles.forEach((css) => { - const s = document.createElement("style"); - s.textContent = css; - this.shadowRoot.appendChild(s); - if (true) { - (this._styles || (this._styles = [])).push(s); - } - }); - } - } -}; -function useCssModule(name = "$style") { - { - const instance = getCurrentInstance(); - if (!instance) { - warn2(`useCssModule must be called inside setup()`); - return EMPTY_OBJ; - } - const modules = instance.type.__cssModules; - if (!modules) { - warn2(`Current instance does not have CSS modules injected.`); - return EMPTY_OBJ; - } - const mod = modules[name]; - if (!mod) { - warn2(`Current instance does not have CSS module named "${name}".`); - return EMPTY_OBJ; - } - return mod; - } -} -function useCssVars(getter) { - const instance = getCurrentInstance(); - if (!instance) { - warn2(`useCssVars is called without current active component instance.`); - return; - } - const setVars = () => setVarsOnVNode(instance.subTree, getter(instance.proxy)); - watchPostEffect(setVars); - onMounted(() => { - const ob = new MutationObserver(setVars); - ob.observe(instance.subTree.el.parentNode, { childList: true }); - onUnmounted(() => ob.disconnect()); - }); -} -function setVarsOnVNode(vnode, vars) { - if (vnode.shapeFlag & 128) { - const suspense = vnode.suspense; - vnode = suspense.activeBranch; - if (suspense.pendingBranch && !suspense.isHydrating) { - suspense.effects.push(() => { - setVarsOnVNode(suspense.activeBranch, vars); - }); - } - } - while (vnode.component) { - vnode = vnode.component.subTree; - } - if (vnode.shapeFlag & 1 && vnode.el) { - setVarsOnNode(vnode.el, vars); - } else if (vnode.type === Fragment) { - vnode.children.forEach((c) => setVarsOnVNode(c, vars)); - } else if (vnode.type === Static) { - let { el, anchor } = vnode; - while (el) { - setVarsOnNode(el, vars); - if (el === anchor) - break; - el = el.nextSibling; - } - } -} -function setVarsOnNode(el, vars) { - if (el.nodeType === 1) { - const style = el.style; - for (const key in vars) { - style.setProperty(`--${key}`, vars[key]); - } - } -} -var TRANSITION = "transition"; -var ANIMATION = "animation"; -var Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots); -Transition.displayName = "Transition"; -var DOMTransitionPropsValidators = { - name: String, - type: String, - css: { - type: Boolean, - default: true - }, - duration: [String, Number, Object], - enterFromClass: String, - enterActiveClass: String, - enterToClass: String, - appearFromClass: String, - appearActiveClass: String, - appearToClass: String, - leaveFromClass: String, - leaveActiveClass: String, - leaveToClass: String -}; -var TransitionPropsValidators = Transition.props = extend({}, BaseTransition.props, DOMTransitionPropsValidators); -var callHook2 = (hook, args = []) => { - if (isArray(hook)) { - hook.forEach((h2) => h2(...args)); - } else if (hook) { - hook(...args); - } -}; -var hasExplicitCallback = (hook) => { - return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false; -}; -function resolveTransitionProps(rawProps) { - const baseProps = {}; - for (const key in rawProps) { - if (!(key in DOMTransitionPropsValidators)) { - baseProps[key] = rawProps[key]; - } - } - if (rawProps.css === false) { - return baseProps; - } - const { name = "v", type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps; - const durations = normalizeDuration(duration); - const enterDuration = durations && durations[0]; - const leaveDuration = durations && durations[1]; - const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps; - const finishEnter = (el, isAppear, done) => { - removeTransitionClass(el, isAppear ? appearToClass : enterToClass); - removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass); - done && done(); - }; - const finishLeave = (el, done) => { - removeTransitionClass(el, leaveToClass); - removeTransitionClass(el, leaveActiveClass); - done && done(); - }; - const makeEnterHook = (isAppear) => { - return (el, done) => { - const hook = isAppear ? onAppear : onEnter; - const resolve2 = () => finishEnter(el, isAppear, done); - callHook2(hook, [el, resolve2]); - nextFrame(() => { - removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass); - addTransitionClass(el, isAppear ? appearToClass : enterToClass); - if (!hasExplicitCallback(hook)) { - whenTransitionEnds(el, type, enterDuration, resolve2); - } - }); - }; - }; - return extend(baseProps, { - onBeforeEnter(el) { - callHook2(onBeforeEnter, [el]); - addTransitionClass(el, enterFromClass); - addTransitionClass(el, enterActiveClass); - }, - onBeforeAppear(el) { - callHook2(onBeforeAppear, [el]); - addTransitionClass(el, appearFromClass); - addTransitionClass(el, appearActiveClass); - }, - onEnter: makeEnterHook(false), - onAppear: makeEnterHook(true), - onLeave(el, done) { - const resolve2 = () => finishLeave(el, done); - addTransitionClass(el, leaveFromClass); - forceReflow(); - addTransitionClass(el, leaveActiveClass); - nextFrame(() => { - removeTransitionClass(el, leaveFromClass); - addTransitionClass(el, leaveToClass); - if (!hasExplicitCallback(onLeave)) { - whenTransitionEnds(el, type, leaveDuration, resolve2); - } - }); - callHook2(onLeave, [el, resolve2]); - }, - onEnterCancelled(el) { - finishEnter(el, false); - callHook2(onEnterCancelled, [el]); - }, - onAppearCancelled(el) { - finishEnter(el, true); - callHook2(onAppearCancelled, [el]); - }, - onLeaveCancelled(el) { - finishLeave(el); - callHook2(onLeaveCancelled, [el]); - } - }); -} -function normalizeDuration(duration) { - if (duration == null) { - return null; - } else if (isObject(duration)) { - return [NumberOf(duration.enter), NumberOf(duration.leave)]; - } else { - const n = NumberOf(duration); - return [n, n]; - } -} -function NumberOf(val) { - const res = toNumber(val); - if (true) - validateDuration(res); - return res; -} -function validateDuration(val) { - if (typeof val !== "number") { - warn2(`<transition> explicit duration is not a valid number - got ${JSON.stringify(val)}.`); - } else if (isNaN(val)) { - warn2(`<transition> explicit duration is NaN - the duration expression might be incorrect.`); - } -} -function addTransitionClass(el, cls) { - cls.split(/\s+/).forEach((c) => c && el.classList.add(c)); - (el._vtc || (el._vtc = /* @__PURE__ */ new Set())).add(cls); -} -function removeTransitionClass(el, cls) { - cls.split(/\s+/).forEach((c) => c && el.classList.remove(c)); - const { _vtc } = el; - if (_vtc) { - _vtc.delete(cls); - if (!_vtc.size) { - el._vtc = void 0; - } - } -} -function nextFrame(cb) { - requestAnimationFrame(() => { - requestAnimationFrame(cb); - }); -} -var endId = 0; -function whenTransitionEnds(el, expectedType, explicitTimeout, resolve2) { - const id = el._endId = ++endId; - const resolveIfNotStale = () => { - if (id === el._endId) { - resolve2(); - } - }; - if (explicitTimeout) { - return setTimeout(resolveIfNotStale, explicitTimeout); - } - const { type, timeout, propCount } = getTransitionInfo(el, expectedType); - if (!type) { - return resolve2(); - } - const endEvent = type + "end"; - let ended = 0; - const end = () => { - el.removeEventListener(endEvent, onEnd); - resolveIfNotStale(); - }; - const onEnd = (e) => { - if (e.target === el && ++ended >= propCount) { - end(); - } - }; - setTimeout(() => { - if (ended < propCount) { - end(); - } - }, timeout + 1); - el.addEventListener(endEvent, onEnd); -} -function getTransitionInfo(el, expectedType) { - const styles = window.getComputedStyle(el); - const getStyleProperties = (key) => (styles[key] || "").split(", "); - const transitionDelays = getStyleProperties(TRANSITION + "Delay"); - const transitionDurations = getStyleProperties(TRANSITION + "Duration"); - const transitionTimeout = getTimeout(transitionDelays, transitionDurations); - const animationDelays = getStyleProperties(ANIMATION + "Delay"); - const animationDurations = getStyleProperties(ANIMATION + "Duration"); - const animationTimeout = getTimeout(animationDelays, animationDurations); - let type = null; - let timeout = 0; - let propCount = 0; - if (expectedType === TRANSITION) { - if (transitionTimeout > 0) { - type = TRANSITION; - timeout = transitionTimeout; - propCount = transitionDurations.length; - } - } else if (expectedType === ANIMATION) { - if (animationTimeout > 0) { - type = ANIMATION; - timeout = animationTimeout; - propCount = animationDurations.length; - } - } else { - timeout = Math.max(transitionTimeout, animationTimeout); - type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null; - propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0; - } - const hasTransform = type === TRANSITION && /\b(transform|all)(,|$)/.test(styles[TRANSITION + "Property"]); - return { - type, - timeout, - propCount, - hasTransform - }; -} -function getTimeout(delays, durations) { - while (delays.length < durations.length) { - delays = delays.concat(delays); - } - return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i]))); -} -function toMs(s) { - return Number(s.slice(0, -1).replace(",", ".")) * 1e3; -} -function forceReflow() { - return document.body.offsetHeight; -} -var positionMap = /* @__PURE__ */ new WeakMap(); -var newPositionMap = /* @__PURE__ */ new WeakMap(); -var TransitionGroupImpl = { - name: "TransitionGroup", - props: extend({}, TransitionPropsValidators, { - tag: String, - moveClass: String - }), - setup(props, { slots }) { - const instance = getCurrentInstance(); - const state = useTransitionState(); - let prevChildren; - let children; - onUpdated(() => { - if (!prevChildren.length) { - return; - } - const moveClass = props.moveClass || `${props.name || "v"}-move`; - if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) { - return; - } - prevChildren.forEach(callPendingCbs); - prevChildren.forEach(recordPosition); - const movedChildren = prevChildren.filter(applyTranslation); - forceReflow(); - movedChildren.forEach((c) => { - const el = c.el; - const style = el.style; - addTransitionClass(el, moveClass); - style.transform = style.webkitTransform = style.transitionDuration = ""; - const cb = el._moveCb = (e) => { - if (e && e.target !== el) { - return; - } - if (!e || /transform$/.test(e.propertyName)) { - el.removeEventListener("transitionend", cb); - el._moveCb = null; - removeTransitionClass(el, moveClass); - } - }; - el.addEventListener("transitionend", cb); - }); - }); - return () => { - const rawProps = toRaw(props); - const cssTransitionProps = resolveTransitionProps(rawProps); - let tag = rawProps.tag || Fragment; - prevChildren = children; - children = slots.default ? getTransitionRawChildren(slots.default()) : []; - for (let i = 0; i < children.length; i++) { - const child = children[i]; - if (child.key != null) { - setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance)); - } else if (true) { - warn2(`<TransitionGroup> children must be keyed.`); - } - } - if (prevChildren) { - for (let i = 0; i < prevChildren.length; i++) { - const child = prevChildren[i]; - setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance)); - positionMap.set(child, child.el.getBoundingClientRect()); - } - } - return createVNode(tag, null, children); - }; - } -}; -var TransitionGroup = TransitionGroupImpl; -function callPendingCbs(c) { - const el = c.el; - if (el._moveCb) { - el._moveCb(); - } - if (el._enterCb) { - el._enterCb(); - } -} -function recordPosition(c) { - newPositionMap.set(c, c.el.getBoundingClientRect()); -} -function applyTranslation(c) { - const oldPos = positionMap.get(c); - const newPos = newPositionMap.get(c); - const dx = oldPos.left - newPos.left; - const dy = oldPos.top - newPos.top; - if (dx || dy) { - const s = c.el.style; - s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`; - s.transitionDuration = "0s"; - return c; - } -} -function hasCSSTransform(el, root, moveClass) { - const clone = el.cloneNode(); - if (el._vtc) { - el._vtc.forEach((cls) => { - cls.split(/\s+/).forEach((c) => c && clone.classList.remove(c)); - }); - } - moveClass.split(/\s+/).forEach((c) => c && clone.classList.add(c)); - clone.style.display = "none"; - const container = root.nodeType === 1 ? root : root.parentNode; - container.appendChild(clone); - const { hasTransform } = getTransitionInfo(clone); - container.removeChild(clone); - return hasTransform; -} -var getModelAssigner = (vnode) => { - const fn = vnode.props["onUpdate:modelValue"]; - return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn; -}; -function onCompositionStart(e) { - e.target.composing = true; -} -function onCompositionEnd(e) { - const target = e.target; - if (target.composing) { - target.composing = false; - trigger2(target, "input"); - } -} -function trigger2(el, type) { - const e = document.createEvent("HTMLEvents"); - e.initEvent(type, true, true); - el.dispatchEvent(e); -} -var vModelText = { - created(el, { modifiers: { lazy, trim, number } }, vnode) { - el._assign = getModelAssigner(vnode); - const castToNumber = number || vnode.props && vnode.props.type === "number"; - addEventListener(el, lazy ? "change" : "input", (e) => { - if (e.target.composing) - return; - let domValue = el.value; - if (trim) { - domValue = domValue.trim(); - } else if (castToNumber) { - domValue = toNumber(domValue); - } - el._assign(domValue); - }); - if (trim) { - addEventListener(el, "change", () => { - el.value = el.value.trim(); - }); - } - if (!lazy) { - addEventListener(el, "compositionstart", onCompositionStart); - addEventListener(el, "compositionend", onCompositionEnd); - addEventListener(el, "change", onCompositionEnd); - } - }, - mounted(el, { value }) { - el.value = value == null ? "" : value; - }, - beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) { - el._assign = getModelAssigner(vnode); - if (el.composing) - return; - if (document.activeElement === el) { - if (lazy) { - return; - } - if (trim && el.value.trim() === value) { - return; - } - if ((number || el.type === "number") && toNumber(el.value) === value) { - return; - } - } - const newValue = value == null ? "" : value; - if (el.value !== newValue) { - el.value = newValue; - } - } -}; -var vModelCheckbox = { - deep: true, - created(el, _, vnode) { - el._assign = getModelAssigner(vnode); - addEventListener(el, "change", () => { - const modelValue = el._modelValue; - const elementValue = getValue(el); - const checked = el.checked; - const assign = el._assign; - if (isArray(modelValue)) { - const index = looseIndexOf(modelValue, elementValue); - const found = index !== -1; - if (checked && !found) { - assign(modelValue.concat(elementValue)); - } else if (!checked && found) { - const filtered = [...modelValue]; - filtered.splice(index, 1); - assign(filtered); - } - } else if (isSet(modelValue)) { - const cloned = new Set(modelValue); - if (checked) { - cloned.add(elementValue); - } else { - cloned.delete(elementValue); - } - assign(cloned); - } else { - assign(getCheckboxValue(el, checked)); - } - }); - }, - mounted: setChecked, - beforeUpdate(el, binding, vnode) { - el._assign = getModelAssigner(vnode); - setChecked(el, binding, vnode); - } -}; -function setChecked(el, { value, oldValue }, vnode) { - el._modelValue = value; - if (isArray(value)) { - el.checked = looseIndexOf(value, vnode.props.value) > -1; - } else if (isSet(value)) { - el.checked = value.has(vnode.props.value); - } else if (value !== oldValue) { - el.checked = looseEqual(value, getCheckboxValue(el, true)); - } -} -var vModelRadio = { - created(el, { value }, vnode) { - el.checked = looseEqual(value, vnode.props.value); - el._assign = getModelAssigner(vnode); - addEventListener(el, "change", () => { - el._assign(getValue(el)); - }); - }, - beforeUpdate(el, { value, oldValue }, vnode) { - el._assign = getModelAssigner(vnode); - if (value !== oldValue) { - el.checked = looseEqual(value, vnode.props.value); - } - } -}; -var vModelSelect = { - deep: true, - created(el, { value, modifiers: { number } }, vnode) { - const isSetModel = isSet(value); - addEventListener(el, "change", () => { - const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map((o) => number ? toNumber(getValue(o)) : getValue(o)); - el._assign(el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]); - }); - el._assign = getModelAssigner(vnode); - }, - mounted(el, { value }) { - setSelected(el, value); - }, - beforeUpdate(el, _binding, vnode) { - el._assign = getModelAssigner(vnode); - }, - updated(el, { value }) { - setSelected(el, value); - } -}; -function setSelected(el, value) { - const isMultiple = el.multiple; - if (isMultiple && !isArray(value) && !isSet(value)) { - warn2(`<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`); - return; - } - for (let i = 0, l = el.options.length; i < l; i++) { - const option = el.options[i]; - const optionValue = getValue(option); - if (isMultiple) { - if (isArray(value)) { - option.selected = looseIndexOf(value, optionValue) > -1; - } else { - option.selected = value.has(optionValue); - } - } else { - if (looseEqual(getValue(option), value)) { - if (el.selectedIndex !== i) - el.selectedIndex = i; - return; - } - } - } - if (!isMultiple && el.selectedIndex !== -1) { - el.selectedIndex = -1; - } -} -function getValue(el) { - return "_value" in el ? el._value : el.value; -} -function getCheckboxValue(el, checked) { - const key = checked ? "_trueValue" : "_falseValue"; - return key in el ? el[key] : checked; -} -var vModelDynamic = { - created(el, binding, vnode) { - callModelHook(el, binding, vnode, null, "created"); - }, - mounted(el, binding, vnode) { - callModelHook(el, binding, vnode, null, "mounted"); - }, - beforeUpdate(el, binding, vnode, prevVNode) { - callModelHook(el, binding, vnode, prevVNode, "beforeUpdate"); - }, - updated(el, binding, vnode, prevVNode) { - callModelHook(el, binding, vnode, prevVNode, "updated"); - } -}; -function callModelHook(el, binding, vnode, prevVNode, hook) { - let modelToUse; - switch (el.tagName) { - case "SELECT": - modelToUse = vModelSelect; - break; - case "TEXTAREA": - modelToUse = vModelText; - break; - default: - switch (vnode.props && vnode.props.type) { - case "checkbox": - modelToUse = vModelCheckbox; - break; - case "radio": - modelToUse = vModelRadio; - break; - default: - modelToUse = vModelText; - } - } - const fn = modelToUse[hook]; - fn && fn(el, binding, vnode, prevVNode); -} -function initVModelForSSR() { - vModelText.getSSRProps = ({ value }) => ({ value }); - vModelRadio.getSSRProps = ({ value }, vnode) => { - if (vnode.props && looseEqual(vnode.props.value, value)) { - return { checked: true }; - } - }; - vModelCheckbox.getSSRProps = ({ value }, vnode) => { - if (isArray(value)) { - if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) { - return { checked: true }; - } - } else if (isSet(value)) { - if (vnode.props && value.has(vnode.props.value)) { - return { checked: true }; - } - } else if (value) { - return { checked: true }; - } - }; -} -var systemModifiers = ["ctrl", "shift", "alt", "meta"]; -var modifierGuards = { - 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, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m)) -}; -var withModifiers = (fn, modifiers) => { - return (event, ...args) => { - for (let i = 0; i < modifiers.length; i++) { - const guard = modifierGuards[modifiers[i]]; - if (guard && guard(event, modifiers)) - return; - } - return fn(event, ...args); - }; -}; -var keyNames = { - esc: "escape", - space: " ", - up: "arrow-up", - left: "arrow-left", - right: "arrow-right", - down: "arrow-down", - delete: "backspace" -}; -var withKeys = (fn, modifiers) => { - return (event) => { - if (!("key" in event)) { - return; - } - const eventKey = hyphenate(event.key); - if (modifiers.some((k) => k === eventKey || keyNames[k] === eventKey)) { - return fn(event); - } - }; -}; -var vShow = { - beforeMount(el, { value }, { transition }) { - el._vod = el.style.display === "none" ? "" : el.style.display; - if (transition && value) { - transition.beforeEnter(el); - } else { - setDisplay(el, value); - } - }, - mounted(el, { value }, { transition }) { - if (transition && value) { - transition.enter(el); - } - }, - updated(el, { value, oldValue }, { transition }) { - if (!value === !oldValue) - return; - if (transition) { - if (value) { - transition.beforeEnter(el); - setDisplay(el, true); - transition.enter(el); - } else { - transition.leave(el, () => { - setDisplay(el, false); - }); - } - } else { - setDisplay(el, value); - } - }, - beforeUnmount(el, { value }) { - setDisplay(el, value); - } -}; -function setDisplay(el, value) { - el.style.display = value ? el._vod : "none"; -} -function initVShowForSSR() { - vShow.getSSRProps = ({ value }) => { - if (!value) { - return { style: { display: "none" } }; - } - }; -} -var rendererOptions = extend({ patchProp }, nodeOps); -var renderer; -var enabledHydration = false; -function ensureRenderer() { - return renderer || (renderer = createRenderer(rendererOptions)); -} -function ensureHydrationRenderer() { - renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions); - enabledHydration = true; - return renderer; -} -var render = (...args) => { - ensureRenderer().render(...args); -}; -var hydrate = (...args) => { - ensureHydrationRenderer().hydrate(...args); -}; -var createApp = (...args) => { - const app = ensureRenderer().createApp(...args); - if (true) { - injectNativeTagCheck(app); - injectCompilerOptionsCheck(app); - } - const { mount } = app; - app.mount = (containerOrSelector) => { - const container = normalizeContainer(containerOrSelector); - if (!container) - return; - const component = app._component; - if (!isFunction(component) && !component.render && !component.template) { - component.template = container.innerHTML; - } - container.innerHTML = ""; - const proxy = mount(container, false, container instanceof SVGElement); - if (container instanceof Element) { - container.removeAttribute("v-cloak"); - container.setAttribute("data-v-app", ""); - } - return proxy; - }; - return app; -}; -var createSSRApp = (...args) => { - const app = ensureHydrationRenderer().createApp(...args); - if (true) { - injectNativeTagCheck(app); - injectCompilerOptionsCheck(app); - } - const { mount } = app; - app.mount = (containerOrSelector) => { - const container = normalizeContainer(containerOrSelector); - if (container) { - return mount(container, true, container instanceof SVGElement); - } - }; - return app; -}; -function injectNativeTagCheck(app) { - Object.defineProperty(app.config, "isNativeTag", { - value: (tag) => isHTMLTag(tag) || isSVGTag(tag), - writable: false - }); -} -function injectCompilerOptionsCheck(app) { - if (isRuntimeOnly()) { - const isCustomElement = app.config.isCustomElement; - Object.defineProperty(app.config, "isCustomElement", { - get() { - return isCustomElement; - }, - set() { - warn2(`The \`isCustomElement\` config option is deprecated. Use \`compilerOptions.isCustomElement\` instead.`); - } - }); - const compilerOptions = app.config.compilerOptions; - const msg = `The \`compilerOptions\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka "full build"). Since you are using the runtime-only build, \`compilerOptions\` must be passed to \`@vue/compiler-dom\` in the build setup instead. -- For vue-loader: pass it via vue-loader's \`compilerOptions\` loader option. -- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader -- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`; - Object.defineProperty(app.config, "compilerOptions", { - get() { - warn2(msg); - return compilerOptions; - }, - set() { - warn2(msg); - } - }); - } -} -function normalizeContainer(container) { - if (isString(container)) { - const res = document.querySelector(container); - if (!res) { - warn2(`Failed to mount app: mount target selector "${container}" returned null.`); - } - return res; - } - if (window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === "closed") { - warn2(`mounting on a ShadowRoot with \`{mode: "closed"}\` may lead to unpredictable bugs`); - } - return container; -} -var ssrDirectiveInitialized = false; -var initDirectivesForSSR = () => { - if (!ssrDirectiveInitialized) { - ssrDirectiveInitialized = true; - initVModelForSSR(); - initVShowForSSR(); - } -}; - -export { - EffectScope, - effectScope, - getCurrentScope, - onScopeDispose, - ReactiveEffect, - effect, - stop, - reactive, - shallowReactive, - readonly, - shallowReadonly, - isReactive, - isReadonly, - isShallow, - isProxy, - toRaw, - markRaw, - isRef, - ref, - shallowRef, - triggerRef, - unref, - proxyRefs, - customRef, - toRefs, - toRef, - warn2 as warn, - callWithErrorHandling, - callWithAsyncErrorHandling, - handleError, - nextTick, - queuePostFlushCb, - devtools, - setDevtoolsHook, - pushScopeId, - popScopeId, - withScopeId, - withCtx, - Suspense, - provide, - inject, - watchEffect, - watchPostEffect, - watchSyncEffect, - watch, - useTransitionState, - BaseTransition, - resolveTransitionHooks, - setTransitionHooks, - getTransitionRawChildren, - defineComponent, - defineAsyncComponent, - KeepAlive, - onActivated, - onDeactivated, - onBeforeMount, - onMounted, - onBeforeUpdate, - onUpdated, - onBeforeUnmount, - onUnmounted, - onServerPrefetch, - onRenderTriggered, - onRenderTracked, - onErrorCaptured, - withDirectives, - createRenderer, - createHydrationRenderer, - Teleport, - resolveComponent, - resolveDynamicComponent, - resolveDirective, - Fragment, - Text, - Comment, - Static, - openBlock, - setBlockTracking, - createElementBlock, - createBlock, - isVNode, - transformVNodeArgs, - createBaseVNode, - createVNode, - guardReactiveProps, - cloneVNode, - createTextVNode, - createStaticVNode, - createCommentVNode, - mergeProps, - renderList, - createSlots, - renderSlot, - toHandlers, - getCurrentInstance, - registerRuntimeCompiler, - isRuntimeOnly, - computed2 as computed, - defineProps, - defineEmits, - defineExpose, - withDefaults, - useSlots, - useAttrs, - mergeDefaults, - createPropsRestProxy, - withAsyncContext, - h, - ssrContextKey, - useSSRContext, - initCustomFormatter, - withMemo, - isMemoSame, - version, - ssrUtils, - resolveFilter, - compatUtils, - defineCustomElement, - defineSSRCustomElement, - VueElement, - useCssModule, - useCssVars, - Transition, - TransitionGroup, - vModelText, - vModelCheckbox, - vModelRadio, - vModelSelect, - vModelDynamic, - withModifiers, - withKeys, - vShow, - render, - hydrate, - createApp, - createSSRApp, - initDirectivesForSSR -}; -//# sourceMappingURL=chunk-J5QUGD5J.js.map diff --git a/docs/.vuepress/.cache/deps/chunk-J5QUGD5J.js.map b/docs/.vuepress/.cache/deps/chunk-J5QUGD5J.js.map deleted file mode 100644 index 2ce4613..0000000 --- a/docs/.vuepress/.cache/deps/chunk-J5QUGD5J.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js", "../../../../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js", "../../../../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js"], - "sourcesContent": ["import { extend, isArray, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\r\n console.warn(`[Vue warn] ${msg}`, ...args);\r\n}\n\nlet activeEffectScope;\r\nclass EffectScope {\r\n constructor(detached = false) {\r\n /**\r\n * @internal\r\n */\r\n this.active = true;\r\n /**\r\n * @internal\r\n */\r\n this.effects = [];\r\n /**\r\n * @internal\r\n */\r\n this.cleanups = [];\r\n if (!detached && activeEffectScope) {\r\n this.parent = activeEffectScope;\r\n this.index =\r\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\r\n }\r\n }\r\n run(fn) {\r\n if (this.active) {\r\n const currentEffectScope = activeEffectScope;\r\n try {\r\n activeEffectScope = this;\r\n return fn();\r\n }\r\n finally {\r\n activeEffectScope = currentEffectScope;\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`cannot run an inactive effect scope.`);\r\n }\r\n }\r\n /**\r\n * This should only be called on non-detached scopes\r\n * @internal\r\n */\r\n on() {\r\n activeEffectScope = this;\r\n }\r\n /**\r\n * This should only be called on non-detached scopes\r\n * @internal\r\n */\r\n off() {\r\n activeEffectScope = this.parent;\r\n }\r\n stop(fromParent) {\r\n if (this.active) {\r\n let i, l;\r\n for (i = 0, l = this.effects.length; i < l; i++) {\r\n this.effects[i].stop();\r\n }\r\n for (i = 0, l = this.cleanups.length; i < l; i++) {\r\n this.cleanups[i]();\r\n }\r\n if (this.scopes) {\r\n for (i = 0, l = this.scopes.length; i < l; i++) {\r\n this.scopes[i].stop(true);\r\n }\r\n }\r\n // nested scope, dereference from parent to avoid memory leaks\r\n if (this.parent && !fromParent) {\r\n // optimized O(1) removal\r\n const last = this.parent.scopes.pop();\r\n if (last && last !== this) {\r\n this.parent.scopes[this.index] = last;\r\n last.index = this.index;\r\n }\r\n }\r\n this.active = false;\r\n }\r\n }\r\n}\r\nfunction effectScope(detached) {\r\n return new EffectScope(detached);\r\n}\r\nfunction recordEffectScope(effect, scope = activeEffectScope) {\r\n if (scope && scope.active) {\r\n scope.effects.push(effect);\r\n }\r\n}\r\nfunction getCurrentScope() {\r\n return activeEffectScope;\r\n}\r\nfunction onScopeDispose(fn) {\r\n if (activeEffectScope) {\r\n activeEffectScope.cleanups.push(fn);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`onScopeDispose() is called when there is no active effect scope` +\r\n ` to be associated with.`);\r\n }\r\n}\n\nconst createDep = (effects) => {\r\n const dep = new Set(effects);\r\n dep.w = 0;\r\n dep.n = 0;\r\n return dep;\r\n};\r\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\r\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\r\nconst initDepMarkers = ({ deps }) => {\r\n if (deps.length) {\r\n for (let i = 0; i < deps.length; i++) {\r\n deps[i].w |= trackOpBit; // set was tracked\r\n }\r\n }\r\n};\r\nconst finalizeDepMarkers = (effect) => {\r\n const { deps } = effect;\r\n if (deps.length) {\r\n let ptr = 0;\r\n for (let i = 0; i < deps.length; i++) {\r\n const dep = deps[i];\r\n if (wasTracked(dep) && !newTracked(dep)) {\r\n dep.delete(effect);\r\n }\r\n else {\r\n deps[ptr++] = dep;\r\n }\r\n // clear bits\r\n dep.w &= ~trackOpBit;\r\n dep.n &= ~trackOpBit;\r\n }\r\n deps.length = ptr;\r\n }\r\n};\n\nconst targetMap = new WeakMap();\r\n// The number of effects currently being tracked recursively.\r\nlet effectTrackDepth = 0;\r\nlet trackOpBit = 1;\r\n/**\r\n * The bitwise track markers support at most 30 levels of recursion.\r\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\r\n * When recursion depth is greater, fall back to using a full cleanup.\r\n */\r\nconst maxMarkerBits = 30;\r\nlet activeEffect;\r\nconst ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');\r\nconst MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');\r\nclass ReactiveEffect {\r\n constructor(fn, scheduler = null, scope) {\r\n this.fn = fn;\r\n this.scheduler = scheduler;\r\n this.active = true;\r\n this.deps = [];\r\n this.parent = undefined;\r\n recordEffectScope(this, scope);\r\n }\r\n run() {\r\n if (!this.active) {\r\n return this.fn();\r\n }\r\n let parent = activeEffect;\r\n let lastShouldTrack = shouldTrack;\r\n while (parent) {\r\n if (parent === this) {\r\n return;\r\n }\r\n parent = parent.parent;\r\n }\r\n try {\r\n this.parent = activeEffect;\r\n activeEffect = this;\r\n shouldTrack = true;\r\n trackOpBit = 1 << ++effectTrackDepth;\r\n if (effectTrackDepth <= maxMarkerBits) {\r\n initDepMarkers(this);\r\n }\r\n else {\r\n cleanupEffect(this);\r\n }\r\n return this.fn();\r\n }\r\n finally {\r\n if (effectTrackDepth <= maxMarkerBits) {\r\n finalizeDepMarkers(this);\r\n }\r\n trackOpBit = 1 << --effectTrackDepth;\r\n activeEffect = this.parent;\r\n shouldTrack = lastShouldTrack;\r\n this.parent = undefined;\r\n if (this.deferStop) {\r\n this.stop();\r\n }\r\n }\r\n }\r\n stop() {\r\n // stopped while running itself - defer the cleanup\r\n if (activeEffect === this) {\r\n this.deferStop = true;\r\n }\r\n else if (this.active) {\r\n cleanupEffect(this);\r\n if (this.onStop) {\r\n this.onStop();\r\n }\r\n this.active = false;\r\n }\r\n }\r\n}\r\nfunction cleanupEffect(effect) {\r\n const { deps } = effect;\r\n if (deps.length) {\r\n for (let i = 0; i < deps.length; i++) {\r\n deps[i].delete(effect);\r\n }\r\n deps.length = 0;\r\n }\r\n}\r\nfunction effect(fn, options) {\r\n if (fn.effect) {\r\n fn = fn.effect.fn;\r\n }\r\n const _effect = new ReactiveEffect(fn);\r\n if (options) {\r\n extend(_effect, options);\r\n if (options.scope)\r\n recordEffectScope(_effect, options.scope);\r\n }\r\n if (!options || !options.lazy) {\r\n _effect.run();\r\n }\r\n const runner = _effect.run.bind(_effect);\r\n runner.effect = _effect;\r\n return runner;\r\n}\r\nfunction stop(runner) {\r\n runner.effect.stop();\r\n}\r\nlet shouldTrack = true;\r\nconst trackStack = [];\r\nfunction pauseTracking() {\r\n trackStack.push(shouldTrack);\r\n shouldTrack = false;\r\n}\r\nfunction enableTracking() {\r\n trackStack.push(shouldTrack);\r\n shouldTrack = true;\r\n}\r\nfunction resetTracking() {\r\n const last = trackStack.pop();\r\n shouldTrack = last === undefined ? true : last;\r\n}\r\nfunction track(target, type, key) {\r\n if (shouldTrack && activeEffect) {\r\n let depsMap = targetMap.get(target);\r\n if (!depsMap) {\r\n targetMap.set(target, (depsMap = new Map()));\r\n }\r\n let dep = depsMap.get(key);\r\n if (!dep) {\r\n depsMap.set(key, (dep = createDep()));\r\n }\r\n const eventInfo = (process.env.NODE_ENV !== 'production')\r\n ? { effect: activeEffect, target, type, key }\r\n : undefined;\r\n trackEffects(dep, eventInfo);\r\n }\r\n}\r\nfunction trackEffects(dep, debuggerEventExtraInfo) {\r\n let shouldTrack = false;\r\n if (effectTrackDepth <= maxMarkerBits) {\r\n if (!newTracked(dep)) {\r\n dep.n |= trackOpBit; // set newly tracked\r\n shouldTrack = !wasTracked(dep);\r\n }\r\n }\r\n else {\r\n // Full cleanup mode.\r\n shouldTrack = !dep.has(activeEffect);\r\n }\r\n if (shouldTrack) {\r\n dep.add(activeEffect);\r\n activeEffect.deps.push(dep);\r\n if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {\r\n activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\r\n }\r\n }\r\n}\r\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\r\n const depsMap = targetMap.get(target);\r\n if (!depsMap) {\r\n // never been tracked\r\n return;\r\n }\r\n let deps = [];\r\n if (type === \"clear\" /* CLEAR */) {\r\n // collection being cleared\r\n // trigger all effects for target\r\n deps = [...depsMap.values()];\r\n }\r\n else if (key === 'length' && isArray(target)) {\r\n depsMap.forEach((dep, key) => {\r\n if (key === 'length' || key >= newValue) {\r\n deps.push(dep);\r\n }\r\n });\r\n }\r\n else {\r\n // schedule runs for SET | ADD | DELETE\r\n if (key !== void 0) {\r\n deps.push(depsMap.get(key));\r\n }\r\n // also run for iteration key on ADD | DELETE | Map.SET\r\n switch (type) {\r\n case \"add\" /* ADD */:\r\n if (!isArray(target)) {\r\n deps.push(depsMap.get(ITERATE_KEY));\r\n if (isMap(target)) {\r\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\r\n }\r\n }\r\n else if (isIntegerKey(key)) {\r\n // new index added to array -> length changes\r\n deps.push(depsMap.get('length'));\r\n }\r\n break;\r\n case \"delete\" /* DELETE */:\r\n if (!isArray(target)) {\r\n deps.push(depsMap.get(ITERATE_KEY));\r\n if (isMap(target)) {\r\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\r\n }\r\n }\r\n break;\r\n case \"set\" /* SET */:\r\n if (isMap(target)) {\r\n deps.push(depsMap.get(ITERATE_KEY));\r\n }\r\n break;\r\n }\r\n }\r\n const eventInfo = (process.env.NODE_ENV !== 'production')\r\n ? { target, type, key, newValue, oldValue, oldTarget }\r\n : undefined;\r\n if (deps.length === 1) {\r\n if (deps[0]) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n triggerEffects(deps[0], eventInfo);\r\n }\r\n else {\r\n triggerEffects(deps[0]);\r\n }\r\n }\r\n }\r\n else {\r\n const effects = [];\r\n for (const dep of deps) {\r\n if (dep) {\r\n effects.push(...dep);\r\n }\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n triggerEffects(createDep(effects), eventInfo);\r\n }\r\n else {\r\n triggerEffects(createDep(effects));\r\n }\r\n }\r\n}\r\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\r\n // spread into array for stabilization\r\n for (const effect of isArray(dep) ? dep : [...dep]) {\r\n if (effect !== activeEffect || effect.allowRecurse) {\r\n if ((process.env.NODE_ENV !== 'production') && effect.onTrigger) {\r\n effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\r\n }\r\n if (effect.scheduler) {\r\n effect.scheduler();\r\n }\r\n else {\r\n effect.run();\r\n }\r\n }\r\n }\r\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\r\nconst builtInSymbols = new Set(\r\n/*#__PURE__*/\r\nObject.getOwnPropertyNames(Symbol)\r\n .map(key => Symbol[key])\r\n .filter(isSymbol));\r\nconst get = /*#__PURE__*/ createGetter();\r\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\r\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\r\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\r\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\r\nfunction createArrayInstrumentations() {\r\n const instrumentations = {};\r\n ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\r\n instrumentations[key] = function (...args) {\r\n const arr = toRaw(this);\r\n for (let i = 0, l = this.length; i < l; i++) {\r\n track(arr, \"get\" /* GET */, i + '');\r\n }\r\n // we run the method using the original args first (which may be reactive)\r\n const res = arr[key](...args);\r\n if (res === -1 || res === false) {\r\n // if that didn't work, run it again using raw values.\r\n return arr[key](...args.map(toRaw));\r\n }\r\n else {\r\n return res;\r\n }\r\n };\r\n });\r\n ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\r\n instrumentations[key] = function (...args) {\r\n pauseTracking();\r\n const res = toRaw(this)[key].apply(this, args);\r\n resetTracking();\r\n return res;\r\n };\r\n });\r\n return instrumentations;\r\n}\r\nfunction createGetter(isReadonly = false, shallow = false) {\r\n return function get(target, key, receiver) {\r\n if (key === \"__v_isReactive\" /* IS_REACTIVE */) {\r\n return !isReadonly;\r\n }\r\n else if (key === \"__v_isReadonly\" /* IS_READONLY */) {\r\n return isReadonly;\r\n }\r\n else if (key === \"__v_isShallow\" /* IS_SHALLOW */) {\r\n return shallow;\r\n }\r\n else if (key === \"__v_raw\" /* RAW */ &&\r\n receiver ===\r\n (isReadonly\r\n ? shallow\r\n ? shallowReadonlyMap\r\n : readonlyMap\r\n : shallow\r\n ? shallowReactiveMap\r\n : reactiveMap).get(target)) {\r\n return target;\r\n }\r\n const targetIsArray = isArray(target);\r\n if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\r\n return Reflect.get(arrayInstrumentations, key, receiver);\r\n }\r\n const res = Reflect.get(target, key, receiver);\r\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\r\n return res;\r\n }\r\n if (!isReadonly) {\r\n track(target, \"get\" /* GET */, key);\r\n }\r\n if (shallow) {\r\n return res;\r\n }\r\n if (isRef(res)) {\r\n // ref unwrapping - does not apply for Array + integer key.\r\n const shouldUnwrap = !targetIsArray || !isIntegerKey(key);\r\n return shouldUnwrap ? res.value : res;\r\n }\r\n if (isObject(res)) {\r\n // Convert returned value into a proxy as well. we do the isObject check\r\n // here to avoid invalid value warning. Also need to lazy access readonly\r\n // and reactive here to avoid circular dependency.\r\n return isReadonly ? readonly(res) : reactive(res);\r\n }\r\n return res;\r\n };\r\n}\r\nconst set = /*#__PURE__*/ createSetter();\r\nconst shallowSet = /*#__PURE__*/ createSetter(true);\r\nfunction createSetter(shallow = false) {\r\n return function set(target, key, value, receiver) {\r\n let oldValue = target[key];\r\n if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\r\n return false;\r\n }\r\n if (!shallow && !isReadonly(value)) {\r\n if (!isShallow(value)) {\r\n value = toRaw(value);\r\n oldValue = toRaw(oldValue);\r\n }\r\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\r\n oldValue.value = value;\r\n return true;\r\n }\r\n }\r\n const hadKey = isArray(target) && isIntegerKey(key)\r\n ? Number(key) < target.length\r\n : hasOwn(target, key);\r\n const result = Reflect.set(target, key, value, receiver);\r\n // don't trigger if target is something up in the prototype chain of original\r\n if (target === toRaw(receiver)) {\r\n if (!hadKey) {\r\n trigger(target, \"add\" /* ADD */, key, value);\r\n }\r\n else if (hasChanged(value, oldValue)) {\r\n trigger(target, \"set\" /* SET */, key, value, oldValue);\r\n }\r\n }\r\n return result;\r\n };\r\n}\r\nfunction deleteProperty(target, key) {\r\n const hadKey = hasOwn(target, key);\r\n const oldValue = target[key];\r\n const result = Reflect.deleteProperty(target, key);\r\n if (result && hadKey) {\r\n trigger(target, \"delete\" /* DELETE */, key, undefined, oldValue);\r\n }\r\n return result;\r\n}\r\nfunction has(target, key) {\r\n const result = Reflect.has(target, key);\r\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\r\n track(target, \"has\" /* HAS */, key);\r\n }\r\n return result;\r\n}\r\nfunction ownKeys(target) {\r\n track(target, \"iterate\" /* ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\r\n return Reflect.ownKeys(target);\r\n}\r\nconst mutableHandlers = {\r\n get,\r\n set,\r\n deleteProperty,\r\n has,\r\n ownKeys\r\n};\r\nconst readonlyHandlers = {\r\n get: readonlyGet,\r\n set(target, key) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\r\n }\r\n return true;\r\n }\r\n};\r\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\r\n get: shallowGet,\r\n set: shallowSet\r\n});\r\n// Props handlers are special in the sense that it should not unwrap top-level\r\n// refs (in order to allow refs to be explicitly passed down), but should\r\n// retain the reactivity of the normal readonly object.\r\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\r\n get: shallowReadonlyGet\r\n});\n\nconst toShallow = (value) => value;\r\nconst getProto = (v) => Reflect.getPrototypeOf(v);\r\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\r\n // #1772: readonly(reactive(Map)) should return readonly + reactive version\r\n // of the value\r\n target = target[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const rawKey = toRaw(key);\r\n if (key !== rawKey) {\r\n !isReadonly && track(rawTarget, \"get\" /* GET */, key);\r\n }\r\n !isReadonly && track(rawTarget, \"get\" /* GET */, rawKey);\r\n const { has } = getProto(rawTarget);\r\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n if (has.call(rawTarget, key)) {\r\n return wrap(target.get(key));\r\n }\r\n else if (has.call(rawTarget, rawKey)) {\r\n return wrap(target.get(rawKey));\r\n }\r\n else if (target !== rawTarget) {\r\n // #3602 readonly(reactive(Map))\r\n // ensure that the nested reactive `Map` can do tracking for itself\r\n target.get(key);\r\n }\r\n}\r\nfunction has$1(key, isReadonly = false) {\r\n const target = this[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const rawKey = toRaw(key);\r\n if (key !== rawKey) {\r\n !isReadonly && track(rawTarget, \"has\" /* HAS */, key);\r\n }\r\n !isReadonly && track(rawTarget, \"has\" /* HAS */, rawKey);\r\n return key === rawKey\r\n ? target.has(key)\r\n : target.has(key) || target.has(rawKey);\r\n}\r\nfunction size(target, isReadonly = false) {\r\n target = target[\"__v_raw\" /* RAW */];\r\n !isReadonly && track(toRaw(target), \"iterate\" /* ITERATE */, ITERATE_KEY);\r\n return Reflect.get(target, 'size', target);\r\n}\r\nfunction add(value) {\r\n value = toRaw(value);\r\n const target = toRaw(this);\r\n const proto = getProto(target);\r\n const hadKey = proto.has.call(target, value);\r\n if (!hadKey) {\r\n target.add(value);\r\n trigger(target, \"add\" /* ADD */, value, value);\r\n }\r\n return this;\r\n}\r\nfunction set$1(key, value) {\r\n value = toRaw(value);\r\n const target = toRaw(this);\r\n const { has, get } = getProto(target);\r\n let hadKey = has.call(target, key);\r\n if (!hadKey) {\r\n key = toRaw(key);\r\n hadKey = has.call(target, key);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n checkIdentityKeys(target, has, key);\r\n }\r\n const oldValue = get.call(target, key);\r\n target.set(key, value);\r\n if (!hadKey) {\r\n trigger(target, \"add\" /* ADD */, key, value);\r\n }\r\n else if (hasChanged(value, oldValue)) {\r\n trigger(target, \"set\" /* SET */, key, value, oldValue);\r\n }\r\n return this;\r\n}\r\nfunction deleteEntry(key) {\r\n const target = toRaw(this);\r\n const { has, get } = getProto(target);\r\n let hadKey = has.call(target, key);\r\n if (!hadKey) {\r\n key = toRaw(key);\r\n hadKey = has.call(target, key);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n checkIdentityKeys(target, has, key);\r\n }\r\n const oldValue = get ? get.call(target, key) : undefined;\r\n // forward the operation before queueing reactions\r\n const result = target.delete(key);\r\n if (hadKey) {\r\n trigger(target, \"delete\" /* DELETE */, key, undefined, oldValue);\r\n }\r\n return result;\r\n}\r\nfunction clear() {\r\n const target = toRaw(this);\r\n const hadItems = target.size !== 0;\r\n const oldTarget = (process.env.NODE_ENV !== 'production')\r\n ? isMap(target)\r\n ? new Map(target)\r\n : new Set(target)\r\n : undefined;\r\n // forward the operation before queueing reactions\r\n const result = target.clear();\r\n if (hadItems) {\r\n trigger(target, \"clear\" /* CLEAR */, undefined, undefined, oldTarget);\r\n }\r\n return result;\r\n}\r\nfunction createForEach(isReadonly, isShallow) {\r\n return function forEach(callback, thisArg) {\r\n const observed = this;\r\n const target = observed[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n !isReadonly && track(rawTarget, \"iterate\" /* ITERATE */, ITERATE_KEY);\r\n return target.forEach((value, key) => {\r\n // important: make sure the callback is\r\n // 1. invoked with the reactive map as `this` and 3rd arg\r\n // 2. the value received should be a corresponding reactive/readonly.\r\n return callback.call(thisArg, wrap(value), wrap(key), observed);\r\n });\r\n };\r\n}\r\nfunction createIterableMethod(method, isReadonly, isShallow) {\r\n return function (...args) {\r\n const target = this[\"__v_raw\" /* RAW */];\r\n const rawTarget = toRaw(target);\r\n const targetIsMap = isMap(rawTarget);\r\n const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\r\n const isKeyOnly = method === 'keys' && targetIsMap;\r\n const innerIterator = target[method](...args);\r\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n !isReadonly &&\r\n track(rawTarget, \"iterate\" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\r\n // return a wrapped iterator which returns observed versions of the\r\n // values emitted from the real iterator\r\n return {\r\n // iterator protocol\r\n next() {\r\n const { value, done } = innerIterator.next();\r\n return done\r\n ? { value, done }\r\n : {\r\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\r\n done\r\n };\r\n },\r\n // iterable protocol\r\n [Symbol.iterator]() {\r\n return this;\r\n }\r\n };\r\n };\r\n}\r\nfunction createReadonlyMethod(type) {\r\n return function (...args) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\r\n console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\r\n }\r\n return type === \"delete\" /* DELETE */ ? false : this;\r\n };\r\n}\r\nfunction createInstrumentations() {\r\n const mutableInstrumentations = {\r\n get(key) {\r\n return get$1(this, key);\r\n },\r\n get size() {\r\n return size(this);\r\n },\r\n has: has$1,\r\n add,\r\n set: set$1,\r\n delete: deleteEntry,\r\n clear,\r\n forEach: createForEach(false, false)\r\n };\r\n const shallowInstrumentations = {\r\n get(key) {\r\n return get$1(this, key, false, true);\r\n },\r\n get size() {\r\n return size(this);\r\n },\r\n has: has$1,\r\n add,\r\n set: set$1,\r\n delete: deleteEntry,\r\n clear,\r\n forEach: createForEach(false, true)\r\n };\r\n const readonlyInstrumentations = {\r\n get(key) {\r\n return get$1(this, key, true);\r\n },\r\n get size() {\r\n return size(this, true);\r\n },\r\n has(key) {\r\n return has$1.call(this, key, true);\r\n },\r\n add: createReadonlyMethod(\"add\" /* ADD */),\r\n set: createReadonlyMethod(\"set\" /* SET */),\r\n delete: createReadonlyMethod(\"delete\" /* DELETE */),\r\n clear: createReadonlyMethod(\"clear\" /* CLEAR */),\r\n forEach: createForEach(true, false)\r\n };\r\n const shallowReadonlyInstrumentations = {\r\n get(key) {\r\n return get$1(this, key, true, true);\r\n },\r\n get size() {\r\n return size(this, true);\r\n },\r\n has(key) {\r\n return has$1.call(this, key, true);\r\n },\r\n add: createReadonlyMethod(\"add\" /* ADD */),\r\n set: createReadonlyMethod(\"set\" /* SET */),\r\n delete: createReadonlyMethod(\"delete\" /* DELETE */),\r\n clear: createReadonlyMethod(\"clear\" /* CLEAR */),\r\n forEach: createForEach(true, true)\r\n };\r\n const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\r\n iteratorMethods.forEach(method => {\r\n mutableInstrumentations[method] = createIterableMethod(method, false, false);\r\n readonlyInstrumentations[method] = createIterableMethod(method, true, false);\r\n shallowInstrumentations[method] = createIterableMethod(method, false, true);\r\n shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\r\n });\r\n return [\r\n mutableInstrumentations,\r\n readonlyInstrumentations,\r\n shallowInstrumentations,\r\n shallowReadonlyInstrumentations\r\n ];\r\n}\r\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\r\nfunction createInstrumentationGetter(isReadonly, shallow) {\r\n const instrumentations = shallow\r\n ? isReadonly\r\n ? shallowReadonlyInstrumentations\r\n : shallowInstrumentations\r\n : isReadonly\r\n ? readonlyInstrumentations\r\n : mutableInstrumentations;\r\n return (target, key, receiver) => {\r\n if (key === \"__v_isReactive\" /* IS_REACTIVE */) {\r\n return !isReadonly;\r\n }\r\n else if (key === \"__v_isReadonly\" /* IS_READONLY */) {\r\n return isReadonly;\r\n }\r\n else if (key === \"__v_raw\" /* RAW */) {\r\n return target;\r\n }\r\n return Reflect.get(hasOwn(instrumentations, key) && key in target\r\n ? instrumentations\r\n : target, key, receiver);\r\n };\r\n}\r\nconst mutableCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(false, false)\r\n};\r\nconst shallowCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(false, true)\r\n};\r\nconst readonlyCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(true, false)\r\n};\r\nconst shallowReadonlyCollectionHandlers = {\r\n get: /*#__PURE__*/ createInstrumentationGetter(true, true)\r\n};\r\nfunction checkIdentityKeys(target, has, key) {\r\n const rawKey = toRaw(key);\r\n if (rawKey !== key && has.call(target, rawKey)) {\r\n const type = toRawType(target);\r\n console.warn(`Reactive ${type} contains both the raw and reactive ` +\r\n `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\r\n `which can lead to inconsistencies. ` +\r\n `Avoid differentiating between the raw and reactive versions ` +\r\n `of an object and only use the reactive version if possible.`);\r\n }\r\n}\n\nconst reactiveMap = new WeakMap();\r\nconst shallowReactiveMap = new WeakMap();\r\nconst readonlyMap = new WeakMap();\r\nconst shallowReadonlyMap = new WeakMap();\r\nfunction targetTypeMap(rawType) {\r\n switch (rawType) {\r\n case 'Object':\r\n case 'Array':\r\n return 1 /* COMMON */;\r\n case 'Map':\r\n case 'Set':\r\n case 'WeakMap':\r\n case 'WeakSet':\r\n return 2 /* COLLECTION */;\r\n default:\r\n return 0 /* INVALID */;\r\n }\r\n}\r\nfunction getTargetType(value) {\r\n return value[\"__v_skip\" /* SKIP */] || !Object.isExtensible(value)\r\n ? 0 /* INVALID */\r\n : targetTypeMap(toRawType(value));\r\n}\r\nfunction reactive(target) {\r\n // if trying to observe a readonly proxy, return the readonly version.\r\n if (isReadonly(target)) {\r\n return target;\r\n }\r\n return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\r\n}\r\n/**\r\n * Return a shallowly-reactive copy of the original object, where only the root\r\n * level properties are reactive. It also does not auto-unwrap refs (even at the\r\n * root level).\r\n */\r\nfunction shallowReactive(target) {\r\n return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\r\n}\r\n/**\r\n * Creates a readonly copy of the original object. Note the returned copy is not\r\n * made reactive, but `readonly` can be called on an already reactive object.\r\n */\r\nfunction readonly(target) {\r\n return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\r\n}\r\n/**\r\n * Returns a reactive-copy of the original object, where only the root level\r\n * properties are readonly, and does NOT unwrap refs nor recursively convert\r\n * returned properties.\r\n * This is used for creating the props proxy object for stateful components.\r\n */\r\nfunction shallowReadonly(target) {\r\n return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\r\n}\r\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\r\n if (!isObject(target)) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n console.warn(`value cannot be made reactive: ${String(target)}`);\r\n }\r\n return target;\r\n }\r\n // target is already a Proxy, return it.\r\n // exception: calling readonly() on a reactive object\r\n if (target[\"__v_raw\" /* RAW */] &&\r\n !(isReadonly && target[\"__v_isReactive\" /* IS_REACTIVE */])) {\r\n return target;\r\n }\r\n // target already has corresponding Proxy\r\n const existingProxy = proxyMap.get(target);\r\n if (existingProxy) {\r\n return existingProxy;\r\n }\r\n // only a whitelist of value types can be observed.\r\n const targetType = getTargetType(target);\r\n if (targetType === 0 /* INVALID */) {\r\n return target;\r\n }\r\n const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);\r\n proxyMap.set(target, proxy);\r\n return proxy;\r\n}\r\nfunction isReactive(value) {\r\n if (isReadonly(value)) {\r\n return isReactive(value[\"__v_raw\" /* RAW */]);\r\n }\r\n return !!(value && value[\"__v_isReactive\" /* IS_REACTIVE */]);\r\n}\r\nfunction isReadonly(value) {\r\n return !!(value && value[\"__v_isReadonly\" /* IS_READONLY */]);\r\n}\r\nfunction isShallow(value) {\r\n return !!(value && value[\"__v_isShallow\" /* IS_SHALLOW */]);\r\n}\r\nfunction isProxy(value) {\r\n return isReactive(value) || isReadonly(value);\r\n}\r\nfunction toRaw(observed) {\r\n const raw = observed && observed[\"__v_raw\" /* RAW */];\r\n return raw ? toRaw(raw) : observed;\r\n}\r\nfunction markRaw(value) {\r\n def(value, \"__v_skip\" /* SKIP */, true);\r\n return value;\r\n}\r\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\r\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\r\n if (shouldTrack && activeEffect) {\r\n ref = toRaw(ref);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n trackEffects(ref.dep || (ref.dep = createDep()), {\r\n target: ref,\r\n type: \"get\" /* GET */,\r\n key: 'value'\r\n });\r\n }\r\n else {\r\n trackEffects(ref.dep || (ref.dep = createDep()));\r\n }\r\n }\r\n}\r\nfunction triggerRefValue(ref, newVal) {\r\n ref = toRaw(ref);\r\n if (ref.dep) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n triggerEffects(ref.dep, {\r\n target: ref,\r\n type: \"set\" /* SET */,\r\n key: 'value',\r\n newValue: newVal\r\n });\r\n }\r\n else {\r\n triggerEffects(ref.dep);\r\n }\r\n }\r\n}\r\nfunction isRef(r) {\r\n return !!(r && r.__v_isRef === true);\r\n}\r\nfunction ref(value) {\r\n return createRef(value, false);\r\n}\r\nfunction shallowRef(value) {\r\n return createRef(value, true);\r\n}\r\nfunction createRef(rawValue, shallow) {\r\n if (isRef(rawValue)) {\r\n return rawValue;\r\n }\r\n return new RefImpl(rawValue, shallow);\r\n}\r\nclass RefImpl {\r\n constructor(value, __v_isShallow) {\r\n this.__v_isShallow = __v_isShallow;\r\n this.dep = undefined;\r\n this.__v_isRef = true;\r\n this._rawValue = __v_isShallow ? value : toRaw(value);\r\n this._value = __v_isShallow ? value : toReactive(value);\r\n }\r\n get value() {\r\n trackRefValue(this);\r\n return this._value;\r\n }\r\n set value(newVal) {\r\n newVal = this.__v_isShallow ? newVal : toRaw(newVal);\r\n if (hasChanged(newVal, this._rawValue)) {\r\n this._rawValue = newVal;\r\n this._value = this.__v_isShallow ? newVal : toReactive(newVal);\r\n triggerRefValue(this, newVal);\r\n }\r\n }\r\n}\r\nfunction triggerRef(ref) {\r\n triggerRefValue(ref, (process.env.NODE_ENV !== 'production') ? ref.value : void 0);\r\n}\r\nfunction unref(ref) {\r\n return isRef(ref) ? ref.value : ref;\r\n}\r\nconst shallowUnwrapHandlers = {\r\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\r\n set: (target, key, value, receiver) => {\r\n const oldValue = target[key];\r\n if (isRef(oldValue) && !isRef(value)) {\r\n oldValue.value = value;\r\n return true;\r\n }\r\n else {\r\n return Reflect.set(target, key, value, receiver);\r\n }\r\n }\r\n};\r\nfunction proxyRefs(objectWithRefs) {\r\n return isReactive(objectWithRefs)\r\n ? objectWithRefs\r\n : new Proxy(objectWithRefs, shallowUnwrapHandlers);\r\n}\r\nclass CustomRefImpl {\r\n constructor(factory) {\r\n this.dep = undefined;\r\n this.__v_isRef = true;\r\n const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\r\n this._get = get;\r\n this._set = set;\r\n }\r\n get value() {\r\n return this._get();\r\n }\r\n set value(newVal) {\r\n this._set(newVal);\r\n }\r\n}\r\nfunction customRef(factory) {\r\n return new CustomRefImpl(factory);\r\n}\r\nfunction toRefs(object) {\r\n if ((process.env.NODE_ENV !== 'production') && !isProxy(object)) {\r\n console.warn(`toRefs() expects a reactive object but received a plain one.`);\r\n }\r\n const ret = isArray(object) ? new Array(object.length) : {};\r\n for (const key in object) {\r\n ret[key] = toRef(object, key);\r\n }\r\n return ret;\r\n}\r\nclass ObjectRefImpl {\r\n constructor(_object, _key, _defaultValue) {\r\n this._object = _object;\r\n this._key = _key;\r\n this._defaultValue = _defaultValue;\r\n this.__v_isRef = true;\r\n }\r\n get value() {\r\n const val = this._object[this._key];\r\n return val === undefined ? this._defaultValue : val;\r\n }\r\n set value(newVal) {\r\n this._object[this._key] = newVal;\r\n }\r\n}\r\nfunction toRef(object, key, defaultValue) {\r\n const val = object[key];\r\n return isRef(val)\r\n ? val\r\n : new ObjectRefImpl(object, key, defaultValue);\r\n}\n\nclass ComputedRefImpl {\r\n constructor(getter, _setter, isReadonly, isSSR) {\r\n this._setter = _setter;\r\n this.dep = undefined;\r\n this.__v_isRef = true;\r\n this._dirty = true;\r\n this.effect = new ReactiveEffect(getter, () => {\r\n if (!this._dirty) {\r\n this._dirty = true;\r\n triggerRefValue(this);\r\n }\r\n });\r\n this.effect.computed = this;\r\n this.effect.active = this._cacheable = !isSSR;\r\n this[\"__v_isReadonly\" /* IS_READONLY */] = isReadonly;\r\n }\r\n get value() {\r\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\r\n const self = toRaw(this);\r\n trackRefValue(self);\r\n if (self._dirty || !self._cacheable) {\r\n self._dirty = false;\r\n self._value = self.effect.run();\r\n }\r\n return self._value;\r\n }\r\n set value(newValue) {\r\n this._setter(newValue);\r\n }\r\n}\r\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\r\n let getter;\r\n let setter;\r\n const onlyGetter = isFunction(getterOrOptions);\r\n if (onlyGetter) {\r\n getter = getterOrOptions;\r\n setter = (process.env.NODE_ENV !== 'production')\r\n ? () => {\r\n console.warn('Write operation failed: computed value is readonly');\r\n }\r\n : NOOP;\r\n }\r\n else {\r\n getter = getterOrOptions.get;\r\n setter = getterOrOptions.set;\r\n }\r\n const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\r\n if ((process.env.NODE_ENV !== 'production') && debugOptions && !isSSR) {\r\n cRef.effect.onTrack = debugOptions.onTrack;\r\n cRef.effect.onTrigger = debugOptions.onTrigger;\r\n }\r\n return cRef;\r\n}\n\nvar _a;\r\nconst tick = /*#__PURE__*/ Promise.resolve();\r\nconst queue = [];\r\nlet queued = false;\r\nconst scheduler = (fn) => {\r\n queue.push(fn);\r\n if (!queued) {\r\n queued = true;\r\n tick.then(flush);\r\n }\r\n};\r\nconst flush = () => {\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i]();\r\n }\r\n queue.length = 0;\r\n queued = false;\r\n};\r\nclass DeferredComputedRefImpl {\r\n constructor(getter) {\r\n this.dep = undefined;\r\n this._dirty = true;\r\n this.__v_isRef = true;\r\n this[_a] = true;\r\n let compareTarget;\r\n let hasCompareTarget = false;\r\n let scheduled = false;\r\n this.effect = new ReactiveEffect(getter, (computedTrigger) => {\r\n if (this.dep) {\r\n if (computedTrigger) {\r\n compareTarget = this._value;\r\n hasCompareTarget = true;\r\n }\r\n else if (!scheduled) {\r\n const valueToCompare = hasCompareTarget ? compareTarget : this._value;\r\n scheduled = true;\r\n hasCompareTarget = false;\r\n scheduler(() => {\r\n if (this.effect.active && this._get() !== valueToCompare) {\r\n triggerRefValue(this);\r\n }\r\n scheduled = false;\r\n });\r\n }\r\n // chained upstream computeds are notified synchronously to ensure\r\n // value invalidation in case of sync access; normal effects are\r\n // deferred to be triggered in scheduler.\r\n for (const e of this.dep) {\r\n if (e.computed instanceof DeferredComputedRefImpl) {\r\n e.scheduler(true /* computedTrigger */);\r\n }\r\n }\r\n }\r\n this._dirty = true;\r\n });\r\n this.effect.computed = this;\r\n }\r\n _get() {\r\n if (this._dirty) {\r\n this._dirty = false;\r\n return (this._value = this.effect.run());\r\n }\r\n return this._value;\r\n }\r\n get value() {\r\n trackRefValue(this);\r\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\r\n return toRaw(this)._get();\r\n }\r\n}\r\n_a = \"__v_isReadonly\" /* IS_READONLY */;\r\nfunction deferredComputed(getter) {\r\n return new DeferredComputedRefImpl(getter);\r\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };\n", "import { pauseTracking, resetTracking, isRef, toRaw, isShallow as isShallow$1, isReactive, ReactiveEffect, ref, reactive, shallowReactive, trigger, isProxy, shallowReadonly, track, EffectScope, markRaw, proxyRefs, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, NOOP, getGlobalThis, extend, EMPTY_OBJ, toHandlerKey, toNumber, hyphenate, camelize, isOn, hasOwn, isModelListener, hasChanged, remove, isObject, isSet, isMap, isPlainObject, invokeArrayFns, def, isReservedProp, EMPTY_ARR, capitalize, toRawType, makeMap, isBuiltInDirective, NO, normalizeClass, normalizeStyle, isGloballyWhitelisted } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\r\nfunction pushWarningContext(vnode) {\r\n stack.push(vnode);\r\n}\r\nfunction popWarningContext() {\r\n stack.pop();\r\n}\r\nfunction warn(msg, ...args) {\r\n // avoid props formatting or warn handler tracking deps that might be mutated\r\n // during patch, leading to infinite recursion.\r\n pauseTracking();\r\n const instance = stack.length ? stack[stack.length - 1].component : null;\r\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\r\n const trace = getComponentTrace();\r\n if (appWarnHandler) {\r\n callWithErrorHandling(appWarnHandler, instance, 11 /* APP_WARN_HANDLER */, [\r\n msg + args.join(''),\r\n instance && instance.proxy,\r\n trace\r\n .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\r\n .join('\\n'),\r\n trace\r\n ]);\r\n }\r\n else {\r\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\r\n /* istanbul ignore if */\r\n if (trace.length &&\r\n // avoid spamming console during tests\r\n !false) {\r\n warnArgs.push(`\\n`, ...formatTrace(trace));\r\n }\r\n console.warn(...warnArgs);\r\n }\r\n resetTracking();\r\n}\r\nfunction getComponentTrace() {\r\n let currentVNode = stack[stack.length - 1];\r\n if (!currentVNode) {\r\n return [];\r\n }\r\n // we can't just use the stack because it will be incomplete during updates\r\n // that did not start from the root. Re-construct the parent chain using\r\n // instance parent pointers.\r\n const normalizedStack = [];\r\n while (currentVNode) {\r\n const last = normalizedStack[0];\r\n if (last && last.vnode === currentVNode) {\r\n last.recurseCount++;\r\n }\r\n else {\r\n normalizedStack.push({\r\n vnode: currentVNode,\r\n recurseCount: 0\r\n });\r\n }\r\n const parentInstance = currentVNode.component && currentVNode.component.parent;\r\n currentVNode = parentInstance && parentInstance.vnode;\r\n }\r\n return normalizedStack;\r\n}\r\n/* istanbul ignore next */\r\nfunction formatTrace(trace) {\r\n const logs = [];\r\n trace.forEach((entry, i) => {\r\n logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\r\n });\r\n return logs;\r\n}\r\nfunction formatTraceEntry({ vnode, recurseCount }) {\r\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\r\n const isRoot = vnode.component ? vnode.component.parent == null : false;\r\n const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\r\n const close = `>` + postfix;\r\n return vnode.props\r\n ? [open, ...formatProps(vnode.props), close]\r\n : [open + close];\r\n}\r\n/* istanbul ignore next */\r\nfunction formatProps(props) {\r\n const res = [];\r\n const keys = Object.keys(props);\r\n keys.slice(0, 3).forEach(key => {\r\n res.push(...formatProp(key, props[key]));\r\n });\r\n if (keys.length > 3) {\r\n res.push(` ...`);\r\n }\r\n return res;\r\n}\r\n/* istanbul ignore next */\r\nfunction formatProp(key, value, raw) {\r\n if (isString(value)) {\r\n value = JSON.stringify(value);\r\n return raw ? value : [`${key}=${value}`];\r\n }\r\n else if (typeof value === 'number' ||\r\n typeof value === 'boolean' ||\r\n value == null) {\r\n return raw ? value : [`${key}=${value}`];\r\n }\r\n else if (isRef(value)) {\r\n value = formatProp(key, toRaw(value.value), true);\r\n return raw ? value : [`${key}=Ref<`, value, `>`];\r\n }\r\n else if (isFunction(value)) {\r\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\r\n }\r\n else {\r\n value = toRaw(value);\r\n return raw ? value : [`${key}=`, value];\r\n }\r\n}\n\nconst ErrorTypeStrings = {\r\n [\"sp\" /* SERVER_PREFETCH */]: 'serverPrefetch hook',\r\n [\"bc\" /* BEFORE_CREATE */]: 'beforeCreate hook',\r\n [\"c\" /* CREATED */]: 'created hook',\r\n [\"bm\" /* BEFORE_MOUNT */]: 'beforeMount hook',\r\n [\"m\" /* MOUNTED */]: 'mounted hook',\r\n [\"bu\" /* BEFORE_UPDATE */]: 'beforeUpdate hook',\r\n [\"u\" /* UPDATED */]: 'updated',\r\n [\"bum\" /* BEFORE_UNMOUNT */]: 'beforeUnmount hook',\r\n [\"um\" /* UNMOUNTED */]: 'unmounted hook',\r\n [\"a\" /* ACTIVATED */]: 'activated hook',\r\n [\"da\" /* DEACTIVATED */]: 'deactivated hook',\r\n [\"ec\" /* ERROR_CAPTURED */]: 'errorCaptured hook',\r\n [\"rtc\" /* RENDER_TRACKED */]: 'renderTracked hook',\r\n [\"rtg\" /* RENDER_TRIGGERED */]: 'renderTriggered hook',\r\n [0 /* SETUP_FUNCTION */]: 'setup function',\r\n [1 /* RENDER_FUNCTION */]: 'render function',\r\n [2 /* WATCH_GETTER */]: 'watcher getter',\r\n [3 /* WATCH_CALLBACK */]: 'watcher callback',\r\n [4 /* WATCH_CLEANUP */]: 'watcher cleanup function',\r\n [5 /* NATIVE_EVENT_HANDLER */]: 'native event handler',\r\n [6 /* COMPONENT_EVENT_HANDLER */]: 'component event handler',\r\n [7 /* VNODE_HOOK */]: 'vnode hook',\r\n [8 /* DIRECTIVE_HOOK */]: 'directive hook',\r\n [9 /* TRANSITION_HOOK */]: 'transition hook',\r\n [10 /* APP_ERROR_HANDLER */]: 'app errorHandler',\r\n [11 /* APP_WARN_HANDLER */]: 'app warnHandler',\r\n [12 /* FUNCTION_REF */]: 'ref function',\r\n [13 /* ASYNC_COMPONENT_LOADER */]: 'async component loader',\r\n [14 /* SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\r\n 'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\r\n};\r\nfunction callWithErrorHandling(fn, instance, type, args) {\r\n let res;\r\n try {\r\n res = args ? fn(...args) : fn();\r\n }\r\n catch (err) {\r\n handleError(err, instance, type);\r\n }\r\n return res;\r\n}\r\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\r\n if (isFunction(fn)) {\r\n const res = callWithErrorHandling(fn, instance, type, args);\r\n if (res && isPromise(res)) {\r\n res.catch(err => {\r\n handleError(err, instance, type);\r\n });\r\n }\r\n return res;\r\n }\r\n const values = [];\r\n for (let i = 0; i < fn.length; i++) {\r\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\r\n }\r\n return values;\r\n}\r\nfunction handleError(err, instance, type, throwInDev = true) {\r\n const contextVNode = instance ? instance.vnode : null;\r\n if (instance) {\r\n let cur = instance.parent;\r\n // the exposed instance is the render proxy to keep it consistent with 2.x\r\n const exposedInstance = instance.proxy;\r\n // in production the hook receives only the error code\r\n const errorInfo = (process.env.NODE_ENV !== 'production') ? ErrorTypeStrings[type] : type;\r\n while (cur) {\r\n const errorCapturedHooks = cur.ec;\r\n if (errorCapturedHooks) {\r\n for (let i = 0; i < errorCapturedHooks.length; i++) {\r\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\r\n return;\r\n }\r\n }\r\n }\r\n cur = cur.parent;\r\n }\r\n // app-level handling\r\n const appErrorHandler = instance.appContext.config.errorHandler;\r\n if (appErrorHandler) {\r\n callWithErrorHandling(appErrorHandler, null, 10 /* APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\r\n return;\r\n }\r\n }\r\n logError(err, type, contextVNode, throwInDev);\r\n}\r\nfunction logError(err, type, contextVNode, throwInDev = true) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const info = ErrorTypeStrings[type];\r\n if (contextVNode) {\r\n pushWarningContext(contextVNode);\r\n }\r\n warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\r\n if (contextVNode) {\r\n popWarningContext();\r\n }\r\n // crash in dev by default so it's more noticeable\r\n if (throwInDev) {\r\n throw err;\r\n }\r\n else {\r\n console.error(err);\r\n }\r\n }\r\n else {\r\n // recover in prod to reduce the impact on end-user\r\n console.error(err);\r\n }\r\n}\n\nlet isFlushing = false;\r\nlet isFlushPending = false;\r\nconst queue = [];\r\nlet flushIndex = 0;\r\nconst pendingPreFlushCbs = [];\r\nlet activePreFlushCbs = null;\r\nlet preFlushIndex = 0;\r\nconst pendingPostFlushCbs = [];\r\nlet activePostFlushCbs = null;\r\nlet postFlushIndex = 0;\r\nconst resolvedPromise = /*#__PURE__*/ Promise.resolve();\r\nlet currentFlushPromise = null;\r\nlet currentPreFlushParentJob = null;\r\nconst RECURSION_LIMIT = 100;\r\nfunction nextTick(fn) {\r\n const p = currentFlushPromise || resolvedPromise;\r\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\r\n}\r\n// #2768\r\n// Use binary-search to find a suitable position in the queue,\r\n// so that the queue maintains the increasing order of job's id,\r\n// which can prevent the job from being skipped and also can avoid repeated patching.\r\nfunction findInsertionIndex(id) {\r\n // the start index should be `flushIndex + 1`\r\n let start = flushIndex + 1;\r\n let end = queue.length;\r\n while (start < end) {\r\n const middle = (start + end) >>> 1;\r\n const middleJobId = getId(queue[middle]);\r\n middleJobId < id ? (start = middle + 1) : (end = middle);\r\n }\r\n return start;\r\n}\r\nfunction queueJob(job) {\r\n // the dedupe search uses the startIndex argument of Array.includes()\r\n // by default the search index includes the current job that is being run\r\n // so it cannot recursively trigger itself again.\r\n // if the job is a watch() callback, the search will start with a +1 index to\r\n // allow it recursively trigger itself - it is the user's responsibility to\r\n // ensure it doesn't end up in an infinite loop.\r\n if ((!queue.length ||\r\n !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) &&\r\n job !== currentPreFlushParentJob) {\r\n if (job.id == null) {\r\n queue.push(job);\r\n }\r\n else {\r\n queue.splice(findInsertionIndex(job.id), 0, job);\r\n }\r\n queueFlush();\r\n }\r\n}\r\nfunction queueFlush() {\r\n if (!isFlushing && !isFlushPending) {\r\n isFlushPending = true;\r\n currentFlushPromise = resolvedPromise.then(flushJobs);\r\n }\r\n}\r\nfunction invalidateJob(job) {\r\n const i = queue.indexOf(job);\r\n if (i > flushIndex) {\r\n queue.splice(i, 1);\r\n }\r\n}\r\nfunction queueCb(cb, activeQueue, pendingQueue, index) {\r\n if (!isArray(cb)) {\r\n if (!activeQueue ||\r\n !activeQueue.includes(cb, cb.allowRecurse ? index + 1 : index)) {\r\n pendingQueue.push(cb);\r\n }\r\n }\r\n else {\r\n // if cb is an array, it is a component lifecycle hook which can only be\r\n // triggered by a job, which is already deduped in the main queue, so\r\n // we can skip duplicate check here to improve perf\r\n pendingQueue.push(...cb);\r\n }\r\n queueFlush();\r\n}\r\nfunction queuePreFlushCb(cb) {\r\n queueCb(cb, activePreFlushCbs, pendingPreFlushCbs, preFlushIndex);\r\n}\r\nfunction queuePostFlushCb(cb) {\r\n queueCb(cb, activePostFlushCbs, pendingPostFlushCbs, postFlushIndex);\r\n}\r\nfunction flushPreFlushCbs(seen, parentJob = null) {\r\n if (pendingPreFlushCbs.length) {\r\n currentPreFlushParentJob = parentJob;\r\n activePreFlushCbs = [...new Set(pendingPreFlushCbs)];\r\n pendingPreFlushCbs.length = 0;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n seen = seen || new Map();\r\n }\r\n for (preFlushIndex = 0; preFlushIndex < activePreFlushCbs.length; preFlushIndex++) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n checkRecursiveUpdates(seen, activePreFlushCbs[preFlushIndex])) {\r\n continue;\r\n }\r\n activePreFlushCbs[preFlushIndex]();\r\n }\r\n activePreFlushCbs = null;\r\n preFlushIndex = 0;\r\n currentPreFlushParentJob = null;\r\n // recursively flush until it drains\r\n flushPreFlushCbs(seen, parentJob);\r\n }\r\n}\r\nfunction flushPostFlushCbs(seen) {\r\n if (pendingPostFlushCbs.length) {\r\n const deduped = [...new Set(pendingPostFlushCbs)];\r\n pendingPostFlushCbs.length = 0;\r\n // #1947 already has active queue, nested flushPostFlushCbs call\r\n if (activePostFlushCbs) {\r\n activePostFlushCbs.push(...deduped);\r\n return;\r\n }\r\n activePostFlushCbs = deduped;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n seen = seen || new Map();\r\n }\r\n activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\r\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\r\n continue;\r\n }\r\n activePostFlushCbs[postFlushIndex]();\r\n }\r\n activePostFlushCbs = null;\r\n postFlushIndex = 0;\r\n }\r\n}\r\nconst getId = (job) => job.id == null ? Infinity : job.id;\r\nfunction flushJobs(seen) {\r\n isFlushPending = false;\r\n isFlushing = true;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n seen = seen || new Map();\r\n }\r\n flushPreFlushCbs(seen);\r\n // Sort queue before flush.\r\n // This ensures that:\r\n // 1. Components are updated from parent to child. (because parent is always\r\n // created before the child so its render effect will have smaller\r\n // priority number)\r\n // 2. If a component is unmounted during a parent component's update,\r\n // its update can be skipped.\r\n queue.sort((a, b) => getId(a) - getId(b));\r\n // conditional usage of checkRecursiveUpdate must be determined out of\r\n // try ... catch block since Rollup by default de-optimizes treeshaking\r\n // inside try-catch. This can leave all warning code unshaked. Although\r\n // they would get eventually shaken by a minifier like terser, some minifiers\r\n // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)\r\n const check = (process.env.NODE_ENV !== 'production')\r\n ? (job) => checkRecursiveUpdates(seen, job)\r\n : NOOP;\r\n try {\r\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\r\n const job = queue[flushIndex];\r\n if (job && job.active !== false) {\r\n if ((process.env.NODE_ENV !== 'production') && check(job)) {\r\n continue;\r\n }\r\n // console.log(`running:`, job.id)\r\n callWithErrorHandling(job, null, 14 /* SCHEDULER */);\r\n }\r\n }\r\n }\r\n finally {\r\n flushIndex = 0;\r\n queue.length = 0;\r\n flushPostFlushCbs(seen);\r\n isFlushing = false;\r\n currentFlushPromise = null;\r\n // some postFlushCb queued jobs!\r\n // keep flushing until it drains.\r\n if (queue.length ||\r\n pendingPreFlushCbs.length ||\r\n pendingPostFlushCbs.length) {\r\n flushJobs(seen);\r\n }\r\n }\r\n}\r\nfunction checkRecursiveUpdates(seen, fn) {\r\n if (!seen.has(fn)) {\r\n seen.set(fn, 1);\r\n }\r\n else {\r\n const count = seen.get(fn);\r\n if (count > RECURSION_LIMIT) {\r\n const instance = fn.ownerInstance;\r\n const componentName = instance && getComponentName(instance.type);\r\n warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +\r\n `This means you have a reactive effect that is mutating its own ` +\r\n `dependencies and thus recursively triggering itself. Possible sources ` +\r\n `include component template, render function, updated hook or ` +\r\n `watcher source function.`);\r\n return true;\r\n }\r\n else {\r\n seen.set(fn, count + 1);\r\n }\r\n }\r\n}\n\n/* eslint-disable no-restricted-globals */\r\nlet isHmrUpdating = false;\r\nconst hmrDirtyComponents = new Set();\r\n// Expose the HMR runtime on the global object\r\n// This makes it entirely tree-shakable without polluting the exports and makes\r\n// it easier to be used in toolings like vue-loader\r\n// Note: for a component to be eligible for HMR it also needs the __hmrId option\r\n// to be set so that its instances can be registered / removed.\r\nif ((process.env.NODE_ENV !== 'production')) {\r\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\r\n createRecord: tryWrap(createRecord),\r\n rerender: tryWrap(rerender),\r\n reload: tryWrap(reload)\r\n };\r\n}\r\nconst map = new Map();\r\nfunction registerHMR(instance) {\r\n const id = instance.type.__hmrId;\r\n let record = map.get(id);\r\n if (!record) {\r\n createRecord(id, instance.type);\r\n record = map.get(id);\r\n }\r\n record.instances.add(instance);\r\n}\r\nfunction unregisterHMR(instance) {\r\n map.get(instance.type.__hmrId).instances.delete(instance);\r\n}\r\nfunction createRecord(id, initialDef) {\r\n if (map.has(id)) {\r\n return false;\r\n }\r\n map.set(id, {\r\n initialDef: normalizeClassComponent(initialDef),\r\n instances: new Set()\r\n });\r\n return true;\r\n}\r\nfunction normalizeClassComponent(component) {\r\n return isClassComponent(component) ? component.__vccOpts : component;\r\n}\r\nfunction rerender(id, newRender) {\r\n const record = map.get(id);\r\n if (!record) {\r\n return;\r\n }\r\n // update initial record (for not-yet-rendered component)\r\n record.initialDef.render = newRender;\r\n [...record.instances].forEach(instance => {\r\n if (newRender) {\r\n instance.render = newRender;\r\n normalizeClassComponent(instance.type).render = newRender;\r\n }\r\n instance.renderCache = [];\r\n // this flag forces child components with slot content to update\r\n isHmrUpdating = true;\r\n instance.update();\r\n isHmrUpdating = false;\r\n });\r\n}\r\nfunction reload(id, newComp) {\r\n const record = map.get(id);\r\n if (!record)\r\n return;\r\n newComp = normalizeClassComponent(newComp);\r\n // update initial def (for not-yet-rendered components)\r\n updateComponentDef(record.initialDef, newComp);\r\n // create a snapshot which avoids the set being mutated during updates\r\n const instances = [...record.instances];\r\n for (const instance of instances) {\r\n const oldComp = normalizeClassComponent(instance.type);\r\n if (!hmrDirtyComponents.has(oldComp)) {\r\n // 1. Update existing comp definition to match new one\r\n if (oldComp !== record.initialDef) {\r\n updateComponentDef(oldComp, newComp);\r\n }\r\n // 2. mark definition dirty. This forces the renderer to replace the\r\n // component on patch.\r\n hmrDirtyComponents.add(oldComp);\r\n }\r\n // 3. invalidate options resolution cache\r\n instance.appContext.optionsCache.delete(instance.type);\r\n // 4. actually update\r\n if (instance.ceReload) {\r\n // custom element\r\n hmrDirtyComponents.add(oldComp);\r\n instance.ceReload(newComp.styles);\r\n hmrDirtyComponents.delete(oldComp);\r\n }\r\n else if (instance.parent) {\r\n // 4. Force the parent instance to re-render. This will cause all updated\r\n // components to be unmounted and re-mounted. Queue the update so that we\r\n // don't end up forcing the same parent to re-render multiple times.\r\n queueJob(instance.parent.update);\r\n // instance is the inner component of an async custom element\r\n // invoke to reset styles\r\n if (instance.parent.type.__asyncLoader &&\r\n instance.parent.ceReload) {\r\n instance.parent.ceReload(newComp.styles);\r\n }\r\n }\r\n else if (instance.appContext.reload) {\r\n // root instance mounted via createApp() has a reload method\r\n instance.appContext.reload();\r\n }\r\n else if (typeof window !== 'undefined') {\r\n // root instance inside tree created via raw render(). Force reload.\r\n window.location.reload();\r\n }\r\n else {\r\n console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\r\n }\r\n }\r\n // 5. make sure to cleanup dirty hmr components after update\r\n queuePostFlushCb(() => {\r\n for (const instance of instances) {\r\n hmrDirtyComponents.delete(normalizeClassComponent(instance.type));\r\n }\r\n });\r\n}\r\nfunction updateComponentDef(oldComp, newComp) {\r\n extend(oldComp, newComp);\r\n for (const key in oldComp) {\r\n if (key !== '__file' && !(key in newComp)) {\r\n delete oldComp[key];\r\n }\r\n }\r\n}\r\nfunction tryWrap(fn) {\r\n return (id, arg) => {\r\n try {\r\n return fn(id, arg);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\r\n `Full reload required.`);\r\n }\r\n };\r\n}\n\nlet devtools;\r\nlet buffer = [];\r\nlet devtoolsNotInstalled = false;\r\nfunction emit(event, ...args) {\r\n if (devtools) {\r\n devtools.emit(event, ...args);\r\n }\r\n else if (!devtoolsNotInstalled) {\r\n buffer.push({ event, args });\r\n }\r\n}\r\nfunction setDevtoolsHook(hook, target) {\r\n var _a, _b;\r\n devtools = hook;\r\n if (devtools) {\r\n devtools.enabled = true;\r\n buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\r\n buffer = [];\r\n }\r\n else if (\r\n // handle late devtools injection - only do this if we are in an actual\r\n // browser environment to avoid the timer handle stalling test runner exit\r\n // (#4815)\r\n // eslint-disable-next-line no-restricted-globals\r\n typeof window !== 'undefined' &&\r\n // some envs mock window but not fully\r\n window.HTMLElement &&\r\n // also exclude jsdom\r\n !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) {\r\n const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =\r\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []);\r\n replay.push((newHook) => {\r\n setDevtoolsHook(newHook, target);\r\n });\r\n // clear buffer after 3s - the user probably doesn't have devtools installed\r\n // at all, and keeping the buffer will cause memory leaks (#4738)\r\n setTimeout(() => {\r\n if (!devtools) {\r\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\r\n devtoolsNotInstalled = true;\r\n buffer = [];\r\n }\r\n }, 3000);\r\n }\r\n else {\r\n // non-browser env, assume not installed\r\n devtoolsNotInstalled = true;\r\n buffer = [];\r\n }\r\n}\r\nfunction devtoolsInitApp(app, version) {\r\n emit(\"app:init\" /* APP_INIT */, app, version, {\r\n Fragment,\r\n Text,\r\n Comment,\r\n Static\r\n });\r\n}\r\nfunction devtoolsUnmountApp(app) {\r\n emit(\"app:unmount\" /* APP_UNMOUNT */, app);\r\n}\r\nconst devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\r\nconst devtoolsComponentUpdated = \r\n/*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\r\nconst devtoolsComponentRemoved = \r\n/*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* COMPONENT_REMOVED */);\r\nfunction createDevtoolsComponentHook(hook) {\r\n return (component) => {\r\n emit(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\r\n };\r\n}\r\nconst devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\r\nconst devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\r\nfunction createDevtoolsPerformanceHook(hook) {\r\n return (component, type, time) => {\r\n emit(hook, component.appContext.app, component.uid, component, type, time);\r\n };\r\n}\r\nfunction devtoolsComponentEmit(component, event, params) {\r\n emit(\"component:emit\" /* COMPONENT_EMIT */, component.appContext.app, component, event, params);\r\n}\n\nfunction emit$1(instance, event, ...rawArgs) {\r\n if (instance.isUnmounted)\r\n return;\r\n const props = instance.vnode.props || EMPTY_OBJ;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const { emitsOptions, propsOptions: [propsOptions] } = instance;\r\n if (emitsOptions) {\r\n if (!(event in emitsOptions) &&\r\n !(false )) {\r\n if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\r\n warn(`Component emitted event \"${event}\" but it is neither declared in ` +\r\n `the emits option nor as an \"${toHandlerKey(event)}\" prop.`);\r\n }\r\n }\r\n else {\r\n const validator = emitsOptions[event];\r\n if (isFunction(validator)) {\r\n const isValid = validator(...rawArgs);\r\n if (!isValid) {\r\n warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let args = rawArgs;\r\n const isModelListener = event.startsWith('update:');\r\n // for v-model update:xxx events, apply modifiers on args\r\n const modelArg = isModelListener && event.slice(7);\r\n if (modelArg && modelArg in props) {\r\n const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\r\n const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\r\n if (trim) {\r\n args = rawArgs.map(a => a.trim());\r\n }\r\n else if (number) {\r\n args = rawArgs.map(toNumber);\r\n }\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentEmit(instance, event, args);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const lowerCaseEvent = event.toLowerCase();\r\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\r\n warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\r\n `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\r\n `Note that HTML attributes are case-insensitive and you cannot use ` +\r\n `v-on to listen to camelCase events when using in-DOM templates. ` +\r\n `You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`);\r\n }\r\n }\r\n let handlerName;\r\n let handler = props[(handlerName = toHandlerKey(event))] ||\r\n // also try camelCase event handler (#2249)\r\n props[(handlerName = toHandlerKey(camelize(event)))];\r\n // for v-model update:xxx events, also trigger kebab-case equivalent\r\n // for props passed via kebab-case\r\n if (!handler && isModelListener) {\r\n handler = props[(handlerName = toHandlerKey(hyphenate(event)))];\r\n }\r\n if (handler) {\r\n callWithAsyncErrorHandling(handler, instance, 6 /* COMPONENT_EVENT_HANDLER */, args);\r\n }\r\n const onceHandler = props[handlerName + `Once`];\r\n if (onceHandler) {\r\n if (!instance.emitted) {\r\n instance.emitted = {};\r\n }\r\n else if (instance.emitted[handlerName]) {\r\n return;\r\n }\r\n instance.emitted[handlerName] = true;\r\n callWithAsyncErrorHandling(onceHandler, instance, 6 /* COMPONENT_EVENT_HANDLER */, args);\r\n }\r\n}\r\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\r\n const cache = appContext.emitsCache;\r\n const cached = cache.get(comp);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const raw = comp.emits;\r\n let normalized = {};\r\n // apply mixin/extends props\r\n let hasExtends = false;\r\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\r\n const extendEmits = (raw) => {\r\n const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\r\n if (normalizedFromExtend) {\r\n hasExtends = true;\r\n extend(normalized, normalizedFromExtend);\r\n }\r\n };\r\n if (!asMixin && appContext.mixins.length) {\r\n appContext.mixins.forEach(extendEmits);\r\n }\r\n if (comp.extends) {\r\n extendEmits(comp.extends);\r\n }\r\n if (comp.mixins) {\r\n comp.mixins.forEach(extendEmits);\r\n }\r\n }\r\n if (!raw && !hasExtends) {\r\n cache.set(comp, null);\r\n return null;\r\n }\r\n if (isArray(raw)) {\r\n raw.forEach(key => (normalized[key] = null));\r\n }\r\n else {\r\n extend(normalized, raw);\r\n }\r\n cache.set(comp, normalized);\r\n return normalized;\r\n}\r\n// Check if an incoming prop key is a declared emit event listener.\r\n// e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\r\n// both considered matched listeners.\r\nfunction isEmitListener(options, key) {\r\n if (!options || !isOn(key)) {\r\n return false;\r\n }\r\n key = key.slice(2).replace(/Once$/, '');\r\n return (hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||\r\n hasOwn(options, hyphenate(key)) ||\r\n hasOwn(options, key));\r\n}\n\n/**\r\n * mark the current rendering instance for asset resolution (e.g.\r\n * resolveComponent, resolveDirective) during render\r\n */\r\nlet currentRenderingInstance = null;\r\nlet currentScopeId = null;\r\n/**\r\n * Note: rendering calls maybe nested. The function returns the parent rendering\r\n * instance if present, which should be restored after the render is done:\r\n *\r\n * ```js\r\n * const prev = setCurrentRenderingInstance(i)\r\n * // ...render\r\n * setCurrentRenderingInstance(prev)\r\n * ```\r\n */\r\nfunction setCurrentRenderingInstance(instance) {\r\n const prev = currentRenderingInstance;\r\n currentRenderingInstance = instance;\r\n currentScopeId = (instance && instance.type.__scopeId) || null;\r\n return prev;\r\n}\r\n/**\r\n * Set scope id when creating hoisted vnodes.\r\n * @private compiler helper\r\n */\r\nfunction pushScopeId(id) {\r\n currentScopeId = id;\r\n}\r\n/**\r\n * Technically we no longer need this after 3.0.8 but we need to keep the same\r\n * API for backwards compat w/ code generated by compilers.\r\n * @private\r\n */\r\nfunction popScopeId() {\r\n currentScopeId = null;\r\n}\r\n/**\r\n * Only for backwards compat\r\n * @private\r\n */\r\nconst withScopeId = (_id) => withCtx;\r\n/**\r\n * Wrap a slot function to memoize current rendering instance\r\n * @private compiler helper\r\n */\r\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\r\n) {\r\n if (!ctx)\r\n return fn;\r\n // already normalized\r\n if (fn._n) {\r\n return fn;\r\n }\r\n const renderFnWithContext = (...args) => {\r\n // If a user calls a compiled slot inside a template expression (#1745), it\r\n // can mess up block tracking, so by default we disable block tracking and\r\n // force bail out when invoking a compiled slot (indicated by the ._d flag).\r\n // This isn't necessary if rendering a compiled `<slot>`, so we flip the\r\n // ._d flag off when invoking the wrapped fn inside `renderSlot`.\r\n if (renderFnWithContext._d) {\r\n setBlockTracking(-1);\r\n }\r\n const prevInstance = setCurrentRenderingInstance(ctx);\r\n const res = fn(...args);\r\n setCurrentRenderingInstance(prevInstance);\r\n if (renderFnWithContext._d) {\r\n setBlockTracking(1);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentUpdated(ctx);\r\n }\r\n return res;\r\n };\r\n // mark normalized to avoid duplicated wrapping\r\n renderFnWithContext._n = true;\r\n // mark this as compiled by default\r\n // this is used in vnode.ts -> normalizeChildren() to set the slot\r\n // rendering flag.\r\n renderFnWithContext._c = true;\r\n // disable block tracking by default\r\n renderFnWithContext._d = true;\r\n return renderFnWithContext;\r\n}\n\n/**\r\n * dev only flag to track whether $attrs was used during render.\r\n * If $attrs was used during render then the warning for failed attrs\r\n * fallthrough can be suppressed.\r\n */\r\nlet accessedAttrs = false;\r\nfunction markAttrsAccessed() {\r\n accessedAttrs = true;\r\n}\r\nfunction renderComponentRoot(instance) {\r\n const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\r\n let result;\r\n let fallthroughAttrs;\r\n const prev = setCurrentRenderingInstance(instance);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n accessedAttrs = false;\r\n }\r\n try {\r\n if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) {\r\n // withProxy is a proxy with a different `has` trap only for\r\n // runtime-compiled render functions using `with` block.\r\n const proxyToUse = withProxy || proxy;\r\n result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\r\n fallthroughAttrs = attrs;\r\n }\r\n else {\r\n // functional\r\n const render = Component;\r\n // in dev, mark attrs accessed if optional props (attrs === props)\r\n if ((process.env.NODE_ENV !== 'production') && attrs === props) {\r\n markAttrsAccessed();\r\n }\r\n result = normalizeVNode(render.length > 1\r\n ? render(props, (process.env.NODE_ENV !== 'production')\r\n ? {\r\n get attrs() {\r\n markAttrsAccessed();\r\n return attrs;\r\n },\r\n slots,\r\n emit\r\n }\r\n : { attrs, slots, emit })\r\n : render(props, null /* we know it doesn't need it */));\r\n fallthroughAttrs = Component.props\r\n ? attrs\r\n : getFunctionalFallthrough(attrs);\r\n }\r\n }\r\n catch (err) {\r\n blockStack.length = 0;\r\n handleError(err, instance, 1 /* RENDER_FUNCTION */);\r\n result = createVNode(Comment);\r\n }\r\n // attr merging\r\n // in dev mode, comments are preserved, and it's possible for a template\r\n // to have comments along side the root element which makes it a fragment\r\n let root = result;\r\n let setRoot = undefined;\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n result.patchFlag > 0 &&\r\n result.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */) {\r\n [root, setRoot] = getChildRoot(result);\r\n }\r\n if (fallthroughAttrs && inheritAttrs !== false) {\r\n const keys = Object.keys(fallthroughAttrs);\r\n const { shapeFlag } = root;\r\n if (keys.length) {\r\n if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */)) {\r\n if (propsOptions && keys.some(isModelListener)) {\r\n // If a v-model listener (onUpdate:xxx) has a corresponding declared\r\n // prop, it indicates this component expects to handle v-model and\r\n // it should not fallthrough.\r\n // related: #1543, #1643, #1989\r\n fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\r\n }\r\n root = cloneVNode(root, fallthroughAttrs);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production') && !accessedAttrs && root.type !== Comment) {\r\n const allAttrs = Object.keys(attrs);\r\n const eventAttrs = [];\r\n const extraAttrs = [];\r\n for (let i = 0, l = allAttrs.length; i < l; i++) {\r\n const key = allAttrs[i];\r\n if (isOn(key)) {\r\n // ignore v-model handlers when they fail to fallthrough\r\n if (!isModelListener(key)) {\r\n // remove `on`, lowercase first letter to reflect event casing\r\n // accurately\r\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\r\n }\r\n }\r\n else {\r\n extraAttrs.push(key);\r\n }\r\n }\r\n if (extraAttrs.length) {\r\n warn(`Extraneous non-props attributes (` +\r\n `${extraAttrs.join(', ')}) ` +\r\n `were passed to component but could not be automatically inherited ` +\r\n `because component renders fragment or text root nodes.`);\r\n }\r\n if (eventAttrs.length) {\r\n warn(`Extraneous non-emits event listeners (` +\r\n `${eventAttrs.join(', ')}) ` +\r\n `were passed to component but could not be automatically inherited ` +\r\n `because component renders fragment or text root nodes. ` +\r\n `If the listener is intended to be a component custom event listener only, ` +\r\n `declare it using the \"emits\" option.`);\r\n }\r\n }\r\n }\r\n }\r\n // inherit directives\r\n if (vnode.dirs) {\r\n if ((process.env.NODE_ENV !== 'production') && !isElementRoot(root)) {\r\n warn(`Runtime directive used on component with non-element root node. ` +\r\n `The directives will not function as intended.`);\r\n }\r\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\r\n }\r\n // inherit transition data\r\n if (vnode.transition) {\r\n if ((process.env.NODE_ENV !== 'production') && !isElementRoot(root)) {\r\n warn(`Component inside <Transition> renders non-element root node ` +\r\n `that cannot be animated.`);\r\n }\r\n root.transition = vnode.transition;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && setRoot) {\r\n setRoot(root);\r\n }\r\n else {\r\n result = root;\r\n }\r\n setCurrentRenderingInstance(prev);\r\n return result;\r\n}\r\n/**\r\n * dev only\r\n * In dev mode, template root level comments are rendered, which turns the\r\n * template into a fragment root, but we need to locate the single element\r\n * root for attrs and scope id processing.\r\n */\r\nconst getChildRoot = (vnode) => {\r\n const rawChildren = vnode.children;\r\n const dynamicChildren = vnode.dynamicChildren;\r\n const childRoot = filterSingleRoot(rawChildren);\r\n if (!childRoot) {\r\n return [vnode, undefined];\r\n }\r\n const index = rawChildren.indexOf(childRoot);\r\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\r\n const setRoot = (updatedRoot) => {\r\n rawChildren[index] = updatedRoot;\r\n if (dynamicChildren) {\r\n if (dynamicIndex > -1) {\r\n dynamicChildren[dynamicIndex] = updatedRoot;\r\n }\r\n else if (updatedRoot.patchFlag > 0) {\r\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\r\n }\r\n }\r\n };\r\n return [normalizeVNode(childRoot), setRoot];\r\n};\r\nfunction filterSingleRoot(children) {\r\n let singleRoot;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (isVNode(child)) {\r\n // ignore user comment\r\n if (child.type !== Comment || child.children === 'v-if') {\r\n if (singleRoot) {\r\n // has more than 1 non-comment child, return now\r\n return;\r\n }\r\n else {\r\n singleRoot = child;\r\n }\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n return singleRoot;\r\n}\r\nconst getFunctionalFallthrough = (attrs) => {\r\n let res;\r\n for (const key in attrs) {\r\n if (key === 'class' || key === 'style' || isOn(key)) {\r\n (res || (res = {}))[key] = attrs[key];\r\n }\r\n }\r\n return res;\r\n};\r\nconst filterModelListeners = (attrs, props) => {\r\n const res = {};\r\n for (const key in attrs) {\r\n if (!isModelListener(key) || !(key.slice(9) in props)) {\r\n res[key] = attrs[key];\r\n }\r\n }\r\n return res;\r\n};\r\nconst isElementRoot = (vnode) => {\r\n return (vnode.shapeFlag & (6 /* COMPONENT */ | 1 /* ELEMENT */) ||\r\n vnode.type === Comment // potential v-if branch switch\r\n );\r\n};\r\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\r\n const { props: prevProps, children: prevChildren, component } = prevVNode;\r\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\r\n const emits = component.emitsOptions;\r\n // Parent component's render function was hot-updated. Since this may have\r\n // caused the child component's slots content to have changed, we need to\r\n // force the child to update as well.\r\n if ((process.env.NODE_ENV !== 'production') && (prevChildren || nextChildren) && isHmrUpdating) {\r\n return true;\r\n }\r\n // force child update for runtime directive or transition on component vnode.\r\n if (nextVNode.dirs || nextVNode.transition) {\r\n return true;\r\n }\r\n if (optimized && patchFlag >= 0) {\r\n if (patchFlag & 1024 /* DYNAMIC_SLOTS */) {\r\n // slot content that references values that might have changed,\r\n // e.g. in a v-for\r\n return true;\r\n }\r\n if (patchFlag & 16 /* FULL_PROPS */) {\r\n if (!prevProps) {\r\n return !!nextProps;\r\n }\r\n // presence of this flag indicates props are always non-null\r\n return hasPropsChanged(prevProps, nextProps, emits);\r\n }\r\n else if (patchFlag & 8 /* PROPS */) {\r\n const dynamicProps = nextVNode.dynamicProps;\r\n for (let i = 0; i < dynamicProps.length; i++) {\r\n const key = dynamicProps[i];\r\n if (nextProps[key] !== prevProps[key] &&\r\n !isEmitListener(emits, key)) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // this path is only taken by manually written render functions\r\n // so presence of any children leads to a forced update\r\n if (prevChildren || nextChildren) {\r\n if (!nextChildren || !nextChildren.$stable) {\r\n return true;\r\n }\r\n }\r\n if (prevProps === nextProps) {\r\n return false;\r\n }\r\n if (!prevProps) {\r\n return !!nextProps;\r\n }\r\n if (!nextProps) {\r\n return true;\r\n }\r\n return hasPropsChanged(prevProps, nextProps, emits);\r\n }\r\n return false;\r\n}\r\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\r\n const nextKeys = Object.keys(nextProps);\r\n if (nextKeys.length !== Object.keys(prevProps).length) {\r\n return true;\r\n }\r\n for (let i = 0; i < nextKeys.length; i++) {\r\n const key = nextKeys[i];\r\n if (nextProps[key] !== prevProps[key] &&\r\n !isEmitListener(emitsOptions, key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction updateHOCHostEl({ vnode, parent }, el // HostNode\r\n) {\r\n while (parent && parent.subTree === vnode) {\r\n (vnode = parent.vnode).el = el;\r\n parent = parent.parent;\r\n }\r\n}\n\nconst isSuspense = (type) => type.__isSuspense;\r\n// Suspense exposes a component-like API, and is treated like a component\r\n// in the compiler, but internally it's a special built-in type that hooks\r\n// directly into the renderer.\r\nconst SuspenseImpl = {\r\n name: 'Suspense',\r\n // In order to make Suspense tree-shakable, we need to avoid importing it\r\n // directly in the renderer. The renderer checks for the __isSuspense flag\r\n // on a vnode's type and calls the `process` method, passing in renderer\r\n // internals.\r\n __isSuspense: true,\r\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, \r\n // platform-specific impl passed from renderer\r\n rendererInternals) {\r\n if (n1 == null) {\r\n mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals);\r\n }\r\n else {\r\n patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals);\r\n }\r\n },\r\n hydrate: hydrateSuspense,\r\n create: createSuspenseBoundary,\r\n normalize: normalizeSuspenseChildren\r\n};\r\n// Force-casted public typing for h and TSX props inference\r\nconst Suspense = (SuspenseImpl );\r\nfunction triggerEvent(vnode, name) {\r\n const eventListener = vnode.props && vnode.props[name];\r\n if (isFunction(eventListener)) {\r\n eventListener();\r\n }\r\n}\r\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\r\n const { p: patch, o: { createElement } } = rendererInternals;\r\n const hiddenContainer = createElement('div');\r\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals));\r\n // start mounting the content subtree in an off-dom container\r\n patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds);\r\n // now check if we have encountered any async deps\r\n if (suspense.deps > 0) {\r\n // has async\r\n // invoke @fallback event\r\n triggerEvent(vnode, 'onPending');\r\n triggerEvent(vnode, 'onFallback');\r\n // mount the fallback tree\r\n patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds);\r\n setActiveBranch(suspense, vnode.ssFallback);\r\n }\r\n else {\r\n // Suspense has no async deps. Just resolve.\r\n suspense.resolve();\r\n }\r\n}\r\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\r\n const suspense = (n2.suspense = n1.suspense);\r\n suspense.vnode = n2;\r\n n2.el = n1.el;\r\n const newBranch = n2.ssContent;\r\n const newFallback = n2.ssFallback;\r\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\r\n if (pendingBranch) {\r\n suspense.pendingBranch = newBranch;\r\n if (isSameVNodeType(newBranch, pendingBranch)) {\r\n // same root type but content may have changed.\r\n patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n suspense.resolve();\r\n }\r\n else if (isInFallback) {\r\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, newFallback);\r\n }\r\n }\r\n else {\r\n // toggled before pending tree is resolved\r\n suspense.pendingId++;\r\n if (isHydrating) {\r\n // if toggled before hydration is finished, the current DOM tree is\r\n // no longer valid. set it as the active branch so it will be unmounted\r\n // when resolved\r\n suspense.isHydrating = false;\r\n suspense.activeBranch = pendingBranch;\r\n }\r\n else {\r\n unmount(pendingBranch, parentComponent, suspense);\r\n }\r\n // increment pending ID. this is used to invalidate async callbacks\r\n // reset suspense state\r\n suspense.deps = 0;\r\n // discard effects from pending branch\r\n suspense.effects.length = 0;\r\n // discard previous container\r\n suspense.hiddenContainer = createElement('div');\r\n if (isInFallback) {\r\n // already in fallback state\r\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n suspense.resolve();\r\n }\r\n else {\r\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, newFallback);\r\n }\r\n }\r\n else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\r\n // toggled \"back\" to current active branch\r\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n // force resolve\r\n suspense.resolve(true);\r\n }\r\n else {\r\n // switched to a 3rd branch\r\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n suspense.resolve();\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\r\n // root did not change, just normal patch\r\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, newBranch);\r\n }\r\n else {\r\n // root node toggled\r\n // invoke @pending event\r\n triggerEvent(n2, 'onPending');\r\n // mount pending branch in off-dom container\r\n suspense.pendingBranch = newBranch;\r\n suspense.pendingId++;\r\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\r\n if (suspense.deps <= 0) {\r\n // incoming branch has no async deps, resolve now.\r\n suspense.resolve();\r\n }\r\n else {\r\n const { timeout, pendingId } = suspense;\r\n if (timeout > 0) {\r\n setTimeout(() => {\r\n if (suspense.pendingId === pendingId) {\r\n suspense.fallback(newFallback);\r\n }\r\n }, timeout);\r\n }\r\n else if (timeout === 0) {\r\n suspense.fallback(newFallback);\r\n }\r\n }\r\n }\r\n }\r\n}\r\nlet hasWarned = false;\r\nfunction createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\r\n /* istanbul ignore if */\r\n if ((process.env.NODE_ENV !== 'production') && !false && !hasWarned) {\r\n hasWarned = true;\r\n // @ts-ignore `console.info` cannot be null error\r\n console[console.info ? 'info' : 'log'](`<Suspense> is an experimental feature and its API will likely change.`);\r\n }\r\n const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;\r\n const timeout = toNumber(vnode.props && vnode.props.timeout);\r\n const suspense = {\r\n vnode,\r\n parent,\r\n parentComponent,\r\n isSVG,\r\n container,\r\n hiddenContainer,\r\n anchor,\r\n deps: 0,\r\n pendingId: 0,\r\n timeout: typeof timeout === 'number' ? timeout : -1,\r\n activeBranch: null,\r\n pendingBranch: null,\r\n isInFallback: true,\r\n isHydrating,\r\n isUnmounted: false,\r\n effects: [],\r\n resolve(resume = false) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (!resume && !suspense.pendingBranch) {\r\n throw new Error(`suspense.resolve() is called without a pending branch.`);\r\n }\r\n if (suspense.isUnmounted) {\r\n throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);\r\n }\r\n }\r\n const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;\r\n if (suspense.isHydrating) {\r\n suspense.isHydrating = false;\r\n }\r\n else if (!resume) {\r\n const delayEnter = activeBranch &&\r\n pendingBranch.transition &&\r\n pendingBranch.transition.mode === 'out-in';\r\n if (delayEnter) {\r\n activeBranch.transition.afterLeave = () => {\r\n if (pendingId === suspense.pendingId) {\r\n move(pendingBranch, container, anchor, 0 /* ENTER */);\r\n }\r\n };\r\n }\r\n // this is initial anchor on mount\r\n let { anchor } = suspense;\r\n // unmount current active tree\r\n if (activeBranch) {\r\n // if the fallback tree was mounted, it may have been moved\r\n // as part of a parent suspense. get the latest anchor for insertion\r\n anchor = next(activeBranch);\r\n unmount(activeBranch, parentComponent, suspense, true);\r\n }\r\n if (!delayEnter) {\r\n // move content from off-dom container to actual container\r\n move(pendingBranch, container, anchor, 0 /* ENTER */);\r\n }\r\n }\r\n setActiveBranch(suspense, pendingBranch);\r\n suspense.pendingBranch = null;\r\n suspense.isInFallback = false;\r\n // flush buffered effects\r\n // check if there is a pending parent suspense\r\n let parent = suspense.parent;\r\n let hasUnresolvedAncestor = false;\r\n while (parent) {\r\n if (parent.pendingBranch) {\r\n // found a pending parent suspense, merge buffered post jobs\r\n // into that parent\r\n parent.effects.push(...effects);\r\n hasUnresolvedAncestor = true;\r\n break;\r\n }\r\n parent = parent.parent;\r\n }\r\n // no pending parent suspense, flush all jobs\r\n if (!hasUnresolvedAncestor) {\r\n queuePostFlushCb(effects);\r\n }\r\n suspense.effects = [];\r\n // invoke @resolve event\r\n triggerEvent(vnode, 'onResolve');\r\n },\r\n fallback(fallbackVNode) {\r\n if (!suspense.pendingBranch) {\r\n return;\r\n }\r\n const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;\r\n // invoke @fallback event\r\n triggerEvent(vnode, 'onFallback');\r\n const anchor = next(activeBranch);\r\n const mountFallback = () => {\r\n if (!suspense.isInFallback) {\r\n return;\r\n }\r\n // mount the fallback tree\r\n patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context\r\n isSVG, slotScopeIds, optimized);\r\n setActiveBranch(suspense, fallbackVNode);\r\n };\r\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';\r\n if (delayEnter) {\r\n activeBranch.transition.afterLeave = mountFallback;\r\n }\r\n suspense.isInFallback = true;\r\n // unmount current active branch\r\n unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now\r\n true // shouldRemove\r\n );\r\n if (!delayEnter) {\r\n mountFallback();\r\n }\r\n },\r\n move(container, anchor, type) {\r\n suspense.activeBranch &&\r\n move(suspense.activeBranch, container, anchor, type);\r\n suspense.container = container;\r\n },\r\n next() {\r\n return suspense.activeBranch && next(suspense.activeBranch);\r\n },\r\n registerDep(instance, setupRenderEffect) {\r\n const isInPendingSuspense = !!suspense.pendingBranch;\r\n if (isInPendingSuspense) {\r\n suspense.deps++;\r\n }\r\n const hydratedEl = instance.vnode.el;\r\n instance\r\n .asyncDep.catch(err => {\r\n handleError(err, instance, 0 /* SETUP_FUNCTION */);\r\n })\r\n .then(asyncSetupResult => {\r\n // retry when the setup() promise resolves.\r\n // component may have been unmounted before resolve.\r\n if (instance.isUnmounted ||\r\n suspense.isUnmounted ||\r\n suspense.pendingId !== instance.suspenseId) {\r\n return;\r\n }\r\n // retry from this component\r\n instance.asyncResolved = true;\r\n const { vnode } = instance;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n pushWarningContext(vnode);\r\n }\r\n handleSetupResult(instance, asyncSetupResult, false);\r\n if (hydratedEl) {\r\n // vnode may have been replaced if an update happened before the\r\n // async dep is resolved.\r\n vnode.el = hydratedEl;\r\n }\r\n const placeholder = !hydratedEl && instance.subTree.el;\r\n setupRenderEffect(instance, vnode, \r\n // component may have been moved before resolve.\r\n // if this is not a hydration, instance.subTree will be the comment\r\n // placeholder.\r\n parentNode(hydratedEl || instance.subTree.el), \r\n // anchor will not be used if this is hydration, so only need to\r\n // consider the comment placeholder case.\r\n hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);\r\n if (placeholder) {\r\n remove(placeholder);\r\n }\r\n updateHOCHostEl(instance, vnode.el);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n popWarningContext();\r\n }\r\n // only decrease deps count if suspense is not already resolved\r\n if (isInPendingSuspense && --suspense.deps === 0) {\r\n suspense.resolve();\r\n }\r\n });\r\n },\r\n unmount(parentSuspense, doRemove) {\r\n suspense.isUnmounted = true;\r\n if (suspense.activeBranch) {\r\n unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);\r\n }\r\n if (suspense.pendingBranch) {\r\n unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);\r\n }\r\n }\r\n };\r\n return suspense;\r\n}\r\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\r\n /* eslint-disable no-restricted-globals */\r\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */));\r\n // there are two possible scenarios for server-rendered suspense:\r\n // - success: ssr content should be fully resolved\r\n // - failure: ssr content should be the fallback branch.\r\n // however, on the client we don't really know if it has failed or not\r\n // attempt to hydrate the DOM assuming it has succeeded, but we still\r\n // need to construct a suspense boundary first\r\n const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, slotScopeIds, optimized);\r\n if (suspense.deps === 0) {\r\n suspense.resolve();\r\n }\r\n return result;\r\n /* eslint-enable no-restricted-globals */\r\n}\r\nfunction normalizeSuspenseChildren(vnode) {\r\n const { shapeFlag, children } = vnode;\r\n const isSlotChildren = shapeFlag & 32 /* SLOTS_CHILDREN */;\r\n vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children);\r\n vnode.ssFallback = isSlotChildren\r\n ? normalizeSuspenseSlot(children.fallback)\r\n : createVNode(Comment);\r\n}\r\nfunction normalizeSuspenseSlot(s) {\r\n let block;\r\n if (isFunction(s)) {\r\n const trackBlock = isBlockTreeEnabled && s._c;\r\n if (trackBlock) {\r\n // disableTracking: false\r\n // allow block tracking for compiled slots\r\n // (see ./componentRenderContext.ts)\r\n s._d = false;\r\n openBlock();\r\n }\r\n s = s();\r\n if (trackBlock) {\r\n s._d = true;\r\n block = currentBlock;\r\n closeBlock();\r\n }\r\n }\r\n if (isArray(s)) {\r\n const singleChild = filterSingleRoot(s);\r\n if ((process.env.NODE_ENV !== 'production') && !singleChild) {\r\n warn(`<Suspense> slots expect a single root node.`);\r\n }\r\n s = singleChild;\r\n }\r\n s = normalizeVNode(s);\r\n if (block && !s.dynamicChildren) {\r\n s.dynamicChildren = block.filter(c => c !== s);\r\n }\r\n return s;\r\n}\r\nfunction queueEffectWithSuspense(fn, suspense) {\r\n if (suspense && suspense.pendingBranch) {\r\n if (isArray(fn)) {\r\n suspense.effects.push(...fn);\r\n }\r\n else {\r\n suspense.effects.push(fn);\r\n }\r\n }\r\n else {\r\n queuePostFlushCb(fn);\r\n }\r\n}\r\nfunction setActiveBranch(suspense, branch) {\r\n suspense.activeBranch = branch;\r\n const { vnode, parentComponent } = suspense;\r\n const el = (vnode.el = branch.el);\r\n // in case suspense is the root node of a component,\r\n // recursively update the HOC el\r\n if (parentComponent && parentComponent.subTree === vnode) {\r\n parentComponent.vnode.el = el;\r\n updateHOCHostEl(parentComponent, el);\r\n }\r\n}\n\nfunction provide(key, value) {\r\n if (!currentInstance) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`provide() can only be used inside setup().`);\r\n }\r\n }\r\n else {\r\n let provides = currentInstance.provides;\r\n // by default an instance inherits its parent's provides object\r\n // but when it needs to provide values of its own, it creates its\r\n // own provides object using parent provides object as prototype.\r\n // this way in `inject` we can simply look up injections from direct\r\n // parent and let the prototype chain do the work.\r\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\r\n if (parentProvides === provides) {\r\n provides = currentInstance.provides = Object.create(parentProvides);\r\n }\r\n // TS doesn't allow symbol as index type\r\n provides[key] = value;\r\n }\r\n}\r\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\r\n // fallback to `currentRenderingInstance` so that this can be called in\r\n // a functional component\r\n const instance = currentInstance || currentRenderingInstance;\r\n if (instance) {\r\n // #2400\r\n // to support `app.use` plugins,\r\n // fallback to appContext's `provides` if the instance is at root\r\n const provides = instance.parent == null\r\n ? instance.vnode.appContext && instance.vnode.appContext.provides\r\n : instance.parent.provides;\r\n if (provides && key in provides) {\r\n // TS doesn't allow symbol as index type\r\n return provides[key];\r\n }\r\n else if (arguments.length > 1) {\r\n return treatDefaultAsFactory && isFunction(defaultValue)\r\n ? defaultValue.call(instance.proxy)\r\n : defaultValue;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`injection \"${String(key)}\" not found.`);\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`inject() can only be used inside setup() or functional components.`);\r\n }\r\n}\n\n// Simple effect.\r\nfunction watchEffect(effect, options) {\r\n return doWatch(effect, null, options);\r\n}\r\nfunction watchPostEffect(effect, options) {\r\n return doWatch(effect, null, ((process.env.NODE_ENV !== 'production')\r\n ? Object.assign(Object.assign({}, options), { flush: 'post' }) : { flush: 'post' }));\r\n}\r\nfunction watchSyncEffect(effect, options) {\r\n return doWatch(effect, null, ((process.env.NODE_ENV !== 'production')\r\n ? Object.assign(Object.assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));\r\n}\r\n// initial value for watchers to trigger on undefined initial values\r\nconst INITIAL_WATCHER_VALUE = {};\r\n// implementation\r\nfunction watch(source, cb, options) {\r\n if ((process.env.NODE_ENV !== 'production') && !isFunction(cb)) {\r\n warn(`\\`watch(fn, options?)\\` signature has been moved to a separate API. ` +\r\n `Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only ` +\r\n `supports \\`watch(source, cb, options?) signature.`);\r\n }\r\n return doWatch(source, cb, options);\r\n}\r\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\r\n if ((process.env.NODE_ENV !== 'production') && !cb) {\r\n if (immediate !== undefined) {\r\n warn(`watch() \"immediate\" option is only respected when using the ` +\r\n `watch(source, callback, options?) signature.`);\r\n }\r\n if (deep !== undefined) {\r\n warn(`watch() \"deep\" option is only respected when using the ` +\r\n `watch(source, callback, options?) signature.`);\r\n }\r\n }\r\n const warnInvalidSource = (s) => {\r\n warn(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, ` +\r\n `a reactive object, or an array of these types.`);\r\n };\r\n const instance = currentInstance;\r\n let getter;\r\n let forceTrigger = false;\r\n let isMultiSource = false;\r\n if (isRef(source)) {\r\n getter = () => source.value;\r\n forceTrigger = isShallow$1(source);\r\n }\r\n else if (isReactive(source)) {\r\n getter = () => source;\r\n deep = true;\r\n }\r\n else if (isArray(source)) {\r\n isMultiSource = true;\r\n forceTrigger = source.some(isReactive);\r\n getter = () => source.map(s => {\r\n if (isRef(s)) {\r\n return s.value;\r\n }\r\n else if (isReactive(s)) {\r\n return traverse(s);\r\n }\r\n else if (isFunction(s)) {\r\n return callWithErrorHandling(s, instance, 2 /* WATCH_GETTER */);\r\n }\r\n else {\r\n (process.env.NODE_ENV !== 'production') && warnInvalidSource(s);\r\n }\r\n });\r\n }\r\n else if (isFunction(source)) {\r\n if (cb) {\r\n // getter with cb\r\n getter = () => callWithErrorHandling(source, instance, 2 /* WATCH_GETTER */);\r\n }\r\n else {\r\n // no cb -> simple effect\r\n getter = () => {\r\n if (instance && instance.isUnmounted) {\r\n return;\r\n }\r\n if (cleanup) {\r\n cleanup();\r\n }\r\n return callWithAsyncErrorHandling(source, instance, 3 /* WATCH_CALLBACK */, [onCleanup]);\r\n };\r\n }\r\n }\r\n else {\r\n getter = NOOP;\r\n (process.env.NODE_ENV !== 'production') && warnInvalidSource(source);\r\n }\r\n if (cb && deep) {\r\n const baseGetter = getter;\r\n getter = () => traverse(baseGetter());\r\n }\r\n let cleanup;\r\n let onCleanup = (fn) => {\r\n cleanup = effect.onStop = () => {\r\n callWithErrorHandling(fn, instance, 4 /* WATCH_CLEANUP */);\r\n };\r\n };\r\n // in SSR there is no need to setup an actual effect, and it should be noop\r\n // unless it's eager\r\n if (isInSSRComponentSetup) {\r\n // we will also not call the invalidate callback (+ runner is not set up)\r\n onCleanup = NOOP;\r\n if (!cb) {\r\n getter();\r\n }\r\n else if (immediate) {\r\n callWithAsyncErrorHandling(cb, instance, 3 /* WATCH_CALLBACK */, [\r\n getter(),\r\n isMultiSource ? [] : undefined,\r\n onCleanup\r\n ]);\r\n }\r\n return NOOP;\r\n }\r\n let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\r\n const job = () => {\r\n if (!effect.active) {\r\n return;\r\n }\r\n if (cb) {\r\n // watch(source, cb)\r\n const newValue = effect.run();\r\n if (deep ||\r\n forceTrigger ||\r\n (isMultiSource\r\n ? newValue.some((v, i) => hasChanged(v, oldValue[i]))\r\n : hasChanged(newValue, oldValue)) ||\r\n (false )) {\r\n // cleanup before running cb again\r\n if (cleanup) {\r\n cleanup();\r\n }\r\n callWithAsyncErrorHandling(cb, instance, 3 /* WATCH_CALLBACK */, [\r\n newValue,\r\n // pass undefined as the old value when it's changed for the first time\r\n oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\r\n onCleanup\r\n ]);\r\n oldValue = newValue;\r\n }\r\n }\r\n else {\r\n // watchEffect\r\n effect.run();\r\n }\r\n };\r\n // important: mark the job as a watcher callback so that scheduler knows\r\n // it is allowed to self-trigger (#1727)\r\n job.allowRecurse = !!cb;\r\n let scheduler;\r\n if (flush === 'sync') {\r\n scheduler = job; // the scheduler function gets called directly\r\n }\r\n else if (flush === 'post') {\r\n scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\r\n }\r\n else {\r\n // default: 'pre'\r\n scheduler = () => {\r\n if (!instance || instance.isMounted) {\r\n queuePreFlushCb(job);\r\n }\r\n else {\r\n // with 'pre' option, the first call must happen before\r\n // the component is mounted so it is called synchronously.\r\n job();\r\n }\r\n };\r\n }\r\n const effect = new ReactiveEffect(getter, scheduler);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n effect.onTrack = onTrack;\r\n effect.onTrigger = onTrigger;\r\n }\r\n // initial run\r\n if (cb) {\r\n if (immediate) {\r\n job();\r\n }\r\n else {\r\n oldValue = effect.run();\r\n }\r\n }\r\n else if (flush === 'post') {\r\n queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);\r\n }\r\n else {\r\n effect.run();\r\n }\r\n return () => {\r\n effect.stop();\r\n if (instance && instance.scope) {\r\n remove(instance.scope.effects, effect);\r\n }\r\n };\r\n}\r\n// this.$watch\r\nfunction instanceWatch(source, value, options) {\r\n const publicThis = this.proxy;\r\n const getter = isString(source)\r\n ? source.includes('.')\r\n ? createPathGetter(publicThis, source)\r\n : () => publicThis[source]\r\n : source.bind(publicThis, publicThis);\r\n let cb;\r\n if (isFunction(value)) {\r\n cb = value;\r\n }\r\n else {\r\n cb = value.handler;\r\n options = value;\r\n }\r\n const cur = currentInstance;\r\n setCurrentInstance(this);\r\n const res = doWatch(getter, cb.bind(publicThis), options);\r\n if (cur) {\r\n setCurrentInstance(cur);\r\n }\r\n else {\r\n unsetCurrentInstance();\r\n }\r\n return res;\r\n}\r\nfunction createPathGetter(ctx, path) {\r\n const segments = path.split('.');\r\n return () => {\r\n let cur = ctx;\r\n for (let i = 0; i < segments.length && cur; i++) {\r\n cur = cur[segments[i]];\r\n }\r\n return cur;\r\n };\r\n}\r\nfunction traverse(value, seen) {\r\n if (!isObject(value) || value[\"__v_skip\" /* SKIP */]) {\r\n return value;\r\n }\r\n seen = seen || new Set();\r\n if (seen.has(value)) {\r\n return value;\r\n }\r\n seen.add(value);\r\n if (isRef(value)) {\r\n traverse(value.value, seen);\r\n }\r\n else if (isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n traverse(value[i], seen);\r\n }\r\n }\r\n else if (isSet(value) || isMap(value)) {\r\n value.forEach((v) => {\r\n traverse(v, seen);\r\n });\r\n }\r\n else if (isPlainObject(value)) {\r\n for (const key in value) {\r\n traverse(value[key], seen);\r\n }\r\n }\r\n return value;\r\n}\n\nfunction useTransitionState() {\r\n const state = {\r\n isMounted: false,\r\n isLeaving: false,\r\n isUnmounting: false,\r\n leavingVNodes: new Map()\r\n };\r\n onMounted(() => {\r\n state.isMounted = true;\r\n });\r\n onBeforeUnmount(() => {\r\n state.isUnmounting = true;\r\n });\r\n return state;\r\n}\r\nconst TransitionHookValidator = [Function, Array];\r\nconst BaseTransitionImpl = {\r\n name: `BaseTransition`,\r\n props: {\r\n mode: String,\r\n appear: Boolean,\r\n persisted: Boolean,\r\n // enter\r\n onBeforeEnter: TransitionHookValidator,\r\n onEnter: TransitionHookValidator,\r\n onAfterEnter: TransitionHookValidator,\r\n onEnterCancelled: TransitionHookValidator,\r\n // leave\r\n onBeforeLeave: TransitionHookValidator,\r\n onLeave: TransitionHookValidator,\r\n onAfterLeave: TransitionHookValidator,\r\n onLeaveCancelled: TransitionHookValidator,\r\n // appear\r\n onBeforeAppear: TransitionHookValidator,\r\n onAppear: TransitionHookValidator,\r\n onAfterAppear: TransitionHookValidator,\r\n onAppearCancelled: TransitionHookValidator\r\n },\r\n setup(props, { slots }) {\r\n const instance = getCurrentInstance();\r\n const state = useTransitionState();\r\n let prevTransitionKey;\r\n return () => {\r\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\r\n if (!children || !children.length) {\r\n return;\r\n }\r\n let child = children[0];\r\n if (children.length > 1) {\r\n let hasFound = false;\r\n // locate first non-comment child\r\n for (const c of children) {\r\n if (c.type !== Comment) {\r\n if ((process.env.NODE_ENV !== 'production') && hasFound) {\r\n // warn more than one non-comment child\r\n warn('<transition> can only be used on a single element or component. ' +\r\n 'Use <transition-group> for lists.');\r\n break;\r\n }\r\n child = c;\r\n hasFound = true;\r\n if (!(process.env.NODE_ENV !== 'production'))\r\n break;\r\n }\r\n }\r\n }\r\n // there's no need to track reactivity for these props so use the raw\r\n // props for a bit better perf\r\n const rawProps = toRaw(props);\r\n const { mode } = rawProps;\r\n // check mode\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n mode &&\r\n mode !== 'in-out' &&\r\n mode !== 'out-in' &&\r\n mode !== 'default') {\r\n warn(`invalid <transition> mode: ${mode}`);\r\n }\r\n if (state.isLeaving) {\r\n return emptyPlaceholder(child);\r\n }\r\n // in the case of <transition><keep-alive/></transition>, we need to\r\n // compare the type of the kept-alive children.\r\n const innerChild = getKeepAliveChild(child);\r\n if (!innerChild) {\r\n return emptyPlaceholder(child);\r\n }\r\n const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance);\r\n setTransitionHooks(innerChild, enterHooks);\r\n const oldChild = instance.subTree;\r\n const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\r\n let transitionKeyChanged = false;\r\n const { getTransitionKey } = innerChild.type;\r\n if (getTransitionKey) {\r\n const key = getTransitionKey();\r\n if (prevTransitionKey === undefined) {\r\n prevTransitionKey = key;\r\n }\r\n else if (key !== prevTransitionKey) {\r\n prevTransitionKey = key;\r\n transitionKeyChanged = true;\r\n }\r\n }\r\n // handle mode\r\n if (oldInnerChild &&\r\n oldInnerChild.type !== Comment &&\r\n (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\r\n const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);\r\n // update old tree's hooks in case of dynamic transition\r\n setTransitionHooks(oldInnerChild, leavingHooks);\r\n // switching between different views\r\n if (mode === 'out-in') {\r\n state.isLeaving = true;\r\n // return placeholder node and queue update when leave finishes\r\n leavingHooks.afterLeave = () => {\r\n state.isLeaving = false;\r\n instance.update();\r\n };\r\n return emptyPlaceholder(child);\r\n }\r\n else if (mode === 'in-out' && innerChild.type !== Comment) {\r\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\r\n const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);\r\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\r\n // early removal callback\r\n el._leaveCb = () => {\r\n earlyRemove();\r\n el._leaveCb = undefined;\r\n delete enterHooks.delayedLeave;\r\n };\r\n enterHooks.delayedLeave = delayedLeave;\r\n };\r\n }\r\n }\r\n return child;\r\n };\r\n }\r\n};\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nconst BaseTransition = BaseTransitionImpl;\r\nfunction getLeavingNodesForType(state, vnode) {\r\n const { leavingVNodes } = state;\r\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\r\n if (!leavingVNodesCache) {\r\n leavingVNodesCache = Object.create(null);\r\n leavingVNodes.set(vnode.type, leavingVNodesCache);\r\n }\r\n return leavingVNodesCache;\r\n}\r\n// The transition hooks are attached to the vnode as vnode.transition\r\n// and will be called at appropriate timing in the renderer.\r\nfunction resolveTransitionHooks(vnode, props, state, instance) {\r\n const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props;\r\n const key = String(vnode.key);\r\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\r\n const callHook = (hook, args) => {\r\n hook &&\r\n callWithAsyncErrorHandling(hook, instance, 9 /* TRANSITION_HOOK */, args);\r\n };\r\n const hooks = {\r\n mode,\r\n persisted,\r\n beforeEnter(el) {\r\n let hook = onBeforeEnter;\r\n if (!state.isMounted) {\r\n if (appear) {\r\n hook = onBeforeAppear || onBeforeEnter;\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n // for same element (v-show)\r\n if (el._leaveCb) {\r\n el._leaveCb(true /* cancelled */);\r\n }\r\n // for toggled element with same key (v-if)\r\n const leavingVNode = leavingVNodesCache[key];\r\n if (leavingVNode &&\r\n isSameVNodeType(vnode, leavingVNode) &&\r\n leavingVNode.el._leaveCb) {\r\n // force early removal (not cancelled)\r\n leavingVNode.el._leaveCb();\r\n }\r\n callHook(hook, [el]);\r\n },\r\n enter(el) {\r\n let hook = onEnter;\r\n let afterHook = onAfterEnter;\r\n let cancelHook = onEnterCancelled;\r\n if (!state.isMounted) {\r\n if (appear) {\r\n hook = onAppear || onEnter;\r\n afterHook = onAfterAppear || onAfterEnter;\r\n cancelHook = onAppearCancelled || onEnterCancelled;\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n let called = false;\r\n const done = (el._enterCb = (cancelled) => {\r\n if (called)\r\n return;\r\n called = true;\r\n if (cancelled) {\r\n callHook(cancelHook, [el]);\r\n }\r\n else {\r\n callHook(afterHook, [el]);\r\n }\r\n if (hooks.delayedLeave) {\r\n hooks.delayedLeave();\r\n }\r\n el._enterCb = undefined;\r\n });\r\n if (hook) {\r\n hook(el, done);\r\n if (hook.length <= 1) {\r\n done();\r\n }\r\n }\r\n else {\r\n done();\r\n }\r\n },\r\n leave(el, remove) {\r\n const key = String(vnode.key);\r\n if (el._enterCb) {\r\n el._enterCb(true /* cancelled */);\r\n }\r\n if (state.isUnmounting) {\r\n return remove();\r\n }\r\n callHook(onBeforeLeave, [el]);\r\n let called = false;\r\n const done = (el._leaveCb = (cancelled) => {\r\n if (called)\r\n return;\r\n called = true;\r\n remove();\r\n if (cancelled) {\r\n callHook(onLeaveCancelled, [el]);\r\n }\r\n else {\r\n callHook(onAfterLeave, [el]);\r\n }\r\n el._leaveCb = undefined;\r\n if (leavingVNodesCache[key] === vnode) {\r\n delete leavingVNodesCache[key];\r\n }\r\n });\r\n leavingVNodesCache[key] = vnode;\r\n if (onLeave) {\r\n onLeave(el, done);\r\n if (onLeave.length <= 1) {\r\n done();\r\n }\r\n }\r\n else {\r\n done();\r\n }\r\n },\r\n clone(vnode) {\r\n return resolveTransitionHooks(vnode, props, state, instance);\r\n }\r\n };\r\n return hooks;\r\n}\r\n// the placeholder really only handles one special case: KeepAlive\r\n// in the case of a KeepAlive in a leave phase we need to return a KeepAlive\r\n// placeholder with empty content to avoid the KeepAlive instance from being\r\n// unmounted.\r\nfunction emptyPlaceholder(vnode) {\r\n if (isKeepAlive(vnode)) {\r\n vnode = cloneVNode(vnode);\r\n vnode.children = null;\r\n return vnode;\r\n }\r\n}\r\nfunction getKeepAliveChild(vnode) {\r\n return isKeepAlive(vnode)\r\n ? vnode.children\r\n ? vnode.children[0]\r\n : undefined\r\n : vnode;\r\n}\r\nfunction setTransitionHooks(vnode, hooks) {\r\n if (vnode.shapeFlag & 6 /* COMPONENT */ && vnode.component) {\r\n setTransitionHooks(vnode.component.subTree, hooks);\r\n }\r\n else if (vnode.shapeFlag & 128 /* SUSPENSE */) {\r\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\r\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\r\n }\r\n else {\r\n vnode.transition = hooks;\r\n }\r\n}\r\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\r\n let ret = [];\r\n let keyedFragmentCount = 0;\r\n for (let i = 0; i < children.length; i++) {\r\n let child = children[i];\r\n // #5360 inherit parent key in case of <template v-for>\r\n const key = parentKey == null\r\n ? child.key\r\n : String(parentKey) + String(child.key != null ? child.key : i);\r\n // handle fragment children case, e.g. v-for\r\n if (child.type === Fragment) {\r\n if (child.patchFlag & 128 /* KEYED_FRAGMENT */)\r\n keyedFragmentCount++;\r\n ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));\r\n }\r\n // comment placeholders should be skipped, e.g. v-if\r\n else if (keepComment || child.type !== Comment) {\r\n ret.push(key != null ? cloneVNode(child, { key }) : child);\r\n }\r\n }\r\n // #1126 if a transition children list contains multiple sub fragments, these\r\n // fragments will be merged into a flat children array. Since each v-for\r\n // fragment may contain different static bindings inside, we need to de-op\r\n // these children to force full diffs to ensure correct behavior.\r\n if (keyedFragmentCount > 1) {\r\n for (let i = 0; i < ret.length; i++) {\r\n ret[i].patchFlag = -2 /* BAIL */;\r\n }\r\n }\r\n return ret;\r\n}\n\n// implementation, close to no-op\r\nfunction defineComponent(options) {\r\n return isFunction(options) ? { setup: options, name: options.name } : options;\r\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\r\nfunction defineAsyncComponent(source) {\r\n if (isFunction(source)) {\r\n source = { loader: source };\r\n }\r\n const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out\r\n suspensible = true, onError: userOnError } = source;\r\n let pendingRequest = null;\r\n let resolvedComp;\r\n let retries = 0;\r\n const retry = () => {\r\n retries++;\r\n pendingRequest = null;\r\n return load();\r\n };\r\n const load = () => {\r\n let thisRequest;\r\n return (pendingRequest ||\r\n (thisRequest = pendingRequest =\r\n loader()\r\n .catch(err => {\r\n err = err instanceof Error ? err : new Error(String(err));\r\n if (userOnError) {\r\n return new Promise((resolve, reject) => {\r\n const userRetry = () => resolve(retry());\r\n const userFail = () => reject(err);\r\n userOnError(err, userRetry, userFail, retries + 1);\r\n });\r\n }\r\n else {\r\n throw err;\r\n }\r\n })\r\n .then((comp) => {\r\n if (thisRequest !== pendingRequest && pendingRequest) {\r\n return pendingRequest;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && !comp) {\r\n warn(`Async component loader resolved to undefined. ` +\r\n `If you are using retry(), make sure to return its return value.`);\r\n }\r\n // interop module default\r\n if (comp &&\r\n (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\r\n comp = comp.default;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && comp && !isObject(comp) && !isFunction(comp)) {\r\n throw new Error(`Invalid async component load result: ${comp}`);\r\n }\r\n resolvedComp = comp;\r\n return comp;\r\n })));\r\n };\r\n return defineComponent({\r\n name: 'AsyncComponentWrapper',\r\n __asyncLoader: load,\r\n get __asyncResolved() {\r\n return resolvedComp;\r\n },\r\n setup() {\r\n const instance = currentInstance;\r\n // already resolved\r\n if (resolvedComp) {\r\n return () => createInnerComp(resolvedComp, instance);\r\n }\r\n const onError = (err) => {\r\n pendingRequest = null;\r\n handleError(err, instance, 13 /* ASYNC_COMPONENT_LOADER */, !errorComponent /* do not throw in dev if user provided error component */);\r\n };\r\n // suspense-controlled or SSR.\r\n if ((suspensible && instance.suspense) ||\r\n (isInSSRComponentSetup)) {\r\n return load()\r\n .then(comp => {\r\n return () => createInnerComp(comp, instance);\r\n })\r\n .catch(err => {\r\n onError(err);\r\n return () => errorComponent\r\n ? createVNode(errorComponent, {\r\n error: err\r\n })\r\n : null;\r\n });\r\n }\r\n const loaded = ref(false);\r\n const error = ref();\r\n const delayed = ref(!!delay);\r\n if (delay) {\r\n setTimeout(() => {\r\n delayed.value = false;\r\n }, delay);\r\n }\r\n if (timeout != null) {\r\n setTimeout(() => {\r\n if (!loaded.value && !error.value) {\r\n const err = new Error(`Async component timed out after ${timeout}ms.`);\r\n onError(err);\r\n error.value = err;\r\n }\r\n }, timeout);\r\n }\r\n load()\r\n .then(() => {\r\n loaded.value = true;\r\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\r\n // parent is keep-alive, force update so the loaded component's\r\n // name is taken into account\r\n queueJob(instance.parent.update);\r\n }\r\n })\r\n .catch(err => {\r\n onError(err);\r\n error.value = err;\r\n });\r\n return () => {\r\n if (loaded.value && resolvedComp) {\r\n return createInnerComp(resolvedComp, instance);\r\n }\r\n else if (error.value && errorComponent) {\r\n return createVNode(errorComponent, {\r\n error: error.value\r\n });\r\n }\r\n else if (loadingComponent && !delayed.value) {\r\n return createVNode(loadingComponent);\r\n }\r\n };\r\n }\r\n });\r\n}\r\nfunction createInnerComp(comp, { vnode: { ref, props, children } }) {\r\n const vnode = createVNode(comp, props, children);\r\n // ensure inner component inherits the async wrapper's ref owner\r\n vnode.ref = ref;\r\n return vnode;\r\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\r\nconst KeepAliveImpl = {\r\n name: `KeepAlive`,\r\n // Marker for special handling inside the renderer. We are not using a ===\r\n // check directly on KeepAlive in the renderer, because importing it directly\r\n // would prevent it from being tree-shaken.\r\n __isKeepAlive: true,\r\n props: {\r\n include: [String, RegExp, Array],\r\n exclude: [String, RegExp, Array],\r\n max: [String, Number]\r\n },\r\n setup(props, { slots }) {\r\n const instance = getCurrentInstance();\r\n // KeepAlive communicates with the instantiated renderer via the\r\n // ctx where the renderer passes in its internals,\r\n // and the KeepAlive instance exposes activate/deactivate implementations.\r\n // The whole point of this is to avoid importing KeepAlive directly in the\r\n // renderer to facilitate tree-shaking.\r\n const sharedContext = instance.ctx;\r\n // if the internal renderer is not registered, it indicates that this is server-side rendering,\r\n // for KeepAlive, we just need to render its children\r\n if (!sharedContext.renderer) {\r\n return slots.default;\r\n }\r\n const cache = new Map();\r\n const keys = new Set();\r\n let current = null;\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n instance.__v_cache = cache;\r\n }\r\n const parentSuspense = instance.suspense;\r\n const { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext;\r\n const storageContainer = createElement('div');\r\n sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\r\n const instance = vnode.component;\r\n move(vnode, container, anchor, 0 /* ENTER */, parentSuspense);\r\n // in case props have changed\r\n patch(instance.vnode, vnode, container, anchor, instance, parentSuspense, isSVG, vnode.slotScopeIds, optimized);\r\n queuePostRenderEffect(() => {\r\n instance.isDeactivated = false;\r\n if (instance.a) {\r\n invokeArrayFns(instance.a);\r\n }\r\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\r\n if (vnodeHook) {\r\n invokeVNodeHook(vnodeHook, instance.parent, vnode);\r\n }\r\n }, parentSuspense);\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n // Update components tree\r\n devtoolsComponentAdded(instance);\r\n }\r\n };\r\n sharedContext.deactivate = (vnode) => {\r\n const instance = vnode.component;\r\n move(vnode, storageContainer, null, 1 /* LEAVE */, parentSuspense);\r\n queuePostRenderEffect(() => {\r\n if (instance.da) {\r\n invokeArrayFns(instance.da);\r\n }\r\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\r\n if (vnodeHook) {\r\n invokeVNodeHook(vnodeHook, instance.parent, vnode);\r\n }\r\n instance.isDeactivated = true;\r\n }, parentSuspense);\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n // Update components tree\r\n devtoolsComponentAdded(instance);\r\n }\r\n };\r\n function unmount(vnode) {\r\n // reset the shapeFlag so it can be properly unmounted\r\n resetShapeFlag(vnode);\r\n _unmount(vnode, instance, parentSuspense, true);\r\n }\r\n function pruneCache(filter) {\r\n cache.forEach((vnode, key) => {\r\n const name = getComponentName(vnode.type);\r\n if (name && (!filter || !filter(name))) {\r\n pruneCacheEntry(key);\r\n }\r\n });\r\n }\r\n function pruneCacheEntry(key) {\r\n const cached = cache.get(key);\r\n if (!current || cached.type !== current.type) {\r\n unmount(cached);\r\n }\r\n else if (current) {\r\n // current active instance should no longer be kept-alive.\r\n // we can't unmount it now but it might be later, so reset its flag now.\r\n resetShapeFlag(current);\r\n }\r\n cache.delete(key);\r\n keys.delete(key);\r\n }\r\n // prune cache on include/exclude prop change\r\n watch(() => [props.include, props.exclude], ([include, exclude]) => {\r\n include && pruneCache(name => matches(include, name));\r\n exclude && pruneCache(name => !matches(exclude, name));\r\n }, \r\n // prune post-render after `current` has been updated\r\n { flush: 'post', deep: true });\r\n // cache sub tree after render\r\n let pendingCacheKey = null;\r\n const cacheSubtree = () => {\r\n // fix #1621, the pendingCacheKey could be 0\r\n if (pendingCacheKey != null) {\r\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\r\n }\r\n };\r\n onMounted(cacheSubtree);\r\n onUpdated(cacheSubtree);\r\n onBeforeUnmount(() => {\r\n cache.forEach(cached => {\r\n const { subTree, suspense } = instance;\r\n const vnode = getInnerChild(subTree);\r\n if (cached.type === vnode.type) {\r\n // current instance will be unmounted as part of keep-alive's unmount\r\n resetShapeFlag(vnode);\r\n // but invoke its deactivated hook here\r\n const da = vnode.component.da;\r\n da && queuePostRenderEffect(da, suspense);\r\n return;\r\n }\r\n unmount(cached);\r\n });\r\n });\r\n return () => {\r\n pendingCacheKey = null;\r\n if (!slots.default) {\r\n return null;\r\n }\r\n const children = slots.default();\r\n const rawVNode = children[0];\r\n if (children.length > 1) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`KeepAlive should contain exactly one component child.`);\r\n }\r\n current = null;\r\n return children;\r\n }\r\n else if (!isVNode(rawVNode) ||\r\n (!(rawVNode.shapeFlag & 4 /* STATEFUL_COMPONENT */) &&\r\n !(rawVNode.shapeFlag & 128 /* SUSPENSE */))) {\r\n current = null;\r\n return rawVNode;\r\n }\r\n let vnode = getInnerChild(rawVNode);\r\n const comp = vnode.type;\r\n // for async components, name check should be based in its loaded\r\n // inner component if available\r\n const name = getComponentName(isAsyncWrapper(vnode)\r\n ? vnode.type.__asyncResolved || {}\r\n : comp);\r\n const { include, exclude, max } = props;\r\n if ((include && (!name || !matches(include, name))) ||\r\n (exclude && name && matches(exclude, name))) {\r\n current = vnode;\r\n return rawVNode;\r\n }\r\n const key = vnode.key == null ? comp : vnode.key;\r\n const cachedVNode = cache.get(key);\r\n // clone vnode if it's reused because we are going to mutate it\r\n if (vnode.el) {\r\n vnode = cloneVNode(vnode);\r\n if (rawVNode.shapeFlag & 128 /* SUSPENSE */) {\r\n rawVNode.ssContent = vnode;\r\n }\r\n }\r\n // #1513 it's possible for the returned vnode to be cloned due to attr\r\n // fallthrough or scopeId, so the vnode here may not be the final vnode\r\n // that is mounted. Instead of caching it directly, we store the pending\r\n // key and cache `instance.subTree` (the normalized vnode) in\r\n // beforeMount/beforeUpdate hooks.\r\n pendingCacheKey = key;\r\n if (cachedVNode) {\r\n // copy over mounted state\r\n vnode.el = cachedVNode.el;\r\n vnode.component = cachedVNode.component;\r\n if (vnode.transition) {\r\n // recursively update transition hooks on subTree\r\n setTransitionHooks(vnode, vnode.transition);\r\n }\r\n // avoid vnode being mounted as fresh\r\n vnode.shapeFlag |= 512 /* COMPONENT_KEPT_ALIVE */;\r\n // make this key the freshest\r\n keys.delete(key);\r\n keys.add(key);\r\n }\r\n else {\r\n keys.add(key);\r\n // prune oldest entry\r\n if (max && keys.size > parseInt(max, 10)) {\r\n pruneCacheEntry(keys.values().next().value);\r\n }\r\n }\r\n // avoid vnode being unmounted\r\n vnode.shapeFlag |= 256 /* COMPONENT_SHOULD_KEEP_ALIVE */;\r\n current = vnode;\r\n return rawVNode;\r\n };\r\n }\r\n};\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\nconst KeepAlive = KeepAliveImpl;\r\nfunction matches(pattern, name) {\r\n if (isArray(pattern)) {\r\n return pattern.some((p) => matches(p, name));\r\n }\r\n else if (isString(pattern)) {\r\n return pattern.split(',').includes(name);\r\n }\r\n else if (pattern.test) {\r\n return pattern.test(name);\r\n }\r\n /* istanbul ignore next */\r\n return false;\r\n}\r\nfunction onActivated(hook, target) {\r\n registerKeepAliveHook(hook, \"a\" /* ACTIVATED */, target);\r\n}\r\nfunction onDeactivated(hook, target) {\r\n registerKeepAliveHook(hook, \"da\" /* DEACTIVATED */, target);\r\n}\r\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\r\n // cache the deactivate branch check wrapper for injected hooks so the same\r\n // hook can be properly deduped by the scheduler. \"__wdc\" stands for \"with\r\n // deactivation check\".\r\n const wrappedHook = hook.__wdc ||\r\n (hook.__wdc = () => {\r\n // only fire the hook if the target instance is NOT in a deactivated branch.\r\n let current = target;\r\n while (current) {\r\n if (current.isDeactivated) {\r\n return;\r\n }\r\n current = current.parent;\r\n }\r\n return hook();\r\n });\r\n injectHook(type, wrappedHook, target);\r\n // In addition to registering it on the target instance, we walk up the parent\r\n // chain and register it on all ancestor instances that are keep-alive roots.\r\n // This avoids the need to walk the entire component tree when invoking these\r\n // hooks, and more importantly, avoids the need to track child components in\r\n // arrays.\r\n if (target) {\r\n let current = target.parent;\r\n while (current && current.parent) {\r\n if (isKeepAlive(current.parent.vnode)) {\r\n injectToKeepAliveRoot(wrappedHook, type, target, current);\r\n }\r\n current = current.parent;\r\n }\r\n }\r\n}\r\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\r\n // injectHook wraps the original for error handling, so make sure to remove\r\n // the wrapped version.\r\n const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */);\r\n onUnmounted(() => {\r\n remove(keepAliveRoot[type], injected);\r\n }, target);\r\n}\r\nfunction resetShapeFlag(vnode) {\r\n let shapeFlag = vnode.shapeFlag;\r\n if (shapeFlag & 256 /* COMPONENT_SHOULD_KEEP_ALIVE */) {\r\n shapeFlag -= 256 /* COMPONENT_SHOULD_KEEP_ALIVE */;\r\n }\r\n if (shapeFlag & 512 /* COMPONENT_KEPT_ALIVE */) {\r\n shapeFlag -= 512 /* COMPONENT_KEPT_ALIVE */;\r\n }\r\n vnode.shapeFlag = shapeFlag;\r\n}\r\nfunction getInnerChild(vnode) {\r\n return vnode.shapeFlag & 128 /* SUSPENSE */ ? vnode.ssContent : vnode;\r\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\r\n if (target) {\r\n const hooks = target[type] || (target[type] = []);\r\n // cache the error handling wrapper for injected hooks so the same hook\r\n // can be properly deduped by the scheduler. \"__weh\" stands for \"with error\r\n // handling\".\r\n const wrappedHook = hook.__weh ||\r\n (hook.__weh = (...args) => {\r\n if (target.isUnmounted) {\r\n return;\r\n }\r\n // disable tracking inside all lifecycle hooks\r\n // since they can potentially be called inside effects.\r\n pauseTracking();\r\n // Set currentInstance during hook invocation.\r\n // This assumes the hook does not synchronously trigger other hooks, which\r\n // can only be false when the user does something really funky.\r\n setCurrentInstance(target);\r\n const res = callWithAsyncErrorHandling(hook, target, type, args);\r\n unsetCurrentInstance();\r\n resetTracking();\r\n return res;\r\n });\r\n if (prepend) {\r\n hooks.unshift(wrappedHook);\r\n }\r\n else {\r\n hooks.push(wrappedHook);\r\n }\r\n return wrappedHook;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, ''));\r\n warn(`${apiName} is called when there is no active component instance to be ` +\r\n `associated with. ` +\r\n `Lifecycle injection APIs can only be used during execution of setup().` +\r\n (` If you are using async setup(), make sure to register lifecycle ` +\r\n `hooks before the first await statement.`\r\n ));\r\n }\r\n}\r\nconst createHook = (lifecycle) => (hook, target = currentInstance) => \r\n// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\r\n(!isInSSRComponentSetup || lifecycle === \"sp\" /* SERVER_PREFETCH */) &&\r\n injectHook(lifecycle, hook, target);\r\nconst onBeforeMount = createHook(\"bm\" /* BEFORE_MOUNT */);\r\nconst onMounted = createHook(\"m\" /* MOUNTED */);\r\nconst onBeforeUpdate = createHook(\"bu\" /* BEFORE_UPDATE */);\r\nconst onUpdated = createHook(\"u\" /* UPDATED */);\r\nconst onBeforeUnmount = createHook(\"bum\" /* BEFORE_UNMOUNT */);\r\nconst onUnmounted = createHook(\"um\" /* UNMOUNTED */);\r\nconst onServerPrefetch = createHook(\"sp\" /* SERVER_PREFETCH */);\r\nconst onRenderTriggered = createHook(\"rtg\" /* RENDER_TRIGGERED */);\r\nconst onRenderTracked = createHook(\"rtc\" /* RENDER_TRACKED */);\r\nfunction onErrorCaptured(hook, target = currentInstance) {\r\n injectHook(\"ec\" /* ERROR_CAPTURED */, hook, target);\r\n}\n\nfunction createDuplicateChecker() {\r\n const cache = Object.create(null);\r\n return (type, key) => {\r\n if (cache[key]) {\r\n warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\r\n }\r\n else {\r\n cache[key] = type;\r\n }\r\n };\r\n}\r\nlet shouldCacheAccess = true;\r\nfunction applyOptions(instance) {\r\n const options = resolveMergedOptions(instance);\r\n const publicThis = instance.proxy;\r\n const ctx = instance.ctx;\r\n // do not cache property access on public proxy during state initialization\r\n shouldCacheAccess = false;\r\n // call beforeCreate first before accessing other options since\r\n // the hook may mutate resolved options (#2791)\r\n if (options.beforeCreate) {\r\n callHook(options.beforeCreate, instance, \"bc\" /* BEFORE_CREATE */);\r\n }\r\n const { \r\n // state\r\n data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, \r\n // lifecycle\r\n created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, \r\n // public API\r\n expose, inheritAttrs, \r\n // assets\r\n components, directives, filters } = options;\r\n const checkDuplicateProperties = (process.env.NODE_ENV !== 'production') ? createDuplicateChecker() : null;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const [propsOptions] = instance.propsOptions;\r\n if (propsOptions) {\r\n for (const key in propsOptions) {\r\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\r\n }\r\n }\r\n }\r\n // options initialization order (to be consistent with Vue 2):\r\n // - props (already done outside of this function)\r\n // - inject\r\n // - methods\r\n // - data (deferred since it relies on `this` access)\r\n // - computed\r\n // - watch (deferred since it relies on `this` access)\r\n if (injectOptions) {\r\n resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);\r\n }\r\n if (methods) {\r\n for (const key in methods) {\r\n const methodHandler = methods[key];\r\n if (isFunction(methodHandler)) {\r\n // In dev mode, we use the `createRenderContext` function to define\r\n // methods to the proxy target, and those are read-only but\r\n // reconfigurable, so it needs to be redefined here\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n Object.defineProperty(ctx, key, {\r\n value: methodHandler.bind(publicThis),\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n });\r\n }\r\n else {\r\n ctx[key] = methodHandler.bind(publicThis);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. ` +\r\n `Did you reference the function correctly?`);\r\n }\r\n }\r\n }\r\n if (dataOptions) {\r\n if ((process.env.NODE_ENV !== 'production') && !isFunction(dataOptions)) {\r\n warn(`The data option must be a function. ` +\r\n `Plain object usage is no longer supported.`);\r\n }\r\n const data = dataOptions.call(publicThis, publicThis);\r\n if ((process.env.NODE_ENV !== 'production') && isPromise(data)) {\r\n warn(`data() returned a Promise - note data() cannot be async; If you ` +\r\n `intend to perform data fetching before component renders, use ` +\r\n `async setup() + <Suspense>.`);\r\n }\r\n if (!isObject(data)) {\r\n (process.env.NODE_ENV !== 'production') && warn(`data() should return an object.`);\r\n }\r\n else {\r\n instance.data = reactive(data);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n for (const key in data) {\r\n checkDuplicateProperties(\"Data\" /* DATA */, key);\r\n // expose data on ctx during dev\r\n if (key[0] !== '$' && key[0] !== '_') {\r\n Object.defineProperty(ctx, key, {\r\n configurable: true,\r\n enumerable: true,\r\n get: () => data[key],\r\n set: NOOP\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // state initialization complete at this point - start caching access\r\n shouldCacheAccess = true;\r\n if (computedOptions) {\r\n for (const key in computedOptions) {\r\n const opt = computedOptions[key];\r\n const get = isFunction(opt)\r\n ? opt.bind(publicThis, publicThis)\r\n : isFunction(opt.get)\r\n ? opt.get.bind(publicThis, publicThis)\r\n : NOOP;\r\n if ((process.env.NODE_ENV !== 'production') && get === NOOP) {\r\n warn(`Computed property \"${key}\" has no getter.`);\r\n }\r\n const set = !isFunction(opt) && isFunction(opt.set)\r\n ? opt.set.bind(publicThis)\r\n : (process.env.NODE_ENV !== 'production')\r\n ? () => {\r\n warn(`Write operation failed: computed property \"${key}\" is readonly.`);\r\n }\r\n : NOOP;\r\n const c = computed({\r\n get,\r\n set\r\n });\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => c.value,\r\n set: v => (c.value = v)\r\n });\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\r\n }\r\n }\r\n }\r\n if (watchOptions) {\r\n for (const key in watchOptions) {\r\n createWatcher(watchOptions[key], ctx, publicThis, key);\r\n }\r\n }\r\n if (provideOptions) {\r\n const provides = isFunction(provideOptions)\r\n ? provideOptions.call(publicThis)\r\n : provideOptions;\r\n Reflect.ownKeys(provides).forEach(key => {\r\n provide(key, provides[key]);\r\n });\r\n }\r\n if (created) {\r\n callHook(created, instance, \"c\" /* CREATED */);\r\n }\r\n function registerLifecycleHook(register, hook) {\r\n if (isArray(hook)) {\r\n hook.forEach(_hook => register(_hook.bind(publicThis)));\r\n }\r\n else if (hook) {\r\n register(hook.bind(publicThis));\r\n }\r\n }\r\n registerLifecycleHook(onBeforeMount, beforeMount);\r\n registerLifecycleHook(onMounted, mounted);\r\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\r\n registerLifecycleHook(onUpdated, updated);\r\n registerLifecycleHook(onActivated, activated);\r\n registerLifecycleHook(onDeactivated, deactivated);\r\n registerLifecycleHook(onErrorCaptured, errorCaptured);\r\n registerLifecycleHook(onRenderTracked, renderTracked);\r\n registerLifecycleHook(onRenderTriggered, renderTriggered);\r\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\r\n registerLifecycleHook(onUnmounted, unmounted);\r\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\r\n if (isArray(expose)) {\r\n if (expose.length) {\r\n const exposed = instance.exposed || (instance.exposed = {});\r\n expose.forEach(key => {\r\n Object.defineProperty(exposed, key, {\r\n get: () => publicThis[key],\r\n set: val => (publicThis[key] = val)\r\n });\r\n });\r\n }\r\n else if (!instance.exposed) {\r\n instance.exposed = {};\r\n }\r\n }\r\n // options that are handled when creating the instance but also need to be\r\n // applied from mixins\r\n if (render && instance.render === NOOP) {\r\n instance.render = render;\r\n }\r\n if (inheritAttrs != null) {\r\n instance.inheritAttrs = inheritAttrs;\r\n }\r\n // asset options.\r\n if (components)\r\n instance.components = components;\r\n if (directives)\r\n instance.directives = directives;\r\n}\r\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {\r\n if (isArray(injectOptions)) {\r\n injectOptions = normalizeInject(injectOptions);\r\n }\r\n for (const key in injectOptions) {\r\n const opt = injectOptions[key];\r\n let injected;\r\n if (isObject(opt)) {\r\n if ('default' in opt) {\r\n injected = inject(opt.from || key, opt.default, true /* treat default function as factory */);\r\n }\r\n else {\r\n injected = inject(opt.from || key);\r\n }\r\n }\r\n else {\r\n injected = inject(opt);\r\n }\r\n if (isRef(injected)) {\r\n // TODO remove the check in 3.3\r\n if (unwrapRef) {\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => injected.value,\r\n set: v => (injected.value = v)\r\n });\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`injected property \"${key}\" is a ref and will be auto-unwrapped ` +\r\n `and no longer needs \\`.value\\` in the next minor release. ` +\r\n `To opt-in to the new behavior now, ` +\r\n `set \\`app.config.unwrapInjectedRef = true\\` (this config is ` +\r\n `temporary and will not be needed in the future.)`);\r\n }\r\n ctx[key] = injected;\r\n }\r\n }\r\n else {\r\n ctx[key] = injected;\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\r\n }\r\n }\r\n}\r\nfunction callHook(hook, instance, type) {\r\n callWithAsyncErrorHandling(isArray(hook)\r\n ? hook.map(h => h.bind(instance.proxy))\r\n : hook.bind(instance.proxy), instance, type);\r\n}\r\nfunction createWatcher(raw, ctx, publicThis, key) {\r\n const getter = key.includes('.')\r\n ? createPathGetter(publicThis, key)\r\n : () => publicThis[key];\r\n if (isString(raw)) {\r\n const handler = ctx[raw];\r\n if (isFunction(handler)) {\r\n watch(getter, handler);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\r\n }\r\n }\r\n else if (isFunction(raw)) {\r\n watch(getter, raw.bind(publicThis));\r\n }\r\n else if (isObject(raw)) {\r\n if (isArray(raw)) {\r\n raw.forEach(r => createWatcher(r, ctx, publicThis, key));\r\n }\r\n else {\r\n const handler = isFunction(raw.handler)\r\n ? raw.handler.bind(publicThis)\r\n : ctx[raw.handler];\r\n if (isFunction(handler)) {\r\n watch(getter, handler, raw);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\r\n }\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid watch option: \"${key}\"`, raw);\r\n }\r\n}\r\n/**\r\n * Resolve merged options and cache it on the component.\r\n * This is done only once per-component since the merging does not involve\r\n * instances.\r\n */\r\nfunction resolveMergedOptions(instance) {\r\n const base = instance.type;\r\n const { mixins, extends: extendsOptions } = base;\r\n const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;\r\n const cached = cache.get(base);\r\n let resolved;\r\n if (cached) {\r\n resolved = cached;\r\n }\r\n else if (!globalMixins.length && !mixins && !extendsOptions) {\r\n {\r\n resolved = base;\r\n }\r\n }\r\n else {\r\n resolved = {};\r\n if (globalMixins.length) {\r\n globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true));\r\n }\r\n mergeOptions(resolved, base, optionMergeStrategies);\r\n }\r\n cache.set(base, resolved);\r\n return resolved;\r\n}\r\nfunction mergeOptions(to, from, strats, asMixin = false) {\r\n const { mixins, extends: extendsOptions } = from;\r\n if (extendsOptions) {\r\n mergeOptions(to, extendsOptions, strats, true);\r\n }\r\n if (mixins) {\r\n mixins.forEach((m) => mergeOptions(to, m, strats, true));\r\n }\r\n for (const key in from) {\r\n if (asMixin && key === 'expose') {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`\"expose\" option is ignored when declared in mixins or extends. ` +\r\n `It should only be declared in the base component itself.`);\r\n }\r\n else {\r\n const strat = internalOptionMergeStrats[key] || (strats && strats[key]);\r\n to[key] = strat ? strat(to[key], from[key]) : from[key];\r\n }\r\n }\r\n return to;\r\n}\r\nconst internalOptionMergeStrats = {\r\n data: mergeDataFn,\r\n props: mergeObjectOptions,\r\n emits: mergeObjectOptions,\r\n // objects\r\n methods: mergeObjectOptions,\r\n computed: mergeObjectOptions,\r\n // lifecycle\r\n beforeCreate: mergeAsArray,\r\n created: mergeAsArray,\r\n beforeMount: mergeAsArray,\r\n mounted: mergeAsArray,\r\n beforeUpdate: mergeAsArray,\r\n updated: mergeAsArray,\r\n beforeDestroy: mergeAsArray,\r\n beforeUnmount: mergeAsArray,\r\n destroyed: mergeAsArray,\r\n unmounted: mergeAsArray,\r\n activated: mergeAsArray,\r\n deactivated: mergeAsArray,\r\n errorCaptured: mergeAsArray,\r\n serverPrefetch: mergeAsArray,\r\n // assets\r\n components: mergeObjectOptions,\r\n directives: mergeObjectOptions,\r\n // watch\r\n watch: mergeWatchOptions,\r\n // provide / inject\r\n provide: mergeDataFn,\r\n inject: mergeInject\r\n};\r\nfunction mergeDataFn(to, from) {\r\n if (!from) {\r\n return to;\r\n }\r\n if (!to) {\r\n return from;\r\n }\r\n return function mergedDataFn() {\r\n return (extend)(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from);\r\n };\r\n}\r\nfunction mergeInject(to, from) {\r\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\r\n}\r\nfunction normalizeInject(raw) {\r\n if (isArray(raw)) {\r\n const res = {};\r\n for (let i = 0; i < raw.length; i++) {\r\n res[raw[i]] = raw[i];\r\n }\r\n return res;\r\n }\r\n return raw;\r\n}\r\nfunction mergeAsArray(to, from) {\r\n return to ? [...new Set([].concat(to, from))] : from;\r\n}\r\nfunction mergeObjectOptions(to, from) {\r\n return to ? extend(extend(Object.create(null), to), from) : from;\r\n}\r\nfunction mergeWatchOptions(to, from) {\r\n if (!to)\r\n return from;\r\n if (!from)\r\n return to;\r\n const merged = extend(Object.create(null), to);\r\n for (const key in from) {\r\n merged[key] = mergeAsArray(to[key], from[key]);\r\n }\r\n return merged;\r\n}\n\nfunction initProps(instance, rawProps, isStateful, // result of bitwise flag comparison\r\nisSSR = false) {\r\n const props = {};\r\n const attrs = {};\r\n def(attrs, InternalObjectKey, 1);\r\n instance.propsDefaults = Object.create(null);\r\n setFullProps(instance, rawProps, props, attrs);\r\n // ensure all declared prop keys are present\r\n for (const key in instance.propsOptions[0]) {\r\n if (!(key in props)) {\r\n props[key] = undefined;\r\n }\r\n }\r\n // validation\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateProps(rawProps || {}, props, instance);\r\n }\r\n if (isStateful) {\r\n // stateful\r\n instance.props = isSSR ? props : shallowReactive(props);\r\n }\r\n else {\r\n if (!instance.type.props) {\r\n // functional w/ optional props, props === attrs\r\n instance.props = attrs;\r\n }\r\n else {\r\n // functional w/ declared props\r\n instance.props = props;\r\n }\r\n }\r\n instance.attrs = attrs;\r\n}\r\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\r\n const { props, attrs, vnode: { patchFlag } } = instance;\r\n const rawCurrentProps = toRaw(props);\r\n const [options] = instance.propsOptions;\r\n let hasAttrsChanged = false;\r\n if (\r\n // always force full diff in dev\r\n // - #1942 if hmr is enabled with sfc component\r\n // - vite#872 non-sfc component used by sfc component\r\n !((process.env.NODE_ENV !== 'production') &&\r\n (instance.type.__hmrId ||\r\n (instance.parent && instance.parent.type.__hmrId))) &&\r\n (optimized || patchFlag > 0) &&\r\n !(patchFlag & 16 /* FULL_PROPS */)) {\r\n if (patchFlag & 8 /* PROPS */) {\r\n // Compiler-generated props & no keys change, just set the updated\r\n // the props.\r\n const propsToUpdate = instance.vnode.dynamicProps;\r\n for (let i = 0; i < propsToUpdate.length; i++) {\r\n let key = propsToUpdate[i];\r\n // skip if the prop key is a declared emit event listener\r\n if (isEmitListener(instance.emitsOptions, key)) {\r\n continue;\r\n }\r\n // PROPS flag guarantees rawProps to be non-null\r\n const value = rawProps[key];\r\n if (options) {\r\n // attr / props separation was done on init and will be consistent\r\n // in this code path, so just check if attrs have it.\r\n if (hasOwn(attrs, key)) {\r\n if (value !== attrs[key]) {\r\n attrs[key] = value;\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n else {\r\n const camelizedKey = camelize(key);\r\n props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */);\r\n }\r\n }\r\n else {\r\n if (value !== attrs[key]) {\r\n attrs[key] = value;\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // full props update.\r\n if (setFullProps(instance, rawProps, props, attrs)) {\r\n hasAttrsChanged = true;\r\n }\r\n // in case of dynamic props, check if we need to delete keys from\r\n // the props object\r\n let kebabKey;\r\n for (const key in rawCurrentProps) {\r\n if (!rawProps ||\r\n // for camelCase\r\n (!hasOwn(rawProps, key) &&\r\n // it's possible the original props was passed in as kebab-case\r\n // and converted to camelCase (#955)\r\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {\r\n if (options) {\r\n if (rawPrevProps &&\r\n // for camelCase\r\n (rawPrevProps[key] !== undefined ||\r\n // for kebab-case\r\n rawPrevProps[kebabKey] !== undefined)) {\r\n props[key] = resolvePropValue(options, rawCurrentProps, key, undefined, instance, true /* isAbsent */);\r\n }\r\n }\r\n else {\r\n delete props[key];\r\n }\r\n }\r\n }\r\n // in the case of functional component w/o props declaration, props and\r\n // attrs point to the same object so it should already have been updated.\r\n if (attrs !== rawCurrentProps) {\r\n for (const key in attrs) {\r\n if (!rawProps ||\r\n (!hasOwn(rawProps, key) &&\r\n (!false ))) {\r\n delete attrs[key];\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n }\r\n }\r\n // trigger updates for $attrs in case it's used in component slots\r\n if (hasAttrsChanged) {\r\n trigger(instance, \"set\" /* SET */, '$attrs');\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateProps(rawProps || {}, props, instance);\r\n }\r\n}\r\nfunction setFullProps(instance, rawProps, props, attrs) {\r\n const [options, needCastKeys] = instance.propsOptions;\r\n let hasAttrsChanged = false;\r\n let rawCastValues;\r\n if (rawProps) {\r\n for (let key in rawProps) {\r\n // key, ref are reserved and never passed down\r\n if (isReservedProp(key)) {\r\n continue;\r\n }\r\n const value = rawProps[key];\r\n // prop option names are camelized during normalization, so to support\r\n // kebab -> camel conversion here we need to camelize the key.\r\n let camelKey;\r\n if (options && hasOwn(options, (camelKey = camelize(key)))) {\r\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\r\n props[camelKey] = value;\r\n }\r\n else {\r\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\r\n }\r\n }\r\n else if (!isEmitListener(instance.emitsOptions, key)) {\r\n if (!(key in attrs) || value !== attrs[key]) {\r\n attrs[key] = value;\r\n hasAttrsChanged = true;\r\n }\r\n }\r\n }\r\n }\r\n if (needCastKeys) {\r\n const rawCurrentProps = toRaw(props);\r\n const castValues = rawCastValues || EMPTY_OBJ;\r\n for (let i = 0; i < needCastKeys.length; i++) {\r\n const key = needCastKeys[i];\r\n props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));\r\n }\r\n }\r\n return hasAttrsChanged;\r\n}\r\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\r\n const opt = options[key];\r\n if (opt != null) {\r\n const hasDefault = hasOwn(opt, 'default');\r\n // default values\r\n if (hasDefault && value === undefined) {\r\n const defaultValue = opt.default;\r\n if (opt.type !== Function && isFunction(defaultValue)) {\r\n const { propsDefaults } = instance;\r\n if (key in propsDefaults) {\r\n value = propsDefaults[key];\r\n }\r\n else {\r\n setCurrentInstance(instance);\r\n value = propsDefaults[key] = defaultValue.call(null, props);\r\n unsetCurrentInstance();\r\n }\r\n }\r\n else {\r\n value = defaultValue;\r\n }\r\n }\r\n // boolean casting\r\n if (opt[0 /* shouldCast */]) {\r\n if (isAbsent && !hasDefault) {\r\n value = false;\r\n }\r\n else if (opt[1 /* shouldCastTrue */] &&\r\n (value === '' || value === hyphenate(key))) {\r\n value = true;\r\n }\r\n }\r\n }\r\n return value;\r\n}\r\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\r\n const cache = appContext.propsCache;\r\n const cached = cache.get(comp);\r\n if (cached) {\r\n return cached;\r\n }\r\n const raw = comp.props;\r\n const normalized = {};\r\n const needCastKeys = [];\r\n // apply mixin/extends props\r\n let hasExtends = false;\r\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\r\n const extendProps = (raw) => {\r\n hasExtends = true;\r\n const [props, keys] = normalizePropsOptions(raw, appContext, true);\r\n extend(normalized, props);\r\n if (keys)\r\n needCastKeys.push(...keys);\r\n };\r\n if (!asMixin && appContext.mixins.length) {\r\n appContext.mixins.forEach(extendProps);\r\n }\r\n if (comp.extends) {\r\n extendProps(comp.extends);\r\n }\r\n if (comp.mixins) {\r\n comp.mixins.forEach(extendProps);\r\n }\r\n }\r\n if (!raw && !hasExtends) {\r\n cache.set(comp, EMPTY_ARR);\r\n return EMPTY_ARR;\r\n }\r\n if (isArray(raw)) {\r\n for (let i = 0; i < raw.length; i++) {\r\n if ((process.env.NODE_ENV !== 'production') && !isString(raw[i])) {\r\n warn(`props must be strings when using array syntax.`, raw[i]);\r\n }\r\n const normalizedKey = camelize(raw[i]);\r\n if (validatePropName(normalizedKey)) {\r\n normalized[normalizedKey] = EMPTY_OBJ;\r\n }\r\n }\r\n }\r\n else if (raw) {\r\n if ((process.env.NODE_ENV !== 'production') && !isObject(raw)) {\r\n warn(`invalid props options`, raw);\r\n }\r\n for (const key in raw) {\r\n const normalizedKey = camelize(key);\r\n if (validatePropName(normalizedKey)) {\r\n const opt = raw[key];\r\n const prop = (normalized[normalizedKey] =\r\n isArray(opt) || isFunction(opt) ? { type: opt } : opt);\r\n if (prop) {\r\n const booleanIndex = getTypeIndex(Boolean, prop.type);\r\n const stringIndex = getTypeIndex(String, prop.type);\r\n prop[0 /* shouldCast */] = booleanIndex > -1;\r\n prop[1 /* shouldCastTrue */] =\r\n stringIndex < 0 || booleanIndex < stringIndex;\r\n // if the prop needs boolean casting or default value\r\n if (booleanIndex > -1 || hasOwn(prop, 'default')) {\r\n needCastKeys.push(normalizedKey);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const res = [normalized, needCastKeys];\r\n cache.set(comp, res);\r\n return res;\r\n}\r\nfunction validatePropName(key) {\r\n if (key[0] !== '$') {\r\n return true;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Invalid prop name: \"${key}\" is a reserved property.`);\r\n }\r\n return false;\r\n}\r\n// use function string name to check type constructors\r\n// so that it works across vms / iframes.\r\nfunction getType(ctor) {\r\n const match = ctor && ctor.toString().match(/^\\s*function (\\w+)/);\r\n return match ? match[1] : ctor === null ? 'null' : '';\r\n}\r\nfunction isSameType(a, b) {\r\n return getType(a) === getType(b);\r\n}\r\nfunction getTypeIndex(type, expectedTypes) {\r\n if (isArray(expectedTypes)) {\r\n return expectedTypes.findIndex(t => isSameType(t, type));\r\n }\r\n else if (isFunction(expectedTypes)) {\r\n return isSameType(expectedTypes, type) ? 0 : -1;\r\n }\r\n return -1;\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction validateProps(rawProps, props, instance) {\r\n const resolvedValues = toRaw(props);\r\n const options = instance.propsOptions[0];\r\n for (const key in options) {\r\n let opt = options[key];\r\n if (opt == null)\r\n continue;\r\n validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key)));\r\n }\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction validateProp(name, value, prop, isAbsent) {\r\n const { type, required, validator } = prop;\r\n // required!\r\n if (required && isAbsent) {\r\n warn('Missing required prop: \"' + name + '\"');\r\n return;\r\n }\r\n // missing but optional\r\n if (value == null && !prop.required) {\r\n return;\r\n }\r\n // type check\r\n if (type != null && type !== true) {\r\n let isValid = false;\r\n const types = isArray(type) ? type : [type];\r\n const expectedTypes = [];\r\n // value is valid as long as one of the specified types match\r\n for (let i = 0; i < types.length && !isValid; i++) {\r\n const { valid, expectedType } = assertType(value, types[i]);\r\n expectedTypes.push(expectedType || '');\r\n isValid = valid;\r\n }\r\n if (!isValid) {\r\n warn(getInvalidTypeMessage(name, value, expectedTypes));\r\n return;\r\n }\r\n }\r\n // custom validator\r\n if (validator && !validator(value)) {\r\n warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\r\n }\r\n}\r\nconst isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol,BigInt');\r\n/**\r\n * dev only\r\n */\r\nfunction assertType(value, type) {\r\n let valid;\r\n const expectedType = getType(type);\r\n if (isSimpleType(expectedType)) {\r\n const t = typeof value;\r\n valid = t === expectedType.toLowerCase();\r\n // for primitive wrapper objects\r\n if (!valid && t === 'object') {\r\n valid = value instanceof type;\r\n }\r\n }\r\n else if (expectedType === 'Object') {\r\n valid = isObject(value);\r\n }\r\n else if (expectedType === 'Array') {\r\n valid = isArray(value);\r\n }\r\n else if (expectedType === 'null') {\r\n valid = value === null;\r\n }\r\n else {\r\n valid = value instanceof type;\r\n }\r\n return {\r\n valid,\r\n expectedType\r\n };\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\r\n let message = `Invalid prop: type check failed for prop \"${name}\".` +\r\n ` Expected ${expectedTypes.map(capitalize).join(' | ')}`;\r\n const expectedType = expectedTypes[0];\r\n const receivedType = toRawType(value);\r\n const expectedValue = styleValue(value, expectedType);\r\n const receivedValue = styleValue(value, receivedType);\r\n // check if we need to specify expected value\r\n if (expectedTypes.length === 1 &&\r\n isExplicable(expectedType) &&\r\n !isBoolean(expectedType, receivedType)) {\r\n message += ` with value ${expectedValue}`;\r\n }\r\n message += `, got ${receivedType} `;\r\n // check if we need to specify received value\r\n if (isExplicable(receivedType)) {\r\n message += `with value ${receivedValue}.`;\r\n }\r\n return message;\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction styleValue(value, type) {\r\n if (type === 'String') {\r\n return `\"${value}\"`;\r\n }\r\n else if (type === 'Number') {\r\n return `${Number(value)}`;\r\n }\r\n else {\r\n return `${value}`;\r\n }\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction isExplicable(type) {\r\n const explicitTypes = ['string', 'number', 'boolean'];\r\n return explicitTypes.some(elem => type.toLowerCase() === elem);\r\n}\r\n/**\r\n * dev only\r\n */\r\nfunction isBoolean(...args) {\r\n return args.some(elem => elem.toLowerCase() === 'boolean');\r\n}\n\nconst isInternalKey = (key) => key[0] === '_' || key === '$stable';\r\nconst normalizeSlotValue = (value) => isArray(value)\r\n ? value.map(normalizeVNode)\r\n : [normalizeVNode(value)];\r\nconst normalizeSlot = (key, rawSlot, ctx) => {\r\n const normalized = withCtx((...args) => {\r\n if ((process.env.NODE_ENV !== 'production') && currentInstance) {\r\n warn(`Slot \"${key}\" invoked outside of the render function: ` +\r\n `this will not track dependencies used in the slot. ` +\r\n `Invoke the slot function inside the render function instead.`);\r\n }\r\n return normalizeSlotValue(rawSlot(...args));\r\n }, ctx);\r\n normalized._c = false;\r\n return normalized;\r\n};\r\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\r\n const ctx = rawSlots._ctx;\r\n for (const key in rawSlots) {\r\n if (isInternalKey(key))\r\n continue;\r\n const value = rawSlots[key];\r\n if (isFunction(value)) {\r\n slots[key] = normalizeSlot(key, value, ctx);\r\n }\r\n else if (value != null) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !(false )) {\r\n warn(`Non-function value encountered for slot \"${key}\". ` +\r\n `Prefer function slots for better performance.`);\r\n }\r\n const normalized = normalizeSlotValue(value);\r\n slots[key] = () => normalized;\r\n }\r\n }\r\n};\r\nconst normalizeVNodeSlots = (instance, children) => {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !isKeepAlive(instance.vnode) &&\r\n !(false )) {\r\n warn(`Non-function value encountered for default slot. ` +\r\n `Prefer function slots for better performance.`);\r\n }\r\n const normalized = normalizeSlotValue(children);\r\n instance.slots.default = () => normalized;\r\n};\r\nconst initSlots = (instance, children) => {\r\n if (instance.vnode.shapeFlag & 32 /* SLOTS_CHILDREN */) {\r\n const type = children._;\r\n if (type) {\r\n // users can get the shallow readonly version of the slots object through `this.$slots`,\r\n // we should avoid the proxy object polluting the slots of the internal instance\r\n instance.slots = toRaw(children);\r\n // make compiler marker non-enumerable\r\n def(children, '_', type);\r\n }\r\n else {\r\n normalizeObjectSlots(children, (instance.slots = {}));\r\n }\r\n }\r\n else {\r\n instance.slots = {};\r\n if (children) {\r\n normalizeVNodeSlots(instance, children);\r\n }\r\n }\r\n def(instance.slots, InternalObjectKey, 1);\r\n};\r\nconst updateSlots = (instance, children, optimized) => {\r\n const { vnode, slots } = instance;\r\n let needDeletionCheck = true;\r\n let deletionComparisonTarget = EMPTY_OBJ;\r\n if (vnode.shapeFlag & 32 /* SLOTS_CHILDREN */) {\r\n const type = children._;\r\n if (type) {\r\n // compiled slots.\r\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\r\n // Parent was HMR updated so slot content may have changed.\r\n // force update slots and mark instance for hmr as well\r\n extend(slots, children);\r\n }\r\n else if (optimized && type === 1 /* STABLE */) {\r\n // compiled AND stable.\r\n // no need to update, and skip stale slots removal.\r\n needDeletionCheck = false;\r\n }\r\n else {\r\n // compiled but dynamic (v-if/v-for on slots) - update slots, but skip\r\n // normalization.\r\n extend(slots, children);\r\n // #2893\r\n // when rendering the optimized slots by manually written render function,\r\n // we need to delete the `slots._` flag if necessary to make subsequent updates reliable,\r\n // i.e. let the `renderSlot` create the bailed Fragment\r\n if (!optimized && type === 1 /* STABLE */) {\r\n delete slots._;\r\n }\r\n }\r\n }\r\n else {\r\n needDeletionCheck = !children.$stable;\r\n normalizeObjectSlots(children, slots);\r\n }\r\n deletionComparisonTarget = children;\r\n }\r\n else if (children) {\r\n // non slot object children (direct value) passed to a component\r\n normalizeVNodeSlots(instance, children);\r\n deletionComparisonTarget = { default: 1 };\r\n }\r\n // delete stale slots\r\n if (needDeletionCheck) {\r\n for (const key in slots) {\r\n if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\r\n delete slots[key];\r\n }\r\n }\r\n }\r\n};\n\n/**\r\nRuntime helper for applying directives to a vnode. Example usage:\r\n\nconst comp = resolveComponent('comp')\r\nconst foo = resolveDirective('foo')\r\nconst bar = resolveDirective('bar')\r\n\nreturn withDirectives(h(comp), [\r\n [foo, this.x],\r\n [bar, this.y]\r\n])\r\n*/\r\nfunction validateDirectiveName(name) {\r\n if (isBuiltInDirective(name)) {\r\n warn('Do not use built-in directive ids as custom directive id: ' + name);\r\n }\r\n}\r\n/**\r\n * Adds directives to a VNode.\r\n */\r\nfunction withDirectives(vnode, directives) {\r\n const internalInstance = currentRenderingInstance;\r\n if (internalInstance === null) {\r\n (process.env.NODE_ENV !== 'production') && warn(`withDirectives can only be used inside render functions.`);\r\n return vnode;\r\n }\r\n const instance = getExposeProxy(internalInstance) ||\r\n internalInstance.proxy;\r\n const bindings = vnode.dirs || (vnode.dirs = []);\r\n for (let i = 0; i < directives.length; i++) {\r\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\r\n if (isFunction(dir)) {\r\n dir = {\r\n mounted: dir,\r\n updated: dir\r\n };\r\n }\r\n if (dir.deep) {\r\n traverse(value);\r\n }\r\n bindings.push({\r\n dir,\r\n instance,\r\n value,\r\n oldValue: void 0,\r\n arg,\r\n modifiers\r\n });\r\n }\r\n return vnode;\r\n}\r\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\r\n const bindings = vnode.dirs;\r\n const oldBindings = prevVNode && prevVNode.dirs;\r\n for (let i = 0; i < bindings.length; i++) {\r\n const binding = bindings[i];\r\n if (oldBindings) {\r\n binding.oldValue = oldBindings[i].value;\r\n }\r\n let hook = binding.dir[name];\r\n if (hook) {\r\n // disable tracking inside all lifecycle hooks\r\n // since they can potentially be called inside effects.\r\n pauseTracking();\r\n callWithAsyncErrorHandling(hook, instance, 8 /* DIRECTIVE_HOOK */, [\r\n vnode.el,\r\n binding,\r\n vnode,\r\n prevVNode\r\n ]);\r\n resetTracking();\r\n }\r\n }\r\n}\n\nfunction createAppContext() {\r\n return {\r\n app: null,\r\n config: {\r\n isNativeTag: NO,\r\n performance: false,\r\n globalProperties: {},\r\n optionMergeStrategies: {},\r\n errorHandler: undefined,\r\n warnHandler: undefined,\r\n compilerOptions: {}\r\n },\r\n mixins: [],\r\n components: {},\r\n directives: {},\r\n provides: Object.create(null),\r\n optionsCache: new WeakMap(),\r\n propsCache: new WeakMap(),\r\n emitsCache: new WeakMap()\r\n };\r\n}\r\nlet uid = 0;\r\nfunction createAppAPI(render, hydrate) {\r\n return function createApp(rootComponent, rootProps = null) {\r\n if (!isFunction(rootComponent)) {\r\n rootComponent = Object.assign({}, rootComponent);\r\n }\r\n if (rootProps != null && !isObject(rootProps)) {\r\n (process.env.NODE_ENV !== 'production') && warn(`root props passed to app.mount() must be an object.`);\r\n rootProps = null;\r\n }\r\n const context = createAppContext();\r\n const installedPlugins = new Set();\r\n let isMounted = false;\r\n const app = (context.app = {\r\n _uid: uid++,\r\n _component: rootComponent,\r\n _props: rootProps,\r\n _container: null,\r\n _context: context,\r\n _instance: null,\r\n version,\r\n get config() {\r\n return context.config;\r\n },\r\n set config(v) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`app.config cannot be replaced. Modify individual options instead.`);\r\n }\r\n },\r\n use(plugin, ...options) {\r\n if (installedPlugins.has(plugin)) {\r\n (process.env.NODE_ENV !== 'production') && warn(`Plugin has already been applied to target app.`);\r\n }\r\n else if (plugin && isFunction(plugin.install)) {\r\n installedPlugins.add(plugin);\r\n plugin.install(app, ...options);\r\n }\r\n else if (isFunction(plugin)) {\r\n installedPlugins.add(plugin);\r\n plugin(app, ...options);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`A plugin must either be a function or an object with an \"install\" ` +\r\n `function.`);\r\n }\r\n return app;\r\n },\r\n mixin(mixin) {\r\n if (__VUE_OPTIONS_API__) {\r\n if (!context.mixins.includes(mixin)) {\r\n context.mixins.push(mixin);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Mixin has already been applied to target app' +\r\n (mixin.name ? `: ${mixin.name}` : ''));\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Mixins are only available in builds supporting Options API');\r\n }\r\n return app;\r\n },\r\n component(name, component) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateComponentName(name, context.config);\r\n }\r\n if (!component) {\r\n return context.components[name];\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && context.components[name]) {\r\n warn(`Component \"${name}\" has already been registered in target app.`);\r\n }\r\n context.components[name] = component;\r\n return app;\r\n },\r\n directive(name, directive) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n validateDirectiveName(name);\r\n }\r\n if (!directive) {\r\n return context.directives[name];\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && context.directives[name]) {\r\n warn(`Directive \"${name}\" has already been registered in target app.`);\r\n }\r\n context.directives[name] = directive;\r\n return app;\r\n },\r\n mount(rootContainer, isHydrate, isSVG) {\r\n if (!isMounted) {\r\n const vnode = createVNode(rootComponent, rootProps);\r\n // store app context on the root VNode.\r\n // this will be set on the root instance on initial mount.\r\n vnode.appContext = context;\r\n // HMR root reload\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n context.reload = () => {\r\n render(cloneVNode(vnode), rootContainer, isSVG);\r\n };\r\n }\r\n if (isHydrate && hydrate) {\r\n hydrate(vnode, rootContainer);\r\n }\r\n else {\r\n render(vnode, rootContainer, isSVG);\r\n }\r\n isMounted = true;\r\n app._container = rootContainer;\r\n rootContainer.__vue_app__ = app;\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n app._instance = vnode.component;\r\n devtoolsInitApp(app, version);\r\n }\r\n return getExposeProxy(vnode.component) || vnode.component.proxy;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`App has already been mounted.\\n` +\r\n `If you want to remount the same app, move your app creation logic ` +\r\n `into a factory function and create fresh app instances for each ` +\r\n `mount - e.g. \\`const createMyApp = () => createApp(App)\\``);\r\n }\r\n },\r\n unmount() {\r\n if (isMounted) {\r\n render(null, app._container);\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n app._instance = null;\r\n devtoolsUnmountApp(app);\r\n }\r\n delete app._container.__vue_app__;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Cannot unmount an app that is not mounted.`);\r\n }\r\n },\r\n provide(key, value) {\r\n if ((process.env.NODE_ENV !== 'production') && key in context.provides) {\r\n warn(`App already provides property with key \"${String(key)}\". ` +\r\n `It will be overwritten with the new value.`);\r\n }\r\n // TypeScript doesn't allow symbols as index type\r\n // https://github.com/Microsoft/TypeScript/issues/24587\r\n context.provides[key] = value;\r\n return app;\r\n }\r\n });\r\n return app;\r\n };\r\n}\n\n/**\r\n * Function for handling a template ref\r\n */\r\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\r\n if (isArray(rawRef)) {\r\n rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount));\r\n return;\r\n }\r\n if (isAsyncWrapper(vnode) && !isUnmount) {\r\n // when mounting async components, nothing needs to be done,\r\n // because the template ref is forwarded to inner component\r\n return;\r\n }\r\n const refValue = vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */\r\n ? getExposeProxy(vnode.component) || vnode.component.proxy\r\n : vnode.el;\r\n const value = isUnmount ? null : refValue;\r\n const { i: owner, r: ref } = rawRef;\r\n if ((process.env.NODE_ENV !== 'production') && !owner) {\r\n warn(`Missing ref owner context. ref cannot be used on hoisted vnodes. ` +\r\n `A vnode with ref must be created inside the render function.`);\r\n return;\r\n }\r\n const oldRef = oldRawRef && oldRawRef.r;\r\n const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs;\r\n const setupState = owner.setupState;\r\n // dynamic ref changed. unset old ref\r\n if (oldRef != null && oldRef !== ref) {\r\n if (isString(oldRef)) {\r\n refs[oldRef] = null;\r\n if (hasOwn(setupState, oldRef)) {\r\n setupState[oldRef] = null;\r\n }\r\n }\r\n else if (isRef(oldRef)) {\r\n oldRef.value = null;\r\n }\r\n }\r\n if (isFunction(ref)) {\r\n callWithErrorHandling(ref, owner, 12 /* FUNCTION_REF */, [value, refs]);\r\n }\r\n else {\r\n const _isString = isString(ref);\r\n const _isRef = isRef(ref);\r\n if (_isString || _isRef) {\r\n const doSet = () => {\r\n if (rawRef.f) {\r\n const existing = _isString ? refs[ref] : ref.value;\r\n if (isUnmount) {\r\n isArray(existing) && remove(existing, refValue);\r\n }\r\n else {\r\n if (!isArray(existing)) {\r\n if (_isString) {\r\n refs[ref] = [refValue];\r\n if (hasOwn(setupState, ref)) {\r\n setupState[ref] = refs[ref];\r\n }\r\n }\r\n else {\r\n ref.value = [refValue];\r\n if (rawRef.k)\r\n refs[rawRef.k] = ref.value;\r\n }\r\n }\r\n else if (!existing.includes(refValue)) {\r\n existing.push(refValue);\r\n }\r\n }\r\n }\r\n else if (_isString) {\r\n refs[ref] = value;\r\n if (hasOwn(setupState, ref)) {\r\n setupState[ref] = value;\r\n }\r\n }\r\n else if (isRef(ref)) {\r\n ref.value = value;\r\n if (rawRef.k)\r\n refs[rawRef.k] = value;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Invalid template ref type:', ref, `(${typeof ref})`);\r\n }\r\n };\r\n if (value) {\r\n doSet.id = -1;\r\n queuePostRenderEffect(doSet, parentSuspense);\r\n }\r\n else {\r\n doSet();\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Invalid template ref type:', ref, `(${typeof ref})`);\r\n }\r\n }\r\n}\n\nlet hasMismatch = false;\r\nconst isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject';\r\nconst isComment = (node) => node.nodeType === 8 /* COMMENT */;\r\n// Note: hydration is DOM-specific\r\n// But we have to place it in core due to tight coupling with core - splitting\r\n// it out creates a ton of unnecessary complexity.\r\n// Hydration also depends on some renderer internal logic which needs to be\r\n// passed in via arguments.\r\nfunction createHydrationFunctions(rendererInternals) {\r\n const { mt: mountComponent, p: patch, o: { patchProp, nextSibling, parentNode, remove, insert, createComment } } = rendererInternals;\r\n const hydrate = (vnode, container) => {\r\n if (!container.hasChildNodes()) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Attempting to hydrate existing markup but container is empty. ` +\r\n `Performing full mount instead.`);\r\n patch(null, vnode, container);\r\n flushPostFlushCbs();\r\n return;\r\n }\r\n hasMismatch = false;\r\n hydrateNode(container.firstChild, vnode, null, null, null);\r\n flushPostFlushCbs();\r\n if (hasMismatch && !false) {\r\n // this error should show up in production\r\n console.error(`Hydration completed but contains mismatches.`);\r\n }\r\n };\r\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\r\n const isFragmentStart = isComment(node) && node.data === '[';\r\n const onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart);\r\n const { type, ref, shapeFlag } = vnode;\r\n const domType = node.nodeType;\r\n vnode.el = node;\r\n let nextNode = null;\r\n switch (type) {\r\n case Text:\r\n if (domType !== 3 /* TEXT */) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n if (node.data !== vnode.children) {\r\n hasMismatch = true;\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Hydration text mismatch:` +\r\n `\\n- Client: ${JSON.stringify(node.data)}` +\r\n `\\n- Server: ${JSON.stringify(vnode.children)}`);\r\n node.data = vnode.children;\r\n }\r\n nextNode = nextSibling(node);\r\n }\r\n break;\r\n case Comment:\r\n if (domType !== 8 /* COMMENT */ || isFragmentStart) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = nextSibling(node);\r\n }\r\n break;\r\n case Static:\r\n if (domType !== 1 /* ELEMENT */) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n // determine anchor, adopt content\r\n nextNode = node;\r\n // if the static vnode has its content stripped during build,\r\n // adopt it from the server-rendered HTML.\r\n const needToAdoptContent = !vnode.children.length;\r\n for (let i = 0; i < vnode.staticCount; i++) {\r\n if (needToAdoptContent)\r\n vnode.children += nextNode.outerHTML;\r\n if (i === vnode.staticCount - 1) {\r\n vnode.anchor = nextNode;\r\n }\r\n nextNode = nextSibling(nextNode);\r\n }\r\n return nextNode;\r\n }\r\n break;\r\n case Fragment:\r\n if (!isFragmentStart) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n }\r\n break;\r\n default:\r\n if (shapeFlag & 1 /* ELEMENT */) {\r\n if (domType !== 1 /* ELEMENT */ ||\r\n vnode.type.toLowerCase() !==\r\n node.tagName.toLowerCase()) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n }\r\n }\r\n else if (shapeFlag & 6 /* COMPONENT */) {\r\n // when setting up the render effect, if the initial vnode already\r\n // has .el set, the component will perform hydration instead of mount\r\n // on its sub-tree.\r\n vnode.slotScopeIds = slotScopeIds;\r\n const container = parentNode(node);\r\n mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized);\r\n // component may be async, so in the case of fragments we cannot rely\r\n // on component's rendered output to determine the end of the fragment\r\n // instead, we do a lookahead to find the end anchor node.\r\n nextNode = isFragmentStart\r\n ? locateClosingAsyncAnchor(node)\r\n : nextSibling(node);\r\n // #3787\r\n // if component is async, it may get moved / unmounted before its\r\n // inner component is loaded, so we need to give it a placeholder\r\n // vnode that matches its adopted DOM.\r\n if (isAsyncWrapper(vnode)) {\r\n let subTree;\r\n if (isFragmentStart) {\r\n subTree = createVNode(Fragment);\r\n subTree.anchor = nextNode\r\n ? nextNode.previousSibling\r\n : container.lastChild;\r\n }\r\n else {\r\n subTree =\r\n node.nodeType === 3 ? createTextVNode('') : createVNode('div');\r\n }\r\n subTree.el = node;\r\n vnode.component.subTree = subTree;\r\n }\r\n }\r\n else if (shapeFlag & 64 /* TELEPORT */) {\r\n if (domType !== 8 /* COMMENT */) {\r\n nextNode = onMismatch();\r\n }\r\n else {\r\n nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren);\r\n }\r\n }\r\n else if (shapeFlag & 128 /* SUSPENSE */) {\r\n nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Invalid HostVNode type:', type, `(${typeof type})`);\r\n }\r\n }\r\n if (ref != null) {\r\n setRef(ref, null, parentSuspense, vnode);\r\n }\r\n return nextNode;\r\n };\r\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\r\n optimized = optimized || !!vnode.dynamicChildren;\r\n const { type, props, patchFlag, shapeFlag, dirs } = vnode;\r\n // #4006 for form elements with non-string v-model value bindings\r\n // e.g. <option :value=\"obj\">, <input type=\"checkbox\" :true-value=\"1\">\r\n const forcePatchValue = (type === 'input' && dirs) || type === 'option';\r\n // skip props & children if this is hoisted static nodes\r\n // #5405 in dev, always hydrate children for HMR\r\n if ((process.env.NODE_ENV !== 'production') || forcePatchValue || patchFlag !== -1 /* HOISTED */) {\r\n if (dirs) {\r\n invokeDirectiveHook(vnode, null, parentComponent, 'created');\r\n }\r\n // props\r\n if (props) {\r\n if (forcePatchValue ||\r\n !optimized ||\r\n patchFlag & (16 /* FULL_PROPS */ | 32 /* HYDRATE_EVENTS */)) {\r\n for (const key in props) {\r\n if ((forcePatchValue && key.endsWith('value')) ||\r\n (isOn(key) && !isReservedProp(key))) {\r\n patchProp(el, key, null, props[key], false, undefined, parentComponent);\r\n }\r\n }\r\n }\r\n else if (props.onClick) {\r\n // Fast path for click listeners (which is most often) to avoid\r\n // iterating through props.\r\n patchProp(el, 'onClick', null, props.onClick, false, undefined, parentComponent);\r\n }\r\n }\r\n // vnode / directive hooks\r\n let vnodeHooks;\r\n if ((vnodeHooks = props && props.onVnodeBeforeMount)) {\r\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\r\n }\r\n if (dirs) {\r\n invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\r\n }\r\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs) {\r\n queueEffectWithSuspense(() => {\r\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\r\n dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\r\n }, parentSuspense);\r\n }\r\n // children\r\n if (shapeFlag & 16 /* ARRAY_CHILDREN */ &&\r\n // skip if element has innerHTML / textContent\r\n !(props && (props.innerHTML || props.textContent))) {\r\n let next = hydrateChildren(el.firstChild, vnode, el, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n let hasWarned = false;\r\n while (next) {\r\n hasMismatch = true;\r\n if ((process.env.NODE_ENV !== 'production') && !hasWarned) {\r\n warn(`Hydration children mismatch in <${vnode.type}>: ` +\r\n `server rendered element contains more child nodes than client vdom.`);\r\n hasWarned = true;\r\n }\r\n // The SSRed DOM contains more nodes than it should. Remove them.\r\n const cur = next;\r\n next = next.nextSibling;\r\n remove(cur);\r\n }\r\n }\r\n else if (shapeFlag & 8 /* TEXT_CHILDREN */) {\r\n if (el.textContent !== vnode.children) {\r\n hasMismatch = true;\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Hydration text content mismatch in <${vnode.type}>:\\n` +\r\n `- Client: ${el.textContent}\\n` +\r\n `- Server: ${vnode.children}`);\r\n el.textContent = vnode.children;\r\n }\r\n }\r\n }\r\n return el.nextSibling;\r\n };\r\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\r\n optimized = optimized || !!parentVNode.dynamicChildren;\r\n const children = parentVNode.children;\r\n const l = children.length;\r\n let hasWarned = false;\r\n for (let i = 0; i < l; i++) {\r\n const vnode = optimized\r\n ? children[i]\r\n : (children[i] = normalizeVNode(children[i]));\r\n if (node) {\r\n node = hydrateNode(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n }\r\n else if (vnode.type === Text && !vnode.children) {\r\n continue;\r\n }\r\n else {\r\n hasMismatch = true;\r\n if ((process.env.NODE_ENV !== 'production') && !hasWarned) {\r\n warn(`Hydration children mismatch in <${container.tagName.toLowerCase()}>: ` +\r\n `server rendered element contains fewer child nodes than client vdom.`);\r\n hasWarned = true;\r\n }\r\n // the SSRed DOM didn't contain enough nodes. Mount the missing ones.\r\n patch(null, vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\r\n }\r\n }\r\n return node;\r\n };\r\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\r\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\r\n if (fragmentSlotScopeIds) {\r\n slotScopeIds = slotScopeIds\r\n ? slotScopeIds.concat(fragmentSlotScopeIds)\r\n : fragmentSlotScopeIds;\r\n }\r\n const container = parentNode(node);\r\n const next = hydrateChildren(nextSibling(node), vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n if (next && isComment(next) && next.data === ']') {\r\n return nextSibling((vnode.anchor = next));\r\n }\r\n else {\r\n // fragment didn't hydrate successfully, since we didn't get a end anchor\r\n // back. This should have led to node/children mismatch warnings.\r\n hasMismatch = true;\r\n // since the anchor is missing, we need to create one and insert it\r\n insert((vnode.anchor = createComment(`]`)), container, next);\r\n return next;\r\n }\r\n };\r\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\r\n hasMismatch = true;\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Hydration node mismatch:\\n- Client vnode:`, vnode.type, `\\n- Server rendered DOM:`, node, node.nodeType === 3 /* TEXT */\r\n ? `(text)`\r\n : isComment(node) && node.data === '['\r\n ? `(start of fragment)`\r\n : ``);\r\n vnode.el = null;\r\n if (isFragment) {\r\n // remove excessive fragment nodes\r\n const end = locateClosingAsyncAnchor(node);\r\n while (true) {\r\n const next = nextSibling(node);\r\n if (next && next !== end) {\r\n remove(next);\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n const next = nextSibling(node);\r\n const container = parentNode(node);\r\n remove(node);\r\n patch(null, vnode, container, next, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\r\n return next;\r\n };\r\n const locateClosingAsyncAnchor = (node) => {\r\n let match = 0;\r\n while (node) {\r\n node = nextSibling(node);\r\n if (node && isComment(node)) {\r\n if (node.data === '[')\r\n match++;\r\n if (node.data === ']') {\r\n if (match === 0) {\r\n return nextSibling(node);\r\n }\r\n else {\r\n match--;\r\n }\r\n }\r\n }\r\n }\r\n return node;\r\n };\r\n return [hydrate, hydrateNode];\r\n}\n\n/* eslint-disable no-restricted-globals */\r\nlet supported;\r\nlet perf;\r\nfunction startMeasure(instance, type) {\r\n if (instance.appContext.config.performance && isSupported()) {\r\n perf.mark(`vue-${type}-${instance.uid}`);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\r\n }\r\n}\r\nfunction endMeasure(instance, type) {\r\n if (instance.appContext.config.performance && isSupported()) {\r\n const startTag = `vue-${type}-${instance.uid}`;\r\n const endTag = startTag + `:end`;\r\n perf.mark(endTag);\r\n perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag);\r\n perf.clearMarks(startTag);\r\n perf.clearMarks(endTag);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\r\n }\r\n}\r\nfunction isSupported() {\r\n if (supported !== undefined) {\r\n return supported;\r\n }\r\n if (typeof window !== 'undefined' && window.performance) {\r\n supported = true;\r\n perf = window.performance;\r\n }\r\n else {\r\n supported = false;\r\n }\r\n return supported;\r\n}\n\n/**\r\n * This is only called in esm-bundler builds.\r\n * It is called when a renderer is created, in `baseCreateRenderer` so that\r\n * importing runtime-core is side-effects free.\r\n *\r\n * istanbul-ignore-next\r\n */\r\nfunction initFeatureFlags() {\r\n const needWarn = [];\r\n if (typeof __VUE_OPTIONS_API__ !== 'boolean') {\r\n (process.env.NODE_ENV !== 'production') && needWarn.push(`__VUE_OPTIONS_API__`);\r\n getGlobalThis().__VUE_OPTIONS_API__ = true;\r\n }\r\n if (typeof __VUE_PROD_DEVTOOLS__ !== 'boolean') {\r\n (process.env.NODE_ENV !== 'production') && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\r\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && needWarn.length) {\r\n const multi = needWarn.length > 1;\r\n console.warn(`Feature flag${multi ? `s` : ``} ${needWarn.join(', ')} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, ` +\r\n `which expects these compile-time feature flags to be globally injected ` +\r\n `via the bundler config in order to get better tree-shaking in the ` +\r\n `production bundle.\\n\\n` +\r\n `For more details, see https://link.vuejs.org/feature-flags.`);\r\n }\r\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense\r\n ;\r\n/**\r\n * The createRenderer function accepts two generic arguments:\r\n * HostNode and HostElement, corresponding to Node and Element types in the\r\n * host environment. For example, for runtime-dom, HostNode would be the DOM\r\n * `Node` interface and HostElement would be the DOM `Element` interface.\r\n *\r\n * Custom renderers can pass in the platform specific types like this:\r\n *\r\n * ``` js\r\n * const { render, createApp } = createRenderer<Node, Element>({\r\n * patchProp,\r\n * ...nodeOps\r\n * })\r\n * ```\r\n */\r\nfunction createRenderer(options) {\r\n return baseCreateRenderer(options);\r\n}\r\n// Separate API for creating hydration-enabled renderer.\r\n// Hydration logic is only used when calling this function, making it\r\n// tree-shakable.\r\nfunction createHydrationRenderer(options) {\r\n return baseCreateRenderer(options, createHydrationFunctions);\r\n}\r\n// implementation\r\nfunction baseCreateRenderer(options, createHydrationFns) {\r\n // compile-time feature flags check\r\n {\r\n initFeatureFlags();\r\n }\r\n const target = getGlobalThis();\r\n target.__VUE__ = true;\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\r\n }\r\n const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, cloneNode: hostCloneNode, insertStaticContent: hostInsertStaticContent } = options;\r\n // Note: functions inside this closure should use `const xxx = () => {}`\r\n // style in order to prevent being inlined by minifiers.\r\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = (process.env.NODE_ENV !== 'production') && isHmrUpdating ? false : !!n2.dynamicChildren) => {\r\n if (n1 === n2) {\r\n return;\r\n }\r\n // patching & not same type, unmount old tree\r\n if (n1 && !isSameVNodeType(n1, n2)) {\r\n anchor = getNextHostNode(n1);\r\n unmount(n1, parentComponent, parentSuspense, true);\r\n n1 = null;\r\n }\r\n if (n2.patchFlag === -2 /* BAIL */) {\r\n optimized = false;\r\n n2.dynamicChildren = null;\r\n }\r\n const { type, ref, shapeFlag } = n2;\r\n switch (type) {\r\n case Text:\r\n processText(n1, n2, container, anchor);\r\n break;\r\n case Comment:\r\n processCommentNode(n1, n2, container, anchor);\r\n break;\r\n case Static:\r\n if (n1 == null) {\r\n mountStaticNode(n2, container, anchor, isSVG);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n patchStaticNode(n1, n2, container, isSVG);\r\n }\r\n break;\r\n case Fragment:\r\n processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n break;\r\n default:\r\n if (shapeFlag & 1 /* ELEMENT */) {\r\n processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else if (shapeFlag & 6 /* COMPONENT */) {\r\n processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else if (shapeFlag & 64 /* TELEPORT */) {\r\n type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\r\n }\r\n else if (shapeFlag & 128 /* SUSPENSE */) {\r\n type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Invalid VNode type:', type, `(${typeof type})`);\r\n }\r\n }\r\n // set ref\r\n if (ref != null && parentComponent) {\r\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\r\n }\r\n };\r\n const processText = (n1, n2, container, anchor) => {\r\n if (n1 == null) {\r\n hostInsert((n2.el = hostCreateText(n2.children)), container, anchor);\r\n }\r\n else {\r\n const el = (n2.el = n1.el);\r\n if (n2.children !== n1.children) {\r\n hostSetText(el, n2.children);\r\n }\r\n }\r\n };\r\n const processCommentNode = (n1, n2, container, anchor) => {\r\n if (n1 == null) {\r\n hostInsert((n2.el = hostCreateComment(n2.children || '')), container, anchor);\r\n }\r\n else {\r\n // there's no support for dynamic comments\r\n n2.el = n1.el;\r\n }\r\n };\r\n const mountStaticNode = (n2, container, anchor, isSVG) => {\r\n [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor);\r\n };\r\n /**\r\n * Dev / HMR only\r\n */\r\n const patchStaticNode = (n1, n2, container, isSVG) => {\r\n // static nodes are only patched during dev for HMR\r\n if (n2.children !== n1.children) {\r\n const anchor = hostNextSibling(n1.anchor);\r\n // remove existing\r\n removeStaticNode(n1);\r\n [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG);\r\n }\r\n else {\r\n n2.el = n1.el;\r\n n2.anchor = n1.anchor;\r\n }\r\n };\r\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\r\n let next;\r\n while (el && el !== anchor) {\r\n next = hostNextSibling(el);\r\n hostInsert(el, container, nextSibling);\r\n el = next;\r\n }\r\n hostInsert(anchor, container, nextSibling);\r\n };\r\n const removeStaticNode = ({ el, anchor }) => {\r\n let next;\r\n while (el && el !== anchor) {\r\n next = hostNextSibling(el);\r\n hostRemove(el);\r\n el = next;\r\n }\r\n hostRemove(anchor);\r\n };\r\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n isSVG = isSVG || n2.type === 'svg';\r\n if (n1 == null) {\r\n mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else {\r\n patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n };\r\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n let el;\r\n let vnodeHook;\r\n const { type, props, shapeFlag, transition, patchFlag, dirs } = vnode;\r\n if (!(process.env.NODE_ENV !== 'production') &&\r\n vnode.el &&\r\n hostCloneNode !== undefined &&\r\n patchFlag === -1 /* HOISTED */) {\r\n // If a vnode has non-null el, it means it's being reused.\r\n // Only static vnodes can be reused, so its mounted DOM nodes should be\r\n // exactly the same, and we can simply do a clone here.\r\n // only do this in production since cloned trees cannot be HMR updated.\r\n el = vnode.el = hostCloneNode(vnode.el);\r\n }\r\n else {\r\n el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props);\r\n // mount children first, since some props may rely on child content\r\n // being already rendered, e.g. `<select value>`\r\n if (shapeFlag & 8 /* TEXT_CHILDREN */) {\r\n hostSetElementText(el, vnode.children);\r\n }\r\n else if (shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== 'foreignObject', slotScopeIds, optimized);\r\n }\r\n if (dirs) {\r\n invokeDirectiveHook(vnode, null, parentComponent, 'created');\r\n }\r\n // props\r\n if (props) {\r\n for (const key in props) {\r\n if (key !== 'value' && !isReservedProp(key)) {\r\n hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\r\n }\r\n }\r\n /**\r\n * Special case for setting value on DOM elements:\r\n * - it can be order-sensitive (e.g. should be set *after* min/max, #2325, #4024)\r\n * - it needs to be forced (#1471)\r\n * #2353 proposes adding another renderer option to configure this, but\r\n * the properties affects are so finite it is worth special casing it\r\n * here to reduce the complexity. (Special casing it also should not\r\n * affect non-DOM renderers)\r\n */\r\n if ('value' in props) {\r\n hostPatchProp(el, 'value', null, props.value);\r\n }\r\n if ((vnodeHook = props.onVnodeBeforeMount)) {\r\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\r\n }\r\n }\r\n // scopeId\r\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n Object.defineProperty(el, '__vnode', {\r\n value: vnode,\r\n enumerable: false\r\n });\r\n Object.defineProperty(el, '__vueParentComponent', {\r\n value: parentComponent,\r\n enumerable: false\r\n });\r\n }\r\n if (dirs) {\r\n invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\r\n }\r\n // #1583 For inside suspense + suspense not resolved case, enter hook should call when suspense resolved\r\n // #1689 For inside suspense + suspense resolved case, just call it\r\n const needCallTransitionHooks = (!parentSuspense || (parentSuspense && !parentSuspense.pendingBranch)) &&\r\n transition &&\r\n !transition.persisted;\r\n if (needCallTransitionHooks) {\r\n transition.beforeEnter(el);\r\n }\r\n hostInsert(el, container, anchor);\r\n if ((vnodeHook = props && props.onVnodeMounted) ||\r\n needCallTransitionHooks ||\r\n dirs) {\r\n queuePostRenderEffect(() => {\r\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\r\n needCallTransitionHooks && transition.enter(el);\r\n dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\r\n }, parentSuspense);\r\n }\r\n };\r\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\r\n if (scopeId) {\r\n hostSetScopeId(el, scopeId);\r\n }\r\n if (slotScopeIds) {\r\n for (let i = 0; i < slotScopeIds.length; i++) {\r\n hostSetScopeId(el, slotScopeIds[i]);\r\n }\r\n }\r\n if (parentComponent) {\r\n let subTree = parentComponent.subTree;\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n subTree.patchFlag > 0 &&\r\n subTree.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */) {\r\n subTree =\r\n filterSingleRoot(subTree.children) || subTree;\r\n }\r\n if (vnode === subTree) {\r\n const parentVNode = parentComponent.vnode;\r\n setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent);\r\n }\r\n }\r\n };\r\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => {\r\n for (let i = start; i < children.length; i++) {\r\n const child = (children[i] = optimized\r\n ? cloneIfMounted(children[i])\r\n : normalizeVNode(children[i]));\r\n patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n };\r\n const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n const el = (n2.el = n1.el);\r\n let { patchFlag, dynamicChildren, dirs } = n2;\r\n // #1426 take the old vnode's patch flag into account since user may clone a\r\n // compiler-generated vnode, which de-opts to FULL_PROPS\r\n patchFlag |= n1.patchFlag & 16 /* FULL_PROPS */;\r\n const oldProps = n1.props || EMPTY_OBJ;\r\n const newProps = n2.props || EMPTY_OBJ;\r\n let vnodeHook;\r\n // disable recurse in beforeUpdate hooks\r\n parentComponent && toggleRecurse(parentComponent, false);\r\n if ((vnodeHook = newProps.onVnodeBeforeUpdate)) {\r\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\r\n }\r\n if (dirs) {\r\n invokeDirectiveHook(n2, n1, parentComponent, 'beforeUpdate');\r\n }\r\n parentComponent && toggleRecurse(parentComponent, true);\r\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\r\n // HMR updated, force full diff\r\n patchFlag = 0;\r\n optimized = false;\r\n dynamicChildren = null;\r\n }\r\n const areChildrenSVG = isSVG && n2.type !== 'foreignObject';\r\n if (dynamicChildren) {\r\n patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds);\r\n if ((process.env.NODE_ENV !== 'production') && parentComponent && parentComponent.type.__hmrId) {\r\n traverseStaticChildren(n1, n2);\r\n }\r\n }\r\n else if (!optimized) {\r\n // full diff\r\n patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false);\r\n }\r\n if (patchFlag > 0) {\r\n // the presence of a patchFlag means this element's render code was\r\n // generated by the compiler and can take the fast path.\r\n // in this path old node and new node are guaranteed to have the same shape\r\n // (i.e. at the exact same position in the source template)\r\n if (patchFlag & 16 /* FULL_PROPS */) {\r\n // element props contain dynamic keys, full diff needed\r\n patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\r\n }\r\n else {\r\n // class\r\n // this flag is matched when the element has dynamic class bindings.\r\n if (patchFlag & 2 /* CLASS */) {\r\n if (oldProps.class !== newProps.class) {\r\n hostPatchProp(el, 'class', null, newProps.class, isSVG);\r\n }\r\n }\r\n // style\r\n // this flag is matched when the element has dynamic style bindings\r\n if (patchFlag & 4 /* STYLE */) {\r\n hostPatchProp(el, 'style', oldProps.style, newProps.style, isSVG);\r\n }\r\n // props\r\n // This flag is matched when the element has dynamic prop/attr bindings\r\n // other than class and style. The keys of dynamic prop/attrs are saved for\r\n // faster iteration.\r\n // Note dynamic keys like :[foo]=\"bar\" will cause this optimization to\r\n // bail out and go through a full diff because we need to unset the old key\r\n if (patchFlag & 8 /* PROPS */) {\r\n // if the flag is present then dynamicProps must be non-null\r\n const propsToUpdate = n2.dynamicProps;\r\n for (let i = 0; i < propsToUpdate.length; i++) {\r\n const key = propsToUpdate[i];\r\n const prev = oldProps[key];\r\n const next = newProps[key];\r\n // #1471 force patch value\r\n if (next !== prev || key === 'value') {\r\n hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren);\r\n }\r\n }\r\n }\r\n }\r\n // text\r\n // This flag is matched when the element has only dynamic text children.\r\n if (patchFlag & 1 /* TEXT */) {\r\n if (n1.children !== n2.children) {\r\n hostSetElementText(el, n2.children);\r\n }\r\n }\r\n }\r\n else if (!optimized && dynamicChildren == null) {\r\n // unoptimized, full diff\r\n patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\r\n }\r\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\r\n queuePostRenderEffect(() => {\r\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\r\n dirs && invokeDirectiveHook(n2, n1, parentComponent, 'updated');\r\n }, parentSuspense);\r\n }\r\n };\r\n // The fast path for blocks.\r\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {\r\n for (let i = 0; i < newChildren.length; i++) {\r\n const oldVNode = oldChildren[i];\r\n const newVNode = newChildren[i];\r\n // Determine the container (parent element) for the patch.\r\n const container = \r\n // oldVNode may be an errored async setup() component inside Suspense\r\n // which will not have a mounted element\r\n oldVNode.el &&\r\n // - In the case of a Fragment, we need to provide the actual parent\r\n // of the Fragment itself so it can move its children.\r\n (oldVNode.type === Fragment ||\r\n // - In the case of different nodes, there is going to be a replacement\r\n // which also requires the correct parent container\r\n !isSameVNodeType(oldVNode, newVNode) ||\r\n // - In the case of a component, it could contain anything.\r\n oldVNode.shapeFlag & (6 /* COMPONENT */ | 64 /* TELEPORT */))\r\n ? hostParentNode(oldVNode.el)\r\n : // In other cases, the parent container is not actually used so we\r\n // just pass the block element here to avoid a DOM parentNode call.\r\n fallbackContainer;\r\n patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true);\r\n }\r\n };\r\n const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {\r\n if (oldProps !== newProps) {\r\n for (const key in newProps) {\r\n // empty string is not valid prop\r\n if (isReservedProp(key))\r\n continue;\r\n const next = newProps[key];\r\n const prev = oldProps[key];\r\n // defer patching value\r\n if (next !== prev && key !== 'value') {\r\n hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\r\n }\r\n }\r\n if (oldProps !== EMPTY_OBJ) {\r\n for (const key in oldProps) {\r\n if (!isReservedProp(key) && !(key in newProps)) {\r\n hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\r\n }\r\n }\r\n }\r\n if ('value' in newProps) {\r\n hostPatchProp(el, 'value', oldProps.value, newProps.value);\r\n }\r\n }\r\n };\r\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n const fragmentStartAnchor = (n2.el = n1 ? n1.el : hostCreateText(''));\r\n const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''));\r\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\r\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\r\n // HMR updated, force full diff\r\n patchFlag = 0;\r\n optimized = false;\r\n dynamicChildren = null;\r\n }\r\n // check if this is a slot fragment with :slotted scope ids\r\n if (fragmentSlotScopeIds) {\r\n slotScopeIds = slotScopeIds\r\n ? slotScopeIds.concat(fragmentSlotScopeIds)\r\n : fragmentSlotScopeIds;\r\n }\r\n if (n1 == null) {\r\n hostInsert(fragmentStartAnchor, container, anchor);\r\n hostInsert(fragmentEndAnchor, container, anchor);\r\n // a fragment can only have array children\r\n // since they are either generated by the compiler, or implicitly created\r\n // from arrays.\r\n mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else {\r\n if (patchFlag > 0 &&\r\n patchFlag & 64 /* STABLE_FRAGMENT */ &&\r\n dynamicChildren &&\r\n // #2715 the previous fragment could've been a BAILed one as a result\r\n // of renderSlot() with no valid children\r\n n1.dynamicChildren) {\r\n // a stable fragment (template root or <template v-for>) doesn't need to\r\n // patch children order, but it may contain dynamicChildren.\r\n patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds);\r\n if ((process.env.NODE_ENV !== 'production') && parentComponent && parentComponent.type.__hmrId) {\r\n traverseStaticChildren(n1, n2);\r\n }\r\n else if (\r\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\r\n // get moved around. Make sure all root level vnodes inherit el.\r\n // #2134 or if it's a component root, it may also get moved around\r\n // as the component is being moved.\r\n n2.key != null ||\r\n (parentComponent && n2 === parentComponent.subTree)) {\r\n traverseStaticChildren(n1, n2, true /* shallow */);\r\n }\r\n }\r\n else {\r\n // keyed / unkeyed, or manual fragments.\r\n // for keyed & unkeyed, since they are compiler generated from v-for,\r\n // each child is guaranteed to be a block so the fragment will never\r\n // have dynamicChildren.\r\n patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n }\r\n };\r\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n n2.slotScopeIds = slotScopeIds;\r\n if (n1 == null) {\r\n if (n2.shapeFlag & 512 /* COMPONENT_KEPT_ALIVE */) {\r\n parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized);\r\n }\r\n else {\r\n mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized);\r\n }\r\n }\r\n else {\r\n updateComponent(n1, n2, optimized);\r\n }\r\n };\r\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {\r\n const instance = (initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense));\r\n if ((process.env.NODE_ENV !== 'production') && instance.type.__hmrId) {\r\n registerHMR(instance);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n pushWarningContext(initialVNode);\r\n startMeasure(instance, `mount`);\r\n }\r\n // inject renderer internals for keepAlive\r\n if (isKeepAlive(initialVNode)) {\r\n instance.ctx.renderer = internals;\r\n }\r\n // resolve props and slots for setup context\r\n {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `init`);\r\n }\r\n setupComponent(instance);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `init`);\r\n }\r\n }\r\n // setup() is async. This component relies on async logic to be resolved\r\n // before proceeding\r\n if (instance.asyncDep) {\r\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);\r\n // Give it a placeholder if this is not hydration\r\n // TODO handle self-defined fallback\r\n if (!initialVNode.el) {\r\n const placeholder = (instance.subTree = createVNode(Comment));\r\n processCommentNode(null, placeholder, container, anchor);\r\n }\r\n return;\r\n }\r\n setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n popWarningContext();\r\n endMeasure(instance, `mount`);\r\n }\r\n };\r\n const updateComponent = (n1, n2, optimized) => {\r\n const instance = (n2.component = n1.component);\r\n if (shouldUpdateComponent(n1, n2, optimized)) {\r\n if (instance.asyncDep &&\r\n !instance.asyncResolved) {\r\n // async & still pending - just update props and slots\r\n // since the component's reactive effect for render isn't set-up yet\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n pushWarningContext(n2);\r\n }\r\n updateComponentPreRender(instance, n2, optimized);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n popWarningContext();\r\n }\r\n return;\r\n }\r\n else {\r\n // normal update\r\n instance.next = n2;\r\n // in case the child component is also queued, remove it to avoid\r\n // double updating the same child component in the same flush.\r\n invalidateJob(instance.update);\r\n // instance.update is the reactive effect.\r\n instance.update();\r\n }\r\n }\r\n else {\r\n // no update needed. just copy over properties\r\n n2.component = n1.component;\r\n n2.el = n1.el;\r\n instance.vnode = n2;\r\n }\r\n };\r\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {\r\n const componentUpdateFn = () => {\r\n if (!instance.isMounted) {\r\n let vnodeHook;\r\n const { el, props } = initialVNode;\r\n const { bm, m, parent } = instance;\r\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\r\n toggleRecurse(instance, false);\r\n // beforeMount hook\r\n if (bm) {\r\n invokeArrayFns(bm);\r\n }\r\n // onVnodeBeforeMount\r\n if (!isAsyncWrapperVNode &&\r\n (vnodeHook = props && props.onVnodeBeforeMount)) {\r\n invokeVNodeHook(vnodeHook, parent, initialVNode);\r\n }\r\n toggleRecurse(instance, true);\r\n if (el && hydrateNode) {\r\n // vnode has adopted host node - perform hydration instead of mount.\r\n const hydrateSubTree = () => {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `render`);\r\n }\r\n instance.subTree = renderComponentRoot(instance);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `render`);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `hydrate`);\r\n }\r\n hydrateNode(el, instance.subTree, instance, parentSuspense, null);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `hydrate`);\r\n }\r\n };\r\n if (isAsyncWrapperVNode) {\r\n initialVNode.type.__asyncLoader().then(\r\n // note: we are moving the render call into an async callback,\r\n // which means it won't track dependencies - but it's ok because\r\n // a server-rendered async wrapper is already in resolved state\r\n // and it will never need to change.\r\n () => !instance.isUnmounted && hydrateSubTree());\r\n }\r\n else {\r\n hydrateSubTree();\r\n }\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `render`);\r\n }\r\n const subTree = (instance.subTree = renderComponentRoot(instance));\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `render`);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `patch`);\r\n }\r\n patch(null, subTree, container, anchor, instance, parentSuspense, isSVG);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `patch`);\r\n }\r\n initialVNode.el = subTree.el;\r\n }\r\n // mounted hook\r\n if (m) {\r\n queuePostRenderEffect(m, parentSuspense);\r\n }\r\n // onVnodeMounted\r\n if (!isAsyncWrapperVNode &&\r\n (vnodeHook = props && props.onVnodeMounted)) {\r\n const scopedInitialVNode = initialVNode;\r\n queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense);\r\n }\r\n // activated hook for keep-alive roots.\r\n // #1742 activated hook must be accessed after first render\r\n // since the hook may be injected by a child keep-alive\r\n if (initialVNode.shapeFlag & 256 /* COMPONENT_SHOULD_KEEP_ALIVE */) {\r\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\r\n }\r\n instance.isMounted = true;\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentAdded(instance);\r\n }\r\n // #2458: deference mount-only object parameters to prevent memleaks\r\n initialVNode = container = anchor = null;\r\n }\r\n else {\r\n // updateComponent\r\n // This is triggered by mutation of component's own state (next: null)\r\n // OR parent calling processComponent (next: VNode)\r\n let { next, bu, u, parent, vnode } = instance;\r\n let originNext = next;\r\n let vnodeHook;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n pushWarningContext(next || instance.vnode);\r\n }\r\n // Disallow component effect recursion during pre-lifecycle hooks.\r\n toggleRecurse(instance, false);\r\n if (next) {\r\n next.el = vnode.el;\r\n updateComponentPreRender(instance, next, optimized);\r\n }\r\n else {\r\n next = vnode;\r\n }\r\n // beforeUpdate hook\r\n if (bu) {\r\n invokeArrayFns(bu);\r\n }\r\n // onVnodeBeforeUpdate\r\n if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {\r\n invokeVNodeHook(vnodeHook, parent, next, vnode);\r\n }\r\n toggleRecurse(instance, true);\r\n // render\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `render`);\r\n }\r\n const nextTree = renderComponentRoot(instance);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `render`);\r\n }\r\n const prevTree = instance.subTree;\r\n instance.subTree = nextTree;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `patch`);\r\n }\r\n patch(prevTree, nextTree, \r\n // parent may have changed if it's in a teleport\r\n hostParentNode(prevTree.el), \r\n // anchor may have changed if it's in a fragment\r\n getNextHostNode(prevTree), instance, parentSuspense, isSVG);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `patch`);\r\n }\r\n next.el = nextTree.el;\r\n if (originNext === null) {\r\n // self-triggered update. In case of HOC, update parent component\r\n // vnode el. HOC is indicated by parent instance's subTree pointing\r\n // to child component's vnode\r\n updateHOCHostEl(instance, nextTree.el);\r\n }\r\n // updated hook\r\n if (u) {\r\n queuePostRenderEffect(u, parentSuspense);\r\n }\r\n // onVnodeUpdated\r\n if ((vnodeHook = next.props && next.props.onVnodeUpdated)) {\r\n queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentUpdated(instance);\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n popWarningContext();\r\n }\r\n }\r\n };\r\n // create reactive effect for rendering\r\n const effect = (instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(instance.update), instance.scope // track it in component's effect scope\r\n ));\r\n const update = (instance.update = effect.run.bind(effect));\r\n update.id = instance.uid;\r\n // allowRecurse\r\n // #1801, #2043 component render effects should allow recursive updates\r\n toggleRecurse(instance, true);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n effect.onTrack = instance.rtc\r\n ? e => invokeArrayFns(instance.rtc, e)\r\n : void 0;\r\n effect.onTrigger = instance.rtg\r\n ? e => invokeArrayFns(instance.rtg, e)\r\n : void 0;\r\n // @ts-ignore (for scheduler)\r\n update.ownerInstance = instance;\r\n }\r\n update();\r\n };\r\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\r\n nextVNode.component = instance;\r\n const prevProps = instance.vnode.props;\r\n instance.vnode = nextVNode;\r\n instance.next = null;\r\n updateProps(instance, nextVNode.props, prevProps, optimized);\r\n updateSlots(instance, nextVNode.children, optimized);\r\n pauseTracking();\r\n // props update may have triggered pre-flush watchers.\r\n // flush them before the render update.\r\n flushPreFlushCbs(undefined, instance.update);\r\n resetTracking();\r\n };\r\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {\r\n const c1 = n1 && n1.children;\r\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\r\n const c2 = n2.children;\r\n const { patchFlag, shapeFlag } = n2;\r\n // fast path\r\n if (patchFlag > 0) {\r\n if (patchFlag & 128 /* KEYED_FRAGMENT */) {\r\n // this could be either fully-keyed or mixed (some keyed some not)\r\n // presence of patchFlag means children are guaranteed to be arrays\r\n patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n return;\r\n }\r\n else if (patchFlag & 256 /* UNKEYED_FRAGMENT */) {\r\n // unkeyed\r\n patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n return;\r\n }\r\n }\r\n // children has 3 possibilities: text, array or no children.\r\n if (shapeFlag & 8 /* TEXT_CHILDREN */) {\r\n // text children fast path\r\n if (prevShapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n unmountChildren(c1, parentComponent, parentSuspense);\r\n }\r\n if (c2 !== c1) {\r\n hostSetElementText(container, c2);\r\n }\r\n }\r\n else {\r\n if (prevShapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n // prev children was array\r\n if (shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n // two arrays, cannot assume anything, do full diff\r\n patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else {\r\n // no new children, just unmount old\r\n unmountChildren(c1, parentComponent, parentSuspense, true);\r\n }\r\n }\r\n else {\r\n // prev children was text OR null\r\n // new children is array OR null\r\n if (prevShapeFlag & 8 /* TEXT_CHILDREN */) {\r\n hostSetElementText(container, '');\r\n }\r\n // mount new if array\r\n if (shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n }\r\n }\r\n };\r\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n c1 = c1 || EMPTY_ARR;\r\n c2 = c2 || EMPTY_ARR;\r\n const oldLength = c1.length;\r\n const newLength = c2.length;\r\n const commonLength = Math.min(oldLength, newLength);\r\n let i;\r\n for (i = 0; i < commonLength; i++) {\r\n const nextChild = (c2[i] = optimized\r\n ? cloneIfMounted(c2[i])\r\n : normalizeVNode(c2[i]));\r\n patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n if (oldLength > newLength) {\r\n // remove old\r\n unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength);\r\n }\r\n else {\r\n // mount new\r\n mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength);\r\n }\r\n };\r\n // can be all-keyed or mixed\r\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\r\n let i = 0;\r\n const l2 = c2.length;\r\n let e1 = c1.length - 1; // prev ending index\r\n let e2 = l2 - 1; // next ending index\r\n // 1. sync from start\r\n // (a b) c\r\n // (a b) d e\r\n while (i <= e1 && i <= e2) {\r\n const n1 = c1[i];\r\n const n2 = (c2[i] = optimized\r\n ? cloneIfMounted(c2[i])\r\n : normalizeVNode(c2[i]));\r\n if (isSameVNodeType(n1, n2)) {\r\n patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else {\r\n break;\r\n }\r\n i++;\r\n }\r\n // 2. sync from end\r\n // a (b c)\r\n // d e (b c)\r\n while (i <= e1 && i <= e2) {\r\n const n1 = c1[e1];\r\n const n2 = (c2[e2] = optimized\r\n ? cloneIfMounted(c2[e2])\r\n : normalizeVNode(c2[e2]));\r\n if (isSameVNodeType(n1, n2)) {\r\n patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else {\r\n break;\r\n }\r\n e1--;\r\n e2--;\r\n }\r\n // 3. common sequence + mount\r\n // (a b)\r\n // (a b) c\r\n // i = 2, e1 = 1, e2 = 2\r\n // (a b)\r\n // c (a b)\r\n // i = 0, e1 = -1, e2 = 0\r\n if (i > e1) {\r\n if (i <= e2) {\r\n const nextPos = e2 + 1;\r\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\r\n while (i <= e2) {\r\n patch(null, (c2[i] = optimized\r\n ? cloneIfMounted(c2[i])\r\n : normalizeVNode(c2[i])), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n i++;\r\n }\r\n }\r\n }\r\n // 4. common sequence + unmount\r\n // (a b) c\r\n // (a b)\r\n // i = 2, e1 = 2, e2 = 1\r\n // a (b c)\r\n // (b c)\r\n // i = 0, e1 = 0, e2 = -1\r\n else if (i > e2) {\r\n while (i <= e1) {\r\n unmount(c1[i], parentComponent, parentSuspense, true);\r\n i++;\r\n }\r\n }\r\n // 5. unknown sequence\r\n // [i ... e1 + 1]: a b [c d e] f g\r\n // [i ... e2 + 1]: a b [e d c h] f g\r\n // i = 2, e1 = 4, e2 = 5\r\n else {\r\n const s1 = i; // prev starting index\r\n const s2 = i; // next starting index\r\n // 5.1 build key:index map for newChildren\r\n const keyToNewIndexMap = new Map();\r\n for (i = s2; i <= e2; i++) {\r\n const nextChild = (c2[i] = optimized\r\n ? cloneIfMounted(c2[i])\r\n : normalizeVNode(c2[i]));\r\n if (nextChild.key != null) {\r\n if ((process.env.NODE_ENV !== 'production') && keyToNewIndexMap.has(nextChild.key)) {\r\n warn(`Duplicate keys found during update:`, JSON.stringify(nextChild.key), `Make sure keys are unique.`);\r\n }\r\n keyToNewIndexMap.set(nextChild.key, i);\r\n }\r\n }\r\n // 5.2 loop through old children left to be patched and try to patch\r\n // matching nodes & remove nodes that are no longer present\r\n let j;\r\n let patched = 0;\r\n const toBePatched = e2 - s2 + 1;\r\n let moved = false;\r\n // used to track whether any node has moved\r\n let maxNewIndexSoFar = 0;\r\n // works as Map<newIndex, oldIndex>\r\n // Note that oldIndex is offset by +1\r\n // and oldIndex = 0 is a special value indicating the new node has\r\n // no corresponding old node.\r\n // used for determining longest stable subsequence\r\n const newIndexToOldIndexMap = new Array(toBePatched);\r\n for (i = 0; i < toBePatched; i++)\r\n newIndexToOldIndexMap[i] = 0;\r\n for (i = s1; i <= e1; i++) {\r\n const prevChild = c1[i];\r\n if (patched >= toBePatched) {\r\n // all new children have been patched so this can only be a removal\r\n unmount(prevChild, parentComponent, parentSuspense, true);\r\n continue;\r\n }\r\n let newIndex;\r\n if (prevChild.key != null) {\r\n newIndex = keyToNewIndexMap.get(prevChild.key);\r\n }\r\n else {\r\n // key-less node, try to locate a key-less node of the same type\r\n for (j = s2; j <= e2; j++) {\r\n if (newIndexToOldIndexMap[j - s2] === 0 &&\r\n isSameVNodeType(prevChild, c2[j])) {\r\n newIndex = j;\r\n break;\r\n }\r\n }\r\n }\r\n if (newIndex === undefined) {\r\n unmount(prevChild, parentComponent, parentSuspense, true);\r\n }\r\n else {\r\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\r\n if (newIndex >= maxNewIndexSoFar) {\r\n maxNewIndexSoFar = newIndex;\r\n }\r\n else {\r\n moved = true;\r\n }\r\n patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n patched++;\r\n }\r\n }\r\n // 5.3 move and mount\r\n // generate longest stable subsequence only when nodes have moved\r\n const increasingNewIndexSequence = moved\r\n ? getSequence(newIndexToOldIndexMap)\r\n : EMPTY_ARR;\r\n j = increasingNewIndexSequence.length - 1;\r\n // looping backwards so that we can use last patched node as anchor\r\n for (i = toBePatched - 1; i >= 0; i--) {\r\n const nextIndex = s2 + i;\r\n const nextChild = c2[nextIndex];\r\n const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\r\n if (newIndexToOldIndexMap[i] === 0) {\r\n // mount new\r\n patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n else if (moved) {\r\n // move if:\r\n // There is no stable subsequence (e.g. a reverse)\r\n // OR current node is not among the stable sequence\r\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\r\n move(nextChild, container, anchor, 2 /* REORDER */);\r\n }\r\n else {\r\n j--;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\r\n const { el, type, transition, children, shapeFlag } = vnode;\r\n if (shapeFlag & 6 /* COMPONENT */) {\r\n move(vnode.component.subTree, container, anchor, moveType);\r\n return;\r\n }\r\n if (shapeFlag & 128 /* SUSPENSE */) {\r\n vnode.suspense.move(container, anchor, moveType);\r\n return;\r\n }\r\n if (shapeFlag & 64 /* TELEPORT */) {\r\n type.move(vnode, container, anchor, internals);\r\n return;\r\n }\r\n if (type === Fragment) {\r\n hostInsert(el, container, anchor);\r\n for (let i = 0; i < children.length; i++) {\r\n move(children[i], container, anchor, moveType);\r\n }\r\n hostInsert(vnode.anchor, container, anchor);\r\n return;\r\n }\r\n if (type === Static) {\r\n moveStaticNode(vnode, container, anchor);\r\n return;\r\n }\r\n // single nodes\r\n const needTransition = moveType !== 2 /* REORDER */ &&\r\n shapeFlag & 1 /* ELEMENT */ &&\r\n transition;\r\n if (needTransition) {\r\n if (moveType === 0 /* ENTER */) {\r\n transition.beforeEnter(el);\r\n hostInsert(el, container, anchor);\r\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\r\n }\r\n else {\r\n const { leave, delayLeave, afterLeave } = transition;\r\n const remove = () => hostInsert(el, container, anchor);\r\n const performLeave = () => {\r\n leave(el, () => {\r\n remove();\r\n afterLeave && afterLeave();\r\n });\r\n };\r\n if (delayLeave) {\r\n delayLeave(el, remove, performLeave);\r\n }\r\n else {\r\n performLeave();\r\n }\r\n }\r\n }\r\n else {\r\n hostInsert(el, container, anchor);\r\n }\r\n };\r\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\r\n const { type, props, ref, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode;\r\n // unset ref\r\n if (ref != null) {\r\n setRef(ref, null, parentSuspense, vnode, true);\r\n }\r\n if (shapeFlag & 256 /* COMPONENT_SHOULD_KEEP_ALIVE */) {\r\n parentComponent.ctx.deactivate(vnode);\r\n return;\r\n }\r\n const shouldInvokeDirs = shapeFlag & 1 /* ELEMENT */ && dirs;\r\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\r\n let vnodeHook;\r\n if (shouldInvokeVnodeHook &&\r\n (vnodeHook = props && props.onVnodeBeforeUnmount)) {\r\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\r\n }\r\n if (shapeFlag & 6 /* COMPONENT */) {\r\n unmountComponent(vnode.component, parentSuspense, doRemove);\r\n }\r\n else {\r\n if (shapeFlag & 128 /* SUSPENSE */) {\r\n vnode.suspense.unmount(parentSuspense, doRemove);\r\n return;\r\n }\r\n if (shouldInvokeDirs) {\r\n invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount');\r\n }\r\n if (shapeFlag & 64 /* TELEPORT */) {\r\n vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove);\r\n }\r\n else if (dynamicChildren &&\r\n // #1153: fast path should not be taken for non-stable (v-for) fragments\r\n (type !== Fragment ||\r\n (patchFlag > 0 && patchFlag & 64 /* STABLE_FRAGMENT */))) {\r\n // fast path for block nodes: only need to unmount dynamic children.\r\n unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);\r\n }\r\n else if ((type === Fragment &&\r\n patchFlag &\r\n (128 /* KEYED_FRAGMENT */ | 256 /* UNKEYED_FRAGMENT */)) ||\r\n (!optimized && shapeFlag & 16 /* ARRAY_CHILDREN */)) {\r\n unmountChildren(children, parentComponent, parentSuspense);\r\n }\r\n if (doRemove) {\r\n remove(vnode);\r\n }\r\n }\r\n if ((shouldInvokeVnodeHook &&\r\n (vnodeHook = props && props.onVnodeUnmounted)) ||\r\n shouldInvokeDirs) {\r\n queuePostRenderEffect(() => {\r\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\r\n shouldInvokeDirs &&\r\n invokeDirectiveHook(vnode, null, parentComponent, 'unmounted');\r\n }, parentSuspense);\r\n }\r\n };\r\n const remove = vnode => {\r\n const { type, el, anchor, transition } = vnode;\r\n if (type === Fragment) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n vnode.patchFlag > 0 &&\r\n vnode.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */ &&\r\n transition &&\r\n !transition.persisted) {\r\n vnode.children.forEach(child => {\r\n if (child.type === Comment) {\r\n hostRemove(child.el);\r\n }\r\n else {\r\n remove(child);\r\n }\r\n });\r\n }\r\n else {\r\n removeFragment(el, anchor);\r\n }\r\n return;\r\n }\r\n if (type === Static) {\r\n removeStaticNode(vnode);\r\n return;\r\n }\r\n const performRemove = () => {\r\n hostRemove(el);\r\n if (transition && !transition.persisted && transition.afterLeave) {\r\n transition.afterLeave();\r\n }\r\n };\r\n if (vnode.shapeFlag & 1 /* ELEMENT */ &&\r\n transition &&\r\n !transition.persisted) {\r\n const { leave, delayLeave } = transition;\r\n const performLeave = () => leave(el, performRemove);\r\n if (delayLeave) {\r\n delayLeave(vnode.el, performRemove, performLeave);\r\n }\r\n else {\r\n performLeave();\r\n }\r\n }\r\n else {\r\n performRemove();\r\n }\r\n };\r\n const removeFragment = (cur, end) => {\r\n // For fragments, directly remove all contained DOM nodes.\r\n // (fragment child nodes cannot have transition)\r\n let next;\r\n while (cur !== end) {\r\n next = hostNextSibling(cur);\r\n hostRemove(cur);\r\n cur = next;\r\n }\r\n hostRemove(end);\r\n };\r\n const unmountComponent = (instance, parentSuspense, doRemove) => {\r\n if ((process.env.NODE_ENV !== 'production') && instance.type.__hmrId) {\r\n unregisterHMR(instance);\r\n }\r\n const { bum, scope, update, subTree, um } = instance;\r\n // beforeUnmount hook\r\n if (bum) {\r\n invokeArrayFns(bum);\r\n }\r\n // stop effects in component scope\r\n scope.stop();\r\n // update may be null if a component is unmounted before its async\r\n // setup has resolved.\r\n if (update) {\r\n // so that scheduler will no longer invoke it\r\n update.active = false;\r\n unmount(subTree, instance, parentSuspense, doRemove);\r\n }\r\n // unmounted hook\r\n if (um) {\r\n queuePostRenderEffect(um, parentSuspense);\r\n }\r\n queuePostRenderEffect(() => {\r\n instance.isUnmounted = true;\r\n }, parentSuspense);\r\n // A component with async dep inside a pending suspense is unmounted before\r\n // its async dep resolves. This should remove the dep from the suspense, and\r\n // cause the suspense to resolve immediately if that was the last dep.\r\n if (parentSuspense &&\r\n parentSuspense.pendingBranch &&\r\n !parentSuspense.isUnmounted &&\r\n instance.asyncDep &&\r\n !instance.asyncResolved &&\r\n instance.suspenseId === parentSuspense.pendingId) {\r\n parentSuspense.deps--;\r\n if (parentSuspense.deps === 0) {\r\n parentSuspense.resolve();\r\n }\r\n }\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n devtoolsComponentRemoved(instance);\r\n }\r\n };\r\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\r\n for (let i = start; i < children.length; i++) {\r\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\r\n }\r\n };\r\n const getNextHostNode = vnode => {\r\n if (vnode.shapeFlag & 6 /* COMPONENT */) {\r\n return getNextHostNode(vnode.component.subTree);\r\n }\r\n if (vnode.shapeFlag & 128 /* SUSPENSE */) {\r\n return vnode.suspense.next();\r\n }\r\n return hostNextSibling((vnode.anchor || vnode.el));\r\n };\r\n const render = (vnode, container, isSVG) => {\r\n if (vnode == null) {\r\n if (container._vnode) {\r\n unmount(container._vnode, null, null, true);\r\n }\r\n }\r\n else {\r\n patch(container._vnode || null, vnode, container, null, null, null, isSVG);\r\n }\r\n flushPostFlushCbs();\r\n container._vnode = vnode;\r\n };\r\n const internals = {\r\n p: patch,\r\n um: unmount,\r\n m: move,\r\n r: remove,\r\n mt: mountComponent,\r\n mc: mountChildren,\r\n pc: patchChildren,\r\n pbc: patchBlockChildren,\r\n n: getNextHostNode,\r\n o: options\r\n };\r\n let hydrate;\r\n let hydrateNode;\r\n if (createHydrationFns) {\r\n [hydrate, hydrateNode] = createHydrationFns(internals);\r\n }\r\n return {\r\n render,\r\n hydrate,\r\n createApp: createAppAPI(render, hydrate)\r\n };\r\n}\r\nfunction toggleRecurse({ effect, update }, allowed) {\r\n effect.allowRecurse = update.allowRecurse = allowed;\r\n}\r\n/**\r\n * #1156\r\n * When a component is HMR-enabled, we need to make sure that all static nodes\r\n * inside a block also inherit the DOM element from the previous tree so that\r\n * HMR updates (which are full updates) can retrieve the element for patching.\r\n *\r\n * #2080\r\n * Inside keyed `template` fragment static children, if a fragment is moved,\r\n * the children will always be moved. Therefore, in order to ensure correct move\r\n * position, el should be inherited from previous nodes.\r\n */\r\nfunction traverseStaticChildren(n1, n2, shallow = false) {\r\n const ch1 = n1.children;\r\n const ch2 = n2.children;\r\n if (isArray(ch1) && isArray(ch2)) {\r\n for (let i = 0; i < ch1.length; i++) {\r\n // this is only called in the optimized path so array children are\r\n // guaranteed to be vnodes\r\n const c1 = ch1[i];\r\n let c2 = ch2[i];\r\n if (c2.shapeFlag & 1 /* ELEMENT */ && !c2.dynamicChildren) {\r\n if (c2.patchFlag <= 0 || c2.patchFlag === 32 /* HYDRATE_EVENTS */) {\r\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\r\n c2.el = c1.el;\r\n }\r\n if (!shallow)\r\n traverseStaticChildren(c1, c2);\r\n }\r\n // also inherit for comment nodes, but not placeholders (e.g. v-if which\r\n // would have received .el during block patch)\r\n if ((process.env.NODE_ENV !== 'production') && c2.type === Comment && !c2.el) {\r\n c2.el = c1.el;\r\n }\r\n }\r\n }\r\n}\r\n// https://en.wikipedia.org/wiki/Longest_increasing_subsequence\r\nfunction getSequence(arr) {\r\n const p = arr.slice();\r\n const result = [0];\r\n let i, j, u, v, c;\r\n const len = arr.length;\r\n for (i = 0; i < len; i++) {\r\n const arrI = arr[i];\r\n if (arrI !== 0) {\r\n j = result[result.length - 1];\r\n if (arr[j] < arrI) {\r\n p[i] = j;\r\n result.push(i);\r\n continue;\r\n }\r\n u = 0;\r\n v = result.length - 1;\r\n while (u < v) {\r\n c = (u + v) >> 1;\r\n if (arr[result[c]] < arrI) {\r\n u = c + 1;\r\n }\r\n else {\r\n v = c;\r\n }\r\n }\r\n if (arrI < arr[result[u]]) {\r\n if (u > 0) {\r\n p[i] = result[u - 1];\r\n }\r\n result[u] = i;\r\n }\r\n }\r\n }\r\n u = result.length;\r\n v = result[u - 1];\r\n while (u-- > 0) {\r\n result[u] = v;\r\n v = p[v];\r\n }\r\n return result;\r\n}\n\nconst isTeleport = (type) => type.__isTeleport;\r\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === '');\r\nconst isTargetSVG = (target) => typeof SVGElement !== 'undefined' && target instanceof SVGElement;\r\nconst resolveTarget = (props, select) => {\r\n const targetSelector = props && props.to;\r\n if (isString(targetSelector)) {\r\n if (!select) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Current renderer does not support string target for Teleports. ` +\r\n `(missing querySelector renderer option)`);\r\n return null;\r\n }\r\n else {\r\n const target = select(targetSelector);\r\n if (!target) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Failed to locate Teleport target with selector \"${targetSelector}\". ` +\r\n `Note the target element must exist before the component is mounted - ` +\r\n `i.e. the target cannot be rendered by the component itself, and ` +\r\n `ideally should be outside of the entire Vue component tree.`);\r\n }\r\n return target;\r\n }\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production') && !targetSelector && !isTeleportDisabled(props)) {\r\n warn(`Invalid Teleport target: ${targetSelector}`);\r\n }\r\n return targetSelector;\r\n }\r\n};\r\nconst TeleportImpl = {\r\n __isTeleport: true,\r\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) {\r\n const { mc: mountChildren, pc: patchChildren, pbc: patchBlockChildren, o: { insert, querySelector, createText, createComment } } = internals;\r\n const disabled = isTeleportDisabled(n2.props);\r\n let { shapeFlag, children, dynamicChildren } = n2;\r\n // #3302\r\n // HMR updated, force full diff\r\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\r\n optimized = false;\r\n dynamicChildren = null;\r\n }\r\n if (n1 == null) {\r\n // insert anchors in the main view\r\n const placeholder = (n2.el = (process.env.NODE_ENV !== 'production')\r\n ? createComment('teleport start')\r\n : createText(''));\r\n const mainAnchor = (n2.anchor = (process.env.NODE_ENV !== 'production')\r\n ? createComment('teleport end')\r\n : createText(''));\r\n insert(placeholder, container, anchor);\r\n insert(mainAnchor, container, anchor);\r\n const target = (n2.target = resolveTarget(n2.props, querySelector));\r\n const targetAnchor = (n2.targetAnchor = createText(''));\r\n if (target) {\r\n insert(targetAnchor, target);\r\n // #2652 we could be teleporting from a non-SVG tree into an SVG tree\r\n isSVG = isSVG || isTargetSVG(target);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production') && !disabled) {\r\n warn('Invalid Teleport target on mount:', target, `(${typeof target})`);\r\n }\r\n const mount = (container, anchor) => {\r\n // Teleport *always* has Array children. This is enforced in both the\r\n // compiler and vnode children normalization.\r\n if (shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n mountChildren(children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\r\n }\r\n };\r\n if (disabled) {\r\n mount(container, mainAnchor);\r\n }\r\n else if (target) {\r\n mount(target, targetAnchor);\r\n }\r\n }\r\n else {\r\n // update content\r\n n2.el = n1.el;\r\n const mainAnchor = (n2.anchor = n1.anchor);\r\n const target = (n2.target = n1.target);\r\n const targetAnchor = (n2.targetAnchor = n1.targetAnchor);\r\n const wasDisabled = isTeleportDisabled(n1.props);\r\n const currentContainer = wasDisabled ? container : target;\r\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\r\n isSVG = isSVG || isTargetSVG(target);\r\n if (dynamicChildren) {\r\n // fast path when the teleport happens to be a block root\r\n patchBlockChildren(n1.dynamicChildren, dynamicChildren, currentContainer, parentComponent, parentSuspense, isSVG, slotScopeIds);\r\n // even in block tree mode we need to make sure all root-level nodes\r\n // in the teleport inherit previous DOM references so that they can\r\n // be moved in future patches.\r\n traverseStaticChildren(n1, n2, true);\r\n }\r\n else if (!optimized) {\r\n patchChildren(n1, n2, currentContainer, currentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, false);\r\n }\r\n if (disabled) {\r\n if (!wasDisabled) {\r\n // enabled -> disabled\r\n // move into main container\r\n moveTeleport(n2, container, mainAnchor, internals, 1 /* TOGGLE */);\r\n }\r\n }\r\n else {\r\n // target changed\r\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\r\n const nextTarget = (n2.target = resolveTarget(n2.props, querySelector));\r\n if (nextTarget) {\r\n moveTeleport(n2, nextTarget, null, internals, 0 /* TARGET_CHANGE */);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Invalid Teleport target on update:', target, `(${typeof target})`);\r\n }\r\n }\r\n else if (wasDisabled) {\r\n // disabled -> enabled\r\n // move into teleport target\r\n moveTeleport(n2, target, targetAnchor, internals, 1 /* TOGGLE */);\r\n }\r\n }\r\n }\r\n },\r\n remove(vnode, parentComponent, parentSuspense, optimized, { um: unmount, o: { remove: hostRemove } }, doRemove) {\r\n const { shapeFlag, children, anchor, targetAnchor, target, props } = vnode;\r\n if (target) {\r\n hostRemove(targetAnchor);\r\n }\r\n // an unmounted teleport should always remove its children if not disabled\r\n if (doRemove || !isTeleportDisabled(props)) {\r\n hostRemove(anchor);\r\n if (shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n unmount(child, parentComponent, parentSuspense, true, !!child.dynamicChildren);\r\n }\r\n }\r\n }\r\n },\r\n move: moveTeleport,\r\n hydrate: hydrateTeleport\r\n};\r\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2 /* REORDER */) {\r\n // move target anchor if this is a target change.\r\n if (moveType === 0 /* TARGET_CHANGE */) {\r\n insert(vnode.targetAnchor, container, parentAnchor);\r\n }\r\n const { el, anchor, shapeFlag, children, props } = vnode;\r\n const isReorder = moveType === 2 /* REORDER */;\r\n // move main view anchor if this is a re-order.\r\n if (isReorder) {\r\n insert(el, container, parentAnchor);\r\n }\r\n // if this is a re-order and teleport is enabled (content is in target)\r\n // do not move children. So the opposite is: only move children if this\r\n // is not a reorder, or the teleport is disabled\r\n if (!isReorder || isTeleportDisabled(props)) {\r\n // Teleport has either Array children or no children.\r\n if (shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n for (let i = 0; i < children.length; i++) {\r\n move(children[i], container, parentAnchor, 2 /* REORDER */);\r\n }\r\n }\r\n }\r\n // move main view anchor if this is a re-order.\r\n if (isReorder) {\r\n insert(anchor, container, parentAnchor);\r\n }\r\n}\r\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { o: { nextSibling, parentNode, querySelector } }, hydrateChildren) {\r\n const target = (vnode.target = resolveTarget(vnode.props, querySelector));\r\n if (target) {\r\n // if multiple teleports rendered to the same target element, we need to\r\n // pick up from where the last teleport finished instead of the first node\r\n const targetNode = target._lpa || target.firstChild;\r\n if (vnode.shapeFlag & 16 /* ARRAY_CHILDREN */) {\r\n if (isTeleportDisabled(vnode.props)) {\r\n vnode.anchor = hydrateChildren(nextSibling(node), vnode, parentNode(node), parentComponent, parentSuspense, slotScopeIds, optimized);\r\n vnode.targetAnchor = targetNode;\r\n }\r\n else {\r\n vnode.anchor = nextSibling(node);\r\n vnode.targetAnchor = hydrateChildren(targetNode, vnode, target, parentComponent, parentSuspense, slotScopeIds, optimized);\r\n }\r\n target._lpa =\r\n vnode.targetAnchor && nextSibling(vnode.targetAnchor);\r\n }\r\n }\r\n return vnode.anchor && nextSibling(vnode.anchor);\r\n}\r\n// Force-casted public typing for h and TSX props inference\r\nconst Teleport = TeleportImpl;\n\nconst COMPONENTS = 'components';\r\nconst DIRECTIVES = 'directives';\r\n/**\r\n * @private\r\n */\r\nfunction resolveComponent(name, maybeSelfReference) {\r\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\r\n}\r\nconst NULL_DYNAMIC_COMPONENT = Symbol();\r\n/**\r\n * @private\r\n */\r\nfunction resolveDynamicComponent(component) {\r\n if (isString(component)) {\r\n return resolveAsset(COMPONENTS, component, false) || component;\r\n }\r\n else {\r\n // invalid types will fallthrough to createVNode and raise warning\r\n return (component || NULL_DYNAMIC_COMPONENT);\r\n }\r\n}\r\n/**\r\n * @private\r\n */\r\nfunction resolveDirective(name) {\r\n return resolveAsset(DIRECTIVES, name);\r\n}\r\n// implementation\r\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\r\n const instance = currentRenderingInstance || currentInstance;\r\n if (instance) {\r\n const Component = instance.type;\r\n // explicit self name has highest priority\r\n if (type === COMPONENTS) {\r\n const selfName = getComponentName(Component);\r\n if (selfName &&\r\n (selfName === name ||\r\n selfName === camelize(name) ||\r\n selfName === capitalize(camelize(name)))) {\r\n return Component;\r\n }\r\n }\r\n const res = \r\n // local registration\r\n // check instance[type] first which is resolved for options API\r\n resolve(instance[type] || Component[type], name) ||\r\n // global registration\r\n resolve(instance.appContext[type], name);\r\n if (!res && maybeSelfReference) {\r\n // fallback to implicit self-reference\r\n return Component;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && warnMissing && !res) {\r\n const extra = type === COMPONENTS\r\n ? `\\nIf this is a native custom element, make sure to exclude it from ` +\r\n `component resolution via compilerOptions.isCustomElement.`\r\n : ``;\r\n warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\r\n }\r\n return res;\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`resolve${capitalize(type.slice(0, -1))} ` +\r\n `can only be used in render() or setup().`);\r\n }\r\n}\r\nfunction resolve(registry, name) {\r\n return (registry &&\r\n (registry[name] ||\r\n registry[camelize(name)] ||\r\n registry[capitalize(camelize(name))]));\r\n}\n\nconst Fragment = Symbol((process.env.NODE_ENV !== 'production') ? 'Fragment' : undefined);\r\nconst Text = Symbol((process.env.NODE_ENV !== 'production') ? 'Text' : undefined);\r\nconst Comment = Symbol((process.env.NODE_ENV !== 'production') ? 'Comment' : undefined);\r\nconst Static = Symbol((process.env.NODE_ENV !== 'production') ? 'Static' : undefined);\r\n// Since v-if and v-for are the two possible ways node structure can dynamically\r\n// change, once we consider v-if branches and each v-for fragment a block, we\r\n// can divide a template into nested blocks, and within each block the node\r\n// structure would be stable. This allows us to skip most children diffing\r\n// and only worry about the dynamic nodes (indicated by patch flags).\r\nconst blockStack = [];\r\nlet currentBlock = null;\r\n/**\r\n * Open a block.\r\n * This must be called before `createBlock`. It cannot be part of `createBlock`\r\n * because the children of the block are evaluated before `createBlock` itself\r\n * is called. The generated code typically looks like this:\r\n *\r\n * ```js\r\n * function render() {\r\n * return (openBlock(),createBlock('div', null, [...]))\r\n * }\r\n * ```\r\n * disableTracking is true when creating a v-for fragment block, since a v-for\r\n * fragment always diffs its children.\r\n *\r\n * @private\r\n */\r\nfunction openBlock(disableTracking = false) {\r\n blockStack.push((currentBlock = disableTracking ? null : []));\r\n}\r\nfunction closeBlock() {\r\n blockStack.pop();\r\n currentBlock = blockStack[blockStack.length - 1] || null;\r\n}\r\n// Whether we should be tracking dynamic child nodes inside a block.\r\n// Only tracks when this value is > 0\r\n// We are not using a simple boolean because this value may need to be\r\n// incremented/decremented by nested usage of v-once (see below)\r\nlet isBlockTreeEnabled = 1;\r\n/**\r\n * Block tracking sometimes needs to be disabled, for example during the\r\n * creation of a tree that needs to be cached by v-once. The compiler generates\r\n * code like this:\r\n *\r\n * ``` js\r\n * _cache[1] || (\r\n * setBlockTracking(-1),\r\n * _cache[1] = createVNode(...),\r\n * setBlockTracking(1),\r\n * _cache[1]\r\n * )\r\n * ```\r\n *\r\n * @private\r\n */\r\nfunction setBlockTracking(value) {\r\n isBlockTreeEnabled += value;\r\n}\r\nfunction setupBlock(vnode) {\r\n // save current block children on the block vnode\r\n vnode.dynamicChildren =\r\n isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\r\n // close block\r\n closeBlock();\r\n // a block is always going to be patched, so track it as a child of its\r\n // parent block\r\n if (isBlockTreeEnabled > 0 && currentBlock) {\r\n currentBlock.push(vnode);\r\n }\r\n return vnode;\r\n}\r\n/**\r\n * @private\r\n */\r\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\r\n return setupBlock(createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, true /* isBlock */));\r\n}\r\n/**\r\n * Create a block root vnode. Takes the same exact arguments as `createVNode`.\r\n * A block root keeps track of dynamic nodes within the block in the\r\n * `dynamicChildren` array.\r\n *\r\n * @private\r\n */\r\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\r\n return setupBlock(createVNode(type, props, children, patchFlag, dynamicProps, true /* isBlock: prevent a block from tracking itself */));\r\n}\r\nfunction isVNode(value) {\r\n return value ? value.__v_isVNode === true : false;\r\n}\r\nfunction isSameVNodeType(n1, n2) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n n2.shapeFlag & 6 /* COMPONENT */ &&\r\n hmrDirtyComponents.has(n2.type)) {\r\n // HMR only: if the component has been hot-updated, force a reload.\r\n return false;\r\n }\r\n return n1.type === n2.type && n1.key === n2.key;\r\n}\r\nlet vnodeArgsTransformer;\r\n/**\r\n * Internal API for registering an arguments transform for createVNode\r\n * used for creating stubs in the test-utils\r\n * It is *internal* but needs to be exposed for test-utils to pick up proper\r\n * typings\r\n */\r\nfunction transformVNodeArgs(transformer) {\r\n vnodeArgsTransformer = transformer;\r\n}\r\nconst createVNodeWithArgsTransform = (...args) => {\r\n return _createVNode(...(vnodeArgsTransformer\r\n ? vnodeArgsTransformer(args, currentRenderingInstance)\r\n : args));\r\n};\r\nconst InternalObjectKey = `__vInternal`;\r\nconst normalizeKey = ({ key }) => key != null ? key : null;\r\nconst normalizeRef = ({ ref, ref_key, ref_for }) => {\r\n return (ref != null\r\n ? isString(ref) || isRef(ref) || isFunction(ref)\r\n ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for }\r\n : ref\r\n : null);\r\n};\r\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1 /* ELEMENT */, isBlockNode = false, needFullChildrenNormalization = false) {\r\n const vnode = {\r\n __v_isVNode: true,\r\n __v_skip: true,\r\n type,\r\n props,\r\n key: props && normalizeKey(props),\r\n ref: props && normalizeRef(props),\r\n scopeId: currentScopeId,\r\n slotScopeIds: null,\r\n children,\r\n component: null,\r\n suspense: null,\r\n ssContent: null,\r\n ssFallback: null,\r\n dirs: null,\r\n transition: null,\r\n el: null,\r\n anchor: null,\r\n target: null,\r\n targetAnchor: null,\r\n staticCount: 0,\r\n shapeFlag,\r\n patchFlag,\r\n dynamicProps,\r\n dynamicChildren: null,\r\n appContext: null\r\n };\r\n if (needFullChildrenNormalization) {\r\n normalizeChildren(vnode, children);\r\n // normalize suspense children\r\n if (shapeFlag & 128 /* SUSPENSE */) {\r\n type.normalize(vnode);\r\n }\r\n }\r\n else if (children) {\r\n // compiled element vnode - if children is passed, only possible types are\r\n // string or Array.\r\n vnode.shapeFlag |= isString(children)\r\n ? 8 /* TEXT_CHILDREN */\r\n : 16 /* ARRAY_CHILDREN */;\r\n }\r\n // validate key\r\n if ((process.env.NODE_ENV !== 'production') && vnode.key !== vnode.key) {\r\n warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\r\n }\r\n // track vnode for block tree\r\n if (isBlockTreeEnabled > 0 &&\r\n // avoid a block node from tracking itself\r\n !isBlockNode &&\r\n // has current parent block\r\n currentBlock &&\r\n // presence of a patch flag indicates this node needs patching on updates.\r\n // component nodes also should always be patched, because even if the\r\n // component doesn't need to update, it needs to persist the instance on to\r\n // the next vnode so that it can be properly unmounted later.\r\n (vnode.patchFlag > 0 || shapeFlag & 6 /* COMPONENT */) &&\r\n // the EVENTS flag is only for hydration and if it is the only flag, the\r\n // vnode should not be considered dynamic due to handler caching.\r\n vnode.patchFlag !== 32 /* HYDRATE_EVENTS */) {\r\n currentBlock.push(vnode);\r\n }\r\n return vnode;\r\n}\r\nconst createVNode = ((process.env.NODE_ENV !== 'production') ? createVNodeWithArgsTransform : _createVNode);\r\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\r\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\r\n if ((process.env.NODE_ENV !== 'production') && !type) {\r\n warn(`Invalid vnode type when creating vnode: ${type}.`);\r\n }\r\n type = Comment;\r\n }\r\n if (isVNode(type)) {\r\n // createVNode receiving an existing vnode. This happens in cases like\r\n // <component :is=\"vnode\"/>\r\n // #2078 make sure to merge refs during the clone instead of overwriting it\r\n const cloned = cloneVNode(type, props, true /* mergeRef: true */);\r\n if (children) {\r\n normalizeChildren(cloned, children);\r\n }\r\n return cloned;\r\n }\r\n // class component normalization.\r\n if (isClassComponent(type)) {\r\n type = type.__vccOpts;\r\n }\r\n // class & style normalization.\r\n if (props) {\r\n // for reactive or proxy objects, we need to clone it to enable mutation.\r\n props = guardReactiveProps(props);\r\n let { class: klass, style } = props;\r\n if (klass && !isString(klass)) {\r\n props.class = normalizeClass(klass);\r\n }\r\n if (isObject(style)) {\r\n // reactive state objects need to be cloned since they are likely to be\r\n // mutated\r\n if (isProxy(style) && !isArray(style)) {\r\n style = extend({}, style);\r\n }\r\n props.style = normalizeStyle(style);\r\n }\r\n }\r\n // encode the vnode type information into a bitmap\r\n const shapeFlag = isString(type)\r\n ? 1 /* ELEMENT */\r\n : isSuspense(type)\r\n ? 128 /* SUSPENSE */\r\n : isTeleport(type)\r\n ? 64 /* TELEPORT */\r\n : isObject(type)\r\n ? 4 /* STATEFUL_COMPONENT */\r\n : isFunction(type)\r\n ? 2 /* FUNCTIONAL_COMPONENT */\r\n : 0;\r\n if ((process.env.NODE_ENV !== 'production') && shapeFlag & 4 /* STATEFUL_COMPONENT */ && isProxy(type)) {\r\n type = toRaw(type);\r\n warn(`Vue received a Component which was made a reactive object. This can ` +\r\n `lead to unnecessary performance overhead, and should be avoided by ` +\r\n `marking the component with \\`markRaw\\` or using \\`shallowRef\\` ` +\r\n `instead of \\`ref\\`.`, `\\nComponent that was made reactive: `, type);\r\n }\r\n return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true);\r\n}\r\nfunction guardReactiveProps(props) {\r\n if (!props)\r\n return null;\r\n return isProxy(props) || InternalObjectKey in props\r\n ? extend({}, props)\r\n : props;\r\n}\r\nfunction cloneVNode(vnode, extraProps, mergeRef = false) {\r\n // This is intentionally NOT using spread or extend to avoid the runtime\r\n // key enumeration cost.\r\n const { props, ref, patchFlag, children } = vnode;\r\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\r\n const cloned = {\r\n __v_isVNode: true,\r\n __v_skip: true,\r\n type: vnode.type,\r\n props: mergedProps,\r\n key: mergedProps && normalizeKey(mergedProps),\r\n ref: extraProps && extraProps.ref\r\n ? // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\r\n // if the vnode itself already has a ref, cloneVNode will need to merge\r\n // the refs so the single vnode can be set on multiple refs\r\n mergeRef && ref\r\n ? isArray(ref)\r\n ? ref.concat(normalizeRef(extraProps))\r\n : [ref, normalizeRef(extraProps)]\r\n : normalizeRef(extraProps)\r\n : ref,\r\n scopeId: vnode.scopeId,\r\n slotScopeIds: vnode.slotScopeIds,\r\n children: (process.env.NODE_ENV !== 'production') && patchFlag === -1 /* HOISTED */ && isArray(children)\r\n ? children.map(deepCloneVNode)\r\n : children,\r\n target: vnode.target,\r\n targetAnchor: vnode.targetAnchor,\r\n staticCount: vnode.staticCount,\r\n shapeFlag: vnode.shapeFlag,\r\n // if the vnode is cloned with extra props, we can no longer assume its\r\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\r\n // note: preserve flag for fragments since they use the flag for children\r\n // fast paths only.\r\n patchFlag: extraProps && vnode.type !== Fragment\r\n ? patchFlag === -1 // hoisted node\r\n ? 16 /* FULL_PROPS */\r\n : patchFlag | 16 /* FULL_PROPS */\r\n : patchFlag,\r\n dynamicProps: vnode.dynamicProps,\r\n dynamicChildren: vnode.dynamicChildren,\r\n appContext: vnode.appContext,\r\n dirs: vnode.dirs,\r\n transition: vnode.transition,\r\n // These should technically only be non-null on mounted VNodes. However,\r\n // they *should* be copied for kept-alive vnodes. So we just always copy\r\n // them since them being non-null during a mount doesn't affect the logic as\r\n // they will simply be overwritten.\r\n component: vnode.component,\r\n suspense: vnode.suspense,\r\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\r\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\r\n el: vnode.el,\r\n anchor: vnode.anchor\r\n };\r\n return cloned;\r\n}\r\n/**\r\n * Dev only, for HMR of hoisted vnodes reused in v-for\r\n * https://github.com/vitejs/vite/issues/2022\r\n */\r\nfunction deepCloneVNode(vnode) {\r\n const cloned = cloneVNode(vnode);\r\n if (isArray(vnode.children)) {\r\n cloned.children = vnode.children.map(deepCloneVNode);\r\n }\r\n return cloned;\r\n}\r\n/**\r\n * @private\r\n */\r\nfunction createTextVNode(text = ' ', flag = 0) {\r\n return createVNode(Text, null, text, flag);\r\n}\r\n/**\r\n * @private\r\n */\r\nfunction createStaticVNode(content, numberOfNodes) {\r\n // A static vnode can contain multiple stringified elements, and the number\r\n // of elements is necessary for hydration.\r\n const vnode = createVNode(Static, null, content);\r\n vnode.staticCount = numberOfNodes;\r\n return vnode;\r\n}\r\n/**\r\n * @private\r\n */\r\nfunction createCommentVNode(text = '', \r\n// when used as the v-else branch, the comment node must be created as a\r\n// block to ensure correct updates.\r\nasBlock = false) {\r\n return asBlock\r\n ? (openBlock(), createBlock(Comment, null, text))\r\n : createVNode(Comment, null, text);\r\n}\r\nfunction normalizeVNode(child) {\r\n if (child == null || typeof child === 'boolean') {\r\n // empty placeholder\r\n return createVNode(Comment);\r\n }\r\n else if (isArray(child)) {\r\n // fragment\r\n return createVNode(Fragment, null, \r\n // #3666, avoid reference pollution when reusing vnode\r\n child.slice());\r\n }\r\n else if (typeof child === 'object') {\r\n // already vnode, this should be the most common since compiled templates\r\n // always produce all-vnode children arrays\r\n return cloneIfMounted(child);\r\n }\r\n else {\r\n // strings and numbers\r\n return createVNode(Text, null, String(child));\r\n }\r\n}\r\n// optimized normalization for template-compiled render fns\r\nfunction cloneIfMounted(child) {\r\n return child.el === null || child.memo ? child : cloneVNode(child);\r\n}\r\nfunction normalizeChildren(vnode, children) {\r\n let type = 0;\r\n const { shapeFlag } = vnode;\r\n if (children == null) {\r\n children = null;\r\n }\r\n else if (isArray(children)) {\r\n type = 16 /* ARRAY_CHILDREN */;\r\n }\r\n else if (typeof children === 'object') {\r\n if (shapeFlag & (1 /* ELEMENT */ | 64 /* TELEPORT */)) {\r\n // Normalize slot to plain children for plain element and Teleport\r\n const slot = children.default;\r\n if (slot) {\r\n // _c marker is added by withCtx() indicating this is a compiled slot\r\n slot._c && (slot._d = false);\r\n normalizeChildren(vnode, slot());\r\n slot._c && (slot._d = true);\r\n }\r\n return;\r\n }\r\n else {\r\n type = 32 /* SLOTS_CHILDREN */;\r\n const slotFlag = children._;\r\n if (!slotFlag && !(InternalObjectKey in children)) {\r\n children._ctx = currentRenderingInstance;\r\n }\r\n else if (slotFlag === 3 /* FORWARDED */ && currentRenderingInstance) {\r\n // a child component receives forwarded slots from the parent.\r\n // its slot type is determined by its parent's slot type.\r\n if (currentRenderingInstance.slots._ === 1 /* STABLE */) {\r\n children._ = 1 /* STABLE */;\r\n }\r\n else {\r\n children._ = 2 /* DYNAMIC */;\r\n vnode.patchFlag |= 1024 /* DYNAMIC_SLOTS */;\r\n }\r\n }\r\n }\r\n }\r\n else if (isFunction(children)) {\r\n children = { default: children, _ctx: currentRenderingInstance };\r\n type = 32 /* SLOTS_CHILDREN */;\r\n }\r\n else {\r\n children = String(children);\r\n // force teleport children to array so it can be moved around\r\n if (shapeFlag & 64 /* TELEPORT */) {\r\n type = 16 /* ARRAY_CHILDREN */;\r\n children = [createTextVNode(children)];\r\n }\r\n else {\r\n type = 8 /* TEXT_CHILDREN */;\r\n }\r\n }\r\n vnode.children = children;\r\n vnode.shapeFlag |= type;\r\n}\r\nfunction mergeProps(...args) {\r\n const ret = {};\r\n for (let i = 0; i < args.length; i++) {\r\n const toMerge = args[i];\r\n for (const key in toMerge) {\r\n if (key === 'class') {\r\n if (ret.class !== toMerge.class) {\r\n ret.class = normalizeClass([ret.class, toMerge.class]);\r\n }\r\n }\r\n else if (key === 'style') {\r\n ret.style = normalizeStyle([ret.style, toMerge.style]);\r\n }\r\n else if (isOn(key)) {\r\n const existing = ret[key];\r\n const incoming = toMerge[key];\r\n if (incoming &&\r\n existing !== incoming &&\r\n !(isArray(existing) && existing.includes(incoming))) {\r\n ret[key] = existing\r\n ? [].concat(existing, incoming)\r\n : incoming;\r\n }\r\n }\r\n else if (key !== '') {\r\n ret[key] = toMerge[key];\r\n }\r\n }\r\n }\r\n return ret;\r\n}\r\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\r\n callWithAsyncErrorHandling(hook, instance, 7 /* VNODE_HOOK */, [\r\n vnode,\r\n prevVNode\r\n ]);\r\n}\n\n/**\r\n * Actual implementation\r\n */\r\nfunction renderList(source, renderItem, cache, index) {\r\n let ret;\r\n const cached = (cache && cache[index]);\r\n if (isArray(source) || isString(source)) {\r\n ret = new Array(source.length);\r\n for (let i = 0, l = source.length; i < l; i++) {\r\n ret[i] = renderItem(source[i], i, undefined, cached && cached[i]);\r\n }\r\n }\r\n else if (typeof source === 'number') {\r\n if ((process.env.NODE_ENV !== 'production') && !Number.isInteger(source)) {\r\n warn(`The v-for range expect an integer value but got ${source}.`);\r\n return [];\r\n }\r\n ret = new Array(source);\r\n for (let i = 0; i < source; i++) {\r\n ret[i] = renderItem(i + 1, i, undefined, cached && cached[i]);\r\n }\r\n }\r\n else if (isObject(source)) {\r\n if (source[Symbol.iterator]) {\r\n ret = Array.from(source, (item, i) => renderItem(item, i, undefined, cached && cached[i]));\r\n }\r\n else {\r\n const keys = Object.keys(source);\r\n ret = new Array(keys.length);\r\n for (let i = 0, l = keys.length; i < l; i++) {\r\n const key = keys[i];\r\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\r\n }\r\n }\r\n }\r\n else {\r\n ret = [];\r\n }\r\n if (cache) {\r\n cache[index] = ret;\r\n }\r\n return ret;\r\n}\n\n/**\r\n * Compiler runtime helper for creating dynamic slots object\r\n * @private\r\n */\r\nfunction createSlots(slots, dynamicSlots) {\r\n for (let i = 0; i < dynamicSlots.length; i++) {\r\n const slot = dynamicSlots[i];\r\n // array of dynamic slot generated by <template v-for=\"...\" #[...]>\r\n if (isArray(slot)) {\r\n for (let j = 0; j < slot.length; j++) {\r\n slots[slot[j].name] = slot[j].fn;\r\n }\r\n }\r\n else if (slot) {\r\n // conditional single slot generated by <template v-if=\"...\" #foo>\r\n slots[slot.name] = slot.fn;\r\n }\r\n }\r\n return slots;\r\n}\n\n/**\r\n * Compiler runtime helper for rendering `<slot/>`\r\n * @private\r\n */\r\nfunction renderSlot(slots, name, props = {}, \r\n// this is not a user-facing function, so the fallback is always generated by\r\n// the compiler and guaranteed to be a function returning an array\r\nfallback, noSlotted) {\r\n if (currentRenderingInstance.isCE ||\r\n (currentRenderingInstance.parent &&\r\n isAsyncWrapper(currentRenderingInstance.parent) &&\r\n currentRenderingInstance.parent.isCE)) {\r\n return createVNode('slot', name === 'default' ? null : { name }, fallback && fallback());\r\n }\r\n let slot = slots[name];\r\n if ((process.env.NODE_ENV !== 'production') && slot && slot.length > 1) {\r\n warn(`SSR-optimized slot function detected in a non-SSR-optimized render ` +\r\n `function. You need to mark this component with $dynamic-slots in the ` +\r\n `parent template.`);\r\n slot = () => [];\r\n }\r\n // a compiled slot disables block tracking by default to avoid manual\r\n // invocation interfering with template-based block tracking, but in\r\n // `renderSlot` we can be sure that it's template-based so we can force\r\n // enable it.\r\n if (slot && slot._c) {\r\n slot._d = false;\r\n }\r\n openBlock();\r\n const validSlotContent = slot && ensureValidVNode(slot(props));\r\n const rendered = createBlock(Fragment, { key: props.key || `_${name}` }, validSlotContent || (fallback ? fallback() : []), validSlotContent && slots._ === 1 /* STABLE */\r\n ? 64 /* STABLE_FRAGMENT */\r\n : -2 /* BAIL */);\r\n if (!noSlotted && rendered.scopeId) {\r\n rendered.slotScopeIds = [rendered.scopeId + '-s'];\r\n }\r\n if (slot && slot._c) {\r\n slot._d = true;\r\n }\r\n return rendered;\r\n}\r\nfunction ensureValidVNode(vnodes) {\r\n return vnodes.some(child => {\r\n if (!isVNode(child))\r\n return true;\r\n if (child.type === Comment)\r\n return false;\r\n if (child.type === Fragment &&\r\n !ensureValidVNode(child.children))\r\n return false;\r\n return true;\r\n })\r\n ? vnodes\r\n : null;\r\n}\n\n/**\r\n * For prefixing keys in v-on=\"obj\" with \"on\"\r\n * @private\r\n */\r\nfunction toHandlers(obj) {\r\n const ret = {};\r\n if ((process.env.NODE_ENV !== 'production') && !isObject(obj)) {\r\n warn(`v-on with no argument expects an object value.`);\r\n return ret;\r\n }\r\n for (const key in obj) {\r\n ret[toHandlerKey(key)] = obj[key];\r\n }\r\n return ret;\r\n}\n\n/**\r\n * #2437 In Vue 3, functional components do not have a public instance proxy but\r\n * they exist in the internal parent chain. For code that relies on traversing\r\n * public $parent chains, skip functional ones and go to the parent instead.\r\n */\r\nconst getPublicInstance = (i) => {\r\n if (!i)\r\n return null;\r\n if (isStatefulComponent(i))\r\n return getExposeProxy(i) || i.proxy;\r\n return getPublicInstance(i.parent);\r\n};\r\nconst publicPropertiesMap = \r\n// Move PURE marker to new line to workaround compiler discarding it\r\n// due to type annotation\r\n/*#__PURE__*/ extend(Object.create(null), {\r\n $: i => i,\r\n $el: i => i.vnode.el,\r\n $data: i => i.data,\r\n $props: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.props) : i.props),\r\n $attrs: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.attrs) : i.attrs),\r\n $slots: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.slots) : i.slots),\r\n $refs: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.refs) : i.refs),\r\n $parent: i => getPublicInstance(i.parent),\r\n $root: i => getPublicInstance(i.root),\r\n $emit: i => i.emit,\r\n $options: i => (__VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type),\r\n $forceUpdate: i => () => queueJob(i.update),\r\n $nextTick: i => nextTick.bind(i.proxy),\r\n $watch: i => (__VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP)\r\n});\r\nconst PublicInstanceProxyHandlers = {\r\n get({ _: instance }, key) {\r\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\r\n // for internal formatters to know that this is a Vue instance\r\n if ((process.env.NODE_ENV !== 'production') && key === '__isVue') {\r\n return true;\r\n }\r\n // prioritize <script setup> bindings during dev.\r\n // this allows even properties that start with _ or $ to be used - so that\r\n // it aligns with the production behavior where the render fn is inlined and\r\n // indeed has access to all declared variables.\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n setupState !== EMPTY_OBJ &&\r\n setupState.__isScriptSetup &&\r\n hasOwn(setupState, key)) {\r\n return setupState[key];\r\n }\r\n // data / props / ctx\r\n // This getter gets called for every property access on the render context\r\n // during render and is a major hotspot. The most expensive part of this\r\n // is the multiple hasOwn() calls. It's much faster to do a simple property\r\n // access on a plain object, so we use an accessCache object (with null\r\n // prototype) to memoize what access type a key corresponds to.\r\n let normalizedProps;\r\n if (key[0] !== '$') {\r\n const n = accessCache[key];\r\n if (n !== undefined) {\r\n switch (n) {\r\n case 1 /* SETUP */:\r\n return setupState[key];\r\n case 2 /* DATA */:\r\n return data[key];\r\n case 4 /* CONTEXT */:\r\n return ctx[key];\r\n case 3 /* PROPS */:\r\n return props[key];\r\n // default: just fallthrough\r\n }\r\n }\r\n else if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {\r\n accessCache[key] = 1 /* SETUP */;\r\n return setupState[key];\r\n }\r\n else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\r\n accessCache[key] = 2 /* DATA */;\r\n return data[key];\r\n }\r\n else if (\r\n // only cache other properties when instance has declared (thus stable)\r\n // props\r\n (normalizedProps = instance.propsOptions[0]) &&\r\n hasOwn(normalizedProps, key)) {\r\n accessCache[key] = 3 /* PROPS */;\r\n return props[key];\r\n }\r\n else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\r\n accessCache[key] = 4 /* CONTEXT */;\r\n return ctx[key];\r\n }\r\n else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\r\n accessCache[key] = 0 /* OTHER */;\r\n }\r\n }\r\n const publicGetter = publicPropertiesMap[key];\r\n let cssModule, globalProperties;\r\n // public $xxx properties\r\n if (publicGetter) {\r\n if (key === '$attrs') {\r\n track(instance, \"get\" /* GET */, key);\r\n (process.env.NODE_ENV !== 'production') && markAttrsAccessed();\r\n }\r\n return publicGetter(instance);\r\n }\r\n else if (\r\n // css module (injected by vue-loader)\r\n (cssModule = type.__cssModules) &&\r\n (cssModule = cssModule[key])) {\r\n return cssModule;\r\n }\r\n else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\r\n // user may set custom properties to `this` that start with `$`\r\n accessCache[key] = 4 /* CONTEXT */;\r\n return ctx[key];\r\n }\r\n else if (\r\n // global properties\r\n ((globalProperties = appContext.config.globalProperties),\r\n hasOwn(globalProperties, key))) {\r\n {\r\n return globalProperties[key];\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production') &&\r\n currentRenderingInstance &&\r\n (!isString(key) ||\r\n // #1091 avoid internal isRef/isVNode checks on component instance leading\r\n // to infinite warning loop\r\n key.indexOf('__v') !== 0)) {\r\n if (data !== EMPTY_OBJ &&\r\n (key[0] === '$' || key[0] === '_') &&\r\n hasOwn(data, key)) {\r\n warn(`Property ${JSON.stringify(key)} must be accessed via $data because it starts with a reserved ` +\r\n `character (\"$\" or \"_\") and is not proxied on the render context.`);\r\n }\r\n else if (instance === currentRenderingInstance) {\r\n warn(`Property ${JSON.stringify(key)} was accessed during render ` +\r\n `but is not defined on instance.`);\r\n }\r\n }\r\n },\r\n set({ _: instance }, key, value) {\r\n const { data, setupState, ctx } = instance;\r\n if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {\r\n setupState[key] = value;\r\n return true;\r\n }\r\n else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\r\n data[key] = value;\r\n return true;\r\n }\r\n else if (hasOwn(instance.props, key)) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Attempting to mutate prop \"${key}\". Props are readonly.`, instance);\r\n return false;\r\n }\r\n if (key[0] === '$' && key.slice(1) in instance) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Attempting to mutate public property \"${key}\". ` +\r\n `Properties starting with $ are reserved and readonly.`, instance);\r\n return false;\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production') && key in instance.appContext.config.globalProperties) {\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n value\r\n });\r\n }\r\n else {\r\n ctx[key] = value;\r\n }\r\n }\r\n return true;\r\n },\r\n has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) {\r\n let normalizedProps;\r\n return (!!accessCache[key] ||\r\n (data !== EMPTY_OBJ && hasOwn(data, key)) ||\r\n (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) ||\r\n ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||\r\n hasOwn(ctx, key) ||\r\n hasOwn(publicPropertiesMap, key) ||\r\n hasOwn(appContext.config.globalProperties, key));\r\n },\r\n defineProperty(target, key, descriptor) {\r\n if (descriptor.get != null) {\r\n // invalidate key cache of a getter based property #5417\r\n target._.accessCache[key] = 0;\r\n }\r\n else if (hasOwn(descriptor, 'value')) {\r\n this.set(target, key, descriptor.value, null);\r\n }\r\n return Reflect.defineProperty(target, key, descriptor);\r\n }\r\n};\r\nif ((process.env.NODE_ENV !== 'production') && !false) {\r\n PublicInstanceProxyHandlers.ownKeys = (target) => {\r\n warn(`Avoid app logic that relies on enumerating keys on a component instance. ` +\r\n `The keys will be empty in production mode to avoid performance overhead.`);\r\n return Reflect.ownKeys(target);\r\n };\r\n}\r\nconst RuntimeCompiledPublicInstanceProxyHandlers = /*#__PURE__*/ extend({}, PublicInstanceProxyHandlers, {\r\n get(target, key) {\r\n // fast path for unscopables when using `with` block\r\n if (key === Symbol.unscopables) {\r\n return;\r\n }\r\n return PublicInstanceProxyHandlers.get(target, key, target);\r\n },\r\n has(_, key) {\r\n const has = key[0] !== '_' && !isGloballyWhitelisted(key);\r\n if ((process.env.NODE_ENV !== 'production') && !has && PublicInstanceProxyHandlers.has(_, key)) {\r\n warn(`Property ${JSON.stringify(key)} should not start with _ which is a reserved prefix for Vue internals.`);\r\n }\r\n return has;\r\n }\r\n});\r\n// dev only\r\n// In dev mode, the proxy target exposes the same properties as seen on `this`\r\n// for easier console inspection. In prod mode it will be an empty object so\r\n// these properties definitions can be skipped.\r\nfunction createDevRenderContext(instance) {\r\n const target = {};\r\n // expose internal instance for proxy handlers\r\n Object.defineProperty(target, `_`, {\r\n configurable: true,\r\n enumerable: false,\r\n get: () => instance\r\n });\r\n // expose public properties\r\n Object.keys(publicPropertiesMap).forEach(key => {\r\n Object.defineProperty(target, key, {\r\n configurable: true,\r\n enumerable: false,\r\n get: () => publicPropertiesMap[key](instance),\r\n // intercepted by the proxy so no need for implementation,\r\n // but needed to prevent set errors\r\n set: NOOP\r\n });\r\n });\r\n return target;\r\n}\r\n// dev only\r\nfunction exposePropsOnRenderContext(instance) {\r\n const { ctx, propsOptions: [propsOptions] } = instance;\r\n if (propsOptions) {\r\n Object.keys(propsOptions).forEach(key => {\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => instance.props[key],\r\n set: NOOP\r\n });\r\n });\r\n }\r\n}\r\n// dev only\r\nfunction exposeSetupStateOnRenderContext(instance) {\r\n const { ctx, setupState } = instance;\r\n Object.keys(toRaw(setupState)).forEach(key => {\r\n if (!setupState.__isScriptSetup) {\r\n if (key[0] === '$' || key[0] === '_') {\r\n warn(`setup() return property ${JSON.stringify(key)} should not start with \"$\" or \"_\" ` +\r\n `which are reserved prefixes for Vue internals.`);\r\n return;\r\n }\r\n Object.defineProperty(ctx, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => setupState[key],\r\n set: NOOP\r\n });\r\n }\r\n });\r\n}\n\nconst emptyAppContext = createAppContext();\r\nlet uid$1 = 0;\r\nfunction createComponentInstance(vnode, parent, suspense) {\r\n const type = vnode.type;\r\n // inherit parent app context - or - if root, adopt from root vnode\r\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\r\n const instance = {\r\n uid: uid$1++,\r\n vnode,\r\n type,\r\n parent,\r\n appContext,\r\n root: null,\r\n next: null,\r\n subTree: null,\r\n effect: null,\r\n update: null,\r\n scope: new EffectScope(true /* detached */),\r\n render: null,\r\n proxy: null,\r\n exposed: null,\r\n exposeProxy: null,\r\n withProxy: null,\r\n provides: parent ? parent.provides : Object.create(appContext.provides),\r\n accessCache: null,\r\n renderCache: [],\r\n // local resovled assets\r\n components: null,\r\n directives: null,\r\n // resolved props and emits options\r\n propsOptions: normalizePropsOptions(type, appContext),\r\n emitsOptions: normalizeEmitsOptions(type, appContext),\r\n // emit\r\n emit: null,\r\n emitted: null,\r\n // props default value\r\n propsDefaults: EMPTY_OBJ,\r\n // inheritAttrs\r\n inheritAttrs: type.inheritAttrs,\r\n // state\r\n ctx: EMPTY_OBJ,\r\n data: EMPTY_OBJ,\r\n props: EMPTY_OBJ,\r\n attrs: EMPTY_OBJ,\r\n slots: EMPTY_OBJ,\r\n refs: EMPTY_OBJ,\r\n setupState: EMPTY_OBJ,\r\n setupContext: null,\r\n // suspense related\r\n suspense,\r\n suspenseId: suspense ? suspense.pendingId : 0,\r\n asyncDep: null,\r\n asyncResolved: false,\r\n // lifecycle hooks\r\n // not using enums here because it results in computed properties\r\n isMounted: false,\r\n isUnmounted: false,\r\n isDeactivated: false,\r\n bc: null,\r\n c: null,\r\n bm: null,\r\n m: null,\r\n bu: null,\r\n u: null,\r\n um: null,\r\n bum: null,\r\n da: null,\r\n a: null,\r\n rtg: null,\r\n rtc: null,\r\n ec: null,\r\n sp: null\r\n };\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n instance.ctx = createDevRenderContext(instance);\r\n }\r\n else {\r\n instance.ctx = { _: instance };\r\n }\r\n instance.root = parent ? parent.root : instance;\r\n instance.emit = emit$1.bind(null, instance);\r\n // apply custom element special handling\r\n if (vnode.ce) {\r\n vnode.ce(instance);\r\n }\r\n return instance;\r\n}\r\nlet currentInstance = null;\r\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\r\nconst setCurrentInstance = (instance) => {\r\n currentInstance = instance;\r\n instance.scope.on();\r\n};\r\nconst unsetCurrentInstance = () => {\r\n currentInstance && currentInstance.scope.off();\r\n currentInstance = null;\r\n};\r\nconst isBuiltInTag = /*#__PURE__*/ makeMap('slot,component');\r\nfunction validateComponentName(name, config) {\r\n const appIsNativeTag = config.isNativeTag || NO;\r\n if (isBuiltInTag(name) || appIsNativeTag(name)) {\r\n warn('Do not use built-in or reserved HTML elements as component id: ' + name);\r\n }\r\n}\r\nfunction isStatefulComponent(instance) {\r\n return instance.vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */;\r\n}\r\nlet isInSSRComponentSetup = false;\r\nfunction setupComponent(instance, isSSR = false) {\r\n isInSSRComponentSetup = isSSR;\r\n const { props, children } = instance.vnode;\r\n const isStateful = isStatefulComponent(instance);\r\n initProps(instance, props, isStateful, isSSR);\r\n initSlots(instance, children);\r\n const setupResult = isStateful\r\n ? setupStatefulComponent(instance, isSSR)\r\n : undefined;\r\n isInSSRComponentSetup = false;\r\n return setupResult;\r\n}\r\nfunction setupStatefulComponent(instance, isSSR) {\r\n var _a;\r\n const Component = instance.type;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (Component.name) {\r\n validateComponentName(Component.name, instance.appContext.config);\r\n }\r\n if (Component.components) {\r\n const names = Object.keys(Component.components);\r\n for (let i = 0; i < names.length; i++) {\r\n validateComponentName(names[i], instance.appContext.config);\r\n }\r\n }\r\n if (Component.directives) {\r\n const names = Object.keys(Component.directives);\r\n for (let i = 0; i < names.length; i++) {\r\n validateDirectiveName(names[i]);\r\n }\r\n }\r\n if (Component.compilerOptions && isRuntimeOnly()) {\r\n warn(`\"compilerOptions\" is only supported when using a build of Vue that ` +\r\n `includes the runtime compiler. Since you are using a runtime-only ` +\r\n `build, the options should be passed via your build tool config instead.`);\r\n }\r\n }\r\n // 0. create render proxy property access cache\r\n instance.accessCache = Object.create(null);\r\n // 1. create public instance / render proxy\r\n // also mark it raw so it's never observed\r\n instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n exposePropsOnRenderContext(instance);\r\n }\r\n // 2. call setup()\r\n const { setup } = Component;\r\n if (setup) {\r\n const setupContext = (instance.setupContext =\r\n setup.length > 1 ? createSetupContext(instance) : null);\r\n setCurrentInstance(instance);\r\n pauseTracking();\r\n const setupResult = callWithErrorHandling(setup, instance, 0 /* SETUP_FUNCTION */, [(process.env.NODE_ENV !== 'production') ? shallowReadonly(instance.props) : instance.props, setupContext]);\r\n resetTracking();\r\n unsetCurrentInstance();\r\n if (isPromise(setupResult)) {\r\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\r\n if (isSSR) {\r\n // return the promise so server-renderer can wait on it\r\n return setupResult\r\n .then((resolvedResult) => {\r\n handleSetupResult(instance, resolvedResult, isSSR);\r\n })\r\n .catch(e => {\r\n handleError(e, instance, 0 /* SETUP_FUNCTION */);\r\n });\r\n }\r\n else {\r\n // async setup returned Promise.\r\n // bail here and wait for re-entry.\r\n instance.asyncDep = setupResult;\r\n if ((process.env.NODE_ENV !== 'production') && !instance.suspense) {\r\n const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';\r\n warn(`Component <${name}>: setup function returned a promise, but no ` +\r\n `<Suspense> boundary was found in the parent component tree. ` +\r\n `A component with async setup() must be nested in a <Suspense> ` +\r\n `in order to be rendered.`);\r\n }\r\n }\r\n }\r\n else {\r\n handleSetupResult(instance, setupResult, isSSR);\r\n }\r\n }\r\n else {\r\n finishComponentSetup(instance, isSSR);\r\n }\r\n}\r\nfunction handleSetupResult(instance, setupResult, isSSR) {\r\n if (isFunction(setupResult)) {\r\n // setup returned an inline render function\r\n if (instance.type.__ssrInlineRender) {\r\n // when the function's name is `ssrRender` (compiled by SFC inline mode),\r\n // set it as ssrRender instead.\r\n instance.ssrRender = setupResult;\r\n }\r\n else {\r\n instance.render = setupResult;\r\n }\r\n }\r\n else if (isObject(setupResult)) {\r\n if ((process.env.NODE_ENV !== 'production') && isVNode(setupResult)) {\r\n warn(`setup() should not return VNodes directly - ` +\r\n `return a render function instead.`);\r\n }\r\n // setup returned bindings.\r\n // assuming a render function compiled from template is present.\r\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\r\n instance.devtoolsRawSetupState = setupResult;\r\n }\r\n instance.setupState = proxyRefs(setupResult);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n exposeSetupStateOnRenderContext(instance);\r\n }\r\n }\r\n else if ((process.env.NODE_ENV !== 'production') && setupResult !== undefined) {\r\n warn(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);\r\n }\r\n finishComponentSetup(instance, isSSR);\r\n}\r\nlet compile;\r\nlet installWithProxy;\r\n/**\r\n * For runtime-dom to register the compiler.\r\n * Note the exported method uses any to avoid d.ts relying on the compiler types.\r\n */\r\nfunction registerRuntimeCompiler(_compile) {\r\n compile = _compile;\r\n installWithProxy = i => {\r\n if (i.render._rc) {\r\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\r\n }\r\n };\r\n}\r\n// dev only\r\nconst isRuntimeOnly = () => !compile;\r\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\r\n const Component = instance.type;\r\n // template / render function normalization\r\n // could be already set when returned from setup()\r\n if (!instance.render) {\r\n // only do on-the-fly compile if not in SSR - SSR on-the-fly compilation\r\n // is done by server-renderer\r\n if (!isSSR && compile && !Component.render) {\r\n const template = Component.template;\r\n if (template) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n startMeasure(instance, `compile`);\r\n }\r\n const { isCustomElement, compilerOptions } = instance.appContext.config;\r\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\r\n const finalCompilerOptions = extend(extend({\r\n isCustomElement,\r\n delimiters\r\n }, compilerOptions), componentCompilerOptions);\r\n Component.render = compile(template, finalCompilerOptions);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n endMeasure(instance, `compile`);\r\n }\r\n }\r\n }\r\n instance.render = (Component.render || NOOP);\r\n // for runtime-compiled render functions using `with` blocks, the render\r\n // proxy used needs a different `has` handler which is more performant and\r\n // also only allows a whitelist of globals to fallthrough.\r\n if (installWithProxy) {\r\n installWithProxy(instance);\r\n }\r\n }\r\n // support for 2.x options\r\n if (__VUE_OPTIONS_API__ && !(false )) {\r\n setCurrentInstance(instance);\r\n pauseTracking();\r\n applyOptions(instance);\r\n resetTracking();\r\n unsetCurrentInstance();\r\n }\r\n // warn missing template/render\r\n // the runtime compilation of template in SSR is done by server-render\r\n if ((process.env.NODE_ENV !== 'production') && !Component.render && instance.render === NOOP && !isSSR) {\r\n /* istanbul ignore if */\r\n if (!compile && Component.template) {\r\n warn(`Component provided template option but ` +\r\n `runtime compilation is not supported in this build of Vue.` +\r\n (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".`\r\n ) /* should not happen */);\r\n }\r\n else {\r\n warn(`Component is missing template or render function.`);\r\n }\r\n }\r\n}\r\nfunction createAttrsProxy(instance) {\r\n return new Proxy(instance.attrs, (process.env.NODE_ENV !== 'production')\r\n ? {\r\n get(target, key) {\r\n markAttrsAccessed();\r\n track(instance, \"get\" /* GET */, '$attrs');\r\n return target[key];\r\n },\r\n set() {\r\n warn(`setupContext.attrs is readonly.`);\r\n return false;\r\n },\r\n deleteProperty() {\r\n warn(`setupContext.attrs is readonly.`);\r\n return false;\r\n }\r\n }\r\n : {\r\n get(target, key) {\r\n track(instance, \"get\" /* GET */, '$attrs');\r\n return target[key];\r\n }\r\n });\r\n}\r\nfunction createSetupContext(instance) {\r\n const expose = exposed => {\r\n if ((process.env.NODE_ENV !== 'production') && instance.exposed) {\r\n warn(`expose() should be called only once per setup().`);\r\n }\r\n instance.exposed = exposed || {};\r\n };\r\n let attrs;\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n // We use getters in dev in case libs like test-utils overwrite instance\r\n // properties (overwrites should not be done in prod)\r\n return Object.freeze({\r\n get attrs() {\r\n return attrs || (attrs = createAttrsProxy(instance));\r\n },\r\n get slots() {\r\n return shallowReadonly(instance.slots);\r\n },\r\n get emit() {\r\n return (event, ...args) => instance.emit(event, ...args);\r\n },\r\n expose\r\n });\r\n }\r\n else {\r\n return {\r\n get attrs() {\r\n return attrs || (attrs = createAttrsProxy(instance));\r\n },\r\n slots: instance.slots,\r\n emit: instance.emit,\r\n expose\r\n };\r\n }\r\n}\r\nfunction getExposeProxy(instance) {\r\n if (instance.exposed) {\r\n return (instance.exposeProxy ||\r\n (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\r\n get(target, key) {\r\n if (key in target) {\r\n return target[key];\r\n }\r\n else if (key in publicPropertiesMap) {\r\n return publicPropertiesMap[key](instance);\r\n }\r\n }\r\n })));\r\n }\r\n}\r\nconst classifyRE = /(?:^|[-_])(\\w)/g;\r\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\r\nfunction getComponentName(Component) {\r\n return isFunction(Component)\r\n ? Component.displayName || Component.name\r\n : Component.name;\r\n}\r\n/* istanbul ignore next */\r\nfunction formatComponentName(instance, Component, isRoot = false) {\r\n let name = getComponentName(Component);\r\n if (!name && Component.__file) {\r\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\r\n if (match) {\r\n name = match[1];\r\n }\r\n }\r\n if (!name && instance && instance.parent) {\r\n // try to infer the name based on reverse resolution\r\n const inferFromRegistry = (registry) => {\r\n for (const key in registry) {\r\n if (registry[key] === Component) {\r\n return key;\r\n }\r\n }\r\n };\r\n name =\r\n inferFromRegistry(instance.components ||\r\n instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\r\n }\r\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\r\n}\r\nfunction isClassComponent(value) {\r\n return isFunction(value) && '__vccOpts' in value;\r\n}\n\nconst computed = ((getterOrOptions, debugOptions) => {\r\n // @ts-ignore\r\n return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\r\n});\n\n// dev only\r\nconst warnRuntimeUsage = (method) => warn(`${method}() is a compiler-hint helper that is only usable inside ` +\r\n `<script setup> of a single file component. Its arguments should be ` +\r\n `compiled away and passing it at runtime has no effect.`);\r\n// implementation\r\nfunction defineProps() {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warnRuntimeUsage(`defineProps`);\r\n }\r\n return null;\r\n}\r\n// implementation\r\nfunction defineEmits() {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warnRuntimeUsage(`defineEmits`);\r\n }\r\n return null;\r\n}\r\n/**\r\n * Vue `<script setup>` compiler macro for declaring a component's exposed\r\n * instance properties when it is accessed by a parent component via template\r\n * refs.\r\n *\r\n * `<script setup>` components are closed by default - i.e. variables inside\r\n * the `<script setup>` scope is not exposed to parent unless explicitly exposed\r\n * via `defineExpose`.\r\n *\r\n * This is only usable inside `<script setup>`, is compiled away in the\r\n * output and should **not** be actually called at runtime.\r\n */\r\nfunction defineExpose(exposed) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warnRuntimeUsage(`defineExpose`);\r\n }\r\n}\r\n/**\r\n * Vue `<script setup>` compiler macro for providing props default values when\r\n * using type-based `defineProps` declaration.\r\n *\r\n * Example usage:\r\n * ```ts\r\n * withDefaults(defineProps<{\r\n * size?: number\r\n * labels?: string[]\r\n * }>(), {\r\n * size: 3,\r\n * labels: () => ['default label']\r\n * })\r\n * ```\r\n *\r\n * This is only usable inside `<script setup>`, is compiled away in the output\r\n * and should **not** be actually called at runtime.\r\n */\r\nfunction withDefaults(props, defaults) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warnRuntimeUsage(`withDefaults`);\r\n }\r\n return null;\r\n}\r\nfunction useSlots() {\r\n return getContext().slots;\r\n}\r\nfunction useAttrs() {\r\n return getContext().attrs;\r\n}\r\nfunction getContext() {\r\n const i = getCurrentInstance();\r\n if ((process.env.NODE_ENV !== 'production') && !i) {\r\n warn(`useContext() called without active instance.`);\r\n }\r\n return i.setupContext || (i.setupContext = createSetupContext(i));\r\n}\r\n/**\r\n * Runtime helper for merging default declarations. Imported by compiled code\r\n * only.\r\n * @internal\r\n */\r\nfunction mergeDefaults(raw, defaults) {\r\n const props = isArray(raw)\r\n ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})\r\n : raw;\r\n for (const key in defaults) {\r\n const opt = props[key];\r\n if (opt) {\r\n if (isArray(opt) || isFunction(opt)) {\r\n props[key] = { type: opt, default: defaults[key] };\r\n }\r\n else {\r\n opt.default = defaults[key];\r\n }\r\n }\r\n else if (opt === null) {\r\n props[key] = { default: defaults[key] };\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`props default key \"${key}\" has no corresponding declaration.`);\r\n }\r\n }\r\n return props;\r\n}\r\n/**\r\n * Used to create a proxy for the rest element when destructuring props with\r\n * defineProps().\r\n * @internal\r\n */\r\nfunction createPropsRestProxy(props, excludedKeys) {\r\n const ret = {};\r\n for (const key in props) {\r\n if (!excludedKeys.includes(key)) {\r\n Object.defineProperty(ret, key, {\r\n enumerable: true,\r\n get: () => props[key]\r\n });\r\n }\r\n }\r\n return ret;\r\n}\r\n/**\r\n * `<script setup>` helper for persisting the current instance context over\r\n * async/await flows.\r\n *\r\n * `@vue/compiler-sfc` converts the following:\r\n *\r\n * ```ts\r\n * const x = await foo()\r\n * ```\r\n *\r\n * into:\r\n *\r\n * ```ts\r\n * let __temp, __restore\r\n * const x = (([__temp, __restore] = withAsyncContext(() => foo())),__temp=await __temp,__restore(),__temp)\r\n * ```\r\n * @internal\r\n */\r\nfunction withAsyncContext(getAwaitable) {\r\n const ctx = getCurrentInstance();\r\n if ((process.env.NODE_ENV !== 'production') && !ctx) {\r\n warn(`withAsyncContext called without active current instance. ` +\r\n `This is likely a bug.`);\r\n }\r\n let awaitable = getAwaitable();\r\n unsetCurrentInstance();\r\n if (isPromise(awaitable)) {\r\n awaitable = awaitable.catch(e => {\r\n setCurrentInstance(ctx);\r\n throw e;\r\n });\r\n }\r\n return [awaitable, () => setCurrentInstance(ctx)];\r\n}\n\n// Actual implementation\r\nfunction h(type, propsOrChildren, children) {\r\n const l = arguments.length;\r\n if (l === 2) {\r\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\r\n // single vnode without props\r\n if (isVNode(propsOrChildren)) {\r\n return createVNode(type, null, [propsOrChildren]);\r\n }\r\n // props without children\r\n return createVNode(type, propsOrChildren);\r\n }\r\n else {\r\n // omit props\r\n return createVNode(type, null, propsOrChildren);\r\n }\r\n }\r\n else {\r\n if (l > 3) {\r\n children = Array.prototype.slice.call(arguments, 2);\r\n }\r\n else if (l === 3 && isVNode(children)) {\r\n children = [children];\r\n }\r\n return createVNode(type, propsOrChildren, children);\r\n }\r\n}\n\nconst ssrContextKey = Symbol((process.env.NODE_ENV !== 'production') ? `ssrContext` : ``);\r\nconst useSSRContext = () => {\r\n {\r\n const ctx = inject(ssrContextKey);\r\n if (!ctx) {\r\n warn(`Server rendering context not provided. Make sure to only call ` +\r\n `useSSRContext() conditionally in the server build.`);\r\n }\r\n return ctx;\r\n }\r\n};\n\nfunction isShallow(value) {\r\n return !!(value && value[\"__v_isShallow\" /* IS_SHALLOW */]);\r\n}\n\nfunction initCustomFormatter() {\r\n /* eslint-disable no-restricted-globals */\r\n if (!(process.env.NODE_ENV !== 'production') || typeof window === 'undefined') {\r\n return;\r\n }\r\n const vueStyle = { style: 'color:#3ba776' };\r\n const numberStyle = { style: 'color:#0b1bc9' };\r\n const stringStyle = { style: 'color:#b62e24' };\r\n const keywordStyle = { style: 'color:#9d288c' };\r\n // custom formatter for Chrome\r\n // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\r\n const formatter = {\r\n header(obj) {\r\n // TODO also format ComponentPublicInstance & ctx.slots/attrs in setup\r\n if (!isObject(obj)) {\r\n return null;\r\n }\r\n if (obj.__isVue) {\r\n return ['div', vueStyle, `VueInstance`];\r\n }\r\n else if (isRef(obj)) {\r\n return [\r\n 'div',\r\n {},\r\n ['span', vueStyle, genRefFlag(obj)],\r\n '<',\r\n formatValue(obj.value),\r\n `>`\r\n ];\r\n }\r\n else if (isReactive(obj)) {\r\n return [\r\n 'div',\r\n {},\r\n ['span', vueStyle, isShallow(obj) ? 'ShallowReactive' : 'Reactive'],\r\n '<',\r\n formatValue(obj),\r\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\r\n ];\r\n }\r\n else if (isReadonly(obj)) {\r\n return [\r\n 'div',\r\n {},\r\n ['span', vueStyle, isShallow(obj) ? 'ShallowReadonly' : 'Readonly'],\r\n '<',\r\n formatValue(obj),\r\n '>'\r\n ];\r\n }\r\n return null;\r\n },\r\n hasBody(obj) {\r\n return obj && obj.__isVue;\r\n },\r\n body(obj) {\r\n if (obj && obj.__isVue) {\r\n return [\r\n 'div',\r\n {},\r\n ...formatInstance(obj.$)\r\n ];\r\n }\r\n }\r\n };\r\n function formatInstance(instance) {\r\n const blocks = [];\r\n if (instance.type.props && instance.props) {\r\n blocks.push(createInstanceBlock('props', toRaw(instance.props)));\r\n }\r\n if (instance.setupState !== EMPTY_OBJ) {\r\n blocks.push(createInstanceBlock('setup', instance.setupState));\r\n }\r\n if (instance.data !== EMPTY_OBJ) {\r\n blocks.push(createInstanceBlock('data', toRaw(instance.data)));\r\n }\r\n const computed = extractKeys(instance, 'computed');\r\n if (computed) {\r\n blocks.push(createInstanceBlock('computed', computed));\r\n }\r\n const injected = extractKeys(instance, 'inject');\r\n if (injected) {\r\n blocks.push(createInstanceBlock('injected', injected));\r\n }\r\n blocks.push([\r\n 'div',\r\n {},\r\n [\r\n 'span',\r\n {\r\n style: keywordStyle.style + ';opacity:0.66'\r\n },\r\n '$ (internal): '\r\n ],\r\n ['object', { object: instance }]\r\n ]);\r\n return blocks;\r\n }\r\n function createInstanceBlock(type, target) {\r\n target = extend({}, target);\r\n if (!Object.keys(target).length) {\r\n return ['span', {}];\r\n }\r\n return [\r\n 'div',\r\n { style: 'line-height:1.25em;margin-bottom:0.6em' },\r\n [\r\n 'div',\r\n {\r\n style: 'color:#476582'\r\n },\r\n type\r\n ],\r\n [\r\n 'div',\r\n {\r\n style: 'padding-left:1.25em'\r\n },\r\n ...Object.keys(target).map(key => {\r\n return [\r\n 'div',\r\n {},\r\n ['span', keywordStyle, key + ': '],\r\n formatValue(target[key], false)\r\n ];\r\n })\r\n ]\r\n ];\r\n }\r\n function formatValue(v, asRaw = true) {\r\n if (typeof v === 'number') {\r\n return ['span', numberStyle, v];\r\n }\r\n else if (typeof v === 'string') {\r\n return ['span', stringStyle, JSON.stringify(v)];\r\n }\r\n else if (typeof v === 'boolean') {\r\n return ['span', keywordStyle, v];\r\n }\r\n else if (isObject(v)) {\r\n return ['object', { object: asRaw ? toRaw(v) : v }];\r\n }\r\n else {\r\n return ['span', stringStyle, String(v)];\r\n }\r\n }\r\n function extractKeys(instance, type) {\r\n const Comp = instance.type;\r\n if (isFunction(Comp)) {\r\n return;\r\n }\r\n const extracted = {};\r\n for (const key in instance.ctx) {\r\n if (isKeyOfType(Comp, key, type)) {\r\n extracted[key] = instance.ctx[key];\r\n }\r\n }\r\n return extracted;\r\n }\r\n function isKeyOfType(Comp, key, type) {\r\n const opts = Comp[type];\r\n if ((isArray(opts) && opts.includes(key)) ||\r\n (isObject(opts) && key in opts)) {\r\n return true;\r\n }\r\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\r\n return true;\r\n }\r\n if (Comp.mixins && Comp.mixins.some(m => isKeyOfType(m, key, type))) {\r\n return true;\r\n }\r\n }\r\n function genRefFlag(v) {\r\n if (isShallow(v)) {\r\n return `ShallowRef`;\r\n }\r\n if (v.effect) {\r\n return `ComputedRef`;\r\n }\r\n return `Ref`;\r\n }\r\n if (window.devtoolsFormatters) {\r\n window.devtoolsFormatters.push(formatter);\r\n }\r\n else {\r\n window.devtoolsFormatters = [formatter];\r\n }\r\n}\n\nfunction withMemo(memo, render, cache, index) {\r\n const cached = cache[index];\r\n if (cached && isMemoSame(cached, memo)) {\r\n return cached;\r\n }\r\n const ret = render();\r\n // shallow clone\r\n ret.memo = memo.slice();\r\n return (cache[index] = ret);\r\n}\r\nfunction isMemoSame(cached, memo) {\r\n const prev = cached.memo;\r\n if (prev.length != memo.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < prev.length; i++) {\r\n if (prev[i] !== memo[i]) {\r\n return false;\r\n }\r\n }\r\n // make sure to let parent block track it when returning cached\r\n if (isBlockTreeEnabled > 0 && currentBlock) {\r\n currentBlock.push(cached);\r\n }\r\n return true;\r\n}\n\n// Core API ------------------------------------------------------------------\r\nconst version = \"3.2.33\";\r\nconst _ssrUtils = {\r\n createComponentInstance,\r\n setupComponent,\r\n renderComponentRoot,\r\n setCurrentRenderingInstance,\r\n isVNode,\r\n normalizeVNode\r\n};\r\n/**\r\n * SSR utils for \\@vue/server-renderer. Only exposed in cjs builds.\r\n * @internal\r\n */\r\nconst ssrUtils = (_ssrUtils );\r\n/**\r\n * @internal only exposed in compat builds\r\n */\r\nconst resolveFilter = null;\r\n/**\r\n * @internal only exposed in compat builds.\r\n */\r\nconst compatUtils = (null);\n\nexport { BaseTransition, Comment, Fragment, KeepAlive, Static, Suspense, Teleport, Text, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineProps, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useSSRContext, useSlots, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n", "import { camelize, warn, callWithAsyncErrorHandling, defineComponent, nextTick, createVNode, getCurrentInstance, watchPostEffect, onMounted, onUnmounted, Fragment, Static, h, BaseTransition, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, createRenderer, isRuntimeOnly, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { isString, isArray, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isOn, isModelListener, isFunction, toNumber, camelize as camelize$1, extend, EMPTY_OBJ, isObject, invokeArrayFns, looseIndexOf, isSet, looseEqual, isHTMLTag, isSVGTag } from '@vue/shared';\n\nconst svgNS = 'http://www.w3.org/2000/svg';\r\nconst doc = (typeof document !== 'undefined' ? document : null);\r\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\r\nconst nodeOps = {\r\n insert: (child, parent, anchor) => {\r\n parent.insertBefore(child, anchor || null);\r\n },\r\n remove: child => {\r\n const parent = child.parentNode;\r\n if (parent) {\r\n parent.removeChild(child);\r\n }\r\n },\r\n createElement: (tag, isSVG, is, props) => {\r\n const el = isSVG\r\n ? doc.createElementNS(svgNS, tag)\r\n : doc.createElement(tag, is ? { is } : undefined);\r\n if (tag === 'select' && props && props.multiple != null) {\r\n el.setAttribute('multiple', props.multiple);\r\n }\r\n return el;\r\n },\r\n createText: text => doc.createTextNode(text),\r\n createComment: text => doc.createComment(text),\r\n setText: (node, text) => {\r\n node.nodeValue = text;\r\n },\r\n setElementText: (el, text) => {\r\n el.textContent = text;\r\n },\r\n parentNode: node => node.parentNode,\r\n nextSibling: node => node.nextSibling,\r\n querySelector: selector => doc.querySelector(selector),\r\n setScopeId(el, id) {\r\n el.setAttribute(id, '');\r\n },\r\n cloneNode(el) {\r\n const cloned = el.cloneNode(true);\r\n // #3072\r\n // - in `patchDOMProp`, we store the actual value in the `el._value` property.\r\n // - normally, elements using `:value` bindings will not be hoisted, but if\r\n // the bound value is a constant, e.g. `:value=\"true\"` - they do get\r\n // hoisted.\r\n // - in production, hoisted nodes are cloned when subsequent inserts, but\r\n // cloneNode() does not copy the custom property we attached.\r\n // - This may need to account for other custom DOM properties we attach to\r\n // elements in addition to `_value` in the future.\r\n if (`_value` in el) {\r\n cloned._value = el._value;\r\n }\r\n return cloned;\r\n },\r\n // __UNSAFE__\r\n // Reason: innerHTML.\r\n // Static content here can only come from compiled templates.\r\n // As long as the user only uses trusted templates, this is safe.\r\n insertStaticContent(content, parent, anchor, isSVG, start, end) {\r\n // <parent> before | first ... last | anchor </parent>\r\n const before = anchor ? anchor.previousSibling : parent.lastChild;\r\n // #5308 can only take cached path if:\r\n // - has a single root node\r\n // - nextSibling info is still available\r\n if (start && (start === end || start.nextSibling)) {\r\n // cached\r\n while (true) {\r\n parent.insertBefore(start.cloneNode(true), anchor);\r\n if (start === end || !(start = start.nextSibling))\r\n break;\r\n }\r\n }\r\n else {\r\n // fresh insert\r\n templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\r\n const template = templateContainer.content;\r\n if (isSVG) {\r\n // remove outer svg wrapper\r\n const wrapper = template.firstChild;\r\n while (wrapper.firstChild) {\r\n template.appendChild(wrapper.firstChild);\r\n }\r\n template.removeChild(wrapper);\r\n }\r\n parent.insertBefore(template, anchor);\r\n }\r\n return [\r\n // first\r\n before ? before.nextSibling : parent.firstChild,\r\n // last\r\n anchor ? anchor.previousSibling : parent.lastChild\r\n ];\r\n }\r\n};\n\n// compiler should normalize class + :class bindings on the same element\r\n// into a single binding ['staticClass', dynamic]\r\nfunction patchClass(el, value, isSVG) {\r\n // directly setting className should be faster than setAttribute in theory\r\n // if this is an element during a transition, take the temporary transition\r\n // classes into account.\r\n const transitionClasses = el._vtc;\r\n if (transitionClasses) {\r\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\r\n }\r\n if (value == null) {\r\n el.removeAttribute('class');\r\n }\r\n else if (isSVG) {\r\n el.setAttribute('class', value);\r\n }\r\n else {\r\n el.className = value;\r\n }\r\n}\n\nfunction patchStyle(el, prev, next) {\r\n const style = el.style;\r\n const isCssString = isString(next);\r\n if (next && !isCssString) {\r\n for (const key in next) {\r\n setStyle(style, key, next[key]);\r\n }\r\n if (prev && !isString(prev)) {\r\n for (const key in prev) {\r\n if (next[key] == null) {\r\n setStyle(style, key, '');\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const currentDisplay = style.display;\r\n if (isCssString) {\r\n if (prev !== next) {\r\n style.cssText = next;\r\n }\r\n }\r\n else if (prev) {\r\n el.removeAttribute('style');\r\n }\r\n // indicates that the `display` of the element is controlled by `v-show`,\r\n // so we always keep the current `display` value regardless of the `style`\r\n // value, thus handing over control to `v-show`.\r\n if ('_vod' in el) {\r\n style.display = currentDisplay;\r\n }\r\n }\r\n}\r\nconst importantRE = /\\s*!important$/;\r\nfunction setStyle(style, name, val) {\r\n if (isArray(val)) {\r\n val.forEach(v => setStyle(style, name, v));\r\n }\r\n else {\r\n if (val == null)\r\n val = '';\r\n if (name.startsWith('--')) {\r\n // custom property definition\r\n style.setProperty(name, val);\r\n }\r\n else {\r\n const prefixed = autoPrefix(style, name);\r\n if (importantRE.test(val)) {\r\n // !important\r\n style.setProperty(hyphenate(prefixed), val.replace(importantRE, ''), 'important');\r\n }\r\n else {\r\n style[prefixed] = val;\r\n }\r\n }\r\n }\r\n}\r\nconst prefixes = ['Webkit', 'Moz', 'ms'];\r\nconst prefixCache = {};\r\nfunction autoPrefix(style, rawName) {\r\n const cached = prefixCache[rawName];\r\n if (cached) {\r\n return cached;\r\n }\r\n let name = camelize(rawName);\r\n if (name !== 'filter' && name in style) {\r\n return (prefixCache[rawName] = name);\r\n }\r\n name = capitalize(name);\r\n for (let i = 0; i < prefixes.length; i++) {\r\n const prefixed = prefixes[i] + name;\r\n if (prefixed in style) {\r\n return (prefixCache[rawName] = prefixed);\r\n }\r\n }\r\n return rawName;\r\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\r\nfunction patchAttr(el, key, value, isSVG, instance) {\r\n if (isSVG && key.startsWith('xlink:')) {\r\n if (value == null) {\r\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\r\n }\r\n else {\r\n el.setAttributeNS(xlinkNS, key, value);\r\n }\r\n }\r\n else {\r\n // note we are only checking boolean attributes that don't have a\r\n // corresponding dom prop of the same name here.\r\n const isBoolean = isSpecialBooleanAttr(key);\r\n if (value == null || (isBoolean && !includeBooleanAttr(value))) {\r\n el.removeAttribute(key);\r\n }\r\n else {\r\n el.setAttribute(key, isBoolean ? '' : value);\r\n }\r\n }\r\n}\n\n// __UNSAFE__\r\n// functions. The user is responsible for using them with only trusted content.\r\nfunction patchDOMProp(el, key, value, \r\n// the following args are passed only due to potential innerHTML/textContent\r\n// overriding existing VNodes, in which case the old tree must be properly\r\n// unmounted.\r\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\r\n if (key === 'innerHTML' || key === 'textContent') {\r\n if (prevChildren) {\r\n unmountChildren(prevChildren, parentComponent, parentSuspense);\r\n }\r\n el[key] = value == null ? '' : value;\r\n return;\r\n }\r\n if (key === 'value' &&\r\n el.tagName !== 'PROGRESS' &&\r\n // custom elements may use _value internally\r\n !el.tagName.includes('-')) {\r\n // store value as _value as well since\r\n // non-string values will be stringified.\r\n el._value = value;\r\n const newValue = value == null ? '' : value;\r\n if (el.value !== newValue ||\r\n // #4956: always set for OPTION elements because its value falls back to\r\n // textContent if no value attribute is present. And setting .value for\r\n // OPTION has no side effect\r\n el.tagName === 'OPTION') {\r\n el.value = newValue;\r\n }\r\n if (value == null) {\r\n el.removeAttribute(key);\r\n }\r\n return;\r\n }\r\n let needRemove = false;\r\n if (value === '' || value == null) {\r\n const type = typeof el[key];\r\n if (type === 'boolean') {\r\n // e.g. <select multiple> compiles to { multiple: '' }\r\n value = includeBooleanAttr(value);\r\n }\r\n else if (value == null && type === 'string') {\r\n // e.g. <div :id=\"null\">\r\n value = '';\r\n needRemove = true;\r\n }\r\n else if (type === 'number') {\r\n // e.g. <img :width=\"null\">\r\n // the value of some IDL attr must be greater than 0, e.g. input.size = 0 -> error\r\n value = 0;\r\n needRemove = true;\r\n }\r\n }\r\n // some properties perform value validation and throw,\r\n // some properties has getter, no setter, will error in 'use strict'\r\n // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\r\n try {\r\n el[key] = value;\r\n }\r\n catch (e) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\r\n `value ${value} is invalid.`, e);\r\n }\r\n }\r\n needRemove && el.removeAttribute(key);\r\n}\n\n// Async edge case fix requires storing an event listener's attach timestamp.\r\nconst [_getNow, skipTimestampCheck] = /*#__PURE__*/ (() => {\r\n let _getNow = Date.now;\r\n let skipTimestampCheck = false;\r\n if (typeof window !== 'undefined') {\r\n // Determine what event timestamp the browser is using. Annoyingly, the\r\n // timestamp can either be hi-res (relative to page load) or low-res\r\n // (relative to UNIX epoch), so in order to compare time we have to use the\r\n // same timestamp type when saving the flush timestamp.\r\n if (Date.now() > document.createEvent('Event').timeStamp) {\r\n // if the low-res timestamp which is bigger than the event timestamp\r\n // (which is evaluated AFTER) it means the event is using a hi-res timestamp,\r\n // and we need to use the hi-res version for event listeners as well.\r\n _getNow = () => performance.now();\r\n }\r\n // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation\r\n // and does not fire microtasks in between event propagation, so safe to exclude.\r\n const ffMatch = navigator.userAgent.match(/firefox\\/(\\d+)/i);\r\n skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);\r\n }\r\n return [_getNow, skipTimestampCheck];\r\n})();\r\n// To avoid the overhead of repeatedly calling performance.now(), we cache\r\n// and use the same timestamp for all event listeners attached in the same tick.\r\nlet cachedNow = 0;\r\nconst p = /*#__PURE__*/ Promise.resolve();\r\nconst reset = () => {\r\n cachedNow = 0;\r\n};\r\nconst getNow = () => cachedNow || (p.then(reset), (cachedNow = _getNow()));\r\nfunction addEventListener(el, event, handler, options) {\r\n el.addEventListener(event, handler, options);\r\n}\r\nfunction removeEventListener(el, event, handler, options) {\r\n el.removeEventListener(event, handler, options);\r\n}\r\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\r\n // vei = vue event invokers\r\n const invokers = el._vei || (el._vei = {});\r\n const existingInvoker = invokers[rawName];\r\n if (nextValue && existingInvoker) {\r\n // patch\r\n existingInvoker.value = nextValue;\r\n }\r\n else {\r\n const [name, options] = parseName(rawName);\r\n if (nextValue) {\r\n // add\r\n const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\r\n addEventListener(el, name, invoker, options);\r\n }\r\n else if (existingInvoker) {\r\n // remove\r\n removeEventListener(el, name, existingInvoker, options);\r\n invokers[rawName] = undefined;\r\n }\r\n }\r\n}\r\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\r\nfunction parseName(name) {\r\n let options;\r\n if (optionsModifierRE.test(name)) {\r\n options = {};\r\n let m;\r\n while ((m = name.match(optionsModifierRE))) {\r\n name = name.slice(0, name.length - m[0].length);\r\n options[m[0].toLowerCase()] = true;\r\n }\r\n }\r\n return [hyphenate(name.slice(2)), options];\r\n}\r\nfunction createInvoker(initialValue, instance) {\r\n const invoker = (e) => {\r\n // async edge case #6566: inner click event triggers patch, event handler\r\n // attached to outer element during patch, and triggered again. This\r\n // happens because browsers fire microtask ticks between event propagation.\r\n // the solution is simple: we save the timestamp when a handler is attached,\r\n // and the handler would only fire if the event passed to it was fired\r\n // AFTER it was attached.\r\n const timeStamp = e.timeStamp || _getNow();\r\n if (skipTimestampCheck || timeStamp >= invoker.attached - 1) {\r\n callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* NATIVE_EVENT_HANDLER */, [e]);\r\n }\r\n };\r\n invoker.value = initialValue;\r\n invoker.attached = getNow();\r\n return invoker;\r\n}\r\nfunction patchStopImmediatePropagation(e, value) {\r\n if (isArray(value)) {\r\n const originalStop = e.stopImmediatePropagation;\r\n e.stopImmediatePropagation = () => {\r\n originalStop.call(e);\r\n e._stopped = true;\r\n };\r\n return value.map(fn => (e) => !e._stopped && fn && fn(e));\r\n }\r\n else {\r\n return value;\r\n }\r\n}\n\nconst nativeOnRE = /^on[a-z]/;\r\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\r\n if (key === 'class') {\r\n patchClass(el, nextValue, isSVG);\r\n }\r\n else if (key === 'style') {\r\n patchStyle(el, prevValue, nextValue);\r\n }\r\n else if (isOn(key)) {\r\n // ignore v-model listeners\r\n if (!isModelListener(key)) {\r\n patchEvent(el, key, prevValue, nextValue, parentComponent);\r\n }\r\n }\r\n else if (key[0] === '.'\r\n ? ((key = key.slice(1)), true)\r\n : key[0] === '^'\r\n ? ((key = key.slice(1)), false)\r\n : shouldSetAsProp(el, key, nextValue, isSVG)) {\r\n patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\r\n }\r\n else {\r\n // special case for <input v-model type=\"checkbox\"> with\r\n // :true-value & :false-value\r\n // store value as dom properties since non-string values will be\r\n // stringified.\r\n if (key === 'true-value') {\r\n el._trueValue = nextValue;\r\n }\r\n else if (key === 'false-value') {\r\n el._falseValue = nextValue;\r\n }\r\n patchAttr(el, key, nextValue, isSVG);\r\n }\r\n};\r\nfunction shouldSetAsProp(el, key, value, isSVG) {\r\n if (isSVG) {\r\n // most keys must be set as attribute on svg elements to work\r\n // ...except innerHTML & textContent\r\n if (key === 'innerHTML' || key === 'textContent') {\r\n return true;\r\n }\r\n // or native onclick with function values\r\n if (key in el && nativeOnRE.test(key) && isFunction(value)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n // these are enumerated attrs, however their corresponding DOM properties\r\n // are actually booleans - this leads to setting it with a string \"false\"\r\n // value leading it to be coerced to `true`, so we need to always treat\r\n // them as attributes.\r\n // Note that `contentEditable` doesn't have this problem: its DOM\r\n // property is also enumerated string values.\r\n if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\r\n return false;\r\n }\r\n // #1787, #2840 form property on form elements is readonly and must be set as\r\n // attribute.\r\n if (key === 'form') {\r\n return false;\r\n }\r\n // #1526 <input list> must be set as attribute\r\n if (key === 'list' && el.tagName === 'INPUT') {\r\n return false;\r\n }\r\n // #2766 <textarea type> must be set as attribute\r\n if (key === 'type' && el.tagName === 'TEXTAREA') {\r\n return false;\r\n }\r\n // native onclick with string value, must be set as attribute\r\n if (nativeOnRE.test(key) && isString(value)) {\r\n return false;\r\n }\r\n return key in el;\r\n}\n\nfunction defineCustomElement(options, hydate) {\r\n const Comp = defineComponent(options);\r\n class VueCustomElement extends VueElement {\r\n constructor(initialProps) {\r\n super(Comp, initialProps, hydate);\r\n }\r\n }\r\n VueCustomElement.def = Comp;\r\n return VueCustomElement;\r\n}\r\nconst defineSSRCustomElement = ((options) => {\r\n // @ts-ignore\r\n return defineCustomElement(options, hydrate);\r\n});\r\nconst BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\r\n});\r\nclass VueElement extends BaseClass {\r\n constructor(_def, _props = {}, hydrate) {\r\n super();\r\n this._def = _def;\r\n this._props = _props;\r\n /**\r\n * @internal\r\n */\r\n this._instance = null;\r\n this._connected = false;\r\n this._resolved = false;\r\n this._numberProps = null;\r\n if (this.shadowRoot && hydrate) {\r\n hydrate(this._createVNode(), this.shadowRoot);\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production') && this.shadowRoot) {\r\n warn(`Custom element has pre-rendered declarative shadow root but is not ` +\r\n `defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\r\n }\r\n this.attachShadow({ mode: 'open' });\r\n }\r\n }\r\n connectedCallback() {\r\n this._connected = true;\r\n if (!this._instance) {\r\n this._resolveDef();\r\n }\r\n }\r\n disconnectedCallback() {\r\n this._connected = false;\r\n nextTick(() => {\r\n if (!this._connected) {\r\n render(null, this.shadowRoot);\r\n this._instance = null;\r\n }\r\n });\r\n }\r\n /**\r\n * resolve inner component definition (handle possible async component)\r\n */\r\n _resolveDef() {\r\n if (this._resolved) {\r\n return;\r\n }\r\n this._resolved = true;\r\n // set initial attrs\r\n for (let i = 0; i < this.attributes.length; i++) {\r\n this._setAttr(this.attributes[i].name);\r\n }\r\n // watch future attr changes\r\n new MutationObserver(mutations => {\r\n for (const m of mutations) {\r\n this._setAttr(m.attributeName);\r\n }\r\n }).observe(this, { attributes: true });\r\n const resolve = (def) => {\r\n const { props, styles } = def;\r\n const hasOptions = !isArray(props);\r\n const rawKeys = props ? (hasOptions ? Object.keys(props) : props) : [];\r\n // cast Number-type props set before resolve\r\n let numberProps;\r\n if (hasOptions) {\r\n for (const key in this._props) {\r\n const opt = props[key];\r\n if (opt === Number || (opt && opt.type === Number)) {\r\n this._props[key] = toNumber(this._props[key]);\r\n (numberProps || (numberProps = Object.create(null)))[key] = true;\r\n }\r\n }\r\n }\r\n this._numberProps = numberProps;\r\n // check if there are props set pre-upgrade or connect\r\n for (const key of Object.keys(this)) {\r\n if (key[0] !== '_') {\r\n this._setProp(key, this[key], true, false);\r\n }\r\n }\r\n // defining getter/setters on prototype\r\n for (const key of rawKeys.map(camelize$1)) {\r\n Object.defineProperty(this, key, {\r\n get() {\r\n return this._getProp(key);\r\n },\r\n set(val) {\r\n this._setProp(key, val);\r\n }\r\n });\r\n }\r\n // apply CSS\r\n this._applyStyles(styles);\r\n // initial render\r\n this._update();\r\n };\r\n const asyncDef = this._def.__asyncLoader;\r\n if (asyncDef) {\r\n asyncDef().then(resolve);\r\n }\r\n else {\r\n resolve(this._def);\r\n }\r\n }\r\n _setAttr(key) {\r\n let value = this.getAttribute(key);\r\n if (this._numberProps && this._numberProps[key]) {\r\n value = toNumber(value);\r\n }\r\n this._setProp(camelize$1(key), value, false);\r\n }\r\n /**\r\n * @internal\r\n */\r\n _getProp(key) {\r\n return this._props[key];\r\n }\r\n /**\r\n * @internal\r\n */\r\n _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\r\n if (val !== this._props[key]) {\r\n this._props[key] = val;\r\n if (shouldUpdate && this._instance) {\r\n this._update();\r\n }\r\n // reflect\r\n if (shouldReflect) {\r\n if (val === true) {\r\n this.setAttribute(hyphenate(key), '');\r\n }\r\n else if (typeof val === 'string' || typeof val === 'number') {\r\n this.setAttribute(hyphenate(key), val + '');\r\n }\r\n else if (!val) {\r\n this.removeAttribute(hyphenate(key));\r\n }\r\n }\r\n }\r\n }\r\n _update() {\r\n render(this._createVNode(), this.shadowRoot);\r\n }\r\n _createVNode() {\r\n const vnode = createVNode(this._def, extend({}, this._props));\r\n if (!this._instance) {\r\n vnode.ce = instance => {\r\n this._instance = instance;\r\n instance.isCE = true;\r\n // HMR\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n instance.ceReload = newStyles => {\r\n // always reset styles\r\n if (this._styles) {\r\n this._styles.forEach(s => this.shadowRoot.removeChild(s));\r\n this._styles.length = 0;\r\n }\r\n this._applyStyles(newStyles);\r\n // if this is an async component, ceReload is called from the inner\r\n // component so no need to reload the async wrapper\r\n if (!this._def.__asyncLoader) {\r\n // reload\r\n this._instance = null;\r\n this._update();\r\n }\r\n };\r\n }\r\n // intercept emit\r\n instance.emit = (event, ...args) => {\r\n this.dispatchEvent(new CustomEvent(event, {\r\n detail: args\r\n }));\r\n };\r\n // locate nearest Vue custom element parent for provide/inject\r\n let parent = this;\r\n while ((parent =\r\n parent && (parent.parentNode || parent.host))) {\r\n if (parent instanceof VueElement) {\r\n instance.parent = parent._instance;\r\n break;\r\n }\r\n }\r\n };\r\n }\r\n return vnode;\r\n }\r\n _applyStyles(styles) {\r\n if (styles) {\r\n styles.forEach(css => {\r\n const s = document.createElement('style');\r\n s.textContent = css;\r\n this.shadowRoot.appendChild(s);\r\n // record for HMR\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n (this._styles || (this._styles = [])).push(s);\r\n }\r\n });\r\n }\r\n }\r\n}\n\nfunction useCssModule(name = '$style') {\r\n /* istanbul ignore else */\r\n {\r\n const instance = getCurrentInstance();\r\n if (!instance) {\r\n (process.env.NODE_ENV !== 'production') && warn(`useCssModule must be called inside setup()`);\r\n return EMPTY_OBJ;\r\n }\r\n const modules = instance.type.__cssModules;\r\n if (!modules) {\r\n (process.env.NODE_ENV !== 'production') && warn(`Current instance does not have CSS modules injected.`);\r\n return EMPTY_OBJ;\r\n }\r\n const mod = modules[name];\r\n if (!mod) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Current instance does not have CSS module named \"${name}\".`);\r\n return EMPTY_OBJ;\r\n }\r\n return mod;\r\n }\r\n}\n\n/**\r\n * Runtime helper for SFC's CSS variable injection feature.\r\n * @private\r\n */\r\nfunction useCssVars(getter) {\r\n const instance = getCurrentInstance();\r\n /* istanbul ignore next */\r\n if (!instance) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`useCssVars is called without current active component instance.`);\r\n return;\r\n }\r\n const setVars = () => setVarsOnVNode(instance.subTree, getter(instance.proxy));\r\n watchPostEffect(setVars);\r\n onMounted(() => {\r\n const ob = new MutationObserver(setVars);\r\n ob.observe(instance.subTree.el.parentNode, { childList: true });\r\n onUnmounted(() => ob.disconnect());\r\n });\r\n}\r\nfunction setVarsOnVNode(vnode, vars) {\r\n if (vnode.shapeFlag & 128 /* SUSPENSE */) {\r\n const suspense = vnode.suspense;\r\n vnode = suspense.activeBranch;\r\n if (suspense.pendingBranch && !suspense.isHydrating) {\r\n suspense.effects.push(() => {\r\n setVarsOnVNode(suspense.activeBranch, vars);\r\n });\r\n }\r\n }\r\n // drill down HOCs until it's a non-component vnode\r\n while (vnode.component) {\r\n vnode = vnode.component.subTree;\r\n }\r\n if (vnode.shapeFlag & 1 /* ELEMENT */ && vnode.el) {\r\n setVarsOnNode(vnode.el, vars);\r\n }\r\n else if (vnode.type === Fragment) {\r\n vnode.children.forEach(c => setVarsOnVNode(c, vars));\r\n }\r\n else if (vnode.type === Static) {\r\n let { el, anchor } = vnode;\r\n while (el) {\r\n setVarsOnNode(el, vars);\r\n if (el === anchor)\r\n break;\r\n el = el.nextSibling;\r\n }\r\n }\r\n}\r\nfunction setVarsOnNode(el, vars) {\r\n if (el.nodeType === 1) {\r\n const style = el.style;\r\n for (const key in vars) {\r\n style.setProperty(`--${key}`, vars[key]);\r\n }\r\n }\r\n}\n\nconst TRANSITION = 'transition';\r\nconst ANIMATION = 'animation';\r\n// DOM Transition is a higher-order-component based on the platform-agnostic\r\n// base Transition component, with DOM-specific logic.\r\nconst Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots);\r\nTransition.displayName = 'Transition';\r\nconst DOMTransitionPropsValidators = {\r\n name: String,\r\n type: String,\r\n css: {\r\n type: Boolean,\r\n default: true\r\n },\r\n duration: [String, Number, Object],\r\n enterFromClass: String,\r\n enterActiveClass: String,\r\n enterToClass: String,\r\n appearFromClass: String,\r\n appearActiveClass: String,\r\n appearToClass: String,\r\n leaveFromClass: String,\r\n leaveActiveClass: String,\r\n leaveToClass: String\r\n};\r\nconst TransitionPropsValidators = (Transition.props =\r\n /*#__PURE__*/ extend({}, BaseTransition.props, DOMTransitionPropsValidators));\r\n/**\r\n * #3227 Incoming hooks may be merged into arrays when wrapping Transition\r\n * with custom HOCs.\r\n */\r\nconst callHook = (hook, args = []) => {\r\n if (isArray(hook)) {\r\n hook.forEach(h => h(...args));\r\n }\r\n else if (hook) {\r\n hook(...args);\r\n }\r\n};\r\n/**\r\n * Check if a hook expects a callback (2nd arg), which means the user\r\n * intends to explicitly control the end of the transition.\r\n */\r\nconst hasExplicitCallback = (hook) => {\r\n return hook\r\n ? isArray(hook)\r\n ? hook.some(h => h.length > 1)\r\n : hook.length > 1\r\n : false;\r\n};\r\nfunction resolveTransitionProps(rawProps) {\r\n const baseProps = {};\r\n for (const key in rawProps) {\r\n if (!(key in DOMTransitionPropsValidators)) {\r\n baseProps[key] = rawProps[key];\r\n }\r\n }\r\n if (rawProps.css === false) {\r\n return baseProps;\r\n }\r\n const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\r\n const durations = normalizeDuration(duration);\r\n const enterDuration = durations && durations[0];\r\n const leaveDuration = durations && durations[1];\r\n const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\r\n const finishEnter = (el, isAppear, done) => {\r\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\r\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\r\n done && done();\r\n };\r\n const finishLeave = (el, done) => {\r\n removeTransitionClass(el, leaveToClass);\r\n removeTransitionClass(el, leaveActiveClass);\r\n done && done();\r\n };\r\n const makeEnterHook = (isAppear) => {\r\n return (el, done) => {\r\n const hook = isAppear ? onAppear : onEnter;\r\n const resolve = () => finishEnter(el, isAppear, done);\r\n callHook(hook, [el, resolve]);\r\n nextFrame(() => {\r\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\r\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\r\n if (!hasExplicitCallback(hook)) {\r\n whenTransitionEnds(el, type, enterDuration, resolve);\r\n }\r\n });\r\n };\r\n };\r\n return extend(baseProps, {\r\n onBeforeEnter(el) {\r\n callHook(onBeforeEnter, [el]);\r\n addTransitionClass(el, enterFromClass);\r\n addTransitionClass(el, enterActiveClass);\r\n },\r\n onBeforeAppear(el) {\r\n callHook(onBeforeAppear, [el]);\r\n addTransitionClass(el, appearFromClass);\r\n addTransitionClass(el, appearActiveClass);\r\n },\r\n onEnter: makeEnterHook(false),\r\n onAppear: makeEnterHook(true),\r\n onLeave(el, done) {\r\n const resolve = () => finishLeave(el, done);\r\n addTransitionClass(el, leaveFromClass);\r\n // force reflow so *-leave-from classes immediately take effect (#2593)\r\n forceReflow();\r\n addTransitionClass(el, leaveActiveClass);\r\n nextFrame(() => {\r\n removeTransitionClass(el, leaveFromClass);\r\n addTransitionClass(el, leaveToClass);\r\n if (!hasExplicitCallback(onLeave)) {\r\n whenTransitionEnds(el, type, leaveDuration, resolve);\r\n }\r\n });\r\n callHook(onLeave, [el, resolve]);\r\n },\r\n onEnterCancelled(el) {\r\n finishEnter(el, false);\r\n callHook(onEnterCancelled, [el]);\r\n },\r\n onAppearCancelled(el) {\r\n finishEnter(el, true);\r\n callHook(onAppearCancelled, [el]);\r\n },\r\n onLeaveCancelled(el) {\r\n finishLeave(el);\r\n callHook(onLeaveCancelled, [el]);\r\n }\r\n });\r\n}\r\nfunction normalizeDuration(duration) {\r\n if (duration == null) {\r\n return null;\r\n }\r\n else if (isObject(duration)) {\r\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\r\n }\r\n else {\r\n const n = NumberOf(duration);\r\n return [n, n];\r\n }\r\n}\r\nfunction NumberOf(val) {\r\n const res = toNumber(val);\r\n if ((process.env.NODE_ENV !== 'production'))\r\n validateDuration(res);\r\n return res;\r\n}\r\nfunction validateDuration(val) {\r\n if (typeof val !== 'number') {\r\n warn(`<transition> explicit duration is not a valid number - ` +\r\n `got ${JSON.stringify(val)}.`);\r\n }\r\n else if (isNaN(val)) {\r\n warn(`<transition> explicit duration is NaN - ` +\r\n 'the duration expression might be incorrect.');\r\n }\r\n}\r\nfunction addTransitionClass(el, cls) {\r\n cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\r\n (el._vtc ||\r\n (el._vtc = new Set())).add(cls);\r\n}\r\nfunction removeTransitionClass(el, cls) {\r\n cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\r\n const { _vtc } = el;\r\n if (_vtc) {\r\n _vtc.delete(cls);\r\n if (!_vtc.size) {\r\n el._vtc = undefined;\r\n }\r\n }\r\n}\r\nfunction nextFrame(cb) {\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(cb);\r\n });\r\n}\r\nlet endId = 0;\r\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\r\n const id = (el._endId = ++endId);\r\n const resolveIfNotStale = () => {\r\n if (id === el._endId) {\r\n resolve();\r\n }\r\n };\r\n if (explicitTimeout) {\r\n return setTimeout(resolveIfNotStale, explicitTimeout);\r\n }\r\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\r\n if (!type) {\r\n return resolve();\r\n }\r\n const endEvent = type + 'end';\r\n let ended = 0;\r\n const end = () => {\r\n el.removeEventListener(endEvent, onEnd);\r\n resolveIfNotStale();\r\n };\r\n const onEnd = (e) => {\r\n if (e.target === el && ++ended >= propCount) {\r\n end();\r\n }\r\n };\r\n setTimeout(() => {\r\n if (ended < propCount) {\r\n end();\r\n }\r\n }, timeout + 1);\r\n el.addEventListener(endEvent, onEnd);\r\n}\r\nfunction getTransitionInfo(el, expectedType) {\r\n const styles = window.getComputedStyle(el);\r\n // JSDOM may return undefined for transition properties\r\n const getStyleProperties = (key) => (styles[key] || '').split(', ');\r\n const transitionDelays = getStyleProperties(TRANSITION + 'Delay');\r\n const transitionDurations = getStyleProperties(TRANSITION + 'Duration');\r\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\r\n const animationDelays = getStyleProperties(ANIMATION + 'Delay');\r\n const animationDurations = getStyleProperties(ANIMATION + 'Duration');\r\n const animationTimeout = getTimeout(animationDelays, animationDurations);\r\n let type = null;\r\n let timeout = 0;\r\n let propCount = 0;\r\n /* istanbul ignore if */\r\n if (expectedType === TRANSITION) {\r\n if (transitionTimeout > 0) {\r\n type = TRANSITION;\r\n timeout = transitionTimeout;\r\n propCount = transitionDurations.length;\r\n }\r\n }\r\n else if (expectedType === ANIMATION) {\r\n if (animationTimeout > 0) {\r\n type = ANIMATION;\r\n timeout = animationTimeout;\r\n propCount = animationDurations.length;\r\n }\r\n }\r\n else {\r\n timeout = Math.max(transitionTimeout, animationTimeout);\r\n type =\r\n timeout > 0\r\n ? transitionTimeout > animationTimeout\r\n ? TRANSITION\r\n : ANIMATION\r\n : null;\r\n propCount = type\r\n ? type === TRANSITION\r\n ? transitionDurations.length\r\n : animationDurations.length\r\n : 0;\r\n }\r\n const hasTransform = type === TRANSITION &&\r\n /\\b(transform|all)(,|$)/.test(styles[TRANSITION + 'Property']);\r\n return {\r\n type,\r\n timeout,\r\n propCount,\r\n hasTransform\r\n };\r\n}\r\nfunction getTimeout(delays, durations) {\r\n while (delays.length < durations.length) {\r\n delays = delays.concat(delays);\r\n }\r\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\r\n}\r\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer\r\n// numbers in a locale-dependent way, using a comma instead of a dot.\r\n// If comma is not replaced with a dot, the input will be rounded down\r\n// (i.e. acting as a floor function) causing unexpected behaviors\r\nfunction toMs(s) {\r\n return Number(s.slice(0, -1).replace(',', '.')) * 1000;\r\n}\r\n// synchronously force layout to put elements into a certain state\r\nfunction forceReflow() {\r\n return document.body.offsetHeight;\r\n}\n\nconst positionMap = new WeakMap();\r\nconst newPositionMap = new WeakMap();\r\nconst TransitionGroupImpl = {\r\n name: 'TransitionGroup',\r\n props: /*#__PURE__*/ extend({}, TransitionPropsValidators, {\r\n tag: String,\r\n moveClass: String\r\n }),\r\n setup(props, { slots }) {\r\n const instance = getCurrentInstance();\r\n const state = useTransitionState();\r\n let prevChildren;\r\n let children;\r\n onUpdated(() => {\r\n // children is guaranteed to exist after initial render\r\n if (!prevChildren.length) {\r\n return;\r\n }\r\n const moveClass = props.moveClass || `${props.name || 'v'}-move`;\r\n if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\r\n return;\r\n }\r\n // we divide the work into three loops to avoid mixing DOM reads and writes\r\n // in each iteration - which helps prevent layout thrashing.\r\n prevChildren.forEach(callPendingCbs);\r\n prevChildren.forEach(recordPosition);\r\n const movedChildren = prevChildren.filter(applyTranslation);\r\n // force reflow to put everything in position\r\n forceReflow();\r\n movedChildren.forEach(c => {\r\n const el = c.el;\r\n const style = el.style;\r\n addTransitionClass(el, moveClass);\r\n style.transform = style.webkitTransform = style.transitionDuration = '';\r\n const cb = (el._moveCb = (e) => {\r\n if (e && e.target !== el) {\r\n return;\r\n }\r\n if (!e || /transform$/.test(e.propertyName)) {\r\n el.removeEventListener('transitionend', cb);\r\n el._moveCb = null;\r\n removeTransitionClass(el, moveClass);\r\n }\r\n });\r\n el.addEventListener('transitionend', cb);\r\n });\r\n });\r\n return () => {\r\n const rawProps = toRaw(props);\r\n const cssTransitionProps = resolveTransitionProps(rawProps);\r\n let tag = rawProps.tag || Fragment;\r\n prevChildren = children;\r\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i];\r\n if (child.key != null) {\r\n setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`<TransitionGroup> children must be keyed.`);\r\n }\r\n }\r\n if (prevChildren) {\r\n for (let i = 0; i < prevChildren.length; i++) {\r\n const child = prevChildren[i];\r\n setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\r\n positionMap.set(child, child.el.getBoundingClientRect());\r\n }\r\n }\r\n return createVNode(tag, null, children);\r\n };\r\n }\r\n};\r\nconst TransitionGroup = TransitionGroupImpl;\r\nfunction callPendingCbs(c) {\r\n const el = c.el;\r\n if (el._moveCb) {\r\n el._moveCb();\r\n }\r\n if (el._enterCb) {\r\n el._enterCb();\r\n }\r\n}\r\nfunction recordPosition(c) {\r\n newPositionMap.set(c, c.el.getBoundingClientRect());\r\n}\r\nfunction applyTranslation(c) {\r\n const oldPos = positionMap.get(c);\r\n const newPos = newPositionMap.get(c);\r\n const dx = oldPos.left - newPos.left;\r\n const dy = oldPos.top - newPos.top;\r\n if (dx || dy) {\r\n const s = c.el.style;\r\n s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\r\n s.transitionDuration = '0s';\r\n return c;\r\n }\r\n}\r\nfunction hasCSSTransform(el, root, moveClass) {\r\n // Detect whether an element with the move class applied has\r\n // CSS transitions. Since the element may be inside an entering\r\n // transition at this very moment, we make a clone of it and remove\r\n // all other transition classes applied to ensure only the move class\r\n // is applied.\r\n const clone = el.cloneNode();\r\n if (el._vtc) {\r\n el._vtc.forEach(cls => {\r\n cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\r\n });\r\n }\r\n moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\r\n clone.style.display = 'none';\r\n const container = (root.nodeType === 1 ? root : root.parentNode);\r\n container.appendChild(clone);\r\n const { hasTransform } = getTransitionInfo(clone);\r\n container.removeChild(clone);\r\n return hasTransform;\r\n}\n\nconst getModelAssigner = (vnode) => {\r\n const fn = vnode.props['onUpdate:modelValue'];\r\n return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\r\n};\r\nfunction onCompositionStart(e) {\r\n e.target.composing = true;\r\n}\r\nfunction onCompositionEnd(e) {\r\n const target = e.target;\r\n if (target.composing) {\r\n target.composing = false;\r\n trigger(target, 'input');\r\n }\r\n}\r\nfunction trigger(el, type) {\r\n const e = document.createEvent('HTMLEvents');\r\n e.initEvent(type, true, true);\r\n el.dispatchEvent(e);\r\n}\r\n// We are exporting the v-model runtime directly as vnode hooks so that it can\r\n// be tree-shaken in case v-model is never used.\r\nconst vModelText = {\r\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\r\n el._assign = getModelAssigner(vnode);\r\n const castToNumber = number || (vnode.props && vnode.props.type === 'number');\r\n addEventListener(el, lazy ? 'change' : 'input', e => {\r\n if (e.target.composing)\r\n return;\r\n let domValue = el.value;\r\n if (trim) {\r\n domValue = domValue.trim();\r\n }\r\n else if (castToNumber) {\r\n domValue = toNumber(domValue);\r\n }\r\n el._assign(domValue);\r\n });\r\n if (trim) {\r\n addEventListener(el, 'change', () => {\r\n el.value = el.value.trim();\r\n });\r\n }\r\n if (!lazy) {\r\n addEventListener(el, 'compositionstart', onCompositionStart);\r\n addEventListener(el, 'compositionend', onCompositionEnd);\r\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\r\n // switching focus before confirming composition choice\r\n // this also fixes the issue where some browsers e.g. iOS Chrome\r\n // fires \"change\" instead of \"input\" on autocomplete.\r\n addEventListener(el, 'change', onCompositionEnd);\r\n }\r\n },\r\n // set value on mounted so it's after min/max for type=\"range\"\r\n mounted(el, { value }) {\r\n el.value = value == null ? '' : value;\r\n },\r\n beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\r\n el._assign = getModelAssigner(vnode);\r\n // avoid clearing unresolved text. #2302\r\n if (el.composing)\r\n return;\r\n if (document.activeElement === el) {\r\n if (lazy) {\r\n return;\r\n }\r\n if (trim && el.value.trim() === value) {\r\n return;\r\n }\r\n if ((number || el.type === 'number') && toNumber(el.value) === value) {\r\n return;\r\n }\r\n }\r\n const newValue = value == null ? '' : value;\r\n if (el.value !== newValue) {\r\n el.value = newValue;\r\n }\r\n }\r\n};\r\nconst vModelCheckbox = {\r\n // #4096 array checkboxes need to be deep traversed\r\n deep: true,\r\n created(el, _, vnode) {\r\n el._assign = getModelAssigner(vnode);\r\n addEventListener(el, 'change', () => {\r\n const modelValue = el._modelValue;\r\n const elementValue = getValue(el);\r\n const checked = el.checked;\r\n const assign = el._assign;\r\n if (isArray(modelValue)) {\r\n const index = looseIndexOf(modelValue, elementValue);\r\n const found = index !== -1;\r\n if (checked && !found) {\r\n assign(modelValue.concat(elementValue));\r\n }\r\n else if (!checked && found) {\r\n const filtered = [...modelValue];\r\n filtered.splice(index, 1);\r\n assign(filtered);\r\n }\r\n }\r\n else if (isSet(modelValue)) {\r\n const cloned = new Set(modelValue);\r\n if (checked) {\r\n cloned.add(elementValue);\r\n }\r\n else {\r\n cloned.delete(elementValue);\r\n }\r\n assign(cloned);\r\n }\r\n else {\r\n assign(getCheckboxValue(el, checked));\r\n }\r\n });\r\n },\r\n // set initial checked on mount to wait for true-value/false-value\r\n mounted: setChecked,\r\n beforeUpdate(el, binding, vnode) {\r\n el._assign = getModelAssigner(vnode);\r\n setChecked(el, binding, vnode);\r\n }\r\n};\r\nfunction setChecked(el, { value, oldValue }, vnode) {\r\n el._modelValue = value;\r\n if (isArray(value)) {\r\n el.checked = looseIndexOf(value, vnode.props.value) > -1;\r\n }\r\n else if (isSet(value)) {\r\n el.checked = value.has(vnode.props.value);\r\n }\r\n else if (value !== oldValue) {\r\n el.checked = looseEqual(value, getCheckboxValue(el, true));\r\n }\r\n}\r\nconst vModelRadio = {\r\n created(el, { value }, vnode) {\r\n el.checked = looseEqual(value, vnode.props.value);\r\n el._assign = getModelAssigner(vnode);\r\n addEventListener(el, 'change', () => {\r\n el._assign(getValue(el));\r\n });\r\n },\r\n beforeUpdate(el, { value, oldValue }, vnode) {\r\n el._assign = getModelAssigner(vnode);\r\n if (value !== oldValue) {\r\n el.checked = looseEqual(value, vnode.props.value);\r\n }\r\n }\r\n};\r\nconst vModelSelect = {\r\n // <select multiple> value need to be deep traversed\r\n deep: true,\r\n created(el, { value, modifiers: { number } }, vnode) {\r\n const isSetModel = isSet(value);\r\n addEventListener(el, 'change', () => {\r\n const selectedVal = Array.prototype.filter\r\n .call(el.options, (o) => o.selected)\r\n .map((o) => number ? toNumber(getValue(o)) : getValue(o));\r\n el._assign(el.multiple\r\n ? isSetModel\r\n ? new Set(selectedVal)\r\n : selectedVal\r\n : selectedVal[0]);\r\n });\r\n el._assign = getModelAssigner(vnode);\r\n },\r\n // set value in mounted & updated because <select> relies on its children\r\n // <option>s.\r\n mounted(el, { value }) {\r\n setSelected(el, value);\r\n },\r\n beforeUpdate(el, _binding, vnode) {\r\n el._assign = getModelAssigner(vnode);\r\n },\r\n updated(el, { value }) {\r\n setSelected(el, value);\r\n }\r\n};\r\nfunction setSelected(el, value) {\r\n const isMultiple = el.multiple;\r\n if (isMultiple && !isArray(value) && !isSet(value)) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`<select multiple v-model> expects an Array or Set value for its binding, ` +\r\n `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`);\r\n return;\r\n }\r\n for (let i = 0, l = el.options.length; i < l; i++) {\r\n const option = el.options[i];\r\n const optionValue = getValue(option);\r\n if (isMultiple) {\r\n if (isArray(value)) {\r\n option.selected = looseIndexOf(value, optionValue) > -1;\r\n }\r\n else {\r\n option.selected = value.has(optionValue);\r\n }\r\n }\r\n else {\r\n if (looseEqual(getValue(option), value)) {\r\n if (el.selectedIndex !== i)\r\n el.selectedIndex = i;\r\n return;\r\n }\r\n }\r\n }\r\n if (!isMultiple && el.selectedIndex !== -1) {\r\n el.selectedIndex = -1;\r\n }\r\n}\r\n// retrieve raw value set via :value bindings\r\nfunction getValue(el) {\r\n return '_value' in el ? el._value : el.value;\r\n}\r\n// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\r\nfunction getCheckboxValue(el, checked) {\r\n const key = checked ? '_trueValue' : '_falseValue';\r\n return key in el ? el[key] : checked;\r\n}\r\nconst vModelDynamic = {\r\n created(el, binding, vnode) {\r\n callModelHook(el, binding, vnode, null, 'created');\r\n },\r\n mounted(el, binding, vnode) {\r\n callModelHook(el, binding, vnode, null, 'mounted');\r\n },\r\n beforeUpdate(el, binding, vnode, prevVNode) {\r\n callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\r\n },\r\n updated(el, binding, vnode, prevVNode) {\r\n callModelHook(el, binding, vnode, prevVNode, 'updated');\r\n }\r\n};\r\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\r\n let modelToUse;\r\n switch (el.tagName) {\r\n case 'SELECT':\r\n modelToUse = vModelSelect;\r\n break;\r\n case 'TEXTAREA':\r\n modelToUse = vModelText;\r\n break;\r\n default:\r\n switch (vnode.props && vnode.props.type) {\r\n case 'checkbox':\r\n modelToUse = vModelCheckbox;\r\n break;\r\n case 'radio':\r\n modelToUse = vModelRadio;\r\n break;\r\n default:\r\n modelToUse = vModelText;\r\n }\r\n }\r\n const fn = modelToUse[hook];\r\n fn && fn(el, binding, vnode, prevVNode);\r\n}\r\n// SSR vnode transforms, only used when user includes client-oriented render\r\n// function in SSR\r\nfunction initVModelForSSR() {\r\n vModelText.getSSRProps = ({ value }) => ({ value });\r\n vModelRadio.getSSRProps = ({ value }, vnode) => {\r\n if (vnode.props && looseEqual(vnode.props.value, value)) {\r\n return { checked: true };\r\n }\r\n };\r\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\r\n if (isArray(value)) {\r\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\r\n return { checked: true };\r\n }\r\n }\r\n else if (isSet(value)) {\r\n if (vnode.props && value.has(vnode.props.value)) {\r\n return { checked: true };\r\n }\r\n }\r\n else if (value) {\r\n return { checked: true };\r\n }\r\n };\r\n}\n\nconst systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\r\nconst modifierGuards = {\r\n stop: e => e.stopPropagation(),\r\n prevent: e => e.preventDefault(),\r\n self: e => e.target !== e.currentTarget,\r\n ctrl: e => !e.ctrlKey,\r\n shift: e => !e.shiftKey,\r\n alt: e => !e.altKey,\r\n meta: e => !e.metaKey,\r\n left: e => 'button' in e && e.button !== 0,\r\n middle: e => 'button' in e && e.button !== 1,\r\n right: e => 'button' in e && e.button !== 2,\r\n exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\r\n};\r\n/**\r\n * @private\r\n */\r\nconst withModifiers = (fn, modifiers) => {\r\n return (event, ...args) => {\r\n for (let i = 0; i < modifiers.length; i++) {\r\n const guard = modifierGuards[modifiers[i]];\r\n if (guard && guard(event, modifiers))\r\n return;\r\n }\r\n return fn(event, ...args);\r\n };\r\n};\r\n// Kept for 2.x compat.\r\n// Note: IE11 compat for `spacebar` and `del` is removed for now.\r\nconst keyNames = {\r\n esc: 'escape',\r\n space: ' ',\r\n up: 'arrow-up',\r\n left: 'arrow-left',\r\n right: 'arrow-right',\r\n down: 'arrow-down',\r\n delete: 'backspace'\r\n};\r\n/**\r\n * @private\r\n */\r\nconst withKeys = (fn, modifiers) => {\r\n return (event) => {\r\n if (!('key' in event)) {\r\n return;\r\n }\r\n const eventKey = hyphenate(event.key);\r\n if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\r\n return fn(event);\r\n }\r\n };\r\n};\n\nconst vShow = {\r\n beforeMount(el, { value }, { transition }) {\r\n el._vod = el.style.display === 'none' ? '' : el.style.display;\r\n if (transition && value) {\r\n transition.beforeEnter(el);\r\n }\r\n else {\r\n setDisplay(el, value);\r\n }\r\n },\r\n mounted(el, { value }, { transition }) {\r\n if (transition && value) {\r\n transition.enter(el);\r\n }\r\n },\r\n updated(el, { value, oldValue }, { transition }) {\r\n if (!value === !oldValue)\r\n return;\r\n if (transition) {\r\n if (value) {\r\n transition.beforeEnter(el);\r\n setDisplay(el, true);\r\n transition.enter(el);\r\n }\r\n else {\r\n transition.leave(el, () => {\r\n setDisplay(el, false);\r\n });\r\n }\r\n }\r\n else {\r\n setDisplay(el, value);\r\n }\r\n },\r\n beforeUnmount(el, { value }) {\r\n setDisplay(el, value);\r\n }\r\n};\r\nfunction setDisplay(el, value) {\r\n el.style.display = value ? el._vod : 'none';\r\n}\r\n// SSR vnode transforms, only used when user includes client-oriented render\r\n// function in SSR\r\nfunction initVShowForSSR() {\r\n vShow.getSSRProps = ({ value }) => {\r\n if (!value) {\r\n return { style: { display: 'none' } };\r\n }\r\n };\r\n}\n\nconst rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);\r\n// lazy create the renderer - this makes core renderer logic tree-shakable\r\n// in case the user only imports reactivity utilities from Vue.\r\nlet renderer;\r\nlet enabledHydration = false;\r\nfunction ensureRenderer() {\r\n return (renderer ||\r\n (renderer = createRenderer(rendererOptions)));\r\n}\r\nfunction ensureHydrationRenderer() {\r\n renderer = enabledHydration\r\n ? renderer\r\n : createHydrationRenderer(rendererOptions);\r\n enabledHydration = true;\r\n return renderer;\r\n}\r\n// use explicit type casts here to avoid import() calls in rolled-up d.ts\r\nconst render = ((...args) => {\r\n ensureRenderer().render(...args);\r\n});\r\nconst hydrate = ((...args) => {\r\n ensureHydrationRenderer().hydrate(...args);\r\n});\r\nconst createApp = ((...args) => {\r\n const app = ensureRenderer().createApp(...args);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n injectNativeTagCheck(app);\r\n injectCompilerOptionsCheck(app);\r\n }\r\n const { mount } = app;\r\n app.mount = (containerOrSelector) => {\r\n const container = normalizeContainer(containerOrSelector);\r\n if (!container)\r\n return;\r\n const component = app._component;\r\n if (!isFunction(component) && !component.render && !component.template) {\r\n // __UNSAFE__\r\n // Reason: potential execution of JS expressions in in-DOM template.\r\n // The user must make sure the in-DOM template is trusted. If it's\r\n // rendered by the server, the template should not contain any user data.\r\n component.template = container.innerHTML;\r\n }\r\n // clear content before mounting\r\n container.innerHTML = '';\r\n const proxy = mount(container, false, container instanceof SVGElement);\r\n if (container instanceof Element) {\r\n container.removeAttribute('v-cloak');\r\n container.setAttribute('data-v-app', '');\r\n }\r\n return proxy;\r\n };\r\n return app;\r\n});\r\nconst createSSRApp = ((...args) => {\r\n const app = ensureHydrationRenderer().createApp(...args);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n injectNativeTagCheck(app);\r\n injectCompilerOptionsCheck(app);\r\n }\r\n const { mount } = app;\r\n app.mount = (containerOrSelector) => {\r\n const container = normalizeContainer(containerOrSelector);\r\n if (container) {\r\n return mount(container, true, container instanceof SVGElement);\r\n }\r\n };\r\n return app;\r\n});\r\nfunction injectNativeTagCheck(app) {\r\n // Inject `isNativeTag`\r\n // this is used for component name validation (dev only)\r\n Object.defineProperty(app.config, 'isNativeTag', {\r\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\r\n writable: false\r\n });\r\n}\r\n// dev only\r\nfunction injectCompilerOptionsCheck(app) {\r\n if (isRuntimeOnly()) {\r\n const isCustomElement = app.config.isCustomElement;\r\n Object.defineProperty(app.config, 'isCustomElement', {\r\n get() {\r\n return isCustomElement;\r\n },\r\n set() {\r\n warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\r\n `\\`compilerOptions.isCustomElement\\` instead.`);\r\n }\r\n });\r\n const compilerOptions = app.config.compilerOptions;\r\n const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\r\n `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\r\n `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\r\n `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\r\n `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\r\n `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\r\n `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\r\n Object.defineProperty(app.config, 'compilerOptions', {\r\n get() {\r\n warn(msg);\r\n return compilerOptions;\r\n },\r\n set() {\r\n warn(msg);\r\n }\r\n });\r\n }\r\n}\r\nfunction normalizeContainer(container) {\r\n if (isString(container)) {\r\n const res = document.querySelector(container);\r\n if ((process.env.NODE_ENV !== 'production') && !res) {\r\n warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\r\n }\r\n return res;\r\n }\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n window.ShadowRoot &&\r\n container instanceof window.ShadowRoot &&\r\n container.mode === 'closed') {\r\n warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\r\n }\r\n return container;\r\n}\r\nlet ssrDirectiveInitialized = false;\r\n/**\r\n * @internal\r\n */\r\nconst initDirectivesForSSR = () => {\r\n if (!ssrDirectiveInitialized) {\r\n ssrDirectiveInitialized = true;\r\n initVModelForSSR();\r\n initVShowForSSR();\r\n }\r\n }\r\n ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, render, useCssModule, useCssVars, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n"], - "mappings": "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", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/chunk-JQISXBHW.js b/docs/.vuepress/.cache/deps/chunk-JQISXBHW.js deleted file mode 100644 index e7892ca..0000000 --- a/docs/.vuepress/.cache/deps/chunk-JQISXBHW.js +++ /dev/null @@ -1,26 +0,0 @@ -var __getOwnPropNames = Object.getOwnPropertyNames; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; -}; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; - -// <define:__EXTERNAL_LINK_ICON_LOCALES__> -var init_define_EXTERNAL_LINK_ICON_LOCALES = __esm({ - "<define:__EXTERNAL_LINK_ICON_LOCALES__>"() { - } -}); - -// <define:__MZ_ZOOM_OPTIONS__> -var init_define_MZ_ZOOM_OPTIONS = __esm({ - "<define:__MZ_ZOOM_OPTIONS__>"() { - } -}); - -export { - __commonJS, - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -}; -//# sourceMappingURL=chunk-JQISXBHW.js.map diff --git a/docs/.vuepress/.cache/deps/chunk-JQISXBHW.js.map b/docs/.vuepress/.cache/deps/chunk-JQISXBHW.js.map deleted file mode 100644 index 9865211..0000000 --- a/docs/.vuepress/.cache/deps/chunk-JQISXBHW.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": [], - "sourcesContent": [], - "mappings": "", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/chunk-SDTWZDHJ.js b/docs/.vuepress/.cache/deps/chunk-SDTWZDHJ.js deleted file mode 100644 index f8a3d1d..0000000 --- a/docs/.vuepress/.cache/deps/chunk-SDTWZDHJ.js +++ /dev/null @@ -1,284 +0,0 @@ -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// node_modules/@vue/shared/dist/shared.esm-bundler.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -function makeMap(str, expectsLowerCase) { - const map = /* @__PURE__ */ Object.create(null); - const list = str.split(","); - for (let i = 0; i < list.length; i++) { - map[list[i]] = true; - } - return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[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); -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 isNoUnitNumericStyleProp = makeMap(`animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width`); -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 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 = /:(.+)/; -function parseStringStyle(cssText) { - const ret = {}; - cssText.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,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,feDistanceLight,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); -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 = 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) => val instanceof Date; -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(",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 toNumber = (val) => { - const n = parseFloat(val); - 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 : {}); -}; - -export { - makeMap, - isGloballyWhitelisted, - isSpecialBooleanAttr, - includeBooleanAttr, - normalizeStyle, - normalizeClass, - normalizeProps, - isHTMLTag, - isSVGTag, - looseEqual, - looseIndexOf, - toDisplayString, - EMPTY_OBJ, - EMPTY_ARR, - NOOP, - NO, - isOn, - isModelListener, - extend, - remove, - hasOwn, - isArray, - isMap, - isSet, - isFunction, - isString, - isSymbol, - isObject, - isPromise, - toRawType, - isPlainObject, - isIntegerKey, - isReservedProp, - isBuiltInDirective, - camelize, - hyphenate, - capitalize, - toHandlerKey, - hasChanged, - invokeArrayFns, - def, - toNumber, - getGlobalThis -}; -//# sourceMappingURL=chunk-SDTWZDHJ.js.map diff --git a/docs/.vuepress/.cache/deps/chunk-SDTWZDHJ.js.map b/docs/.vuepress/.cache/deps/chunk-SDTWZDHJ.js.map deleted file mode 100644 index d988ee2..0000000 --- a/docs/.vuepress/.cache/deps/chunk-SDTWZDHJ.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/@vue/shared/dist/shared.esm-bundler.js"], - "sourcesContent": ["/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n const map = Object.create(null);\r\n const list = str.split(',');\r\n for (let i = 0; i < list.length; i++) {\r\n map[list[i]] = true;\r\n }\r\n return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\r\n}\n\n/**\r\n * dev only flag -> name mapping\r\n */\r\nconst PatchFlagNames = {\r\n [1 /* TEXT */]: `TEXT`,\r\n [2 /* CLASS */]: `CLASS`,\r\n [4 /* STYLE */]: `STYLE`,\r\n [8 /* PROPS */]: `PROPS`,\r\n [16 /* FULL_PROPS */]: `FULL_PROPS`,\r\n [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\r\n [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\r\n [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\r\n [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\r\n [512 /* NEED_PATCH */]: `NEED_PATCH`,\r\n [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\r\n [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\r\n [-1 /* HOISTED */]: `HOISTED`,\r\n [-2 /* BAIL */]: `BAIL`\r\n};\n\n/**\r\n * Dev only\r\n */\r\nconst slotFlagsText = {\r\n [1 /* STABLE */]: 'STABLE',\r\n [2 /* DYNAMIC */]: 'DYNAMIC',\r\n [3 /* FORWARDED */]: 'FORWARDED'\r\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\r\n 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\r\n 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\r\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n // Split the content into individual lines but capture the newline sequence\r\n // that separated each line. This is important because the actual sequence is\r\n // needed to properly take into account the full line length for offset\r\n // comparison\r\n let lines = source.split(/(\\r?\\n)/);\r\n // Separate the lines and newline sequences into separate arrays for easier referencing\r\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\r\n lines = lines.filter((_, idx) => idx % 2 === 0);\r\n let count = 0;\r\n const res = [];\r\n for (let i = 0; i < lines.length; i++) {\r\n count +=\r\n lines[i].length +\r\n ((newlineSequences[i] && newlineSequences[i].length) || 0);\r\n if (count >= start) {\r\n for (let j = i - range; j <= i + range || end > count; j++) {\r\n if (j < 0 || j >= lines.length)\r\n continue;\r\n const line = j + 1;\r\n res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);\r\n const lineLength = lines[j].length;\r\n const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\r\n if (j === i) {\r\n // push underline\r\n const pad = start - (count - (lineLength + newLineSeqLength));\r\n const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length));\r\n }\r\n else if (j > i) {\r\n if (end > count) {\r\n const length = Math.max(Math.min(end - count, lineLength), 1);\r\n res.push(` | ` + '^'.repeat(length));\r\n }\r\n count += lineLength + newLineSeqLength;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return res.join('\\n');\r\n}\n\n/**\r\n * On the client we only need to offer special cases for boolean attributes that\r\n * have different names from their corresponding dom properties:\r\n * - itemscope -> N/A\r\n * - allowfullscreen -> allowFullscreen\r\n * - formnovalidate -> formNoValidate\r\n * - ismap -> isMap\r\n * - nomodule -> noModule\r\n * - novalidate -> noValidate\r\n * - readonly -> readOnly\r\n */\r\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\r\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\r\n `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\r\n `loop,open,required,reversed,scoped,seamless,` +\r\n `checked,muted,multiple,selected`);\r\n/**\r\n * Boolean attributes should be included if the value is truthy or ''.\r\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\r\n */\r\nfunction includeBooleanAttr(value) {\r\n return !!value || value === '';\r\n}\r\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\r\nconst attrValidationCache = {};\r\nfunction isSSRSafeAttrName(name) {\r\n if (attrValidationCache.hasOwnProperty(name)) {\r\n return attrValidationCache[name];\r\n }\r\n const isUnsafe = unsafeAttrCharRE.test(name);\r\n if (isUnsafe) {\r\n console.error(`unsafe attribute name: ${name}`);\r\n }\r\n return (attrValidationCache[name] = !isUnsafe);\r\n}\r\nconst propsToAttrMap = {\r\n acceptCharset: 'accept-charset',\r\n className: 'class',\r\n htmlFor: 'for',\r\n httpEquiv: 'http-equiv'\r\n};\r\n/**\r\n * CSS properties that accept plain numbers\r\n */\r\nconst isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +\r\n `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +\r\n `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +\r\n `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +\r\n `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +\r\n `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +\r\n // SVG\r\n `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +\r\n `stroke-miterlimit,stroke-opacity,stroke-width`);\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\r\n `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\r\n `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\r\n `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\r\n `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\r\n `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\r\n `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\r\n `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\r\n `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\r\n `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\r\n `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\r\n `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\r\n `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\r\n `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\r\n `value,width,wrap`);\r\n/**\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\r\n */\r\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\r\n `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\r\n `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\r\n `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\r\n `color-interpolation-filters,color-profile,color-rendering,` +\r\n `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\r\n `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\r\n `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\r\n `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\r\n `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\r\n `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\r\n `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\r\n `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\r\n `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\r\n `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\r\n `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\r\n `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\r\n `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\r\n `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\r\n `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\r\n `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\r\n `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\r\n `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\r\n `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\r\n `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\r\n `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\r\n `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\r\n `strikethrough-position,strikethrough-thickness,string,stroke,` +\r\n `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\r\n `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\r\n `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\r\n `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\r\n `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\r\n `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\r\n `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\r\n `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\r\n `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\r\n `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\r\n `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nfunction normalizeStyle(value) {\r\n if (isArray(value)) {\r\n const res = {};\r\n for (let i = 0; i < value.length; i++) {\r\n const item = value[i];\r\n const normalized = isString(item)\r\n ? parseStringStyle(item)\r\n : normalizeStyle(item);\r\n if (normalized) {\r\n for (const key in normalized) {\r\n res[key] = normalized[key];\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n else if (isString(value)) {\r\n return value;\r\n }\r\n else if (isObject(value)) {\r\n return value;\r\n }\r\n}\r\nconst listDelimiterRE = /;(?![^(]*\\))/g;\r\nconst propertyDelimiterRE = /:(.+)/;\r\nfunction parseStringStyle(cssText) {\r\n const ret = {};\r\n cssText.split(listDelimiterRE).forEach(item => {\r\n if (item) {\r\n const tmp = item.split(propertyDelimiterRE);\r\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\r\n }\r\n });\r\n return ret;\r\n}\r\nfunction stringifyStyle(styles) {\r\n let ret = '';\r\n if (!styles || isString(styles)) {\r\n return ret;\r\n }\r\n for (const key in styles) {\r\n const value = styles[key];\r\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\r\n if (isString(value) ||\r\n (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {\r\n // only render valid values\r\n ret += `${normalizedKey}:${value};`;\r\n }\r\n }\r\n return ret;\r\n}\r\nfunction normalizeClass(value) {\r\n let res = '';\r\n if (isString(value)) {\r\n res = value;\r\n }\r\n else if (isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n const normalized = normalizeClass(value[i]);\r\n if (normalized) {\r\n res += normalized + ' ';\r\n }\r\n }\r\n }\r\n else if (isObject(value)) {\r\n for (const name in value) {\r\n if (value[name]) {\r\n res += name + ' ';\r\n }\r\n }\r\n }\r\n return res.trim();\r\n}\r\nfunction normalizeProps(props) {\r\n if (!props)\r\n return null;\r\n let { class: klass, style } = props;\r\n if (klass && !isString(klass)) {\r\n props.class = normalizeClass(klass);\r\n }\r\n if (style) {\r\n props.style = normalizeStyle(style);\r\n }\r\n return props;\r\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\r\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\r\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\r\n 'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\r\n 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\r\n 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\r\n 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\r\n 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\r\n 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\r\n 'option,output,progress,select,textarea,details,dialog,menu,' +\r\n 'summary,template,blockquote,iframe,tfoot';\r\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\r\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\r\n 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\r\n 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\r\n 'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\r\n 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\r\n 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\r\n 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\r\n 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\r\n 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\r\n 'text,textPath,title,tspan,unknown,use,view';\r\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\r\n */\r\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\r\n */\r\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\r\n */\r\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst escapeRE = /[\"'&<>]/;\r\nfunction escapeHtml(string) {\r\n const str = '' + string;\r\n const match = escapeRE.exec(str);\r\n if (!match) {\r\n return str;\r\n }\r\n let html = '';\r\n let escaped;\r\n let index;\r\n let lastIndex = 0;\r\n for (index = match.index; index < str.length; index++) {\r\n switch (str.charCodeAt(index)) {\r\n case 34: // \"\r\n escaped = '"';\r\n break;\r\n case 38: // &\r\n escaped = '&';\r\n break;\r\n case 39: // '\r\n escaped = ''';\r\n break;\r\n case 60: // <\r\n escaped = '<';\r\n break;\r\n case 62: // >\r\n escaped = '>';\r\n break;\r\n default:\r\n continue;\r\n }\r\n if (lastIndex !== index) {\r\n html += str.slice(lastIndex, index);\r\n }\r\n lastIndex = index + 1;\r\n html += escaped;\r\n }\r\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\r\n}\r\n// https://www.w3.org/TR/html52/syntax.html#comments\r\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\r\nfunction escapeHtmlComment(src) {\r\n return src.replace(commentStripRE, '');\r\n}\n\nfunction looseCompareArrays(a, b) {\r\n if (a.length !== b.length)\r\n return false;\r\n let equal = true;\r\n for (let i = 0; equal && i < a.length; i++) {\r\n equal = looseEqual(a[i], b[i]);\r\n }\r\n return equal;\r\n}\r\nfunction looseEqual(a, b) {\r\n if (a === b)\r\n return true;\r\n let aValidType = isDate(a);\r\n let bValidType = isDate(b);\r\n if (aValidType || bValidType) {\r\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\r\n }\r\n aValidType = isArray(a);\r\n bValidType = isArray(b);\r\n if (aValidType || bValidType) {\r\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\r\n }\r\n aValidType = isObject(a);\r\n bValidType = isObject(b);\r\n if (aValidType || bValidType) {\r\n /* istanbul ignore if: this if will probably never be called */\r\n if (!aValidType || !bValidType) {\r\n return false;\r\n }\r\n const aKeysCount = Object.keys(a).length;\r\n const bKeysCount = Object.keys(b).length;\r\n if (aKeysCount !== bKeysCount) {\r\n return false;\r\n }\r\n for (const key in a) {\r\n const aHasKey = a.hasOwnProperty(key);\r\n const bHasKey = b.hasOwnProperty(key);\r\n if ((aHasKey && !bHasKey) ||\r\n (!aHasKey && bHasKey) ||\r\n !looseEqual(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return String(a) === String(b);\r\n}\r\nfunction looseIndexOf(arr, val) {\r\n return arr.findIndex(item => looseEqual(item, val));\r\n}\n\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nconst toDisplayString = (val) => {\r\n return isString(val)\r\n ? val\r\n : val == null\r\n ? ''\r\n : isArray(val) ||\r\n (isObject(val) &&\r\n (val.toString === objectToString || !isFunction(val.toString)))\r\n ? JSON.stringify(val, replacer, 2)\r\n : String(val);\r\n};\r\nconst replacer = (_key, val) => {\r\n // can't use isRef here since @vue/shared has no deps\r\n if (val && val.__v_isRef) {\r\n return replacer(_key, val.value);\r\n }\r\n else if (isMap(val)) {\r\n return {\r\n [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\r\n entries[`${key} =>`] = val;\r\n return entries;\r\n }, {})\r\n };\r\n }\r\n else if (isSet(val)) {\r\n return {\r\n [`Set(${val.size})`]: [...val.values()]\r\n };\r\n }\r\n else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\r\n return String(val);\r\n }\r\n return val;\r\n};\n\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n ? Object.freeze({})\r\n : {};\r\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst NOOP = () => { };\r\n/**\r\n * Always return false.\r\n */\r\nconst NO = () => false;\r\nconst onRE = /^on[^a-z]/;\r\nconst isOn = (key) => onRE.test(key);\r\nconst isModelListener = (key) => key.startsWith('onUpdate:');\r\nconst extend = Object.assign;\r\nconst remove = (arr, el) => {\r\n const i = arr.indexOf(el);\r\n if (i > -1) {\r\n arr.splice(i, 1);\r\n }\r\n};\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\r\nconst isArray = Array.isArray;\r\nconst isMap = (val) => toTypeString(val) === '[object Map]';\r\nconst isSet = (val) => toTypeString(val) === '[object Set]';\r\nconst isDate = (val) => val instanceof Date;\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst toRawType = (value) => {\r\n // extract \"RawType\" from strings like \"[object RawType]\"\r\n return toTypeString(value).slice(8, -1);\r\n};\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\nconst isIntegerKey = (key) => isString(key) &&\r\n key !== 'NaN' &&\r\n key[0] !== '-' &&\r\n '' + parseInt(key, 10) === key;\r\nconst isReservedProp = /*#__PURE__*/ makeMap(\r\n// the leading comma is intentional so empty string \"\" is also included\r\n',key,ref,ref_for,ref_key,' +\r\n 'onVnodeBeforeMount,onVnodeMounted,' +\r\n 'onVnodeBeforeUpdate,onVnodeUpdated,' +\r\n 'onVnodeBeforeUnmount,onVnodeUnmounted');\r\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\r\nconst cacheStringFunction = (fn) => {\r\n const cache = Object.create(null);\r\n return ((str) => {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str));\r\n });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\n/**\r\n * @private\r\n */\r\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\r\n/**\r\n * @private\r\n */\r\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\r\n/**\r\n * @private\r\n */\r\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\r\n// compare whether a value has changed, accounting for NaN.\r\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\r\nconst invokeArrayFns = (fns, arg) => {\r\n for (let i = 0; i < fns.length; i++) {\r\n fns[i](arg);\r\n }\r\n};\r\nconst def = (obj, key, value) => {\r\n Object.defineProperty(obj, key, {\r\n configurable: true,\r\n enumerable: false,\r\n value\r\n });\r\n};\r\nconst toNumber = (val) => {\r\n const n = parseFloat(val);\r\n return isNaN(n) ? val : n;\r\n};\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n return (_globalThis ||\r\n (_globalThis =\r\n typeof globalThis !== 'undefined'\r\n ? globalThis\r\n : typeof self !== 'undefined'\r\n ? self\r\n : typeof window !== 'undefined'\r\n ? window\r\n : typeof global !== 'undefined'\r\n ? global\r\n : {}));\r\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n"], - "mappings": "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", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/chunk-WT46H2UR.js b/docs/.vuepress/.cache/deps/chunk-WT46H2UR.js deleted file mode 100644 index dbd4294..0000000 --- a/docs/.vuepress/.cache/deps/chunk-WT46H2UR.js +++ /dev/null @@ -1,212 +0,0 @@ -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// node_modules/@vue/devtools-api/lib/esm/time.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -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/index.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/env.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -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 -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var HOOK_SETUP = "devtools-plugin:setup"; -var HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set"; - -// node_modules/@vue/devtools-api/lib/esm/proxy.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -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/api/index.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/api/api.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/api/app.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/api/component.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/api/context.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/api/hooks.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/api/util.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/@vue/devtools-api/lib/esm/plugin.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// 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=chunk-WT46H2UR.js.map diff --git a/docs/.vuepress/.cache/deps/chunk-WT46H2UR.js.map b/docs/.vuepress/.cache/deps/chunk-WT46H2UR.js.map deleted file mode 100644 index b9c8a90..0000000 --- a/docs/.vuepress/.cache/deps/chunk-WT46H2UR.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/@vue/devtools-api/lib/esm/time.js", "../../../../node_modules/@vue/devtools-api/lib/esm/index.js", "../../../../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/proxy.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/index.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/api.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/app.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/component.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/context.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/hooks.js", "../../../../node_modules/@vue/devtools-api/lib/esm/api/util.js", "../../../../node_modules/@vue/devtools-api/lib/esm/plugin.js"], - "sourcesContent": ["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 { getTarget, getDevtoolsGlobalHook, isProxyAvailable } from './env';\nimport { HOOK_SETUP } from './const';\nimport { ApiProxy } from './proxy';\nexport * from './api';\nexport * from './plugin';\nexport * from './time';\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", "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", "import { HOOK_PLUGIN_SETTINGS_SET } from './const';\nimport { now } from './time';\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", "export * from './api';\nexport * from './app';\nexport * from './component';\nexport * from './context';\nexport * from './hooks';\nexport * from './util';\n", "export {};\n", "export {};\n", "export {};\n", "export {};\n", "export {};\n", "export {};\n", "export {};\n"], - "mappings": "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", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/nprogress.js b/docs/.vuepress/.cache/deps/nprogress.js deleted file mode 100644 index 26cc120..0000000 --- a/docs/.vuepress/.cache/deps/nprogress.js +++ /dev/null @@ -1,295 +0,0 @@ -import { - __commonJS, - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// node_modules/nprogress/nprogress.js -var require_nprogress = __commonJS({ - "node_modules/nprogress/nprogress.js"(exports, module) { - init_define_EXTERNAL_LINK_ICON_LOCALES(); - init_define_MZ_ZOOM_OPTIONS(); - (function(root, factory) { - if (typeof define === "function" && define.amd) { - define(factory); - } else if (typeof exports === "object") { - module.exports = factory(); - } else { - root.NProgress = factory(); - } - })(exports, function() { - var NProgress = {}; - NProgress.version = "0.2.0"; - var Settings = NProgress.settings = { - minimum: 0.08, - easing: "ease", - positionUsing: "", - speed: 200, - trickle: true, - trickleRate: 0.02, - trickleSpeed: 800, - showSpinner: true, - barSelector: '[role="bar"]', - spinnerSelector: '[role="spinner"]', - parent: "body", - template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>' - }; - NProgress.configure = function(options) { - var key, value; - for (key in options) { - value = options[key]; - if (value !== void 0 && options.hasOwnProperty(key)) - Settings[key] = value; - } - return this; - }; - NProgress.status = null; - NProgress.set = function(n) { - var started = NProgress.isStarted(); - n = clamp(n, Settings.minimum, 1); - NProgress.status = n === 1 ? null : n; - var progress = NProgress.render(!started), bar = progress.querySelector(Settings.barSelector), speed = Settings.speed, ease = Settings.easing; - progress.offsetWidth; - queue(function(next) { - if (Settings.positionUsing === "") - Settings.positionUsing = NProgress.getPositioningCSS(); - css(bar, barPositionCSS(n, speed, ease)); - if (n === 1) { - css(progress, { - transition: "none", - opacity: 1 - }); - progress.offsetWidth; - setTimeout(function() { - css(progress, { - transition: "all " + speed + "ms linear", - opacity: 0 - }); - setTimeout(function() { - NProgress.remove(); - next(); - }, speed); - }, speed); - } else { - setTimeout(next, speed); - } - }); - return this; - }; - NProgress.isStarted = function() { - return typeof NProgress.status === "number"; - }; - NProgress.start = function() { - if (!NProgress.status) - NProgress.set(0); - var work = function() { - setTimeout(function() { - if (!NProgress.status) - return; - NProgress.trickle(); - work(); - }, Settings.trickleSpeed); - }; - if (Settings.trickle) - work(); - return this; - }; - NProgress.done = function(force) { - if (!force && !NProgress.status) - return this; - return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); - }; - NProgress.inc = function(amount) { - var n = NProgress.status; - if (!n) { - return NProgress.start(); - } else { - if (typeof amount !== "number") { - amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); - } - n = clamp(n + amount, 0, 0.994); - return NProgress.set(n); - } - }; - NProgress.trickle = function() { - return NProgress.inc(Math.random() * Settings.trickleRate); - }; - (function() { - var initial = 0, current = 0; - NProgress.promise = function($promise) { - if (!$promise || $promise.state() === "resolved") { - return this; - } - if (current === 0) { - NProgress.start(); - } - initial++; - current++; - $promise.always(function() { - current--; - if (current === 0) { - initial = 0; - NProgress.done(); - } else { - NProgress.set((initial - current) / initial); - } - }); - return this; - }; - })(); - NProgress.render = function(fromStart) { - if (NProgress.isRendered()) - return document.getElementById("nprogress"); - addClass(document.documentElement, "nprogress-busy"); - var progress = document.createElement("div"); - progress.id = "nprogress"; - progress.innerHTML = Settings.template; - var bar = progress.querySelector(Settings.barSelector), perc = fromStart ? "-100" : toBarPerc(NProgress.status || 0), parent = document.querySelector(Settings.parent), spinner; - css(bar, { - transition: "all 0 linear", - transform: "translate3d(" + perc + "%,0,0)" - }); - if (!Settings.showSpinner) { - spinner = progress.querySelector(Settings.spinnerSelector); - spinner && removeElement(spinner); - } - if (parent != document.body) { - addClass(parent, "nprogress-custom-parent"); - } - parent.appendChild(progress); - return progress; - }; - NProgress.remove = function() { - removeClass(document.documentElement, "nprogress-busy"); - removeClass(document.querySelector(Settings.parent), "nprogress-custom-parent"); - var progress = document.getElementById("nprogress"); - progress && removeElement(progress); - }; - NProgress.isRendered = function() { - return !!document.getElementById("nprogress"); - }; - NProgress.getPositioningCSS = function() { - var bodyStyle = document.body.style; - var vendorPrefix = "WebkitTransform" in bodyStyle ? "Webkit" : "MozTransform" in bodyStyle ? "Moz" : "msTransform" in bodyStyle ? "ms" : "OTransform" in bodyStyle ? "O" : ""; - if (vendorPrefix + "Perspective" in bodyStyle) { - return "translate3d"; - } else if (vendorPrefix + "Transform" in bodyStyle) { - return "translate"; - } else { - return "margin"; - } - }; - function clamp(n, min, max) { - if (n < min) - return min; - if (n > max) - return max; - return n; - } - function toBarPerc(n) { - return (-1 + n) * 100; - } - function barPositionCSS(n, speed, ease) { - var barCSS; - if (Settings.positionUsing === "translate3d") { - barCSS = { transform: "translate3d(" + toBarPerc(n) + "%,0,0)" }; - } else if (Settings.positionUsing === "translate") { - barCSS = { transform: "translate(" + toBarPerc(n) + "%,0)" }; - } else { - barCSS = { "margin-left": toBarPerc(n) + "%" }; - } - barCSS.transition = "all " + speed + "ms " + ease; - return barCSS; - } - var queue = function() { - var pending = []; - function next() { - var fn = pending.shift(); - if (fn) { - fn(next); - } - } - return function(fn) { - pending.push(fn); - if (pending.length == 1) - next(); - }; - }(); - var css = function() { - var cssPrefixes = ["Webkit", "O", "Moz", "ms"], cssProps = {}; - function camelCase(string) { - return string.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function(match, letter) { - return letter.toUpperCase(); - }); - } - function getVendorProp(name) { - var style = document.body.style; - if (name in style) - return name; - var i = cssPrefixes.length, capName = name.charAt(0).toUpperCase() + name.slice(1), vendorName; - while (i--) { - vendorName = cssPrefixes[i] + capName; - if (vendorName in style) - return vendorName; - } - return name; - } - function getStyleProp(name) { - name = camelCase(name); - return cssProps[name] || (cssProps[name] = getVendorProp(name)); - } - function applyCss(element, prop, value) { - prop = getStyleProp(prop); - element.style[prop] = value; - } - return function(element, properties) { - var args = arguments, prop, value; - if (args.length == 2) { - for (prop in properties) { - value = properties[prop]; - if (value !== void 0 && properties.hasOwnProperty(prop)) - applyCss(element, prop, value); - } - } else { - applyCss(element, args[1], args[2]); - } - }; - }(); - function hasClass(element, name) { - var list = typeof element == "string" ? element : classList(element); - return list.indexOf(" " + name + " ") >= 0; - } - function addClass(element, name) { - var oldList = classList(element), newList = oldList + name; - if (hasClass(oldList, name)) - return; - element.className = newList.substring(1); - } - function removeClass(element, name) { - var oldList = classList(element), newList; - if (!hasClass(element, name)) - return; - newList = oldList.replace(" " + name + " ", " "); - element.className = newList.substring(1, newList.length - 1); - } - function classList(element) { - return (" " + (element.className || "") + " ").replace(/\s+/gi, " "); - } - function removeElement(element) { - element && element.parentNode && element.parentNode.removeChild(element); - } - return NProgress; - }); - } -}); - -// dep:nprogress -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var nprogress_default = require_nprogress(); -export { - nprogress_default as default -}; -/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT */ -//# sourceMappingURL=nprogress.js.map diff --git a/docs/.vuepress/.cache/deps/nprogress.js.map b/docs/.vuepress/.cache/deps/nprogress.js.map deleted file mode 100644 index f5c2f02..0000000 --- a/docs/.vuepress/.cache/deps/nprogress.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../node_modules/nprogress/nprogress.js", "dep:nprogress"], - "sourcesContent": ["/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.NProgress = factory();\n }\n\n})(this, function() {\n var NProgress = {};\n\n NProgress.version = '0.2.0';\n\n var Settings = NProgress.settings = {\n minimum: 0.08,\n easing: 'ease',\n positionUsing: '',\n speed: 200,\n trickle: true,\n trickleRate: 0.02,\n trickleSpeed: 800,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n };\n\n /**\n * Updates configuration.\n *\n * NProgress.configure({\n * minimum: 0.1\n * });\n */\n NProgress.configure = function(options) {\n var key, value;\n for (key in options) {\n value = options[key];\n if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n }\n\n return this;\n };\n\n /**\n * Last number.\n */\n\n NProgress.status = null;\n\n /**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n *\n * NProgress.set(0.4);\n * NProgress.set(1.0);\n */\n\n NProgress.set = function(n) {\n var started = NProgress.isStarted();\n\n n = clamp(n, Settings.minimum, 1);\n NProgress.status = (n === 1 ? null : n);\n\n var progress = NProgress.render(!started),\n bar = progress.querySelector(Settings.barSelector),\n speed = Settings.speed,\n ease = Settings.easing;\n\n progress.offsetWidth; /* Repaint */\n\n queue(function(next) {\n // Set positionUsing if it hasn't already been set\n if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n // Add transition\n css(bar, barPositionCSS(n, speed, ease));\n\n if (n === 1) {\n // Fade out\n css(progress, { \n transition: 'none', \n opacity: 1 \n });\n progress.offsetWidth; /* Repaint */\n\n setTimeout(function() {\n css(progress, { \n transition: 'all ' + speed + 'ms linear', \n opacity: 0 \n });\n setTimeout(function() {\n NProgress.remove();\n next();\n }, speed);\n }, speed);\n } else {\n setTimeout(next, speed);\n }\n });\n\n return this;\n };\n\n NProgress.isStarted = function() {\n return typeof NProgress.status === 'number';\n };\n\n /**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n *\n * NProgress.start();\n *\n */\n NProgress.start = function() {\n if (!NProgress.status) NProgress.set(0);\n\n var work = function() {\n setTimeout(function() {\n if (!NProgress.status) return;\n NProgress.trickle();\n work();\n }, Settings.trickleSpeed);\n };\n\n if (Settings.trickle) work();\n\n return this;\n };\n\n /**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * NProgress.done();\n *\n * If `true` is passed, it will show the progress bar even if its hidden.\n *\n * NProgress.done(true);\n */\n\n NProgress.done = function(force) {\n if (!force && !NProgress.status) return this;\n\n return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n };\n\n /**\n * Increments by a random amount.\n */\n\n NProgress.inc = function(amount) {\n var n = NProgress.status;\n\n if (!n) {\n return NProgress.start();\n } else {\n if (typeof amount !== 'number') {\n amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n }\n\n n = clamp(n + amount, 0, 0.994);\n return NProgress.set(n);\n }\n };\n\n NProgress.trickle = function() {\n return NProgress.inc(Math.random() * Settings.trickleRate);\n };\n\n /**\n * Waits for all supplied jQuery promises and\n * increases the progress as the promises resolve.\n *\n * @param $promise jQUery Promise\n */\n (function() {\n var initial = 0, current = 0;\n\n NProgress.promise = function($promise) {\n if (!$promise || $promise.state() === \"resolved\") {\n return this;\n }\n\n if (current === 0) {\n NProgress.start();\n }\n\n initial++;\n current++;\n\n $promise.always(function() {\n current--;\n if (current === 0) {\n initial = 0;\n NProgress.done();\n } else {\n NProgress.set((initial - current) / initial);\n }\n });\n\n return this;\n };\n\n })();\n\n /**\n * (Internal) renders the progress bar markup based on the `template`\n * setting.\n */\n\n NProgress.render = function(fromStart) {\n if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n addClass(document.documentElement, 'nprogress-busy');\n \n var progress = document.createElement('div');\n progress.id = 'nprogress';\n progress.innerHTML = Settings.template;\n\n var bar = progress.querySelector(Settings.barSelector),\n perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n parent = document.querySelector(Settings.parent),\n spinner;\n \n css(bar, {\n transition: 'all 0 linear',\n transform: 'translate3d(' + perc + '%,0,0)'\n });\n\n if (!Settings.showSpinner) {\n spinner = progress.querySelector(Settings.spinnerSelector);\n spinner && removeElement(spinner);\n }\n\n if (parent != document.body) {\n addClass(parent, 'nprogress-custom-parent');\n }\n\n parent.appendChild(progress);\n return progress;\n };\n\n /**\n * Removes the element. Opposite of render().\n */\n\n NProgress.remove = function() {\n removeClass(document.documentElement, 'nprogress-busy');\n removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');\n var progress = document.getElementById('nprogress');\n progress && removeElement(progress);\n };\n\n /**\n * Checks if the progress bar is rendered.\n */\n\n NProgress.isRendered = function() {\n return !!document.getElementById('nprogress');\n };\n\n /**\n * Determine which positioning CSS rule to use.\n */\n\n NProgress.getPositioningCSS = function() {\n // Sniff on document.body.style\n var bodyStyle = document.body.style;\n\n // Sniff prefixes\n var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n ('MozTransform' in bodyStyle) ? 'Moz' :\n ('msTransform' in bodyStyle) ? 'ms' :\n ('OTransform' in bodyStyle) ? 'O' : '';\n\n if (vendorPrefix + 'Perspective' in bodyStyle) {\n // Modern browsers with 3D support, e.g. Webkit, IE10\n return 'translate3d';\n } else if (vendorPrefix + 'Transform' in bodyStyle) {\n // Browsers without 3D support, e.g. IE9\n return 'translate';\n } else {\n // Browsers without translate() support, e.g. IE7-8\n return 'margin';\n }\n };\n\n /**\n * Helpers\n */\n\n function clamp(n, min, max) {\n if (n < min) return min;\n if (n > max) return max;\n return n;\n }\n\n /**\n * (Internal) converts a percentage (`0..1`) to a bar translateX\n * percentage (`-100%..0%`).\n */\n\n function toBarPerc(n) {\n return (-1 + n) * 100;\n }\n\n\n /**\n * (Internal) returns the correct CSS for changing the bar's\n * position given an n percentage, and speed and ease from Settings\n */\n\n function barPositionCSS(n, speed, ease) {\n var barCSS;\n\n if (Settings.positionUsing === 'translate3d') {\n barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n } else if (Settings.positionUsing === 'translate') {\n barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n } else {\n barCSS = { 'margin-left': toBarPerc(n)+'%' };\n }\n\n barCSS.transition = 'all '+speed+'ms '+ease;\n\n return barCSS;\n }\n\n /**\n * (Internal) Queues a function to be executed.\n */\n\n var queue = (function() {\n var pending = [];\n \n function next() {\n var fn = pending.shift();\n if (fn) {\n fn(next);\n }\n }\n\n return function(fn) {\n pending.push(fn);\n if (pending.length == 1) next();\n };\n })();\n\n /**\n * (Internal) Applies css properties to an element, similar to the jQuery \n * css method.\n *\n * While this helper does assist with vendor prefixed property names, it \n * does not perform any manipulation of values prior to setting styles.\n */\n\n var css = (function() {\n var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n cssProps = {};\n\n function camelCase(string) {\n return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n return letter.toUpperCase();\n });\n }\n\n function getVendorProp(name) {\n var style = document.body.style;\n if (name in style) return name;\n\n var i = cssPrefixes.length,\n capName = name.charAt(0).toUpperCase() + name.slice(1),\n vendorName;\n while (i--) {\n vendorName = cssPrefixes[i] + capName;\n if (vendorName in style) return vendorName;\n }\n\n return name;\n }\n\n function getStyleProp(name) {\n name = camelCase(name);\n return cssProps[name] || (cssProps[name] = getVendorProp(name));\n }\n\n function applyCss(element, prop, value) {\n prop = getStyleProp(prop);\n element.style[prop] = value;\n }\n\n return function(element, properties) {\n var args = arguments,\n prop, \n value;\n\n if (args.length == 2) {\n for (prop in properties) {\n value = properties[prop];\n if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n }\n } else {\n applyCss(element, args[1], args[2]);\n }\n }\n })();\n\n /**\n * (Internal) Determines if an element or space separated list of class names contains a class name.\n */\n\n function hasClass(element, name) {\n var list = typeof element == 'string' ? element : classList(element);\n return list.indexOf(' ' + name + ' ') >= 0;\n }\n\n /**\n * (Internal) Adds a class to an element.\n */\n\n function addClass(element, name) {\n var oldList = classList(element),\n newList = oldList + name;\n\n if (hasClass(oldList, name)) return; \n\n // Trim the opening space.\n element.className = newList.substring(1);\n }\n\n /**\n * (Internal) Removes a class from an element.\n */\n\n function removeClass(element, name) {\n var oldList = classList(element),\n newList;\n\n if (!hasClass(element, name)) return;\n\n // Replace the class name.\n newList = oldList.replace(' ' + name + ' ', ' ');\n\n // Trim the opening and closing spaces.\n element.className = newList.substring(1, newList.length - 1);\n }\n\n /**\n * (Internal) Gets a space separated list of the class names on the element. \n * The list is wrapped with a single space on each end to facilitate finding \n * matches within the list.\n */\n\n function classList(element) {\n return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n }\n\n /**\n * (Internal) Removes an element from the DOM.\n */\n\n function removeElement(element) {\n element && element.parentNode && element.parentNode.removeChild(element);\n }\n\n return NProgress;\n});\n\n", "export default require(\"../../../../node_modules/nprogress/nprogress.js\");"], - "mappings": "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", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/package.json b/docs/.vuepress/.cache/deps/package.json deleted file mode 100644 index 7c34deb..0000000 --- a/docs/.vuepress/.cache/deps/package.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"module"} \ No newline at end of file diff --git a/docs/.vuepress/.cache/deps/vue-router.js b/docs/.vuepress/.cache/deps/vue-router.js deleted file mode 100644 index af4ecd1..0000000 --- a/docs/.vuepress/.cache/deps/vue-router.js +++ /dev/null @@ -1,2380 +0,0 @@ -import { - setupDevtoolsPlugin -} from "./chunk-WT46H2UR.js"; -import { - computed, - defineComponent, - getCurrentInstance, - h, - inject, - nextTick, - onActivated, - onDeactivated, - onUnmounted, - provide, - reactive, - ref, - shallowRef, - unref, - watch, - watchEffect -} from "./chunk-J5QUGD5J.js"; -import "./chunk-SDTWZDHJ.js"; -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// dep:vue-router -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); - -// node_modules/vue-router/dist/vue-router.esm-bundler.js -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -var hasSymbol = typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol"; -var PolySymbol = (name) => hasSymbol ? Symbol(true ? "[vue-router]: " + name : name) : (true ? "[vue-router]: " : "_vr_") + name; -var matchedRouteKey = PolySymbol(true ? "router view location matched" : "rvlm"); -var viewDepthKey = PolySymbol(true ? "router view depth" : "rvd"); -var routerKey = PolySymbol(true ? "router" : "r"); -var routeLocationKey = PolySymbol(true ? "route location" : "rl"); -var routerViewLocationKey = PolySymbol(true ? "router view location" : "rvl"); -var isBrowser = typeof window !== "undefined"; -function isESModule(obj) { - return obj.__esModule || hasSymbol && obj[Symbol.toStringTag] === "Module"; -} -var assign = Object.assign; -function applyToParams(fn, params) { - const newParams = {}; - for (const key in params) { - const value = params[key]; - newParams[key] = Array.isArray(value) ? value.map(fn) : fn(value); - } - return newParams; -} -var noop = () => { -}; -function warn(msg) { - const args = Array.from(arguments).slice(1); - console.warn.apply(console, ["[Vue Router warn]: " + msg].concat(args)); -} -var TRAILING_SLASH_RE = /\/$/; -var removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, ""); -function parseURL(parseQuery2, location2, currentLocation = "/") { - let path, query = {}, searchString = "", hash = ""; - const searchPos = location2.indexOf("?"); - const hashPos = location2.indexOf("#", searchPos > -1 ? searchPos : 0); - if (searchPos > -1) { - path = location2.slice(0, searchPos); - searchString = location2.slice(searchPos + 1, hashPos > -1 ? hashPos : location2.length); - query = parseQuery2(searchString); - } - if (hashPos > -1) { - path = path || location2.slice(0, hashPos); - hash = location2.slice(hashPos, location2.length); - } - path = resolveRelativePath(path != null ? path : location2, currentLocation); - return { - fullPath: path + (searchString && "?") + searchString + hash, - path, - query, - hash - }; -} -function stringifyURL(stringifyQuery2, location2) { - const query = location2.query ? stringifyQuery2(location2.query) : ""; - return location2.path + (query && "?") + query + (location2.hash || ""); -} -function stripBase(pathname, base) { - if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase())) - return pathname; - return pathname.slice(base.length) || "/"; -} -function isSameRouteLocation(stringifyQuery2, a, b) { - const aLastIndex = a.matched.length - 1; - const bLastIndex = b.matched.length - 1; - return aLastIndex > -1 && aLastIndex === bLastIndex && isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) && isSameRouteLocationParams(a.params, b.params) && stringifyQuery2(a.query) === stringifyQuery2(b.query) && a.hash === b.hash; -} -function isSameRouteRecord(a, b) { - return (a.aliasOf || a) === (b.aliasOf || b); -} -function isSameRouteLocationParams(a, b) { - if (Object.keys(a).length !== Object.keys(b).length) - return false; - for (const key in a) { - if (!isSameRouteLocationParamsValue(a[key], b[key])) - return false; - } - return true; -} -function isSameRouteLocationParamsValue(a, b) { - return Array.isArray(a) ? isEquivalentArray(a, b) : Array.isArray(b) ? isEquivalentArray(b, a) : a === b; -} -function isEquivalentArray(a, b) { - return Array.isArray(b) ? a.length === b.length && a.every((value, i) => value === b[i]) : a.length === 1 && a[0] === b; -} -function resolveRelativePath(to, from) { - if (to.startsWith("/")) - return to; - if (!from.startsWith("/")) { - warn(`Cannot resolve a relative location without an absolute path. Trying to resolve "${to}" from "${from}". It should look like "/${from}".`); - return to; - } - if (!to) - return from; - const fromSegments = from.split("/"); - const toSegments = to.split("/"); - let position = fromSegments.length - 1; - let toPosition; - let segment; - for (toPosition = 0; toPosition < toSegments.length; toPosition++) { - segment = toSegments[toPosition]; - if (position === 1 || segment === ".") - continue; - if (segment === "..") - position--; - else - break; - } - return fromSegments.slice(0, position).join("/") + "/" + toSegments.slice(toPosition - (toPosition === toSegments.length ? 1 : 0)).join("/"); -} -var NavigationType; -(function(NavigationType2) { - NavigationType2["pop"] = "pop"; - NavigationType2["push"] = "push"; -})(NavigationType || (NavigationType = {})); -var NavigationDirection; -(function(NavigationDirection2) { - NavigationDirection2["back"] = "back"; - NavigationDirection2["forward"] = "forward"; - NavigationDirection2["unknown"] = ""; -})(NavigationDirection || (NavigationDirection = {})); -var START = ""; -function normalizeBase(base) { - if (!base) { - if (isBrowser) { - const baseEl = document.querySelector("base"); - base = baseEl && baseEl.getAttribute("href") || "/"; - base = base.replace(/^\w+:\/\/[^\/]+/, ""); - } else { - base = "/"; - } - } - if (base[0] !== "/" && base[0] !== "#") - base = "/" + base; - return removeTrailingSlash(base); -} -var BEFORE_HASH_RE = /^[^#]+#/; -function createHref(base, location2) { - return base.replace(BEFORE_HASH_RE, "#") + location2; -} -function getElementPosition(el, offset) { - const docRect = document.documentElement.getBoundingClientRect(); - const elRect = el.getBoundingClientRect(); - return { - behavior: offset.behavior, - left: elRect.left - docRect.left - (offset.left || 0), - top: elRect.top - docRect.top - (offset.top || 0) - }; -} -var computeScrollPosition = () => ({ - left: window.pageXOffset, - top: window.pageYOffset -}); -function scrollToPosition(position) { - let scrollToOptions; - if ("el" in position) { - const positionEl = position.el; - const isIdSelector = typeof positionEl === "string" && positionEl.startsWith("#"); - if (typeof position.el === "string") { - if (!isIdSelector || !document.getElementById(position.el.slice(1))) { - try { - const foundEl = document.querySelector(position.el); - if (isIdSelector && foundEl) { - warn(`The selector "${position.el}" should be passed as "el: document.querySelector('${position.el}')" because it starts with "#".`); - return; - } - } catch (err) { - warn(`The selector "${position.el}" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`); - return; - } - } - } - const el = typeof positionEl === "string" ? isIdSelector ? document.getElementById(positionEl.slice(1)) : document.querySelector(positionEl) : positionEl; - if (!el) { - warn(`Couldn't find element using selector "${position.el}" returned by scrollBehavior.`); - return; - } - scrollToOptions = getElementPosition(el, position); - } else { - scrollToOptions = position; - } - if ("scrollBehavior" in document.documentElement.style) - window.scrollTo(scrollToOptions); - else { - window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.pageXOffset, scrollToOptions.top != null ? scrollToOptions.top : window.pageYOffset); - } -} -function getScrollKey(path, delta) { - const position = history.state ? history.state.position - delta : -1; - return position + path; -} -var scrollPositions = /* @__PURE__ */ new Map(); -function saveScrollPosition(key, scrollPosition) { - scrollPositions.set(key, scrollPosition); -} -function getSavedScrollPosition(key) { - const scroll = scrollPositions.get(key); - scrollPositions.delete(key); - return scroll; -} -var createBaseLocation = () => location.protocol + "//" + location.host; -function createCurrentLocation(base, location2) { - const { pathname, search, hash } = location2; - const hashPos = base.indexOf("#"); - if (hashPos > -1) { - let slicePos = hash.includes(base.slice(hashPos)) ? base.slice(hashPos).length : 1; - let pathFromHash = hash.slice(slicePos); - if (pathFromHash[0] !== "/") - pathFromHash = "/" + pathFromHash; - return stripBase(pathFromHash, ""); - } - const path = stripBase(pathname, base); - return path + search + hash; -} -function useHistoryListeners(base, historyState, currentLocation, replace) { - let listeners = []; - let teardowns = []; - let pauseState = null; - const popStateHandler = ({ state }) => { - const to = createCurrentLocation(base, location); - const from = currentLocation.value; - const fromState = historyState.value; - let delta = 0; - if (state) { - currentLocation.value = to; - historyState.value = state; - if (pauseState && pauseState === from) { - pauseState = null; - return; - } - delta = fromState ? state.position - fromState.position : 0; - } else { - replace(to); - } - listeners.forEach((listener) => { - listener(currentLocation.value, from, { - delta, - type: NavigationType.pop, - direction: delta ? delta > 0 ? NavigationDirection.forward : NavigationDirection.back : NavigationDirection.unknown - }); - }); - }; - function pauseListeners() { - pauseState = currentLocation.value; - } - function listen(callback) { - listeners.push(callback); - const teardown = () => { - const index = listeners.indexOf(callback); - if (index > -1) - listeners.splice(index, 1); - }; - teardowns.push(teardown); - return teardown; - } - function beforeUnloadListener() { - const { history: history2 } = window; - if (!history2.state) - return; - history2.replaceState(assign({}, history2.state, { scroll: computeScrollPosition() }), ""); - } - function destroy() { - for (const teardown of teardowns) - teardown(); - teardowns = []; - window.removeEventListener("popstate", popStateHandler); - window.removeEventListener("beforeunload", beforeUnloadListener); - } - window.addEventListener("popstate", popStateHandler); - window.addEventListener("beforeunload", beforeUnloadListener); - return { - pauseListeners, - listen, - destroy - }; -} -function buildState(back, current, forward, replaced = false, computeScroll = false) { - return { - back, - current, - forward, - replaced, - position: window.history.length, - scroll: computeScroll ? computeScrollPosition() : null - }; -} -function useHistoryStateNavigation(base) { - const { history: history2, location: location2 } = window; - const currentLocation = { - value: createCurrentLocation(base, location2) - }; - const historyState = { value: history2.state }; - if (!historyState.value) { - changeLocation(currentLocation.value, { - back: null, - current: currentLocation.value, - forward: null, - position: history2.length - 1, - replaced: true, - scroll: null - }, true); - } - function changeLocation(to, state, replace2) { - const hashIndex = base.indexOf("#"); - const url = hashIndex > -1 ? (location2.host && document.querySelector("base") ? base : base.slice(hashIndex)) + to : createBaseLocation() + base + to; - try { - history2[replace2 ? "replaceState" : "pushState"](state, "", url); - historyState.value = state; - } catch (err) { - if (true) { - warn("Error with push/replace State", err); - } else { - console.error(err); - } - location2[replace2 ? "replace" : "assign"](url); - } - } - function replace(to, data) { - const state = assign({}, history2.state, buildState(historyState.value.back, to, historyState.value.forward, true), data, { position: historyState.value.position }); - changeLocation(to, state, true); - currentLocation.value = to; - } - function push(to, data) { - const currentState = assign({}, historyState.value, history2.state, { - forward: to, - scroll: computeScrollPosition() - }); - if (!history2.state) { - warn(`history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState: - -history.replaceState(history.state, '', url) - -You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`); - } - changeLocation(currentState.current, currentState, true); - const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data); - changeLocation(to, state, false); - currentLocation.value = to; - } - return { - location: currentLocation, - state: historyState, - push, - replace - }; -} -function createWebHistory(base) { - base = normalizeBase(base); - const historyNavigation = useHistoryStateNavigation(base); - const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace); - function go(delta, triggerListeners = true) { - if (!triggerListeners) - historyListeners.pauseListeners(); - history.go(delta); - } - const routerHistory = assign({ - location: "", - base, - go, - createHref: createHref.bind(null, base) - }, historyNavigation, historyListeners); - Object.defineProperty(routerHistory, "location", { - enumerable: true, - get: () => historyNavigation.location.value - }); - Object.defineProperty(routerHistory, "state", { - enumerable: true, - get: () => historyNavigation.state.value - }); - return routerHistory; -} -function createMemoryHistory(base = "") { - let listeners = []; - let queue = [START]; - let position = 0; - base = normalizeBase(base); - function setLocation(location2) { - position++; - if (position === queue.length) { - queue.push(location2); - } else { - queue.splice(position); - queue.push(location2); - } - } - function triggerListeners(to, from, { direction, delta }) { - const info = { - direction, - delta, - type: NavigationType.pop - }; - for (const callback of listeners) { - callback(to, from, info); - } - } - const routerHistory = { - location: START, - state: {}, - base, - createHref: createHref.bind(null, base), - replace(to) { - queue.splice(position--, 1); - setLocation(to); - }, - push(to, data) { - setLocation(to); - }, - listen(callback) { - listeners.push(callback); - return () => { - const index = listeners.indexOf(callback); - if (index > -1) - listeners.splice(index, 1); - }; - }, - destroy() { - listeners = []; - queue = [START]; - position = 0; - }, - go(delta, shouldTrigger = true) { - const from = this.location; - const direction = delta < 0 ? NavigationDirection.back : NavigationDirection.forward; - position = Math.max(0, Math.min(position + delta, queue.length - 1)); - if (shouldTrigger) { - triggerListeners(this.location, from, { - direction, - delta - }); - } - } - }; - Object.defineProperty(routerHistory, "location", { - enumerable: true, - get: () => queue[position] - }); - return routerHistory; -} -function createWebHashHistory(base) { - base = location.host ? base || location.pathname + location.search : ""; - if (!base.includes("#")) - base += "#"; - if (!base.endsWith("#/") && !base.endsWith("#")) { - warn(`A hash base must end with a "#": -"${base}" should be "${base.replace(/#.*$/, "#")}".`); - } - return createWebHistory(base); -} -function isRouteLocation(route) { - return typeof route === "string" || route && typeof route === "object"; -} -function isRouteName(name) { - return typeof name === "string" || typeof name === "symbol"; -} -var START_LOCATION_NORMALIZED = { - path: "/", - name: void 0, - params: {}, - query: {}, - hash: "", - fullPath: "/", - matched: [], - meta: {}, - redirectedFrom: void 0 -}; -var NavigationFailureSymbol = PolySymbol(true ? "navigation failure" : "nf"); -var NavigationFailureType; -(function(NavigationFailureType2) { - NavigationFailureType2[NavigationFailureType2["aborted"] = 4] = "aborted"; - NavigationFailureType2[NavigationFailureType2["cancelled"] = 8] = "cancelled"; - NavigationFailureType2[NavigationFailureType2["duplicated"] = 16] = "duplicated"; -})(NavigationFailureType || (NavigationFailureType = {})); -var ErrorTypeMessages = { - [1]({ location: location2, currentLocation }) { - return `No match for - ${JSON.stringify(location2)}${currentLocation ? "\nwhile being at\n" + JSON.stringify(currentLocation) : ""}`; - }, - [2]({ from, to }) { - return `Redirected from "${from.fullPath}" to "${stringifyRoute(to)}" via a navigation guard.`; - }, - [4]({ from, to }) { - return `Navigation aborted from "${from.fullPath}" to "${to.fullPath}" via a navigation guard.`; - }, - [8]({ from, to }) { - return `Navigation cancelled from "${from.fullPath}" to "${to.fullPath}" with a new navigation.`; - }, - [16]({ from, to }) { - return `Avoided redundant navigation to current location: "${from.fullPath}".`; - } -}; -function createRouterError(type, params) { - if (true) { - return assign(new Error(ErrorTypeMessages[type](params)), { - type, - [NavigationFailureSymbol]: true - }, params); - } else { - return assign(new Error(), { - type, - [NavigationFailureSymbol]: true - }, params); - } -} -function isNavigationFailure(error, type) { - return error instanceof Error && NavigationFailureSymbol in error && (type == null || !!(error.type & type)); -} -var propertiesToLog = ["params", "query", "hash"]; -function stringifyRoute(to) { - if (typeof to === "string") - return to; - if ("path" in to) - return to.path; - const location2 = {}; - for (const key of propertiesToLog) { - if (key in to) - location2[key] = to[key]; - } - return JSON.stringify(location2, null, 2); -} -var BASE_PARAM_PATTERN = "[^/]+?"; -var BASE_PATH_PARSER_OPTIONS = { - sensitive: false, - strict: false, - start: true, - end: true -}; -var REGEX_CHARS_RE = /[.+*?^${}()[\]/\\]/g; -function tokensToParser(segments, extraOptions) { - const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions); - const score = []; - let pattern = options.start ? "^" : ""; - const keys = []; - for (const segment of segments) { - const segmentScores = segment.length ? [] : [90]; - if (options.strict && !segment.length) - pattern += "/"; - for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) { - const token = segment[tokenIndex]; - let subSegmentScore = 40 + (options.sensitive ? 0.25 : 0); - if (token.type === 0) { - if (!tokenIndex) - pattern += "/"; - pattern += token.value.replace(REGEX_CHARS_RE, "\\$&"); - subSegmentScore += 40; - } else if (token.type === 1) { - const { value, repeatable, optional, regexp } = token; - keys.push({ - name: value, - repeatable, - optional - }); - const re2 = regexp ? regexp : BASE_PARAM_PATTERN; - if (re2 !== BASE_PARAM_PATTERN) { - subSegmentScore += 10; - try { - new RegExp(`(${re2})`); - } catch (err) { - throw new Error(`Invalid custom RegExp for param "${value}" (${re2}): ` + err.message); - } - } - let subPattern = repeatable ? `((?:${re2})(?:/(?:${re2}))*)` : `(${re2})`; - if (!tokenIndex) - subPattern = optional && segment.length < 2 ? `(?:/${subPattern})` : "/" + subPattern; - if (optional) - subPattern += "?"; - pattern += subPattern; - subSegmentScore += 20; - if (optional) - subSegmentScore += -8; - if (repeatable) - subSegmentScore += -20; - if (re2 === ".*") - subSegmentScore += -50; - } - segmentScores.push(subSegmentScore); - } - score.push(segmentScores); - } - if (options.strict && options.end) { - const i = score.length - 1; - score[i][score[i].length - 1] += 0.7000000000000001; - } - if (!options.strict) - pattern += "/?"; - if (options.end) - pattern += "$"; - else if (options.strict) - pattern += "(?:/|$)"; - const re = new RegExp(pattern, options.sensitive ? "" : "i"); - function parse(path) { - const match = path.match(re); - const params = {}; - if (!match) - return null; - for (let i = 1; i < match.length; i++) { - const value = match[i] || ""; - const key = keys[i - 1]; - params[key.name] = value && key.repeatable ? value.split("/") : value; - } - return params; - } - function stringify(params) { - let path = ""; - let avoidDuplicatedSlash = false; - for (const segment of segments) { - if (!avoidDuplicatedSlash || !path.endsWith("/")) - path += "/"; - avoidDuplicatedSlash = false; - for (const token of segment) { - if (token.type === 0) { - path += token.value; - } else if (token.type === 1) { - const { value, repeatable, optional } = token; - const param = value in params ? params[value] : ""; - if (Array.isArray(param) && !repeatable) - throw new Error(`Provided param "${value}" is an array but it is not repeatable (* or + modifiers)`); - const text = Array.isArray(param) ? param.join("/") : param; - if (!text) { - if (optional) { - if (segment.length < 2) { - if (path.endsWith("/")) - path = path.slice(0, -1); - else - avoidDuplicatedSlash = true; - } - } else - throw new Error(`Missing required param "${value}"`); - } - path += text; - } - } - } - return path; - } - return { - re, - score, - keys, - parse, - stringify - }; -} -function compareScoreArray(a, b) { - let i = 0; - while (i < a.length && i < b.length) { - const diff = b[i] - a[i]; - if (diff) - return diff; - i++; - } - if (a.length < b.length) { - return a.length === 1 && a[0] === 40 + 40 ? -1 : 1; - } else if (a.length > b.length) { - return b.length === 1 && b[0] === 40 + 40 ? 1 : -1; - } - return 0; -} -function comparePathParserScore(a, b) { - let i = 0; - const aScore = a.score; - const bScore = b.score; - while (i < aScore.length && i < bScore.length) { - const comp = compareScoreArray(aScore[i], bScore[i]); - if (comp) - return comp; - i++; - } - return bScore.length - aScore.length; -} -var ROOT_TOKEN = { - type: 0, - value: "" -}; -var VALID_PARAM_RE = /[a-zA-Z0-9_]/; -function tokenizePath(path) { - if (!path) - return [[]]; - if (path === "/") - return [[ROOT_TOKEN]]; - if (!path.startsWith("/")) { - throw new Error(true ? `Route paths should start with a "/": "${path}" should be "/${path}".` : `Invalid path "${path}"`); - } - function crash(message) { - throw new Error(`ERR (${state})/"${buffer}": ${message}`); - } - let state = 0; - let previousState = state; - const tokens = []; - let segment; - function finalizeSegment() { - if (segment) - tokens.push(segment); - segment = []; - } - let i = 0; - let char; - let buffer = ""; - let customRe = ""; - function consumeBuffer() { - if (!buffer) - return; - if (state === 0) { - segment.push({ - type: 0, - value: buffer - }); - } else if (state === 1 || state === 2 || state === 3) { - if (segment.length > 1 && (char === "*" || char === "+")) - crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`); - segment.push({ - type: 1, - value: buffer, - regexp: customRe, - repeatable: char === "*" || char === "+", - optional: char === "*" || char === "?" - }); - } else { - crash("Invalid state to consume buffer"); - } - buffer = ""; - } - function addCharToBuffer() { - buffer += char; - } - while (i < path.length) { - char = path[i++]; - if (char === "\\" && state !== 2) { - previousState = state; - state = 4; - continue; - } - switch (state) { - case 0: - if (char === "/") { - if (buffer) { - consumeBuffer(); - } - finalizeSegment(); - } else if (char === ":") { - consumeBuffer(); - state = 1; - } else { - addCharToBuffer(); - } - break; - case 4: - addCharToBuffer(); - state = previousState; - break; - case 1: - if (char === "(") { - state = 2; - } else if (VALID_PARAM_RE.test(char)) { - addCharToBuffer(); - } else { - consumeBuffer(); - state = 0; - if (char !== "*" && char !== "?" && char !== "+") - i--; - } - break; - case 2: - if (char === ")") { - if (customRe[customRe.length - 1] == "\\") - customRe = customRe.slice(0, -1) + char; - else - state = 3; - } else { - customRe += char; - } - break; - case 3: - consumeBuffer(); - state = 0; - if (char !== "*" && char !== "?" && char !== "+") - i--; - customRe = ""; - break; - default: - crash("Unknown state"); - break; - } - } - if (state === 2) - crash(`Unfinished custom RegExp for param "${buffer}"`); - consumeBuffer(); - finalizeSegment(); - return tokens; -} -function createRouteRecordMatcher(record, parent, options) { - const parser = tokensToParser(tokenizePath(record.path), options); - if (true) { - const existingKeys = /* @__PURE__ */ new Set(); - for (const key of parser.keys) { - if (existingKeys.has(key.name)) - warn(`Found duplicated params with name "${key.name}" for path "${record.path}". Only the last one will be available on "$route.params".`); - existingKeys.add(key.name); - } - } - const matcher = assign(parser, { - record, - parent, - children: [], - alias: [] - }); - if (parent) { - if (!matcher.record.aliasOf === !parent.record.aliasOf) - parent.children.push(matcher); - } - return matcher; -} -function createRouterMatcher(routes, globalOptions) { - const matchers = []; - const matcherMap = /* @__PURE__ */ new Map(); - globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions); - function getRecordMatcher(name) { - return matcherMap.get(name); - } - function addRoute(record, parent, originalRecord) { - const isRootAdd = !originalRecord; - const mainNormalizedRecord = normalizeRouteRecord(record); - mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record; - const options = mergeOptions(globalOptions, record); - const normalizedRecords = [ - mainNormalizedRecord - ]; - if ("alias" in record) { - const aliases = typeof record.alias === "string" ? [record.alias] : record.alias; - for (const alias of aliases) { - normalizedRecords.push(assign({}, mainNormalizedRecord, { - components: originalRecord ? originalRecord.record.components : mainNormalizedRecord.components, - path: alias, - aliasOf: originalRecord ? originalRecord.record : mainNormalizedRecord - })); - } - } - let matcher; - let originalMatcher; - for (const normalizedRecord of normalizedRecords) { - const { path } = normalizedRecord; - if (parent && path[0] !== "/") { - const parentPath = parent.record.path; - const connectingSlash = parentPath[parentPath.length - 1] === "/" ? "" : "/"; - normalizedRecord.path = parent.record.path + (path && connectingSlash + path); - } - if (normalizedRecord.path === "*") { - throw new Error('Catch all routes ("*") must now be defined using a param with a custom regexp.\nSee more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.'); - } - matcher = createRouteRecordMatcher(normalizedRecord, parent, options); - if (parent && path[0] === "/") - checkMissingParamsInAbsolutePath(matcher, parent); - if (originalRecord) { - originalRecord.alias.push(matcher); - if (true) { - checkSameParams(originalRecord, matcher); - } - } else { - originalMatcher = originalMatcher || matcher; - if (originalMatcher !== matcher) - originalMatcher.alias.push(matcher); - if (isRootAdd && record.name && !isAliasRecord(matcher)) - removeRoute(record.name); - } - if ("children" in mainNormalizedRecord) { - const children = mainNormalizedRecord.children; - for (let i = 0; i < children.length; i++) { - addRoute(children[i], matcher, originalRecord && originalRecord.children[i]); - } - } - originalRecord = originalRecord || matcher; - insertMatcher(matcher); - } - return originalMatcher ? () => { - removeRoute(originalMatcher); - } : noop; - } - function removeRoute(matcherRef) { - if (isRouteName(matcherRef)) { - const matcher = matcherMap.get(matcherRef); - if (matcher) { - matcherMap.delete(matcherRef); - matchers.splice(matchers.indexOf(matcher), 1); - matcher.children.forEach(removeRoute); - matcher.alias.forEach(removeRoute); - } - } else { - const index = matchers.indexOf(matcherRef); - if (index > -1) { - matchers.splice(index, 1); - if (matcherRef.record.name) - matcherMap.delete(matcherRef.record.name); - matcherRef.children.forEach(removeRoute); - matcherRef.alias.forEach(removeRoute); - } - } - } - function getRoutes() { - return matchers; - } - function insertMatcher(matcher) { - let i = 0; - while (i < matchers.length && comparePathParserScore(matcher, matchers[i]) >= 0 && (matcher.record.path !== matchers[i].record.path || !isRecordChildOf(matcher, matchers[i]))) - i++; - matchers.splice(i, 0, matcher); - if (matcher.record.name && !isAliasRecord(matcher)) - matcherMap.set(matcher.record.name, matcher); - } - function resolve(location2, currentLocation) { - let matcher; - let params = {}; - let path; - let name; - if ("name" in location2 && location2.name) { - matcher = matcherMap.get(location2.name); - if (!matcher) - throw createRouterError(1, { - location: location2 - }); - name = matcher.record.name; - params = assign(paramsFromLocation(currentLocation.params, matcher.keys.filter((k) => !k.optional).map((k) => k.name)), location2.params); - path = matcher.stringify(params); - } else if ("path" in location2) { - path = location2.path; - if (!path.startsWith("/")) { - warn(`The Matcher cannot resolve relative paths but received "${path}". Unless you directly called \`matcher.resolve("${path}")\`, this is probably a bug in vue-router. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/router.`); - } - matcher = matchers.find((m) => m.re.test(path)); - if (matcher) { - params = matcher.parse(path); - name = matcher.record.name; - } - } else { - matcher = currentLocation.name ? matcherMap.get(currentLocation.name) : matchers.find((m) => m.re.test(currentLocation.path)); - if (!matcher) - throw createRouterError(1, { - location: location2, - currentLocation - }); - name = matcher.record.name; - params = assign({}, currentLocation.params, location2.params); - path = matcher.stringify(params); - } - const matched = []; - let parentMatcher = matcher; - while (parentMatcher) { - matched.unshift(parentMatcher.record); - parentMatcher = parentMatcher.parent; - } - return { - name, - path, - params, - matched, - meta: mergeMetaFields(matched) - }; - } - routes.forEach((route) => addRoute(route)); - return { addRoute, resolve, removeRoute, getRoutes, getRecordMatcher }; -} -function paramsFromLocation(params, keys) { - const newParams = {}; - for (const key of keys) { - if (key in params) - newParams[key] = params[key]; - } - return newParams; -} -function normalizeRouteRecord(record) { - return { - path: record.path, - redirect: record.redirect, - name: record.name, - meta: record.meta || {}, - aliasOf: void 0, - beforeEnter: record.beforeEnter, - props: normalizeRecordProps(record), - children: record.children || [], - instances: {}, - leaveGuards: /* @__PURE__ */ new Set(), - updateGuards: /* @__PURE__ */ new Set(), - enterCallbacks: {}, - components: "components" in record ? record.components || {} : { default: record.component } - }; -} -function normalizeRecordProps(record) { - const propsObject = {}; - const props = record.props || false; - if ("component" in record) { - propsObject.default = props; - } else { - for (const name in record.components) - propsObject[name] = typeof props === "boolean" ? props : props[name]; - } - return propsObject; -} -function isAliasRecord(record) { - while (record) { - if (record.record.aliasOf) - return true; - record = record.parent; - } - return false; -} -function mergeMetaFields(matched) { - return matched.reduce((meta, record) => assign(meta, record.meta), {}); -} -function mergeOptions(defaults, partialOptions) { - const options = {}; - for (const key in defaults) { - options[key] = key in partialOptions ? partialOptions[key] : defaults[key]; - } - return options; -} -function isSameParam(a, b) { - return a.name === b.name && a.optional === b.optional && a.repeatable === b.repeatable; -} -function checkSameParams(a, b) { - for (const key of a.keys) { - if (!key.optional && !b.keys.find(isSameParam.bind(null, key))) - return warn(`Alias "${b.record.path}" and the original record: "${a.record.path}" should have the exact same param named "${key.name}"`); - } - for (const key of b.keys) { - if (!key.optional && !a.keys.find(isSameParam.bind(null, key))) - return warn(`Alias "${b.record.path}" and the original record: "${a.record.path}" should have the exact same param named "${key.name}"`); - } -} -function checkMissingParamsInAbsolutePath(record, parent) { - for (const key of parent.keys) { - if (!record.keys.find(isSameParam.bind(null, key))) - return warn(`Absolute path "${record.record.path}" should have the exact same param named "${key.name}" as its parent "${parent.record.path}".`); - } -} -function isRecordChildOf(record, parent) { - return parent.children.some((child) => child === record || isRecordChildOf(record, child)); -} -var HASH_RE = /#/g; -var AMPERSAND_RE = /&/g; -var SLASH_RE = /\//g; -var EQUAL_RE = /=/g; -var IM_RE = /\?/g; -var PLUS_RE = /\+/g; -var ENC_BRACKET_OPEN_RE = /%5B/g; -var ENC_BRACKET_CLOSE_RE = /%5D/g; -var ENC_CARET_RE = /%5E/g; -var ENC_BACKTICK_RE = /%60/g; -var ENC_CURLY_OPEN_RE = /%7B/g; -var ENC_PIPE_RE = /%7C/g; -var ENC_CURLY_CLOSE_RE = /%7D/g; -var ENC_SPACE_RE = /%20/g; -function commonEncode(text) { - return encodeURI("" + text).replace(ENC_PIPE_RE, "|").replace(ENC_BRACKET_OPEN_RE, "[").replace(ENC_BRACKET_CLOSE_RE, "]"); -} -function encodeHash(text) { - return commonEncode(text).replace(ENC_CURLY_OPEN_RE, "{").replace(ENC_CURLY_CLOSE_RE, "}").replace(ENC_CARET_RE, "^"); -} -function encodeQueryValue(text) { - return commonEncode(text).replace(PLUS_RE, "%2B").replace(ENC_SPACE_RE, "+").replace(HASH_RE, "%23").replace(AMPERSAND_RE, "%26").replace(ENC_BACKTICK_RE, "`").replace(ENC_CURLY_OPEN_RE, "{").replace(ENC_CURLY_CLOSE_RE, "}").replace(ENC_CARET_RE, "^"); -} -function encodeQueryKey(text) { - return encodeQueryValue(text).replace(EQUAL_RE, "%3D"); -} -function encodePath(text) { - return commonEncode(text).replace(HASH_RE, "%23").replace(IM_RE, "%3F"); -} -function encodeParam(text) { - return text == null ? "" : encodePath(text).replace(SLASH_RE, "%2F"); -} -function decode(text) { - try { - return decodeURIComponent("" + text); - } catch (err) { - warn(`Error decoding "${text}". Using original value`); - } - return "" + text; -} -function parseQuery(search) { - const query = {}; - if (search === "" || search === "?") - return query; - const hasLeadingIM = search[0] === "?"; - const searchParams = (hasLeadingIM ? search.slice(1) : search).split("&"); - for (let i = 0; i < searchParams.length; ++i) { - const searchParam = searchParams[i].replace(PLUS_RE, " "); - const eqPos = searchParam.indexOf("="); - const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos)); - const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1)); - if (key in query) { - let currentValue = query[key]; - if (!Array.isArray(currentValue)) { - currentValue = query[key] = [currentValue]; - } - currentValue.push(value); - } else { - query[key] = value; - } - } - return query; -} -function stringifyQuery(query) { - let search = ""; - for (let key in query) { - const value = query[key]; - key = encodeQueryKey(key); - if (value == null) { - if (value !== void 0) { - search += (search.length ? "&" : "") + key; - } - continue; - } - const values = Array.isArray(value) ? value.map((v) => v && encodeQueryValue(v)) : [value && encodeQueryValue(value)]; - values.forEach((value2) => { - if (value2 !== void 0) { - search += (search.length ? "&" : "") + key; - if (value2 != null) - search += "=" + value2; - } - }); - } - return search; -} -function normalizeQuery(query) { - const normalizedQuery = {}; - for (const key in query) { - const value = query[key]; - if (value !== void 0) { - normalizedQuery[key] = Array.isArray(value) ? value.map((v) => v == null ? null : "" + v) : value == null ? value : "" + value; - } - } - return normalizedQuery; -} -function useCallbacks() { - let handlers = []; - function add(handler) { - handlers.push(handler); - return () => { - const i = handlers.indexOf(handler); - if (i > -1) - handlers.splice(i, 1); - }; - } - function reset() { - handlers = []; - } - return { - add, - list: () => handlers, - reset - }; -} -function registerGuard(record, name, guard) { - const removeFromList = () => { - record[name].delete(guard); - }; - onUnmounted(removeFromList); - onDeactivated(removeFromList); - onActivated(() => { - record[name].add(guard); - }); - record[name].add(guard); -} -function onBeforeRouteLeave(leaveGuard) { - if (!getCurrentInstance()) { - warn("getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function"); - return; - } - const activeRecord = inject(matchedRouteKey, {}).value; - if (!activeRecord) { - warn("No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside of a component child of <router-view>. Maybe you called it inside of App.vue?"); - return; - } - registerGuard(activeRecord, "leaveGuards", leaveGuard); -} -function onBeforeRouteUpdate(updateGuard) { - if (!getCurrentInstance()) { - warn("getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function"); - return; - } - const activeRecord = inject(matchedRouteKey, {}).value; - if (!activeRecord) { - warn("No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside of a component child of <router-view>. Maybe you called it inside of App.vue?"); - return; - } - registerGuard(activeRecord, "updateGuards", updateGuard); -} -function guardToPromiseFn(guard, to, from, record, name) { - const enterCallbackArray = record && (record.enterCallbacks[name] = record.enterCallbacks[name] || []); - return () => new Promise((resolve, reject) => { - const next = (valid) => { - if (valid === false) - reject(createRouterError(4, { - from, - to - })); - else if (valid instanceof Error) { - reject(valid); - } else if (isRouteLocation(valid)) { - reject(createRouterError(2, { - from: to, - to: valid - })); - } else { - if (enterCallbackArray && record.enterCallbacks[name] === enterCallbackArray && typeof valid === "function") - enterCallbackArray.push(valid); - resolve(); - } - }; - const guardReturn = guard.call(record && record.instances[name], to, from, true ? canOnlyBeCalledOnce(next, to, from) : next); - let guardCall = Promise.resolve(guardReturn); - if (guard.length < 3) - guardCall = guardCall.then(next); - if (guard.length > 2) { - const message = `The "next" callback was never called inside of ${guard.name ? '"' + guard.name + '"' : ""}: -${guard.toString()} -. If you are returning a value instead of calling "next", make sure to remove the "next" parameter from your function.`; - if (typeof guardReturn === "object" && "then" in guardReturn) { - guardCall = guardCall.then((resolvedValue) => { - if (!next._called) { - warn(message); - return Promise.reject(new Error("Invalid navigation guard")); - } - return resolvedValue; - }); - } else if (guardReturn !== void 0) { - if (!next._called) { - warn(message); - reject(new Error("Invalid navigation guard")); - return; - } - } - } - guardCall.catch((err) => reject(err)); - }); -} -function canOnlyBeCalledOnce(next, to, from) { - let called = 0; - return function() { - if (called++ === 1) - warn(`The "next" callback was called more than once in one navigation guard when going from "${from.fullPath}" to "${to.fullPath}". It should be called exactly one time in each navigation guard. This will fail in production.`); - next._called = true; - if (called === 1) - next.apply(null, arguments); - }; -} -function extractComponentsGuards(matched, guardType, to, from) { - const guards = []; - for (const record of matched) { - for (const name in record.components) { - let rawComponent = record.components[name]; - if (true) { - if (!rawComponent || typeof rawComponent !== "object" && typeof rawComponent !== "function") { - warn(`Component "${name}" in record with path "${record.path}" is not a valid component. Received "${String(rawComponent)}".`); - throw new Error("Invalid route component"); - } else if ("then" in rawComponent) { - warn(`Component "${name}" in record with path "${record.path}" is a Promise instead of a function that returns a Promise. Did you write "import('./MyPage.vue')" instead of "() => import('./MyPage.vue')" ? This will break in production if not fixed.`); - const promise = rawComponent; - rawComponent = () => promise; - } else if (rawComponent.__asyncLoader && !rawComponent.__warnedDefineAsync) { - rawComponent.__warnedDefineAsync = true; - warn(`Component "${name}" in record with path "${record.path}" is defined using "defineAsyncComponent()". Write "() => import('./MyPage.vue')" instead of "defineAsyncComponent(() => import('./MyPage.vue'))".`); - } - } - if (guardType !== "beforeRouteEnter" && !record.instances[name]) - continue; - if (isRouteComponent(rawComponent)) { - const options = rawComponent.__vccOpts || rawComponent; - const guard = options[guardType]; - guard && guards.push(guardToPromiseFn(guard, to, from, record, name)); - } else { - let componentPromise = rawComponent(); - if (!("catch" in componentPromise)) { - warn(`Component "${name}" in record with path "${record.path}" is a function that does not return a Promise. If you were passing a functional component, make sure to add a "displayName" to the component. This will break in production if not fixed.`); - componentPromise = Promise.resolve(componentPromise); - } - guards.push(() => componentPromise.then((resolved) => { - if (!resolved) - return Promise.reject(new Error(`Couldn't resolve component "${name}" at "${record.path}"`)); - const resolvedComponent = isESModule(resolved) ? resolved.default : resolved; - record.components[name] = resolvedComponent; - const options = resolvedComponent.__vccOpts || resolvedComponent; - const guard = options[guardType]; - return guard && guardToPromiseFn(guard, to, from, record, name)(); - })); - } - } - } - return guards; -} -function isRouteComponent(component) { - return typeof component === "object" || "displayName" in component || "props" in component || "__vccOpts" in component; -} -function useLink(props) { - const router = inject(routerKey); - const currentRoute = inject(routeLocationKey); - const route = computed(() => router.resolve(unref(props.to))); - const activeRecordIndex = computed(() => { - const { matched } = route.value; - const { length } = matched; - const routeMatched = matched[length - 1]; - const currentMatched = currentRoute.matched; - if (!routeMatched || !currentMatched.length) - return -1; - const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched)); - if (index > -1) - return index; - const parentRecordPath = getOriginalPath(matched[length - 2]); - return length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2])) : index; - }); - const isActive = computed(() => activeRecordIndex.value > -1 && includesParams(currentRoute.params, route.value.params)); - const isExactActive = computed(() => activeRecordIndex.value > -1 && activeRecordIndex.value === currentRoute.matched.length - 1 && isSameRouteLocationParams(currentRoute.params, route.value.params)); - function navigate(e = {}) { - if (guardEvent(e)) { - return router[unref(props.replace) ? "replace" : "push"](unref(props.to)).catch(noop); - } - return Promise.resolve(); - } - if (isBrowser) { - const instance = getCurrentInstance(); - if (instance) { - const linkContextDevtools = { - route: route.value, - isActive: isActive.value, - isExactActive: isExactActive.value - }; - instance.__vrl_devtools = instance.__vrl_devtools || []; - instance.__vrl_devtools.push(linkContextDevtools); - watchEffect(() => { - linkContextDevtools.route = route.value; - linkContextDevtools.isActive = isActive.value; - linkContextDevtools.isExactActive = isExactActive.value; - }, { flush: "post" }); - } - } - return { - route, - href: computed(() => route.value.href), - isActive, - isExactActive, - navigate - }; -} -var RouterLinkImpl = defineComponent({ - name: "RouterLink", - props: { - to: { - type: [String, Object], - required: true - }, - replace: Boolean, - activeClass: String, - exactActiveClass: String, - custom: Boolean, - ariaCurrentValue: { - type: String, - default: "page" - } - }, - useLink, - setup(props, { slots }) { - const link = reactive(useLink(props)); - const { options } = inject(routerKey); - const elClass = computed(() => ({ - [getLinkClass(props.activeClass, options.linkActiveClass, "router-link-active")]: link.isActive, - [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, "router-link-exact-active")]: link.isExactActive - })); - return () => { - const children = slots.default && slots.default(link); - return props.custom ? children : h("a", { - "aria-current": link.isExactActive ? props.ariaCurrentValue : null, - href: link.href, - onClick: link.navigate, - class: elClass.value - }, children); - }; - } -}); -var RouterLink = RouterLinkImpl; -function guardEvent(e) { - if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) - return; - if (e.defaultPrevented) - return; - if (e.button !== void 0 && e.button !== 0) - return; - if (e.currentTarget && e.currentTarget.getAttribute) { - const target = e.currentTarget.getAttribute("target"); - if (/\b_blank\b/i.test(target)) - return; - } - if (e.preventDefault) - e.preventDefault(); - return true; -} -function includesParams(outer, inner) { - for (const key in inner) { - const innerValue = inner[key]; - const outerValue = outer[key]; - if (typeof innerValue === "string") { - if (innerValue !== outerValue) - return false; - } else { - if (!Array.isArray(outerValue) || outerValue.length !== innerValue.length || innerValue.some((value, i) => value !== outerValue[i])) - return false; - } - } - return true; -} -function getOriginalPath(record) { - return record ? record.aliasOf ? record.aliasOf.path : record.path : ""; -} -var getLinkClass = (propClass, globalClass, defaultClass) => propClass != null ? propClass : globalClass != null ? globalClass : defaultClass; -var RouterViewImpl = defineComponent({ - name: "RouterView", - inheritAttrs: false, - props: { - name: { - type: String, - default: "default" - }, - route: Object - }, - setup(props, { attrs, slots }) { - warnDeprecatedUsage(); - const injectedRoute = inject(routerViewLocationKey); - const routeToDisplay = computed(() => props.route || injectedRoute.value); - const depth = inject(viewDepthKey, 0); - const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth]); - provide(viewDepthKey, depth + 1); - provide(matchedRouteKey, matchedRouteRef); - provide(routerViewLocationKey, routeToDisplay); - const viewRef = ref(); - watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => { - if (to) { - to.instances[name] = instance; - if (from && from !== to && instance && instance === oldInstance) { - if (!to.leaveGuards.size) { - to.leaveGuards = from.leaveGuards; - } - if (!to.updateGuards.size) { - to.updateGuards = from.updateGuards; - } - } - } - if (instance && to && (!from || !isSameRouteRecord(to, from) || !oldInstance)) { - (to.enterCallbacks[name] || []).forEach((callback) => callback(instance)); - } - }, { flush: "post" }); - return () => { - const route = routeToDisplay.value; - const matchedRoute = matchedRouteRef.value; - const ViewComponent = matchedRoute && matchedRoute.components[props.name]; - const currentName = props.name; - if (!ViewComponent) { - return normalizeSlot(slots.default, { Component: ViewComponent, route }); - } - const routePropsOption = matchedRoute.props[props.name]; - const routeProps = routePropsOption ? routePropsOption === true ? route.params : typeof routePropsOption === "function" ? routePropsOption(route) : routePropsOption : null; - const onVnodeUnmounted = (vnode) => { - if (vnode.component.isUnmounted) { - matchedRoute.instances[currentName] = null; - } - }; - const component = h(ViewComponent, assign({}, routeProps, attrs, { - onVnodeUnmounted, - ref: viewRef - })); - if (isBrowser && component.ref) { - const info = { - depth, - name: matchedRoute.name, - path: matchedRoute.path, - meta: matchedRoute.meta - }; - const internalInstances = Array.isArray(component.ref) ? component.ref.map((r) => r.i) : [component.ref.i]; - internalInstances.forEach((instance) => { - instance.__vrv_devtools = info; - }); - } - return normalizeSlot(slots.default, { Component: component, route }) || component; - }; - } -}); -function normalizeSlot(slot, data) { - if (!slot) - return null; - const slotContent = slot(data); - return slotContent.length === 1 ? slotContent[0] : slotContent; -} -var RouterView = RouterViewImpl; -function warnDeprecatedUsage() { - const instance = getCurrentInstance(); - const parentName = instance.parent && instance.parent.type.name; - if (parentName && (parentName === "KeepAlive" || parentName.includes("Transition"))) { - const comp = parentName === "KeepAlive" ? "keep-alive" : "transition"; - warn(`<router-view> can no longer be used directly inside <transition> or <keep-alive>. -Use slot props instead: - -<router-view v-slot="{ Component }"> - <${comp}> - <component :is="Component" /> - </${comp}> -</router-view>`); - } -} -function formatRouteLocation(routeLocation, tooltip) { - const copy = assign({}, routeLocation, { - matched: routeLocation.matched.map((matched) => omit(matched, ["instances", "children", "aliasOf"])) - }); - return { - _custom: { - type: null, - readOnly: true, - display: routeLocation.fullPath, - tooltip, - value: copy - } - }; -} -function formatDisplay(display) { - return { - _custom: { - display - } - }; -} -var routerId = 0; -function addDevtools(app, router, matcher) { - if (router.__hasDevtools) - return; - router.__hasDevtools = true; - const id = routerId++; - setupDevtoolsPlugin({ - id: "org.vuejs.router" + (id ? "." + id : ""), - label: "Vue Router", - packageName: "vue-router", - homepage: "https://router.vuejs.org", - logo: "https://router.vuejs.org/logo.png", - componentStateTypes: ["Routing"], - app - }, (api) => { - api.on.inspectComponent((payload, ctx) => { - if (payload.instanceData) { - payload.instanceData.state.push({ - type: "Routing", - key: "$route", - editable: false, - value: formatRouteLocation(router.currentRoute.value, "Current Route") - }); - } - }); - api.on.visitComponentTree(({ treeNode: node, componentInstance }) => { - if (componentInstance.__vrv_devtools) { - const info = componentInstance.__vrv_devtools; - node.tags.push({ - label: (info.name ? `${info.name.toString()}: ` : "") + info.path, - textColor: 0, - tooltip: "This component is rendered by <router-view>", - backgroundColor: PINK_500 - }); - } - if (Array.isArray(componentInstance.__vrl_devtools)) { - componentInstance.__devtoolsApi = api; - componentInstance.__vrl_devtools.forEach((devtoolsData) => { - let backgroundColor = ORANGE_400; - let tooltip = ""; - if (devtoolsData.isExactActive) { - backgroundColor = LIME_500; - tooltip = "This is exactly active"; - } else if (devtoolsData.isActive) { - backgroundColor = BLUE_600; - tooltip = "This link is active"; - } - node.tags.push({ - label: devtoolsData.route.path, - textColor: 0, - tooltip, - backgroundColor - }); - }); - } - }); - watch(router.currentRoute, () => { - refreshRoutesView(); - api.notifyComponentUpdate(); - api.sendInspectorTree(routerInspectorId); - api.sendInspectorState(routerInspectorId); - }); - const navigationsLayerId = "router:navigations:" + id; - api.addTimelineLayer({ - id: navigationsLayerId, - label: `Router${id ? " " + id : ""} Navigations`, - color: 4237508 - }); - router.onError((error, to) => { - api.addTimelineEvent({ - layerId: navigationsLayerId, - event: { - title: "Error during Navigation", - subtitle: to.fullPath, - logType: "error", - time: api.now(), - data: { error }, - groupId: to.meta.__navigationId - } - }); - }); - let navigationId = 0; - router.beforeEach((to, from) => { - const data = { - guard: formatDisplay("beforeEach"), - from: formatRouteLocation(from, "Current Location during this navigation"), - to: formatRouteLocation(to, "Target location") - }; - Object.defineProperty(to.meta, "__navigationId", { - value: navigationId++ - }); - api.addTimelineEvent({ - layerId: navigationsLayerId, - event: { - time: api.now(), - title: "Start of navigation", - subtitle: to.fullPath, - data, - groupId: to.meta.__navigationId - } - }); - }); - router.afterEach((to, from, failure) => { - const data = { - guard: formatDisplay("afterEach") - }; - if (failure) { - data.failure = { - _custom: { - type: Error, - readOnly: true, - display: failure ? failure.message : "", - tooltip: "Navigation Failure", - value: failure - } - }; - data.status = formatDisplay("\u274C"); - } else { - data.status = formatDisplay("\u2705"); - } - data.from = formatRouteLocation(from, "Current Location during this navigation"); - data.to = formatRouteLocation(to, "Target location"); - api.addTimelineEvent({ - layerId: navigationsLayerId, - event: { - title: "End of navigation", - subtitle: to.fullPath, - time: api.now(), - data, - logType: failure ? "warning" : "default", - groupId: to.meta.__navigationId - } - }); - }); - const routerInspectorId = "router-inspector:" + id; - api.addInspector({ - id: routerInspectorId, - label: "Routes" + (id ? " " + id : ""), - icon: "book", - treeFilterPlaceholder: "Search routes" - }); - function refreshRoutesView() { - if (!activeRoutesPayload) - return; - const payload = activeRoutesPayload; - let routes = matcher.getRoutes().filter((route) => !route.parent); - routes.forEach(resetMatchStateOnRouteRecord); - if (payload.filter) { - routes = routes.filter((route) => isRouteMatching(route, payload.filter.toLowerCase())); - } - routes.forEach((route) => markRouteRecordActive(route, router.currentRoute.value)); - payload.rootNodes = routes.map(formatRouteRecordForInspector); - } - let activeRoutesPayload; - api.on.getInspectorTree((payload) => { - activeRoutesPayload = payload; - if (payload.app === app && payload.inspectorId === routerInspectorId) { - refreshRoutesView(); - } - }); - api.on.getInspectorState((payload) => { - if (payload.app === app && payload.inspectorId === routerInspectorId) { - const routes = matcher.getRoutes(); - const route = routes.find((route2) => route2.record.__vd_id === payload.nodeId); - if (route) { - payload.state = { - options: formatRouteRecordMatcherForStateInspector(route) - }; - } - } - }); - api.sendInspectorTree(routerInspectorId); - api.sendInspectorState(routerInspectorId); - }); -} -function modifierForKey(key) { - if (key.optional) { - return key.repeatable ? "*" : "?"; - } else { - return key.repeatable ? "+" : ""; - } -} -function formatRouteRecordMatcherForStateInspector(route) { - const { record } = route; - const fields = [ - { editable: false, key: "path", value: record.path } - ]; - if (record.name != null) { - fields.push({ - editable: false, - key: "name", - value: record.name - }); - } - fields.push({ editable: false, key: "regexp", value: route.re }); - if (route.keys.length) { - fields.push({ - editable: false, - key: "keys", - value: { - _custom: { - type: null, - readOnly: true, - display: route.keys.map((key) => `${key.name}${modifierForKey(key)}`).join(" "), - tooltip: "Param keys", - value: route.keys - } - } - }); - } - if (record.redirect != null) { - fields.push({ - editable: false, - key: "redirect", - value: record.redirect - }); - } - if (route.alias.length) { - fields.push({ - editable: false, - key: "aliases", - value: route.alias.map((alias) => alias.record.path) - }); - } - fields.push({ - key: "score", - editable: false, - value: { - _custom: { - type: null, - readOnly: true, - display: route.score.map((score) => score.join(", ")).join(" | "), - tooltip: "Score used to sort routes", - value: route.score - } - } - }); - return fields; -} -var PINK_500 = 15485081; -var BLUE_600 = 2450411; -var LIME_500 = 8702998; -var CYAN_400 = 2282478; -var ORANGE_400 = 16486972; -var DARK = 6710886; -function formatRouteRecordForInspector(route) { - const tags = []; - const { record } = route; - if (record.name != null) { - tags.push({ - label: String(record.name), - textColor: 0, - backgroundColor: CYAN_400 - }); - } - if (record.aliasOf) { - tags.push({ - label: "alias", - textColor: 0, - backgroundColor: ORANGE_400 - }); - } - if (route.__vd_match) { - tags.push({ - label: "matches", - textColor: 0, - backgroundColor: PINK_500 - }); - } - if (route.__vd_exactActive) { - tags.push({ - label: "exact", - textColor: 0, - backgroundColor: LIME_500 - }); - } - if (route.__vd_active) { - tags.push({ - label: "active", - textColor: 0, - backgroundColor: BLUE_600 - }); - } - if (record.redirect) { - tags.push({ - label: "redirect: " + (typeof record.redirect === "string" ? record.redirect : "Object"), - textColor: 16777215, - backgroundColor: DARK - }); - } - let id = record.__vd_id; - if (id == null) { - id = String(routeRecordId++); - record.__vd_id = id; - } - return { - id, - label: record.path, - tags, - children: route.children.map(formatRouteRecordForInspector) - }; -} -var routeRecordId = 0; -var EXTRACT_REGEXP_RE = /^\/(.*)\/([a-z]*)$/; -function markRouteRecordActive(route, currentRoute) { - const isExactActive = currentRoute.matched.length && isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record); - route.__vd_exactActive = route.__vd_active = isExactActive; - if (!isExactActive) { - route.__vd_active = currentRoute.matched.some((match) => isSameRouteRecord(match, route.record)); - } - route.children.forEach((childRoute) => markRouteRecordActive(childRoute, currentRoute)); -} -function resetMatchStateOnRouteRecord(route) { - route.__vd_match = false; - route.children.forEach(resetMatchStateOnRouteRecord); -} -function isRouteMatching(route, filter) { - const found = String(route.re).match(EXTRACT_REGEXP_RE); - route.__vd_match = false; - if (!found || found.length < 3) { - return false; - } - const nonEndingRE = new RegExp(found[1].replace(/\$$/, ""), found[2]); - if (nonEndingRE.test(filter)) { - route.children.forEach((child) => isRouteMatching(child, filter)); - if (route.record.path !== "/" || filter === "/") { - route.__vd_match = route.re.test(filter); - return true; - } - return false; - } - const path = route.record.path.toLowerCase(); - const decodedPath = decode(path); - if (!filter.startsWith("/") && (decodedPath.includes(filter) || path.includes(filter))) - return true; - if (decodedPath.startsWith(filter) || path.startsWith(filter)) - return true; - if (route.record.name && String(route.record.name).includes(filter)) - return true; - return route.children.some((child) => isRouteMatching(child, filter)); -} -function omit(obj, keys) { - const ret = {}; - for (const key in obj) { - if (!keys.includes(key)) { - ret[key] = obj[key]; - } - } - return ret; -} -function createRouter(options) { - const matcher = createRouterMatcher(options.routes, options); - const parseQuery$1 = options.parseQuery || parseQuery; - const stringifyQuery$1 = options.stringifyQuery || stringifyQuery; - const routerHistory = options.history; - if (!routerHistory) - throw new Error('Provide the "history" option when calling "createRouter()": https://next.router.vuejs.org/api/#history.'); - const beforeGuards = useCallbacks(); - const beforeResolveGuards = useCallbacks(); - const afterGuards = useCallbacks(); - const currentRoute = shallowRef(START_LOCATION_NORMALIZED); - let pendingLocation = START_LOCATION_NORMALIZED; - if (isBrowser && options.scrollBehavior && "scrollRestoration" in history) { - history.scrollRestoration = "manual"; - } - const normalizeParams = applyToParams.bind(null, (paramValue) => "" + paramValue); - const encodeParams = applyToParams.bind(null, encodeParam); - const decodeParams = applyToParams.bind(null, decode); - function addRoute(parentOrRoute, route) { - let parent; - let record; - if (isRouteName(parentOrRoute)) { - parent = matcher.getRecordMatcher(parentOrRoute); - record = route; - } else { - record = parentOrRoute; - } - return matcher.addRoute(record, parent); - } - function removeRoute(name) { - const recordMatcher = matcher.getRecordMatcher(name); - if (recordMatcher) { - matcher.removeRoute(recordMatcher); - } else if (true) { - warn(`Cannot remove non-existent route "${String(name)}"`); - } - } - function getRoutes() { - return matcher.getRoutes().map((routeMatcher) => routeMatcher.record); - } - function hasRoute(name) { - return !!matcher.getRecordMatcher(name); - } - function resolve(rawLocation, currentLocation) { - currentLocation = assign({}, currentLocation || currentRoute.value); - if (typeof rawLocation === "string") { - const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path); - const matchedRoute2 = matcher.resolve({ path: locationNormalized.path }, currentLocation); - const href2 = routerHistory.createHref(locationNormalized.fullPath); - if (true) { - if (href2.startsWith("//")) - warn(`Location "${rawLocation}" resolved to "${href2}". A resolved location cannot start with multiple slashes.`); - else if (!matchedRoute2.matched.length) { - warn(`No match found for location with path "${rawLocation}"`); - } - } - return assign(locationNormalized, matchedRoute2, { - params: decodeParams(matchedRoute2.params), - hash: decode(locationNormalized.hash), - redirectedFrom: void 0, - href: href2 - }); - } - let matcherLocation; - if ("path" in rawLocation) { - if ("params" in rawLocation && !("name" in rawLocation) && Object.keys(rawLocation.params).length) { - warn(`Path "${rawLocation.path}" was passed with params but they will be ignored. Use a named route alongside params instead.`); - } - matcherLocation = assign({}, rawLocation, { - path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path - }); - } else { - const targetParams = assign({}, rawLocation.params); - for (const key in targetParams) { - if (targetParams[key] == null) { - delete targetParams[key]; - } - } - matcherLocation = assign({}, rawLocation, { - params: encodeParams(rawLocation.params) - }); - currentLocation.params = encodeParams(currentLocation.params); - } - const matchedRoute = matcher.resolve(matcherLocation, currentLocation); - const hash = rawLocation.hash || ""; - if (hash && !hash.startsWith("#")) { - warn(`A \`hash\` should always start with the character "#". Replace "${hash}" with "#${hash}".`); - } - matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params)); - const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, { - hash: encodeHash(hash), - path: matchedRoute.path - })); - const href = routerHistory.createHref(fullPath); - if (true) { - if (href.startsWith("//")) { - warn(`Location "${rawLocation}" resolved to "${href}". A resolved location cannot start with multiple slashes.`); - } else if (!matchedRoute.matched.length) { - warn(`No match found for location with path "${"path" in rawLocation ? rawLocation.path : rawLocation}"`); - } - } - return assign({ - fullPath, - hash, - query: stringifyQuery$1 === stringifyQuery ? normalizeQuery(rawLocation.query) : rawLocation.query || {} - }, matchedRoute, { - redirectedFrom: void 0, - href - }); - } - function locationAsObject(to) { - return typeof to === "string" ? parseURL(parseQuery$1, to, currentRoute.value.path) : assign({}, to); - } - function checkCanceledNavigation(to, from) { - if (pendingLocation !== to) { - return createRouterError(8, { - from, - to - }); - } - } - function push(to) { - return pushWithRedirect(to); - } - function replace(to) { - return push(assign(locationAsObject(to), { replace: true })); - } - function handleRedirectRecord(to) { - const lastMatched = to.matched[to.matched.length - 1]; - if (lastMatched && lastMatched.redirect) { - const { redirect } = lastMatched; - let newTargetLocation = typeof redirect === "function" ? redirect(to) : redirect; - if (typeof newTargetLocation === "string") { - newTargetLocation = newTargetLocation.includes("?") || newTargetLocation.includes("#") ? newTargetLocation = locationAsObject(newTargetLocation) : { path: newTargetLocation }; - newTargetLocation.params = {}; - } - if (!("path" in newTargetLocation) && !("name" in newTargetLocation)) { - warn(`Invalid redirect found: -${JSON.stringify(newTargetLocation, null, 2)} - when navigating to "${to.fullPath}". A redirect must contain a name or path. This will break in production.`); - throw new Error("Invalid redirect"); - } - return assign({ - query: to.query, - hash: to.hash, - params: to.params - }, newTargetLocation); - } - } - function pushWithRedirect(to, redirectedFrom) { - const targetLocation = pendingLocation = resolve(to); - const from = currentRoute.value; - const data = to.state; - const force = to.force; - const replace2 = to.replace === true; - const shouldRedirect = handleRedirectRecord(targetLocation); - if (shouldRedirect) - return pushWithRedirect(assign(locationAsObject(shouldRedirect), { - state: data, - force, - replace: replace2 - }), redirectedFrom || targetLocation); - const toLocation = targetLocation; - toLocation.redirectedFrom = redirectedFrom; - let failure; - if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) { - failure = createRouterError(16, { to: toLocation, from }); - handleScroll(from, from, true, false); - } - return (failure ? Promise.resolve(failure) : navigate(toLocation, from)).catch((error) => isNavigationFailure(error) ? isNavigationFailure(error, 2) ? error : markAsReady(error) : triggerError(error, toLocation, from)).then((failure2) => { - if (failure2) { - if (isNavigationFailure(failure2, 2)) { - if (isSameRouteLocation(stringifyQuery$1, resolve(failure2.to), toLocation) && redirectedFrom && (redirectedFrom._count = redirectedFrom._count ? redirectedFrom._count + 1 : 1) > 10) { - warn(`Detected an infinite redirection in a navigation guard when going from "${from.fullPath}" to "${toLocation.fullPath}". Aborting to avoid a Stack Overflow. This will break in production if not fixed.`); - return Promise.reject(new Error("Infinite redirect in navigation guard")); - } - return pushWithRedirect(assign(locationAsObject(failure2.to), { - state: data, - force, - replace: replace2 - }), redirectedFrom || toLocation); - } - } else { - failure2 = finalizeNavigation(toLocation, from, true, replace2, data); - } - triggerAfterEach(toLocation, from, failure2); - return failure2; - }); - } - function checkCanceledNavigationAndReject(to, from) { - const error = checkCanceledNavigation(to, from); - return error ? Promise.reject(error) : Promise.resolve(); - } - function navigate(to, from) { - let guards; - const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from); - guards = extractComponentsGuards(leavingRecords.reverse(), "beforeRouteLeave", to, from); - for (const record of leavingRecords) { - record.leaveGuards.forEach((guard) => { - guards.push(guardToPromiseFn(guard, to, from)); - }); - } - const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from); - guards.push(canceledNavigationCheck); - return runGuardQueue(guards).then(() => { - guards = []; - for (const guard of beforeGuards.list()) { - guards.push(guardToPromiseFn(guard, to, from)); - } - guards.push(canceledNavigationCheck); - return runGuardQueue(guards); - }).then(() => { - guards = extractComponentsGuards(updatingRecords, "beforeRouteUpdate", to, from); - for (const record of updatingRecords) { - record.updateGuards.forEach((guard) => { - guards.push(guardToPromiseFn(guard, to, from)); - }); - } - guards.push(canceledNavigationCheck); - return runGuardQueue(guards); - }).then(() => { - guards = []; - for (const record of to.matched) { - if (record.beforeEnter && !from.matched.includes(record)) { - if (Array.isArray(record.beforeEnter)) { - for (const beforeEnter of record.beforeEnter) - guards.push(guardToPromiseFn(beforeEnter, to, from)); - } else { - guards.push(guardToPromiseFn(record.beforeEnter, to, from)); - } - } - } - guards.push(canceledNavigationCheck); - return runGuardQueue(guards); - }).then(() => { - to.matched.forEach((record) => record.enterCallbacks = {}); - guards = extractComponentsGuards(enteringRecords, "beforeRouteEnter", to, from); - guards.push(canceledNavigationCheck); - return runGuardQueue(guards); - }).then(() => { - guards = []; - for (const guard of beforeResolveGuards.list()) { - guards.push(guardToPromiseFn(guard, to, from)); - } - guards.push(canceledNavigationCheck); - return runGuardQueue(guards); - }).catch((err) => isNavigationFailure(err, 8) ? err : Promise.reject(err)); - } - function triggerAfterEach(to, from, failure) { - for (const guard of afterGuards.list()) - guard(to, from, failure); - } - function finalizeNavigation(toLocation, from, isPush, replace2, data) { - const error = checkCanceledNavigation(toLocation, from); - if (error) - return error; - const isFirstNavigation = from === START_LOCATION_NORMALIZED; - const state = !isBrowser ? {} : history.state; - if (isPush) { - if (replace2 || isFirstNavigation) - routerHistory.replace(toLocation.fullPath, assign({ - scroll: isFirstNavigation && state && state.scroll - }, data)); - else - routerHistory.push(toLocation.fullPath, data); - } - currentRoute.value = toLocation; - handleScroll(toLocation, from, isPush, isFirstNavigation); - markAsReady(); - } - let removeHistoryListener; - function setupListeners() { - removeHistoryListener = routerHistory.listen((to, _from, info) => { - const toLocation = resolve(to); - const shouldRedirect = handleRedirectRecord(toLocation); - if (shouldRedirect) { - pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop); - return; - } - pendingLocation = toLocation; - const from = currentRoute.value; - if (isBrowser) { - saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition()); - } - navigate(toLocation, from).catch((error) => { - if (isNavigationFailure(error, 4 | 8)) { - return error; - } - if (isNavigationFailure(error, 2)) { - pushWithRedirect(error.to, toLocation).then((failure) => { - if (isNavigationFailure(failure, 4 | 16) && !info.delta && info.type === NavigationType.pop) { - routerHistory.go(-1, false); - } - }).catch(noop); - return Promise.reject(); - } - if (info.delta) - routerHistory.go(-info.delta, false); - return triggerError(error, toLocation, from); - }).then((failure) => { - failure = failure || finalizeNavigation(toLocation, from, false); - if (failure) { - if (info.delta) { - routerHistory.go(-info.delta, false); - } else if (info.type === NavigationType.pop && isNavigationFailure(failure, 4 | 16)) { - routerHistory.go(-1, false); - } - } - triggerAfterEach(toLocation, from, failure); - }).catch(noop); - }); - } - let readyHandlers = useCallbacks(); - let errorHandlers = useCallbacks(); - let ready; - function triggerError(error, to, from) { - markAsReady(error); - const list = errorHandlers.list(); - if (list.length) { - list.forEach((handler) => handler(error, to, from)); - } else { - if (true) { - warn("uncaught error during route navigation:"); - } - console.error(error); - } - return Promise.reject(error); - } - function isReady() { - if (ready && currentRoute.value !== START_LOCATION_NORMALIZED) - return Promise.resolve(); - return new Promise((resolve2, reject) => { - readyHandlers.add([resolve2, reject]); - }); - } - function markAsReady(err) { - if (!ready) { - ready = !err; - setupListeners(); - readyHandlers.list().forEach(([resolve2, reject]) => err ? reject(err) : resolve2()); - readyHandlers.reset(); - } - return err; - } - function handleScroll(to, from, isPush, isFirstNavigation) { - const { scrollBehavior } = options; - if (!isBrowser || !scrollBehavior) - return Promise.resolve(); - const scrollPosition = !isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0)) || (isFirstNavigation || !isPush) && history.state && history.state.scroll || null; - return nextTick().then(() => scrollBehavior(to, from, scrollPosition)).then((position) => position && scrollToPosition(position)).catch((err) => triggerError(err, to, from)); - } - const go = (delta) => routerHistory.go(delta); - let started; - const installedApps = /* @__PURE__ */ new Set(); - const router = { - currentRoute, - addRoute, - removeRoute, - hasRoute, - getRoutes, - resolve, - options, - push, - replace, - go, - back: () => go(-1), - forward: () => go(1), - beforeEach: beforeGuards.add, - beforeResolve: beforeResolveGuards.add, - afterEach: afterGuards.add, - onError: errorHandlers.add, - isReady, - install(app) { - const router2 = this; - app.component("RouterLink", RouterLink); - app.component("RouterView", RouterView); - app.config.globalProperties.$router = router2; - Object.defineProperty(app.config.globalProperties, "$route", { - enumerable: true, - get: () => unref(currentRoute) - }); - if (isBrowser && !started && currentRoute.value === START_LOCATION_NORMALIZED) { - started = true; - push(routerHistory.location).catch((err) => { - if (true) - warn("Unexpected error when starting the router:", err); - }); - } - const reactiveRoute = {}; - for (const key in START_LOCATION_NORMALIZED) { - reactiveRoute[key] = computed(() => currentRoute.value[key]); - } - app.provide(routerKey, router2); - app.provide(routeLocationKey, reactive(reactiveRoute)); - app.provide(routerViewLocationKey, currentRoute); - const unmountApp = app.unmount; - installedApps.add(app); - app.unmount = function() { - installedApps.delete(app); - if (installedApps.size < 1) { - pendingLocation = START_LOCATION_NORMALIZED; - removeHistoryListener && removeHistoryListener(); - currentRoute.value = START_LOCATION_NORMALIZED; - started = false; - ready = false; - } - unmountApp(); - }; - if (isBrowser) { - addDevtools(app, router2, matcher); - } - } - }; - return router; -} -function runGuardQueue(guards) { - return guards.reduce((promise, guard) => promise.then(() => guard()), Promise.resolve()); -} -function extractChangingRecords(to, from) { - const leavingRecords = []; - const updatingRecords = []; - const enteringRecords = []; - const len = Math.max(from.matched.length, to.matched.length); - for (let i = 0; i < len; i++) { - const recordFrom = from.matched[i]; - if (recordFrom) { - if (to.matched.find((record) => isSameRouteRecord(record, recordFrom))) - updatingRecords.push(recordFrom); - else - leavingRecords.push(recordFrom); - } - const recordTo = to.matched[i]; - if (recordTo) { - if (!from.matched.find((record) => isSameRouteRecord(record, recordTo))) { - enteringRecords.push(recordTo); - } - } - } - return [leavingRecords, updatingRecords, enteringRecords]; -} -function useRouter() { - return inject(routerKey); -} -function useRoute() { - return inject(routeLocationKey); -} -export { - NavigationFailureType, - RouterLink, - RouterView, - START_LOCATION_NORMALIZED as START_LOCATION, - createMemoryHistory, - createRouter, - createRouterMatcher, - createWebHashHistory, - createWebHistory, - isNavigationFailure, - matchedRouteKey, - onBeforeRouteLeave, - onBeforeRouteUpdate, - parseQuery, - routeLocationKey, - routerKey, - routerViewLocationKey, - stringifyQuery, - useLink, - useRoute, - useRouter, - viewDepthKey -}; -/*! - * vue-router v4.0.14 - * (c) 2022 Eduardo San Martin Morote - * @license MIT - */ -//# sourceMappingURL=vue-router.js.map diff --git a/docs/.vuepress/.cache/deps/vue-router.js.map b/docs/.vuepress/.cache/deps/vue-router.js.map deleted file mode 100644 index 896aaa3..0000000 --- a/docs/.vuepress/.cache/deps/vue-router.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["dep:vue-router", "../../../../node_modules/vue-router/dist/vue-router.esm-bundler.js"], - "sourcesContent": ["\nexport * from \"../../../../node_modules/vue-router/dist/vue-router.esm-bundler.js\"", "/*!\n * vue-router v4.0.14\n * (c) 2022 Eduardo San Martin Morote\n * @license MIT\n */\nimport { getCurrentInstance, inject, onUnmounted, onDeactivated, onActivated, computed, unref, watchEffect, defineComponent, reactive, h, provide, ref, watch, shallowRef, nextTick } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nconst hasSymbol = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\r\nconst PolySymbol = (name) => \r\n// vr = vue router\r\nhasSymbol\r\n ? Symbol((process.env.NODE_ENV !== 'production') ? '[vue-router]: ' + name : name)\r\n : ((process.env.NODE_ENV !== 'production') ? '[vue-router]: ' : '_vr_') + name;\r\n// rvlm = Router View Location Matched\r\n/**\r\n * RouteRecord being rendered by the closest ancestor Router View. Used for\r\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\r\n * Location Matched\r\n *\r\n * @internal\r\n */\r\nconst matchedRouteKey = /*#__PURE__*/ PolySymbol((process.env.NODE_ENV !== 'production') ? 'router view location matched' : 'rvlm');\r\n/**\r\n * Allows overriding the router view depth to control which component in\r\n * `matched` is rendered. rvd stands for Router View Depth\r\n *\r\n * @internal\r\n */\r\nconst viewDepthKey = /*#__PURE__*/ PolySymbol((process.env.NODE_ENV !== 'production') ? 'router view depth' : 'rvd');\r\n/**\r\n * Allows overriding the router instance returned by `useRouter` in tests. r\r\n * stands for router\r\n *\r\n * @internal\r\n */\r\nconst routerKey = /*#__PURE__*/ PolySymbol((process.env.NODE_ENV !== 'production') ? 'router' : 'r');\r\n/**\r\n * Allows overriding the current route returned by `useRoute` in tests. rl\r\n * stands for route location\r\n *\r\n * @internal\r\n */\r\nconst routeLocationKey = /*#__PURE__*/ PolySymbol((process.env.NODE_ENV !== 'production') ? 'route location' : 'rl');\r\n/**\r\n * Allows overriding the current route used by router-view. Internally this is\r\n * used when the `route` prop is passed.\r\n *\r\n * @internal\r\n */\r\nconst routerViewLocationKey = /*#__PURE__*/ PolySymbol((process.env.NODE_ENV !== 'production') ? 'router view location' : 'rvl');\n\nconst isBrowser = typeof window !== 'undefined';\n\nfunction isESModule(obj) {\r\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module');\r\n}\r\nconst assign = Object.assign;\r\nfunction applyToParams(fn, params) {\r\n const newParams = {};\r\n for (const key in params) {\r\n const value = params[key];\r\n newParams[key] = Array.isArray(value) ? value.map(fn) : fn(value);\r\n }\r\n return newParams;\r\n}\r\nconst noop = () => { };\n\nfunction warn(msg) {\r\n // avoid using ...args as it breaks in older Edge builds\r\n const args = Array.from(arguments).slice(1);\r\n console.warn.apply(console, ['[Vue Router warn]: ' + msg].concat(args));\r\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\r\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\r\n/**\r\n * Transforms an URI into a normalized history location\r\n *\r\n * @param parseQuery\r\n * @param location - URI to normalize\r\n * @param currentLocation - current absolute location. Allows resolving relative\r\n * paths. Must start with `/`. Defaults to `/`\r\n * @returns a normalized history location\r\n */\r\nfunction parseURL(parseQuery, location, currentLocation = '/') {\r\n let path, query = {}, searchString = '', hash = '';\r\n // Could use URL and URLSearchParams but IE 11 doesn't support it\r\n const searchPos = location.indexOf('?');\r\n const hashPos = location.indexOf('#', searchPos > -1 ? searchPos : 0);\r\n if (searchPos > -1) {\r\n path = location.slice(0, searchPos);\r\n searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\r\n query = parseQuery(searchString);\r\n }\r\n if (hashPos > -1) {\r\n path = path || location.slice(0, hashPos);\r\n // keep the # character\r\n hash = location.slice(hashPos, location.length);\r\n }\r\n // no search and no query\r\n path = resolveRelativePath(path != null ? path : location, currentLocation);\r\n // empty path means a relative query or hash `?foo=f`, `#thing`\r\n return {\r\n fullPath: path + (searchString && '?') + searchString + hash,\r\n path,\r\n query,\r\n hash,\r\n };\r\n}\r\n/**\r\n * Stringifies a URL object\r\n *\r\n * @param stringifyQuery\r\n * @param location\r\n */\r\nfunction stringifyURL(stringifyQuery, location) {\r\n const query = location.query ? stringifyQuery(location.query) : '';\r\n return location.path + (query && '?') + query + (location.hash || '');\r\n}\r\n/**\r\n * Strips off the base from the beginning of a location.pathname in a non\r\n * case-sensitive way.\r\n *\r\n * @param pathname - location.pathname\r\n * @param base - base to strip off\r\n */\r\nfunction stripBase(pathname, base) {\r\n // no base or base is not found at the beginning\r\n if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\r\n return pathname;\r\n return pathname.slice(base.length) || '/';\r\n}\r\n/**\r\n * Checks if two RouteLocation are equal. This means that both locations are\r\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\r\n * parameters and `hash` are the same\r\n *\r\n * @param a - first {@link RouteLocation}\r\n * @param b - second {@link RouteLocation}\r\n */\r\nfunction isSameRouteLocation(stringifyQuery, a, b) {\r\n const aLastIndex = a.matched.length - 1;\r\n const bLastIndex = b.matched.length - 1;\r\n return (aLastIndex > -1 &&\r\n aLastIndex === bLastIndex &&\r\n isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\r\n isSameRouteLocationParams(a.params, b.params) &&\r\n stringifyQuery(a.query) === stringifyQuery(b.query) &&\r\n a.hash === b.hash);\r\n}\r\n/**\r\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\r\n * considered equal to the `RouteRecord` they are aliasing.\r\n *\r\n * @param a - first {@link RouteRecord}\r\n * @param b - second {@link RouteRecord}\r\n */\r\nfunction isSameRouteRecord(a, b) {\r\n // since the original record has an undefined value for aliasOf\r\n // but all aliases point to the original record, this will always compare\r\n // the original record\r\n return (a.aliasOf || a) === (b.aliasOf || b);\r\n}\r\nfunction isSameRouteLocationParams(a, b) {\r\n if (Object.keys(a).length !== Object.keys(b).length)\r\n return false;\r\n for (const key in a) {\r\n if (!isSameRouteLocationParamsValue(a[key], b[key]))\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isSameRouteLocationParamsValue(a, b) {\r\n return Array.isArray(a)\r\n ? isEquivalentArray(a, b)\r\n : Array.isArray(b)\r\n ? isEquivalentArray(b, a)\r\n : a === b;\r\n}\r\n/**\r\n * Check if two arrays are the same or if an array with one single entry is the\r\n * same as another primitive value. Used to check query and parameters\r\n *\r\n * @param a - array of values\r\n * @param b - array of values or a single value\r\n */\r\nfunction isEquivalentArray(a, b) {\r\n return Array.isArray(b)\r\n ? a.length === b.length && a.every((value, i) => value === b[i])\r\n : a.length === 1 && a[0] === b;\r\n}\r\n/**\r\n * Resolves a relative path that starts with `.`.\r\n *\r\n * @param to - path location we are resolving\r\n * @param from - currentLocation.path, should start with `/`\r\n */\r\nfunction resolveRelativePath(to, from) {\r\n if (to.startsWith('/'))\r\n return to;\r\n if ((process.env.NODE_ENV !== 'production') && !from.startsWith('/')) {\r\n warn(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\r\n return to;\r\n }\r\n if (!to)\r\n return from;\r\n const fromSegments = from.split('/');\r\n const toSegments = to.split('/');\r\n let position = fromSegments.length - 1;\r\n let toPosition;\r\n let segment;\r\n for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\r\n segment = toSegments[toPosition];\r\n // can't go below zero\r\n if (position === 1 || segment === '.')\r\n continue;\r\n if (segment === '..')\r\n position--;\r\n // found something that is not relative path\r\n else\r\n break;\r\n }\r\n return (fromSegments.slice(0, position).join('/') +\r\n '/' +\r\n toSegments\r\n .slice(toPosition - (toPosition === toSegments.length ? 1 : 0))\r\n .join('/'));\r\n}\n\nvar NavigationType;\r\n(function (NavigationType) {\r\n NavigationType[\"pop\"] = \"pop\";\r\n NavigationType[\"push\"] = \"push\";\r\n})(NavigationType || (NavigationType = {}));\r\nvar NavigationDirection;\r\n(function (NavigationDirection) {\r\n NavigationDirection[\"back\"] = \"back\";\r\n NavigationDirection[\"forward\"] = \"forward\";\r\n NavigationDirection[\"unknown\"] = \"\";\r\n})(NavigationDirection || (NavigationDirection = {}));\r\n/**\r\n * Starting location for Histories\r\n */\r\nconst START = '';\r\n// Generic utils\r\n/**\r\n * Normalizes a base by removing any trailing slash and reading the base tag if\r\n * present.\r\n *\r\n * @param base - base to normalize\r\n */\r\nfunction normalizeBase(base) {\r\n if (!base) {\r\n if (isBrowser) {\r\n // respect <base> tag\r\n const baseEl = document.querySelector('base');\r\n base = (baseEl && baseEl.getAttribute('href')) || '/';\r\n // strip full URL origin\r\n base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\r\n }\r\n else {\r\n base = '/';\r\n }\r\n }\r\n // ensure leading slash when it was removed by the regex above avoid leading\r\n // slash with hash because the file could be read from the disk like file://\r\n // and the leading slash would cause problems\r\n if (base[0] !== '/' && base[0] !== '#')\r\n base = '/' + base;\r\n // remove the trailing slash so all other method can just do `base + fullPath`\r\n // to build an href\r\n return removeTrailingSlash(base);\r\n}\r\n// remove any character before the hash\r\nconst BEFORE_HASH_RE = /^[^#]+#/;\r\nfunction createHref(base, location) {\r\n return base.replace(BEFORE_HASH_RE, '#') + location;\r\n}\n\nfunction getElementPosition(el, offset) {\r\n const docRect = document.documentElement.getBoundingClientRect();\r\n const elRect = el.getBoundingClientRect();\r\n return {\r\n behavior: offset.behavior,\r\n left: elRect.left - docRect.left - (offset.left || 0),\r\n top: elRect.top - docRect.top - (offset.top || 0),\r\n };\r\n}\r\nconst computeScrollPosition = () => ({\r\n left: window.pageXOffset,\r\n top: window.pageYOffset,\r\n});\r\nfunction scrollToPosition(position) {\r\n let scrollToOptions;\r\n if ('el' in position) {\r\n const positionEl = position.el;\r\n const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\r\n /**\r\n * `id`s can accept pretty much any characters, including CSS combinators\r\n * like `>` or `~`. It's still possible to retrieve elements using\r\n * `document.getElementById('~')` but it needs to be escaped when using\r\n * `document.querySelector('#\\\\~')` for it to be valid. The only\r\n * requirements for `id`s are them to be unique on the page and to not be\r\n * empty (`id=\"\"`). Because of that, when passing an id selector, it should\r\n * be properly escaped for it to work with `querySelector`. We could check\r\n * for the id selector to be simple (no CSS combinators `+ >~`) but that\r\n * would make things inconsistent since they are valid characters for an\r\n * `id` but would need to be escaped when using `querySelector`, breaking\r\n * their usage and ending up in no selector returned. Selectors need to be\r\n * escaped:\r\n *\r\n * - `#1-thing` becomes `#\\31 -thing`\r\n * - `#with~symbols` becomes `#with\\\\~symbols`\r\n *\r\n * - More information about the topic can be found at\r\n * https://mathiasbynens.be/notes/html5-id-class.\r\n * - Practical example: https://mathiasbynens.be/demo/html5-id\r\n */\r\n if ((process.env.NODE_ENV !== 'production') && typeof position.el === 'string') {\r\n if (!isIdSelector || !document.getElementById(position.el.slice(1))) {\r\n try {\r\n const foundEl = document.querySelector(position.el);\r\n if (isIdSelector && foundEl) {\r\n warn(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\r\n // return to avoid other warnings\r\n return;\r\n }\r\n }\r\n catch (err) {\r\n warn(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\r\n // return to avoid other warnings\r\n return;\r\n }\r\n }\r\n }\r\n const el = typeof positionEl === 'string'\r\n ? isIdSelector\r\n ? document.getElementById(positionEl.slice(1))\r\n : document.querySelector(positionEl)\r\n : positionEl;\r\n if (!el) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\r\n return;\r\n }\r\n scrollToOptions = getElementPosition(el, position);\r\n }\r\n else {\r\n scrollToOptions = position;\r\n }\r\n if ('scrollBehavior' in document.documentElement.style)\r\n window.scrollTo(scrollToOptions);\r\n else {\r\n window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.pageXOffset, scrollToOptions.top != null ? scrollToOptions.top : window.pageYOffset);\r\n }\r\n}\r\nfunction getScrollKey(path, delta) {\r\n const position = history.state ? history.state.position - delta : -1;\r\n return position + path;\r\n}\r\nconst scrollPositions = new Map();\r\nfunction saveScrollPosition(key, scrollPosition) {\r\n scrollPositions.set(key, scrollPosition);\r\n}\r\nfunction getSavedScrollPosition(key) {\r\n const scroll = scrollPositions.get(key);\r\n // consume it so it's not used again\r\n scrollPositions.delete(key);\r\n return scroll;\r\n}\r\n// TODO: RFC about how to save scroll position\r\n/**\r\n * ScrollBehavior instance used by the router to compute and restore the scroll\r\n * position when navigating.\r\n */\r\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\r\n// // returns a scroll position that can be saved in history\r\n// compute(): ScrollPositionEntry\r\n// // can take an extended ScrollPositionEntry\r\n// scroll(position: ScrollPosition): void\r\n// }\r\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\r\n// compute: computeScroll,\r\n// scroll: scrollToPosition,\r\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\r\n/**\r\n * Creates a normalized history location from a window.location object\r\n * @param location -\r\n */\r\nfunction createCurrentLocation(base, location) {\r\n const { pathname, search, hash } = location;\r\n // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\r\n const hashPos = base.indexOf('#');\r\n if (hashPos > -1) {\r\n let slicePos = hash.includes(base.slice(hashPos))\r\n ? base.slice(hashPos).length\r\n : 1;\r\n let pathFromHash = hash.slice(slicePos);\r\n // prepend the starting slash to hash so the url starts with /#\r\n if (pathFromHash[0] !== '/')\r\n pathFromHash = '/' + pathFromHash;\r\n return stripBase(pathFromHash, '');\r\n }\r\n const path = stripBase(pathname, base);\r\n return path + search + hash;\r\n}\r\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\r\n let listeners = [];\r\n let teardowns = [];\r\n // TODO: should it be a stack? a Dict. Check if the popstate listener\r\n // can trigger twice\r\n let pauseState = null;\r\n const popStateHandler = ({ state, }) => {\r\n const to = createCurrentLocation(base, location);\r\n const from = currentLocation.value;\r\n const fromState = historyState.value;\r\n let delta = 0;\r\n if (state) {\r\n currentLocation.value = to;\r\n historyState.value = state;\r\n // ignore the popstate and reset the pauseState\r\n if (pauseState && pauseState === from) {\r\n pauseState = null;\r\n return;\r\n }\r\n delta = fromState ? state.position - fromState.position : 0;\r\n }\r\n else {\r\n replace(to);\r\n }\r\n // console.log({ deltaFromCurrent })\r\n // Here we could also revert the navigation by calling history.go(-delta)\r\n // this listener will have to be adapted to not trigger again and to wait for the url\r\n // to be updated before triggering the listeners. Some kind of validation function would also\r\n // need to be passed to the listeners so the navigation can be accepted\r\n // call all listeners\r\n listeners.forEach(listener => {\r\n listener(currentLocation.value, from, {\r\n delta,\r\n type: NavigationType.pop,\r\n direction: delta\r\n ? delta > 0\r\n ? NavigationDirection.forward\r\n : NavigationDirection.back\r\n : NavigationDirection.unknown,\r\n });\r\n });\r\n };\r\n function pauseListeners() {\r\n pauseState = currentLocation.value;\r\n }\r\n function listen(callback) {\r\n // setup the listener and prepare teardown callbacks\r\n listeners.push(callback);\r\n const teardown = () => {\r\n const index = listeners.indexOf(callback);\r\n if (index > -1)\r\n listeners.splice(index, 1);\r\n };\r\n teardowns.push(teardown);\r\n return teardown;\r\n }\r\n function beforeUnloadListener() {\r\n const { history } = window;\r\n if (!history.state)\r\n return;\r\n history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\r\n }\r\n function destroy() {\r\n for (const teardown of teardowns)\r\n teardown();\r\n teardowns = [];\r\n window.removeEventListener('popstate', popStateHandler);\r\n window.removeEventListener('beforeunload', beforeUnloadListener);\r\n }\r\n // setup the listeners and prepare teardown callbacks\r\n window.addEventListener('popstate', popStateHandler);\r\n window.addEventListener('beforeunload', beforeUnloadListener);\r\n return {\r\n pauseListeners,\r\n listen,\r\n destroy,\r\n };\r\n}\r\n/**\r\n * Creates a state object\r\n */\r\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\r\n return {\r\n back,\r\n current,\r\n forward,\r\n replaced,\r\n position: window.history.length,\r\n scroll: computeScroll ? computeScrollPosition() : null,\r\n };\r\n}\r\nfunction useHistoryStateNavigation(base) {\r\n const { history, location } = window;\r\n // private variables\r\n const currentLocation = {\r\n value: createCurrentLocation(base, location),\r\n };\r\n const historyState = { value: history.state };\r\n // build current history entry as this is a fresh navigation\r\n if (!historyState.value) {\r\n changeLocation(currentLocation.value, {\r\n back: null,\r\n current: currentLocation.value,\r\n forward: null,\r\n // the length is off by one, we need to decrease it\r\n position: history.length - 1,\r\n replaced: true,\r\n // don't add a scroll as the user may have an anchor and we want\r\n // scrollBehavior to be triggered without a saved position\r\n scroll: null,\r\n }, true);\r\n }\r\n function changeLocation(to, state, replace) {\r\n /**\r\n * if a base tag is provided and we are on a normal domain, we have to\r\n * respect the provided `base` attribute because pushState() will use it and\r\n * potentially erase anything before the `#` like at\r\n * https://github.com/vuejs/router/issues/685 where a base of\r\n * `/folder/#` but a base of `/` would erase the `/folder/` section. If\r\n * there is no host, the `<base>` tag makes no sense and if there isn't a\r\n * base tag we can just use everything after the `#`.\r\n */\r\n const hashIndex = base.indexOf('#');\r\n const url = hashIndex > -1\r\n ? (location.host && document.querySelector('base')\r\n ? base\r\n : base.slice(hashIndex)) + to\r\n : createBaseLocation() + base + to;\r\n try {\r\n // BROWSER QUIRK\r\n // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\r\n history[replace ? 'replaceState' : 'pushState'](state, '', url);\r\n historyState.value = state;\r\n }\r\n catch (err) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Error with push/replace State', err);\r\n }\r\n else {\r\n console.error(err);\r\n }\r\n // Force the navigation, this also resets the call count\r\n location[replace ? 'replace' : 'assign'](url);\r\n }\r\n }\r\n function replace(to, data) {\r\n const state = assign({}, history.state, buildState(historyState.value.back, \r\n // keep back and forward entries but override current position\r\n to, historyState.value.forward, true), data, { position: historyState.value.position });\r\n changeLocation(to, state, true);\r\n currentLocation.value = to;\r\n }\r\n function push(to, data) {\r\n // Add to current entry the information of where we are going\r\n // as well as saving the current position\r\n const currentState = assign({}, \r\n // use current history state to gracefully handle a wrong call to\r\n // history.replaceState\r\n // https://github.com/vuejs/router/issues/366\r\n historyState.value, history.state, {\r\n forward: to,\r\n scroll: computeScrollPosition(),\r\n });\r\n if ((process.env.NODE_ENV !== 'production') && !history.state) {\r\n warn(`history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\n` +\r\n `history.replaceState(history.state, '', url)\\n\\n` +\r\n `You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`);\r\n }\r\n changeLocation(currentState.current, currentState, true);\r\n const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\r\n changeLocation(to, state, false);\r\n currentLocation.value = to;\r\n }\r\n return {\r\n location: currentLocation,\r\n state: historyState,\r\n push,\r\n replace,\r\n };\r\n}\r\n/**\r\n * Creates an HTML5 history. Most common history for single page applications.\r\n *\r\n * @param base -\r\n */\r\nfunction createWebHistory(base) {\r\n base = normalizeBase(base);\r\n const historyNavigation = useHistoryStateNavigation(base);\r\n const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\r\n function go(delta, triggerListeners = true) {\r\n if (!triggerListeners)\r\n historyListeners.pauseListeners();\r\n history.go(delta);\r\n }\r\n const routerHistory = assign({\r\n // it's overridden right after\r\n location: '',\r\n base,\r\n go,\r\n createHref: createHref.bind(null, base),\r\n }, historyNavigation, historyListeners);\r\n Object.defineProperty(routerHistory, 'location', {\r\n enumerable: true,\r\n get: () => historyNavigation.location.value,\r\n });\r\n Object.defineProperty(routerHistory, 'state', {\r\n enumerable: true,\r\n get: () => historyNavigation.state.value,\r\n });\r\n return routerHistory;\r\n}\n\n/**\r\n * Creates a in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\r\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\r\n *\r\n * @param base - Base applied to all urls, defaults to '/'\r\n * @returns a history object that can be passed to the router constructor\r\n */\r\nfunction createMemoryHistory(base = '') {\r\n let listeners = [];\r\n let queue = [START];\r\n let position = 0;\r\n base = normalizeBase(base);\r\n function setLocation(location) {\r\n position++;\r\n if (position === queue.length) {\r\n // we are at the end, we can simply append a new entry\r\n queue.push(location);\r\n }\r\n else {\r\n // we are in the middle, we remove everything from here in the queue\r\n queue.splice(position);\r\n queue.push(location);\r\n }\r\n }\r\n function triggerListeners(to, from, { direction, delta }) {\r\n const info = {\r\n direction,\r\n delta,\r\n type: NavigationType.pop,\r\n };\r\n for (const callback of listeners) {\r\n callback(to, from, info);\r\n }\r\n }\r\n const routerHistory = {\r\n // rewritten by Object.defineProperty\r\n location: START,\r\n // TODO: should be kept in queue\r\n state: {},\r\n base,\r\n createHref: createHref.bind(null, base),\r\n replace(to) {\r\n // remove current entry and decrement position\r\n queue.splice(position--, 1);\r\n setLocation(to);\r\n },\r\n push(to, data) {\r\n setLocation(to);\r\n },\r\n listen(callback) {\r\n listeners.push(callback);\r\n return () => {\r\n const index = listeners.indexOf(callback);\r\n if (index > -1)\r\n listeners.splice(index, 1);\r\n };\r\n },\r\n destroy() {\r\n listeners = [];\r\n queue = [START];\r\n position = 0;\r\n },\r\n go(delta, shouldTrigger = true) {\r\n const from = this.location;\r\n const direction = \r\n // we are considering delta === 0 going forward, but in abstract mode\r\n // using 0 for the delta doesn't make sense like it does in html5 where\r\n // it reloads the page\r\n delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\r\n position = Math.max(0, Math.min(position + delta, queue.length - 1));\r\n if (shouldTrigger) {\r\n triggerListeners(this.location, from, {\r\n direction,\r\n delta,\r\n });\r\n }\r\n },\r\n };\r\n Object.defineProperty(routerHistory, 'location', {\r\n enumerable: true,\r\n get: () => queue[position],\r\n });\r\n return routerHistory;\r\n}\n\n/**\r\n * Creates a hash history. Useful for web applications with no host (e.g.\r\n * `file://`) or when configuring a server to handle any URL is not possible.\r\n *\r\n * @param base - optional base to provide. Defaults to `location.pathname +\r\n * location.search` If there is a `<base>` tag in the `head`, its value will be\r\n * ignored in favor of this parameter **but note it affects all the\r\n * history.pushState() calls**, meaning that if you use a `<base>` tag, it's\r\n * `href` value **has to match this parameter** (ignoring anything after the\r\n * `#`).\r\n *\r\n * @example\r\n * ```js\r\n * // at https://example.com/folder\r\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\r\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\r\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\r\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\r\n * // you should avoid doing this because it changes the original url and breaks copying urls\r\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\r\n *\r\n * // at file:///usr/etc/folder/index.html\r\n * // for locations with no `host`, the base is ignored\r\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\r\n * ```\r\n */\r\nfunction createWebHashHistory(base) {\r\n // Make sure this implementation is fine in terms of encoding, specially for IE11\r\n // for `file://`, directly use the pathname and ignore the base\r\n // location.pathname contains an initial `/` even at the root: `https://example.com`\r\n base = location.host ? base || location.pathname + location.search : '';\r\n // allow the user to provide a `#` in the middle: `/base/#/app`\r\n if (!base.includes('#'))\r\n base += '#';\r\n if ((process.env.NODE_ENV !== 'production') && !base.endsWith('#/') && !base.endsWith('#')) {\r\n warn(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, '#')}\".`);\r\n }\r\n return createWebHistory(base);\r\n}\n\nfunction isRouteLocation(route) {\r\n return typeof route === 'string' || (route && typeof route === 'object');\r\n}\r\nfunction isRouteName(name) {\r\n return typeof name === 'string' || typeof name === 'symbol';\r\n}\n\n/**\r\n * Initial route location where the router is. Can be used in navigation guards\r\n * to differentiate the initial navigation.\r\n *\r\n * @example\r\n * ```js\r\n * import { START_LOCATION } from 'vue-router'\r\n *\r\n * router.beforeEach((to, from) => {\r\n * if (from === START_LOCATION) {\r\n * // initial navigation\r\n * }\r\n * })\r\n * ```\r\n */\r\nconst START_LOCATION_NORMALIZED = {\r\n path: '/',\r\n name: undefined,\r\n params: {},\r\n query: {},\r\n hash: '',\r\n fullPath: '/',\r\n matched: [],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n};\n\nconst NavigationFailureSymbol = /*#__PURE__*/ PolySymbol((process.env.NODE_ENV !== 'production') ? 'navigation failure' : 'nf');\r\n/**\r\n * Enumeration with all possible types for navigation failures. Can be passed to\r\n * {@link isNavigationFailure} to check for specific failures.\r\n */\r\nvar NavigationFailureType;\r\n(function (NavigationFailureType) {\r\n /**\r\n * An aborted navigation is a navigation that failed because a navigation\r\n * guard returned `false` or called `next(false)`\r\n */\r\n NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\r\n /**\r\n * A cancelled navigation is a navigation that failed because a more recent\r\n * navigation finished started (not necessarily finished).\r\n */\r\n NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\r\n /**\r\n * A duplicated navigation is a navigation that failed because it was\r\n * initiated while already being at the exact same location.\r\n */\r\n NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\r\n})(NavigationFailureType || (NavigationFailureType = {}));\r\n// DEV only debug messages\r\nconst ErrorTypeMessages = {\r\n [1 /* MATCHER_NOT_FOUND */]({ location, currentLocation }) {\r\n return `No match for\\n ${JSON.stringify(location)}${currentLocation\r\n ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\r\n : ''}`;\r\n },\r\n [2 /* NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\r\n return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\r\n },\r\n [4 /* NAVIGATION_ABORTED */]({ from, to }) {\r\n return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\r\n },\r\n [8 /* NAVIGATION_CANCELLED */]({ from, to }) {\r\n return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\r\n },\r\n [16 /* NAVIGATION_DUPLICATED */]({ from, to }) {\r\n return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\r\n },\r\n};\r\nfunction createRouterError(type, params) {\r\n // keep full error messages in cjs versions\r\n if ((process.env.NODE_ENV !== 'production') || !true) {\r\n return assign(new Error(ErrorTypeMessages[type](params)), {\r\n type,\r\n [NavigationFailureSymbol]: true,\r\n }, params);\r\n }\r\n else {\r\n return assign(new Error(), {\r\n type,\r\n [NavigationFailureSymbol]: true,\r\n }, params);\r\n }\r\n}\r\nfunction isNavigationFailure(error, type) {\r\n return (error instanceof Error &&\r\n NavigationFailureSymbol in error &&\r\n (type == null || !!(error.type & type)));\r\n}\r\nconst propertiesToLog = ['params', 'query', 'hash'];\r\nfunction stringifyRoute(to) {\r\n if (typeof to === 'string')\r\n return to;\r\n if ('path' in to)\r\n return to.path;\r\n const location = {};\r\n for (const key of propertiesToLog) {\r\n if (key in to)\r\n location[key] = to[key];\r\n }\r\n return JSON.stringify(location, null, 2);\r\n}\n\n// default pattern for a param: non greedy everything but /\r\nconst BASE_PARAM_PATTERN = '[^/]+?';\r\nconst BASE_PATH_PARSER_OPTIONS = {\r\n sensitive: false,\r\n strict: false,\r\n start: true,\r\n end: true,\r\n};\r\n// Special Regex characters that must be escaped in static tokens\r\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\r\n/**\r\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\r\n *\r\n * @param segments - array of segments returned by tokenizePath\r\n * @param extraOptions - optional options for the regexp\r\n * @returns a PathParser\r\n */\r\nfunction tokensToParser(segments, extraOptions) {\r\n const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\r\n // the amount of scores is the same as the length of segments except for the root segment \"/\"\r\n const score = [];\r\n // the regexp as a string\r\n let pattern = options.start ? '^' : '';\r\n // extracted keys\r\n const keys = [];\r\n for (const segment of segments) {\r\n // the root segment needs special treatment\r\n const segmentScores = segment.length ? [] : [90 /* Root */];\r\n // allow trailing slash\r\n if (options.strict && !segment.length)\r\n pattern += '/';\r\n for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\r\n const token = segment[tokenIndex];\r\n // resets the score if we are inside a sub segment /:a-other-:b\r\n let subSegmentScore = 40 /* Segment */ +\r\n (options.sensitive ? 0.25 /* BonusCaseSensitive */ : 0);\r\n if (token.type === 0 /* Static */) {\r\n // prepend the slash if we are starting a new segment\r\n if (!tokenIndex)\r\n pattern += '/';\r\n pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\r\n subSegmentScore += 40 /* Static */;\r\n }\r\n else if (token.type === 1 /* Param */) {\r\n const { value, repeatable, optional, regexp } = token;\r\n keys.push({\r\n name: value,\r\n repeatable,\r\n optional,\r\n });\r\n const re = regexp ? regexp : BASE_PARAM_PATTERN;\r\n // the user provided a custom regexp /:id(\\\\d+)\r\n if (re !== BASE_PARAM_PATTERN) {\r\n subSegmentScore += 10 /* BonusCustomRegExp */;\r\n // make sure the regexp is valid before using it\r\n try {\r\n new RegExp(`(${re})`);\r\n }\r\n catch (err) {\r\n throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\r\n err.message);\r\n }\r\n }\r\n // when we repeat we must take care of the repeating leading slash\r\n let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\r\n // prepend the slash if we are starting a new segment\r\n if (!tokenIndex)\r\n subPattern =\r\n // avoid an optional / if there are more segments e.g. /:p?-static\r\n // or /:p?-:p2\r\n optional && segment.length < 2\r\n ? `(?:/${subPattern})`\r\n : '/' + subPattern;\r\n if (optional)\r\n subPattern += '?';\r\n pattern += subPattern;\r\n subSegmentScore += 20 /* Dynamic */;\r\n if (optional)\r\n subSegmentScore += -8 /* BonusOptional */;\r\n if (repeatable)\r\n subSegmentScore += -20 /* BonusRepeatable */;\r\n if (re === '.*')\r\n subSegmentScore += -50 /* BonusWildcard */;\r\n }\r\n segmentScores.push(subSegmentScore);\r\n }\r\n // an empty array like /home/ -> [[{home}], []]\r\n // if (!segment.length) pattern += '/'\r\n score.push(segmentScores);\r\n }\r\n // only apply the strict bonus to the last score\r\n if (options.strict && options.end) {\r\n const i = score.length - 1;\r\n score[i][score[i].length - 1] += 0.7000000000000001 /* BonusStrict */;\r\n }\r\n // TODO: dev only warn double trailing slash\r\n if (!options.strict)\r\n pattern += '/?';\r\n if (options.end)\r\n pattern += '$';\r\n // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\r\n else if (options.strict)\r\n pattern += '(?:/|$)';\r\n const re = new RegExp(pattern, options.sensitive ? '' : 'i');\r\n function parse(path) {\r\n const match = path.match(re);\r\n const params = {};\r\n if (!match)\r\n return null;\r\n for (let i = 1; i < match.length; i++) {\r\n const value = match[i] || '';\r\n const key = keys[i - 1];\r\n params[key.name] = value && key.repeatable ? value.split('/') : value;\r\n }\r\n return params;\r\n }\r\n function stringify(params) {\r\n let path = '';\r\n // for optional parameters to allow to be empty\r\n let avoidDuplicatedSlash = false;\r\n for (const segment of segments) {\r\n if (!avoidDuplicatedSlash || !path.endsWith('/'))\r\n path += '/';\r\n avoidDuplicatedSlash = false;\r\n for (const token of segment) {\r\n if (token.type === 0 /* Static */) {\r\n path += token.value;\r\n }\r\n else if (token.type === 1 /* Param */) {\r\n const { value, repeatable, optional } = token;\r\n const param = value in params ? params[value] : '';\r\n if (Array.isArray(param) && !repeatable)\r\n throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\r\n const text = Array.isArray(param) ? param.join('/') : param;\r\n if (!text) {\r\n if (optional) {\r\n // if we have more than one optional param like /:a?-static we\r\n // don't need to care about the optional param\r\n if (segment.length < 2) {\r\n // remove the last slash as we could be at the end\r\n if (path.endsWith('/'))\r\n path = path.slice(0, -1);\r\n // do not append a slash on the next iteration\r\n else\r\n avoidDuplicatedSlash = true;\r\n }\r\n }\r\n else\r\n throw new Error(`Missing required param \"${value}\"`);\r\n }\r\n path += text;\r\n }\r\n }\r\n }\r\n return path;\r\n }\r\n return {\r\n re,\r\n score,\r\n keys,\r\n parse,\r\n stringify,\r\n };\r\n}\r\n/**\r\n * Compares an array of numbers as used in PathParser.score and returns a\r\n * number. This function can be used to `sort` an array\r\n *\r\n * @param a - first array of numbers\r\n * @param b - second array of numbers\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n * should be sorted first\r\n */\r\nfunction compareScoreArray(a, b) {\r\n let i = 0;\r\n while (i < a.length && i < b.length) {\r\n const diff = b[i] - a[i];\r\n // only keep going if diff === 0\r\n if (diff)\r\n return diff;\r\n i++;\r\n }\r\n // if the last subsegment was Static, the shorter segments should be sorted first\r\n // otherwise sort the longest segment first\r\n if (a.length < b.length) {\r\n return a.length === 1 && a[0] === 40 /* Static */ + 40 /* Segment */\r\n ? -1\r\n : 1;\r\n }\r\n else if (a.length > b.length) {\r\n return b.length === 1 && b[0] === 40 /* Static */ + 40 /* Segment */\r\n ? 1\r\n : -1;\r\n }\r\n return 0;\r\n}\r\n/**\r\n * Compare function that can be used with `sort` to sort an array of PathParser\r\n *\r\n * @param a - first PathParser\r\n * @param b - second PathParser\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n */\r\nfunction comparePathParserScore(a, b) {\r\n let i = 0;\r\n const aScore = a.score;\r\n const bScore = b.score;\r\n while (i < aScore.length && i < bScore.length) {\r\n const comp = compareScoreArray(aScore[i], bScore[i]);\r\n // do not return if both are equal\r\n if (comp)\r\n return comp;\r\n i++;\r\n }\r\n // if a and b share the same score entries but b has more, sort b first\r\n return bScore.length - aScore.length;\r\n // this is the ternary version\r\n // return aScore.length < bScore.length\r\n // ? 1\r\n // : aScore.length > bScore.length\r\n // ? -1\r\n // : 0\r\n}\n\nconst ROOT_TOKEN = {\r\n type: 0 /* Static */,\r\n value: '',\r\n};\r\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\r\n// After some profiling, the cache seems to be unnecessary because tokenizePath\r\n// (the slowest part of adding a route) is very fast\r\n// const tokenCache = new Map<string, Token[][]>()\r\nfunction tokenizePath(path) {\r\n if (!path)\r\n return [[]];\r\n if (path === '/')\r\n return [[ROOT_TOKEN]];\r\n if (!path.startsWith('/')) {\r\n throw new Error((process.env.NODE_ENV !== 'production')\r\n ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".`\r\n : `Invalid path \"${path}\"`);\r\n }\r\n // if (tokenCache.has(path)) return tokenCache.get(path)!\r\n function crash(message) {\r\n throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\r\n }\r\n let state = 0 /* Static */;\r\n let previousState = state;\r\n const tokens = [];\r\n // the segment will always be valid because we get into the initial state\r\n // with the leading /\r\n let segment;\r\n function finalizeSegment() {\r\n if (segment)\r\n tokens.push(segment);\r\n segment = [];\r\n }\r\n // index on the path\r\n let i = 0;\r\n // char at index\r\n let char;\r\n // buffer of the value read\r\n let buffer = '';\r\n // custom regexp for a param\r\n let customRe = '';\r\n function consumeBuffer() {\r\n if (!buffer)\r\n return;\r\n if (state === 0 /* Static */) {\r\n segment.push({\r\n type: 0 /* Static */,\r\n value: buffer,\r\n });\r\n }\r\n else if (state === 1 /* Param */ ||\r\n state === 2 /* ParamRegExp */ ||\r\n state === 3 /* ParamRegExpEnd */) {\r\n if (segment.length > 1 && (char === '*' || char === '+'))\r\n crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\r\n segment.push({\r\n type: 1 /* Param */,\r\n value: buffer,\r\n regexp: customRe,\r\n repeatable: char === '*' || char === '+',\r\n optional: char === '*' || char === '?',\r\n });\r\n }\r\n else {\r\n crash('Invalid state to consume buffer');\r\n }\r\n buffer = '';\r\n }\r\n function addCharToBuffer() {\r\n buffer += char;\r\n }\r\n while (i < path.length) {\r\n char = path[i++];\r\n if (char === '\\\\' && state !== 2 /* ParamRegExp */) {\r\n previousState = state;\r\n state = 4 /* EscapeNext */;\r\n continue;\r\n }\r\n switch (state) {\r\n case 0 /* Static */:\r\n if (char === '/') {\r\n if (buffer) {\r\n consumeBuffer();\r\n }\r\n finalizeSegment();\r\n }\r\n else if (char === ':') {\r\n consumeBuffer();\r\n state = 1 /* Param */;\r\n }\r\n else {\r\n addCharToBuffer();\r\n }\r\n break;\r\n case 4 /* EscapeNext */:\r\n addCharToBuffer();\r\n state = previousState;\r\n break;\r\n case 1 /* Param */:\r\n if (char === '(') {\r\n state = 2 /* ParamRegExp */;\r\n }\r\n else if (VALID_PARAM_RE.test(char)) {\r\n addCharToBuffer();\r\n }\r\n else {\r\n consumeBuffer();\r\n state = 0 /* Static */;\r\n // go back one character if we were not modifying\r\n if (char !== '*' && char !== '?' && char !== '+')\r\n i--;\r\n }\r\n break;\r\n case 2 /* ParamRegExp */:\r\n // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\r\n // it already works by escaping the closing )\r\n // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\r\n // is this really something people need since you can also write\r\n // /prefix_:p()_suffix\r\n if (char === ')') {\r\n // handle the escaped )\r\n if (customRe[customRe.length - 1] == '\\\\')\r\n customRe = customRe.slice(0, -1) + char;\r\n else\r\n state = 3 /* ParamRegExpEnd */;\r\n }\r\n else {\r\n customRe += char;\r\n }\r\n break;\r\n case 3 /* ParamRegExpEnd */:\r\n // same as finalizing a param\r\n consumeBuffer();\r\n state = 0 /* Static */;\r\n // go back one character if we were not modifying\r\n if (char !== '*' && char !== '?' && char !== '+')\r\n i--;\r\n customRe = '';\r\n break;\r\n default:\r\n crash('Unknown state');\r\n break;\r\n }\r\n }\r\n if (state === 2 /* ParamRegExp */)\r\n crash(`Unfinished custom RegExp for param \"${buffer}\"`);\r\n consumeBuffer();\r\n finalizeSegment();\r\n // tokenCache.set(path, tokens)\r\n return tokens;\r\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\r\n const parser = tokensToParser(tokenizePath(record.path), options);\r\n // warn against params with the same name\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const existingKeys = new Set();\r\n for (const key of parser.keys) {\r\n if (existingKeys.has(key.name))\r\n warn(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\r\n existingKeys.add(key.name);\r\n }\r\n }\r\n const matcher = assign(parser, {\r\n record,\r\n parent,\r\n // these needs to be populated by the parent\r\n children: [],\r\n alias: [],\r\n });\r\n if (parent) {\r\n // both are aliases or both are not aliases\r\n // we don't want to mix them because the order is used when\r\n // passing originalRecord in Matcher.addRoute\r\n if (!matcher.record.aliasOf === !parent.record.aliasOf)\r\n parent.children.push(matcher);\r\n }\r\n return matcher;\r\n}\n\n/**\r\n * Creates a Router Matcher.\r\n *\r\n * @internal\r\n * @param routes - array of initial routes\r\n * @param globalOptions - global route options\r\n */\r\nfunction createRouterMatcher(routes, globalOptions) {\r\n // normalized ordered array of matchers\r\n const matchers = [];\r\n const matcherMap = new Map();\r\n globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\r\n function getRecordMatcher(name) {\r\n return matcherMap.get(name);\r\n }\r\n function addRoute(record, parent, originalRecord) {\r\n // used later on to remove by name\r\n const isRootAdd = !originalRecord;\r\n const mainNormalizedRecord = normalizeRouteRecord(record);\r\n // we might be the child of an alias\r\n mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\r\n const options = mergeOptions(globalOptions, record);\r\n // generate an array of records to correctly handle aliases\r\n const normalizedRecords = [\r\n mainNormalizedRecord,\r\n ];\r\n if ('alias' in record) {\r\n const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\r\n for (const alias of aliases) {\r\n normalizedRecords.push(assign({}, mainNormalizedRecord, {\r\n // this allows us to hold a copy of the `components` option\r\n // so that async components cache is hold on the original record\r\n components: originalRecord\r\n ? originalRecord.record.components\r\n : mainNormalizedRecord.components,\r\n path: alias,\r\n // we might be the child of an alias\r\n aliasOf: originalRecord\r\n ? originalRecord.record\r\n : mainNormalizedRecord,\r\n // the aliases are always of the same kind as the original since they\r\n // are defined on the same record\r\n }));\r\n }\r\n }\r\n let matcher;\r\n let originalMatcher;\r\n for (const normalizedRecord of normalizedRecords) {\r\n const { path } = normalizedRecord;\r\n // Build up the path for nested routes if the child isn't an absolute\r\n // route. Only add the / delimiter if the child path isn't empty and if the\r\n // parent path doesn't have a trailing slash\r\n if (parent && path[0] !== '/') {\r\n const parentPath = parent.record.path;\r\n const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\r\n normalizedRecord.path =\r\n parent.record.path + (path && connectingSlash + path);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && normalizedRecord.path === '*') {\r\n throw new Error('Catch all routes (\"*\") must now be defined using a param with a custom regexp.\\n' +\r\n 'See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.');\r\n }\r\n // create the object before hand so it can be passed to children\r\n matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\r\n if ((process.env.NODE_ENV !== 'production') && parent && path[0] === '/')\r\n checkMissingParamsInAbsolutePath(matcher, parent);\r\n // if we are an alias we must tell the original record that we exist\r\n // so we can be removed\r\n if (originalRecord) {\r\n originalRecord.alias.push(matcher);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkSameParams(originalRecord, matcher);\r\n }\r\n }\r\n else {\r\n // otherwise, the first record is the original and others are aliases\r\n originalMatcher = originalMatcher || matcher;\r\n if (originalMatcher !== matcher)\r\n originalMatcher.alias.push(matcher);\r\n // remove the route if named and only for the top record (avoid in nested calls)\r\n // this works because the original record is the first one\r\n if (isRootAdd && record.name && !isAliasRecord(matcher))\r\n removeRoute(record.name);\r\n }\r\n if ('children' in mainNormalizedRecord) {\r\n const children = mainNormalizedRecord.children;\r\n for (let i = 0; i < children.length; i++) {\r\n addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\r\n }\r\n }\r\n // if there was no original record, then the first one was not an alias and all\r\n // other alias (if any) need to reference this record when adding children\r\n originalRecord = originalRecord || matcher;\r\n // TODO: add normalized records for more flexibility\r\n // if (parent && isAliasRecord(originalRecord)) {\r\n // parent.children.push(originalRecord)\r\n // }\r\n insertMatcher(matcher);\r\n }\r\n return originalMatcher\r\n ? () => {\r\n // since other matchers are aliases, they should be removed by the original matcher\r\n removeRoute(originalMatcher);\r\n }\r\n : noop;\r\n }\r\n function removeRoute(matcherRef) {\r\n if (isRouteName(matcherRef)) {\r\n const matcher = matcherMap.get(matcherRef);\r\n if (matcher) {\r\n matcherMap.delete(matcherRef);\r\n matchers.splice(matchers.indexOf(matcher), 1);\r\n matcher.children.forEach(removeRoute);\r\n matcher.alias.forEach(removeRoute);\r\n }\r\n }\r\n else {\r\n const index = matchers.indexOf(matcherRef);\r\n if (index > -1) {\r\n matchers.splice(index, 1);\r\n if (matcherRef.record.name)\r\n matcherMap.delete(matcherRef.record.name);\r\n matcherRef.children.forEach(removeRoute);\r\n matcherRef.alias.forEach(removeRoute);\r\n }\r\n }\r\n }\r\n function getRoutes() {\r\n return matchers;\r\n }\r\n function insertMatcher(matcher) {\r\n let i = 0;\r\n while (i < matchers.length &&\r\n comparePathParserScore(matcher, matchers[i]) >= 0 &&\r\n // Adding children with empty path should still appear before the parent\r\n // https://github.com/vuejs/router/issues/1124\r\n (matcher.record.path !== matchers[i].record.path ||\r\n !isRecordChildOf(matcher, matchers[i])))\r\n i++;\r\n matchers.splice(i, 0, matcher);\r\n // only add the original record to the name map\r\n if (matcher.record.name && !isAliasRecord(matcher))\r\n matcherMap.set(matcher.record.name, matcher);\r\n }\r\n function resolve(location, currentLocation) {\r\n let matcher;\r\n let params = {};\r\n let path;\r\n let name;\r\n if ('name' in location && location.name) {\r\n matcher = matcherMap.get(location.name);\r\n if (!matcher)\r\n throw createRouterError(1 /* MATCHER_NOT_FOUND */, {\r\n location,\r\n });\r\n name = matcher.record.name;\r\n params = assign(\r\n // paramsFromLocation is a new object\r\n paramsFromLocation(currentLocation.params, \r\n // only keep params that exist in the resolved location\r\n // TODO: only keep optional params coming from a parent record\r\n matcher.keys.filter(k => !k.optional).map(k => k.name)), location.params);\r\n // throws if cannot be stringified\r\n path = matcher.stringify(params);\r\n }\r\n else if ('path' in location) {\r\n // no need to resolve the path with the matcher as it was provided\r\n // this also allows the user to control the encoding\r\n path = location.path;\r\n if ((process.env.NODE_ENV !== 'production') && !path.startsWith('/')) {\r\n warn(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/router.`);\r\n }\r\n matcher = matchers.find(m => m.re.test(path));\r\n // matcher should have a value after the loop\r\n if (matcher) {\r\n // TODO: dev warning of unused params if provided\r\n // we know the matcher works because we tested the regexp\r\n params = matcher.parse(path);\r\n name = matcher.record.name;\r\n }\r\n // location is a relative path\r\n }\r\n else {\r\n // match by name or path of current route\r\n matcher = currentLocation.name\r\n ? matcherMap.get(currentLocation.name)\r\n : matchers.find(m => m.re.test(currentLocation.path));\r\n if (!matcher)\r\n throw createRouterError(1 /* MATCHER_NOT_FOUND */, {\r\n location,\r\n currentLocation,\r\n });\r\n name = matcher.record.name;\r\n // since we are navigating to the same location, we don't need to pick the\r\n // params like when `name` is provided\r\n params = assign({}, currentLocation.params, location.params);\r\n path = matcher.stringify(params);\r\n }\r\n const matched = [];\r\n let parentMatcher = matcher;\r\n while (parentMatcher) {\r\n // reversed order so parents are at the beginning\r\n matched.unshift(parentMatcher.record);\r\n parentMatcher = parentMatcher.parent;\r\n }\r\n return {\r\n name,\r\n path,\r\n params,\r\n matched,\r\n meta: mergeMetaFields(matched),\r\n };\r\n }\r\n // add initial routes\r\n routes.forEach(route => addRoute(route));\r\n return { addRoute, resolve, removeRoute, getRoutes, getRecordMatcher };\r\n}\r\nfunction paramsFromLocation(params, keys) {\r\n const newParams = {};\r\n for (const key of keys) {\r\n if (key in params)\r\n newParams[key] = params[key];\r\n }\r\n return newParams;\r\n}\r\n/**\r\n * Normalizes a RouteRecordRaw. Creates a copy\r\n *\r\n * @param record\r\n * @returns the normalized version\r\n */\r\nfunction normalizeRouteRecord(record) {\r\n return {\r\n path: record.path,\r\n redirect: record.redirect,\r\n name: record.name,\r\n meta: record.meta || {},\r\n aliasOf: undefined,\r\n beforeEnter: record.beforeEnter,\r\n props: normalizeRecordProps(record),\r\n children: record.children || [],\r\n instances: {},\r\n leaveGuards: new Set(),\r\n updateGuards: new Set(),\r\n enterCallbacks: {},\r\n components: 'components' in record\r\n ? record.components || {}\r\n : { default: record.component },\r\n };\r\n}\r\n/**\r\n * Normalize the optional `props` in a record to always be an object similar to\r\n * components. Also accept a boolean for components.\r\n * @param record\r\n */\r\nfunction normalizeRecordProps(record) {\r\n const propsObject = {};\r\n // props does not exist on redirect records but we can set false directly\r\n const props = record.props || false;\r\n if ('component' in record) {\r\n propsObject.default = props;\r\n }\r\n else {\r\n // NOTE: we could also allow a function to be applied to every component.\r\n // Would need user feedback for use cases\r\n for (const name in record.components)\r\n propsObject[name] = typeof props === 'boolean' ? props : props[name];\r\n }\r\n return propsObject;\r\n}\r\n/**\r\n * Checks if a record or any of its parent is an alias\r\n * @param record\r\n */\r\nfunction isAliasRecord(record) {\r\n while (record) {\r\n if (record.record.aliasOf)\r\n return true;\r\n record = record.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Merge meta fields of an array of records\r\n *\r\n * @param matched - array of matched records\r\n */\r\nfunction mergeMetaFields(matched) {\r\n return matched.reduce((meta, record) => assign(meta, record.meta), {});\r\n}\r\nfunction mergeOptions(defaults, partialOptions) {\r\n const options = {};\r\n for (const key in defaults) {\r\n options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\r\n }\r\n return options;\r\n}\r\nfunction isSameParam(a, b) {\r\n return (a.name === b.name &&\r\n a.optional === b.optional &&\r\n a.repeatable === b.repeatable);\r\n}\r\n/**\r\n * Check if a path and its alias have the same required params\r\n *\r\n * @param a - original record\r\n * @param b - alias record\r\n */\r\nfunction checkSameParams(a, b) {\r\n for (const key of a.keys) {\r\n if (!key.optional && !b.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" should have the exact same param named \"${key.name}\"`);\r\n }\r\n for (const key of b.keys) {\r\n if (!key.optional && !a.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" should have the exact same param named \"${key.name}\"`);\r\n }\r\n}\r\nfunction checkMissingParamsInAbsolutePath(record, parent) {\r\n for (const key of parent.keys) {\r\n if (!record.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Absolute path \"${record.record.path}\" should have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\r\n }\r\n}\r\nfunction isRecordChildOf(record, parent) {\r\n return parent.children.some(child => child === record || isRecordChildOf(record, child));\r\n}\n\n/**\r\n * Encoding Rules \u2423 = Space Path: \u2423 \" < > # ? { } Query: \u2423 \" < > # & = Hash: \u2423 \"\r\n * < > `\r\n *\r\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n * defines some extra characters to be encoded. Most browsers do not encode them\r\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n * also encode `!'()*`. Leaving unencoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n * plus `-._~`. This extra safety should be applied to query by patching the\r\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n * encoded everywhere because some browsers like FF encode it when directly\r\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n */\r\n// const EXTRA_RESERVED_RE = /[!'()*]/g\r\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\r\nconst HASH_RE = /#/g; // %23\r\nconst AMPERSAND_RE = /&/g; // %26\r\nconst SLASH_RE = /\\//g; // %2F\r\nconst EQUAL_RE = /=/g; // %3D\r\nconst IM_RE = /\\?/g; // %3F\r\nconst PLUS_RE = /\\+/g; // %2B\r\n/**\r\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n * seems to be less flexible than not doing so and I can't find out the legacy\r\n * systems requiring this for regular requests like text/html. In the standard,\r\n * the encoding of the plus character is only mentioned for\r\n * application/x-www-form-urlencoded\r\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n * leave the plus character as is in queries. To be more flexible, we allow the\r\n * plus character on the query but it can also be manually encoded by the user.\r\n *\r\n * Resources:\r\n * - https://url.spec.whatwg.org/#urlencoded-parsing\r\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n */\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\r\nconst ENC_CARET_RE = /%5E/g; // ^\r\nconst ENC_BACKTICK_RE = /%60/g; // `\r\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\r\nconst ENC_PIPE_RE = /%7C/g; // |\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\r\nconst ENC_SPACE_RE = /%20/g; // }\r\n/**\r\n * Encode characters that need to be encoded on the path, search and hash\r\n * sections of the URL.\r\n *\r\n * @internal\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction commonEncode(text) {\r\n return encodeURI('' + text)\r\n .replace(ENC_PIPE_RE, '|')\r\n .replace(ENC_BRACKET_OPEN_RE, '[')\r\n .replace(ENC_BRACKET_CLOSE_RE, ']');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the hash section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeHash(text) {\r\n return commonEncode(text)\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^');\r\n}\r\n/**\r\n * Encode characters that need to be encoded query values on the query\r\n * section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeQueryValue(text) {\r\n return (commonEncode(text)\r\n // Encode the space as +, encode the + to differentiate it from the space\r\n .replace(PLUS_RE, '%2B')\r\n .replace(ENC_SPACE_RE, '+')\r\n .replace(HASH_RE, '%23')\r\n .replace(AMPERSAND_RE, '%26')\r\n .replace(ENC_BACKTICK_RE, '`')\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^'));\r\n}\r\n/**\r\n * Like `encodeQueryValue` but also encodes the `=` character.\r\n *\r\n * @param text - string to encode\r\n */\r\nfunction encodeQueryKey(text) {\r\n return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodePath(text) {\r\n return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL as a\r\n * param. This function encodes everything {@link encodePath} does plus the\r\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n * string instead.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeParam(text) {\r\n return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\r\n}\r\n/**\r\n * Decode text using `decodeURIComponent`. Returns the original text if it\r\n * fails.\r\n *\r\n * @param text - string to decode\r\n * @returns decoded string\r\n */\r\nfunction decode(text) {\r\n try {\r\n return decodeURIComponent('' + text);\r\n }\r\n catch (err) {\r\n (process.env.NODE_ENV !== 'production') && warn(`Error decoding \"${text}\". Using original value`);\r\n }\r\n return '' + text;\r\n}\n\n/**\r\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n * version with the leading `?` and without Should work as URLSearchParams\r\n\n * @internal\r\n *\r\n * @param search - search string to parse\r\n * @returns a query object\r\n */\r\nfunction parseQuery(search) {\r\n const query = {};\r\n // avoid creating an object with an empty key and empty value\r\n // because of split('&')\r\n if (search === '' || search === '?')\r\n return query;\r\n const hasLeadingIM = search[0] === '?';\r\n const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\r\n for (let i = 0; i < searchParams.length; ++i) {\r\n // pre decode the + into space\r\n const searchParam = searchParams[i].replace(PLUS_RE, ' ');\r\n // allow the = character\r\n const eqPos = searchParam.indexOf('=');\r\n const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\r\n const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\r\n if (key in query) {\r\n // an extra variable for ts types\r\n let currentValue = query[key];\r\n if (!Array.isArray(currentValue)) {\r\n currentValue = query[key] = [currentValue];\r\n }\r\n currentValue.push(value);\r\n }\r\n else {\r\n query[key] = value;\r\n }\r\n }\r\n return query;\r\n}\r\n/**\r\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n * doesn't prepend a `?`\r\n *\r\n * @internal\r\n *\r\n * @param query - query object to stringify\r\n * @returns string version of the query without the leading `?`\r\n */\r\nfunction stringifyQuery(query) {\r\n let search = '';\r\n for (let key in query) {\r\n const value = query[key];\r\n key = encodeQueryKey(key);\r\n if (value == null) {\r\n // only null adds the value\r\n if (value !== undefined) {\r\n search += (search.length ? '&' : '') + key;\r\n }\r\n continue;\r\n }\r\n // keep null values\r\n const values = Array.isArray(value)\r\n ? value.map(v => v && encodeQueryValue(v))\r\n : [value && encodeQueryValue(value)];\r\n values.forEach(value => {\r\n // skip undefined values in arrays as if they were not present\r\n // smaller code than using filter\r\n if (value !== undefined) {\r\n // only append & with non-empty search\r\n search += (search.length ? '&' : '') + key;\r\n if (value != null)\r\n search += '=' + value;\r\n }\r\n });\r\n }\r\n return search;\r\n}\r\n/**\r\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\r\n * numbers into strings, removing keys with an undefined value and replacing\r\n * undefined with null in arrays\r\n *\r\n * @param query - query object to normalize\r\n * @returns a normalized query object\r\n */\r\nfunction normalizeQuery(query) {\r\n const normalizedQuery = {};\r\n for (const key in query) {\r\n const value = query[key];\r\n if (value !== undefined) {\r\n normalizedQuery[key] = Array.isArray(value)\r\n ? value.map(v => (v == null ? null : '' + v))\r\n : value == null\r\n ? value\r\n : '' + value;\r\n }\r\n }\r\n return normalizedQuery;\r\n}\n\n/**\r\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\r\n */\r\nfunction useCallbacks() {\r\n let handlers = [];\r\n function add(handler) {\r\n handlers.push(handler);\r\n return () => {\r\n const i = handlers.indexOf(handler);\r\n if (i > -1)\r\n handlers.splice(i, 1);\r\n };\r\n }\r\n function reset() {\r\n handlers = [];\r\n }\r\n return {\r\n add,\r\n list: () => handlers,\r\n reset,\r\n };\r\n}\n\nfunction registerGuard(record, name, guard) {\r\n const removeFromList = () => {\r\n record[name].delete(guard);\r\n };\r\n onUnmounted(removeFromList);\r\n onDeactivated(removeFromList);\r\n onActivated(() => {\r\n record[name].add(guard);\r\n });\r\n record[name].add(guard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the component for the current\r\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\r\n * used in any component. The guard is removed when the component is unmounted.\r\n *\r\n * @param leaveGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteLeave(leaveGuard) {\r\n if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n warn('getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function');\r\n return;\r\n }\r\n const activeRecord = inject(matchedRouteKey, \r\n // to avoid warning\r\n {}).value;\r\n if (!activeRecord) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside of a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n return;\r\n }\r\n registerGuard(activeRecord, 'leaveGuards', leaveGuard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the current location is about\r\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\r\n * component. The guard is removed when the component is unmounted.\r\n *\r\n * @param updateGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteUpdate(updateGuard) {\r\n if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n warn('getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function');\r\n return;\r\n }\r\n const activeRecord = inject(matchedRouteKey, \r\n // to avoid warning\r\n {}).value;\r\n if (!activeRecord) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside of a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n return;\r\n }\r\n registerGuard(activeRecord, 'updateGuards', updateGuard);\r\n}\r\nfunction guardToPromiseFn(guard, to, from, record, name) {\r\n // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\r\n const enterCallbackArray = record &&\r\n // name is defined if record is because of the function overload\r\n (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\r\n return () => new Promise((resolve, reject) => {\r\n const next = (valid) => {\r\n if (valid === false)\r\n reject(createRouterError(4 /* NAVIGATION_ABORTED */, {\r\n from,\r\n to,\r\n }));\r\n else if (valid instanceof Error) {\r\n reject(valid);\r\n }\r\n else if (isRouteLocation(valid)) {\r\n reject(createRouterError(2 /* NAVIGATION_GUARD_REDIRECT */, {\r\n from: to,\r\n to: valid,\r\n }));\r\n }\r\n else {\r\n if (enterCallbackArray &&\r\n // since enterCallbackArray is truthy, both record and name also are\r\n record.enterCallbacks[name] === enterCallbackArray &&\r\n typeof valid === 'function')\r\n enterCallbackArray.push(valid);\r\n resolve();\r\n }\r\n };\r\n // wrapping with Promise.resolve allows it to work with both async and sync guards\r\n const guardReturn = guard.call(record && record.instances[name], to, from, (process.env.NODE_ENV !== 'production') ? canOnlyBeCalledOnce(next, to, from) : next);\r\n let guardCall = Promise.resolve(guardReturn);\r\n if (guard.length < 3)\r\n guardCall = guardCall.then(next);\r\n if ((process.env.NODE_ENV !== 'production') && guard.length > 2) {\r\n const message = `The \"next\" callback was never called inside of ${guard.name ? '\"' + guard.name + '\"' : ''}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\r\n if (typeof guardReturn === 'object' && 'then' in guardReturn) {\r\n guardCall = guardCall.then(resolvedValue => {\r\n // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n if (!next._called) {\r\n warn(message);\r\n return Promise.reject(new Error('Invalid navigation guard'));\r\n }\r\n return resolvedValue;\r\n });\r\n // TODO: test me!\r\n }\r\n else if (guardReturn !== undefined) {\r\n // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n if (!next._called) {\r\n warn(message);\r\n reject(new Error('Invalid navigation guard'));\r\n return;\r\n }\r\n }\r\n }\r\n guardCall.catch(err => reject(err));\r\n });\r\n}\r\nfunction canOnlyBeCalledOnce(next, to, from) {\r\n let called = 0;\r\n return function () {\r\n if (called++ === 1)\r\n warn(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\r\n // @ts-expect-error: we put it in the original one because it's easier to check\r\n next._called = true;\r\n if (called === 1)\r\n next.apply(null, arguments);\r\n };\r\n}\r\nfunction extractComponentsGuards(matched, guardType, to, from) {\r\n const guards = [];\r\n for (const record of matched) {\r\n for (const name in record.components) {\r\n let rawComponent = record.components[name];\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (!rawComponent ||\r\n (typeof rawComponent !== 'object' &&\r\n typeof rawComponent !== 'function')) {\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is not` +\r\n ` a valid component. Received \"${String(rawComponent)}\".`);\r\n // throw to ensure we stop here but warn to ensure the message isn't\r\n // missed by the user\r\n throw new Error('Invalid route component');\r\n }\r\n else if ('then' in rawComponent) {\r\n // warn if user wrote import('/component.vue') instead of () =>\r\n // import('./component.vue')\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is a ` +\r\n `Promise instead of a function that returns a Promise. Did you ` +\r\n `write \"import('./MyPage.vue')\" instead of ` +\r\n `\"() => import('./MyPage.vue')\" ? This will break in ` +\r\n `production if not fixed.`);\r\n const promise = rawComponent;\r\n rawComponent = () => promise;\r\n }\r\n else if (rawComponent.__asyncLoader &&\r\n // warn only once per component\r\n !rawComponent.__warnedDefineAsync) {\r\n rawComponent.__warnedDefineAsync = true;\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is defined ` +\r\n `using \"defineAsyncComponent()\". ` +\r\n `Write \"() => import('./MyPage.vue')\" instead of ` +\r\n `\"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\r\n }\r\n }\r\n // skip update and leave guards if the route component is not mounted\r\n if (guardType !== 'beforeRouteEnter' && !record.instances[name])\r\n continue;\r\n if (isRouteComponent(rawComponent)) {\r\n // __vccOpts is added by vue-class-component and contain the regular options\r\n const options = rawComponent.__vccOpts || rawComponent;\r\n const guard = options[guardType];\r\n guard && guards.push(guardToPromiseFn(guard, to, from, record, name));\r\n }\r\n else {\r\n // start requesting the chunk already\r\n let componentPromise = rawComponent();\r\n if ((process.env.NODE_ENV !== 'production') && !('catch' in componentPromise)) {\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\r\n componentPromise = Promise.resolve(componentPromise);\r\n }\r\n guards.push(() => componentPromise.then(resolved => {\r\n if (!resolved)\r\n return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`));\r\n const resolvedComponent = isESModule(resolved)\r\n ? resolved.default\r\n : resolved;\r\n // replace the function with the resolved component\r\n record.components[name] = resolvedComponent;\r\n // __vccOpts is added by vue-class-component and contain the regular options\r\n const options = resolvedComponent.__vccOpts || resolvedComponent;\r\n const guard = options[guardType];\r\n return guard && guardToPromiseFn(guard, to, from, record, name)();\r\n }));\r\n }\r\n }\r\n }\r\n return guards;\r\n}\r\n/**\r\n * Allows differentiating lazy components from functional components and vue-class-component\r\n *\r\n * @param component\r\n */\r\nfunction isRouteComponent(component) {\r\n return (typeof component === 'object' ||\r\n 'displayName' in component ||\r\n 'props' in component ||\r\n '__vccOpts' in component);\r\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\r\n// `isExactActive` behavior should go through an RFC\r\nfunction useLink(props) {\r\n const router = inject(routerKey);\r\n const currentRoute = inject(routeLocationKey);\r\n const route = computed(() => router.resolve(unref(props.to)));\r\n const activeRecordIndex = computed(() => {\r\n const { matched } = route.value;\r\n const { length } = matched;\r\n const routeMatched = matched[length - 1];\r\n const currentMatched = currentRoute.matched;\r\n if (!routeMatched || !currentMatched.length)\r\n return -1;\r\n const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\r\n if (index > -1)\r\n return index;\r\n // possible parent record\r\n const parentRecordPath = getOriginalPath(matched[length - 2]);\r\n return (\r\n // we are dealing with nested routes\r\n length > 1 &&\r\n // if the parent and matched route have the same path, this link is\r\n // referring to the empty child. Or we currently are on a different\r\n // child of the same parent\r\n getOriginalPath(routeMatched) === parentRecordPath &&\r\n // avoid comparing the child with its parent\r\n currentMatched[currentMatched.length - 1].path !== parentRecordPath\r\n ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\r\n : index);\r\n });\r\n const isActive = computed(() => activeRecordIndex.value > -1 &&\r\n includesParams(currentRoute.params, route.value.params));\r\n const isExactActive = computed(() => activeRecordIndex.value > -1 &&\r\n activeRecordIndex.value === currentRoute.matched.length - 1 &&\r\n isSameRouteLocationParams(currentRoute.params, route.value.params));\r\n function navigate(e = {}) {\r\n if (guardEvent(e)) {\r\n return router[unref(props.replace) ? 'replace' : 'push'](unref(props.to)\r\n // avoid uncaught errors are they are logged anyway\r\n ).catch(noop);\r\n }\r\n return Promise.resolve();\r\n }\r\n // devtools only\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n const instance = getCurrentInstance();\r\n if (instance) {\r\n const linkContextDevtools = {\r\n route: route.value,\r\n isActive: isActive.value,\r\n isExactActive: isExactActive.value,\r\n };\r\n // @ts-expect-error: this is internal\r\n instance.__vrl_devtools = instance.__vrl_devtools || [];\r\n // @ts-expect-error: this is internal\r\n instance.__vrl_devtools.push(linkContextDevtools);\r\n watchEffect(() => {\r\n linkContextDevtools.route = route.value;\r\n linkContextDevtools.isActive = isActive.value;\r\n linkContextDevtools.isExactActive = isExactActive.value;\r\n }, { flush: 'post' });\r\n }\r\n }\r\n return {\r\n route,\r\n href: computed(() => route.value.href),\r\n isActive,\r\n isExactActive,\r\n navigate,\r\n };\r\n}\r\nconst RouterLinkImpl = /*#__PURE__*/ defineComponent({\r\n name: 'RouterLink',\r\n props: {\r\n to: {\r\n type: [String, Object],\r\n required: true,\r\n },\r\n replace: Boolean,\r\n activeClass: String,\r\n // inactiveClass: String,\r\n exactActiveClass: String,\r\n custom: Boolean,\r\n ariaCurrentValue: {\r\n type: String,\r\n default: 'page',\r\n },\r\n },\r\n useLink,\r\n setup(props, { slots }) {\r\n const link = reactive(useLink(props));\r\n const { options } = inject(routerKey);\r\n const elClass = computed(() => ({\r\n [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\r\n // [getLinkClass(\r\n // props.inactiveClass,\r\n // options.linkInactiveClass,\r\n // 'router-link-inactive'\r\n // )]: !link.isExactActive,\r\n [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\r\n }));\r\n return () => {\r\n const children = slots.default && slots.default(link);\r\n return props.custom\r\n ? children\r\n : h('a', {\r\n 'aria-current': link.isExactActive\r\n ? props.ariaCurrentValue\r\n : null,\r\n href: link.href,\r\n // this would override user added attrs but Vue will still add\r\n // the listener so we end up triggering both\r\n onClick: link.navigate,\r\n class: elClass.value,\r\n }, children);\r\n };\r\n },\r\n});\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to render a link that triggers a navigation on click.\r\n */\r\nconst RouterLink = RouterLinkImpl;\r\nfunction guardEvent(e) {\r\n // don't redirect with control keys\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\r\n return;\r\n // don't redirect when preventDefault called\r\n if (e.defaultPrevented)\r\n return;\r\n // don't redirect on right click\r\n if (e.button !== undefined && e.button !== 0)\r\n return;\r\n // don't redirect if `target=\"_blank\"`\r\n // @ts-expect-error getAttribute does exist\r\n if (e.currentTarget && e.currentTarget.getAttribute) {\r\n // @ts-expect-error getAttribute exists\r\n const target = e.currentTarget.getAttribute('target');\r\n if (/\\b_blank\\b/i.test(target))\r\n return;\r\n }\r\n // this may be a Weex event which doesn't have this method\r\n if (e.preventDefault)\r\n e.preventDefault();\r\n return true;\r\n}\r\nfunction includesParams(outer, inner) {\r\n for (const key in inner) {\r\n const innerValue = inner[key];\r\n const outerValue = outer[key];\r\n if (typeof innerValue === 'string') {\r\n if (innerValue !== outerValue)\r\n return false;\r\n }\r\n else {\r\n if (!Array.isArray(outerValue) ||\r\n outerValue.length !== innerValue.length ||\r\n innerValue.some((value, i) => value !== outerValue[i]))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Get the original path value of a record by following its aliasOf\r\n * @param record\r\n */\r\nfunction getOriginalPath(record) {\r\n return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\r\n}\r\n/**\r\n * Utility class to get the active class based on defaults.\r\n * @param propClass\r\n * @param globalClass\r\n * @param defaultClass\r\n */\r\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\r\n ? propClass\r\n : globalClass != null\r\n ? globalClass\r\n : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ defineComponent({\r\n name: 'RouterView',\r\n // #674 we manually inherit them\r\n inheritAttrs: false,\r\n props: {\r\n name: {\r\n type: String,\r\n default: 'default',\r\n },\r\n route: Object,\r\n },\r\n setup(props, { attrs, slots }) {\r\n (process.env.NODE_ENV !== 'production') && warnDeprecatedUsage();\r\n const injectedRoute = inject(routerViewLocationKey);\r\n const routeToDisplay = computed(() => props.route || injectedRoute.value);\r\n const depth = inject(viewDepthKey, 0);\r\n const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth]);\r\n provide(viewDepthKey, depth + 1);\r\n provide(matchedRouteKey, matchedRouteRef);\r\n provide(routerViewLocationKey, routeToDisplay);\r\n const viewRef = ref();\r\n // watch at the same time the component instance, the route record we are\r\n // rendering, and the name\r\n watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\r\n // copy reused instances\r\n if (to) {\r\n // this will update the instance for new instances as well as reused\r\n // instances when navigating to a new route\r\n to.instances[name] = instance;\r\n // the component instance is reused for a different route or name so\r\n // we copy any saved update or leave guards. With async setup, the\r\n // mounting component will mount before the matchedRoute changes,\r\n // making instance === oldInstance, so we check if guards have been\r\n // added before. This works because we remove guards when\r\n // unmounting/deactivating components\r\n if (from && from !== to && instance && instance === oldInstance) {\r\n if (!to.leaveGuards.size) {\r\n to.leaveGuards = from.leaveGuards;\r\n }\r\n if (!to.updateGuards.size) {\r\n to.updateGuards = from.updateGuards;\r\n }\r\n }\r\n }\r\n // trigger beforeRouteEnter next callbacks\r\n if (instance &&\r\n to &&\r\n // if there is no instance but to and from are the same this might be\r\n // the first visit\r\n (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\r\n (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\r\n }\r\n }, { flush: 'post' });\r\n return () => {\r\n const route = routeToDisplay.value;\r\n const matchedRoute = matchedRouteRef.value;\r\n const ViewComponent = matchedRoute && matchedRoute.components[props.name];\r\n // we need the value at the time we render because when we unmount, we\r\n // navigated to a different location so the value is different\r\n const currentName = props.name;\r\n if (!ViewComponent) {\r\n return normalizeSlot(slots.default, { Component: ViewComponent, route });\r\n }\r\n // props from route configuration\r\n const routePropsOption = matchedRoute.props[props.name];\r\n const routeProps = routePropsOption\r\n ? routePropsOption === true\r\n ? route.params\r\n : typeof routePropsOption === 'function'\r\n ? routePropsOption(route)\r\n : routePropsOption\r\n : null;\r\n const onVnodeUnmounted = vnode => {\r\n // remove the instance reference to prevent leak\r\n if (vnode.component.isUnmounted) {\r\n matchedRoute.instances[currentName] = null;\r\n }\r\n };\r\n const component = h(ViewComponent, assign({}, routeProps, attrs, {\r\n onVnodeUnmounted,\r\n ref: viewRef,\r\n }));\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n isBrowser &&\r\n component.ref) {\r\n // TODO: can display if it's an alias, its props\r\n const info = {\r\n depth,\r\n name: matchedRoute.name,\r\n path: matchedRoute.path,\r\n meta: matchedRoute.meta,\r\n };\r\n const internalInstances = Array.isArray(component.ref)\r\n ? component.ref.map(r => r.i)\r\n : [component.ref.i];\r\n internalInstances.forEach(instance => {\r\n // @ts-expect-error\r\n instance.__vrv_devtools = info;\r\n });\r\n }\r\n return (\r\n // pass the vnode to the slot as a prop.\r\n // h and <component :is=\"...\"> both accept vnodes\r\n normalizeSlot(slots.default, { Component: component, route }) ||\r\n component);\r\n };\r\n },\r\n});\r\nfunction normalizeSlot(slot, data) {\r\n if (!slot)\r\n return null;\r\n const slotContent = slot(data);\r\n return slotContent.length === 1 ? slotContent[0] : slotContent;\r\n}\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to display the current route the user is at.\r\n */\r\nconst RouterView = RouterViewImpl;\r\n// warn against deprecated usage with <transition> & <keep-alive>\r\n// due to functional component being no longer eager in Vue 3\r\nfunction warnDeprecatedUsage() {\r\n const instance = getCurrentInstance();\r\n const parentName = instance.parent && instance.parent.type.name;\r\n if (parentName &&\r\n (parentName === 'KeepAlive' || parentName.includes('Transition'))) {\r\n const comp = parentName === 'KeepAlive' ? 'keep-alive' : 'transition';\r\n warn(`<router-view> can no longer be used directly inside <transition> or <keep-alive>.\\n` +\r\n `Use slot props instead:\\n\\n` +\r\n `<router-view v-slot=\"{ Component }\">\\n` +\r\n ` <${comp}>\\n` +\r\n ` <component :is=\"Component\" />\\n` +\r\n ` </${comp}>\\n` +\r\n `</router-view>`);\r\n }\r\n}\n\nfunction formatRouteLocation(routeLocation, tooltip) {\r\n const copy = assign({}, routeLocation, {\r\n // remove variables that can contain vue instances\r\n matched: routeLocation.matched.map(matched => omit(matched, ['instances', 'children', 'aliasOf'])),\r\n });\r\n return {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: routeLocation.fullPath,\r\n tooltip,\r\n value: copy,\r\n },\r\n };\r\n}\r\nfunction formatDisplay(display) {\r\n return {\r\n _custom: {\r\n display,\r\n },\r\n };\r\n}\r\n// to support multiple router instances\r\nlet routerId = 0;\r\nfunction addDevtools(app, router, matcher) {\r\n // Take over router.beforeEach and afterEach\r\n // make sure we are not registering the devtool twice\r\n if (router.__hasDevtools)\r\n return;\r\n router.__hasDevtools = true;\r\n // increment to support multiple router instances\r\n const id = routerId++;\r\n setupDevtoolsPlugin({\r\n id: 'org.vuejs.router' + (id ? '.' + id : ''),\r\n label: 'Vue Router',\r\n packageName: 'vue-router',\r\n homepage: 'https://router.vuejs.org',\r\n logo: 'https://router.vuejs.org/logo.png',\r\n componentStateTypes: ['Routing'],\r\n app,\r\n }, api => {\r\n // display state added by the router\r\n api.on.inspectComponent((payload, ctx) => {\r\n if (payload.instanceData) {\r\n payload.instanceData.state.push({\r\n type: 'Routing',\r\n key: '$route',\r\n editable: false,\r\n value: formatRouteLocation(router.currentRoute.value, 'Current Route'),\r\n });\r\n }\r\n });\r\n // mark router-link as active and display tags on router views\r\n api.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\r\n if (componentInstance.__vrv_devtools) {\r\n const info = componentInstance.__vrv_devtools;\r\n node.tags.push({\r\n label: (info.name ? `${info.name.toString()}: ` : '') + info.path,\r\n textColor: 0,\r\n tooltip: 'This component is rendered by <router-view>',\r\n backgroundColor: PINK_500,\r\n });\r\n }\r\n // if multiple useLink are used\r\n if (Array.isArray(componentInstance.__vrl_devtools)) {\r\n componentInstance.__devtoolsApi = api;\r\n componentInstance.__vrl_devtools.forEach(devtoolsData => {\r\n let backgroundColor = ORANGE_400;\r\n let tooltip = '';\r\n if (devtoolsData.isExactActive) {\r\n backgroundColor = LIME_500;\r\n tooltip = 'This is exactly active';\r\n }\r\n else if (devtoolsData.isActive) {\r\n backgroundColor = BLUE_600;\r\n tooltip = 'This link is active';\r\n }\r\n node.tags.push({\r\n label: devtoolsData.route.path,\r\n textColor: 0,\r\n tooltip,\r\n backgroundColor,\r\n });\r\n });\r\n }\r\n });\r\n watch(router.currentRoute, () => {\r\n // refresh active state\r\n refreshRoutesView();\r\n api.notifyComponentUpdate();\r\n api.sendInspectorTree(routerInspectorId);\r\n api.sendInspectorState(routerInspectorId);\r\n });\r\n const navigationsLayerId = 'router:navigations:' + id;\r\n api.addTimelineLayer({\r\n id: navigationsLayerId,\r\n label: `Router${id ? ' ' + id : ''} Navigations`,\r\n color: 0x40a8c4,\r\n });\r\n // const errorsLayerId = 'router:errors'\r\n // api.addTimelineLayer({\r\n // id: errorsLayerId,\r\n // label: 'Router Errors',\r\n // color: 0xea5455,\r\n // })\r\n router.onError((error, to) => {\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n title: 'Error during Navigation',\r\n subtitle: to.fullPath,\r\n logType: 'error',\r\n time: api.now(),\r\n data: { error },\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n // attached to `meta` and used to group events\r\n let navigationId = 0;\r\n router.beforeEach((to, from) => {\r\n const data = {\r\n guard: formatDisplay('beforeEach'),\r\n from: formatRouteLocation(from, 'Current Location during this navigation'),\r\n to: formatRouteLocation(to, 'Target location'),\r\n };\r\n // Used to group navigations together, hide from devtools\r\n Object.defineProperty(to.meta, '__navigationId', {\r\n value: navigationId++,\r\n });\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n time: api.now(),\r\n title: 'Start of navigation',\r\n subtitle: to.fullPath,\r\n data,\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n router.afterEach((to, from, failure) => {\r\n const data = {\r\n guard: formatDisplay('afterEach'),\r\n };\r\n if (failure) {\r\n data.failure = {\r\n _custom: {\r\n type: Error,\r\n readOnly: true,\r\n display: failure ? failure.message : '',\r\n tooltip: 'Navigation Failure',\r\n value: failure,\r\n },\r\n };\r\n data.status = formatDisplay('\u274C');\r\n }\r\n else {\r\n data.status = formatDisplay('\u2705');\r\n }\r\n // we set here to have the right order\r\n data.from = formatRouteLocation(from, 'Current Location during this navigation');\r\n data.to = formatRouteLocation(to, 'Target location');\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n title: 'End of navigation',\r\n subtitle: to.fullPath,\r\n time: api.now(),\r\n data,\r\n logType: failure ? 'warning' : 'default',\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n /**\r\n * Inspector of Existing routes\r\n */\r\n const routerInspectorId = 'router-inspector:' + id;\r\n api.addInspector({\r\n id: routerInspectorId,\r\n label: 'Routes' + (id ? ' ' + id : ''),\r\n icon: 'book',\r\n treeFilterPlaceholder: 'Search routes',\r\n });\r\n function refreshRoutesView() {\r\n // the routes view isn't active\r\n if (!activeRoutesPayload)\r\n return;\r\n const payload = activeRoutesPayload;\r\n // children routes will appear as nested\r\n let routes = matcher.getRoutes().filter(route => !route.parent);\r\n // reset match state to false\r\n routes.forEach(resetMatchStateOnRouteRecord);\r\n // apply a match state if there is a payload\r\n if (payload.filter) {\r\n routes = routes.filter(route => \r\n // save matches state based on the payload\r\n isRouteMatching(route, payload.filter.toLowerCase()));\r\n }\r\n // mark active routes\r\n routes.forEach(route => markRouteRecordActive(route, router.currentRoute.value));\r\n payload.rootNodes = routes.map(formatRouteRecordForInspector);\r\n }\r\n let activeRoutesPayload;\r\n api.on.getInspectorTree(payload => {\r\n activeRoutesPayload = payload;\r\n if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n refreshRoutesView();\r\n }\r\n });\r\n /**\r\n * Display information about the currently selected route record\r\n */\r\n api.on.getInspectorState(payload => {\r\n if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n const routes = matcher.getRoutes();\r\n const route = routes.find(route => route.record.__vd_id === payload.nodeId);\r\n if (route) {\r\n payload.state = {\r\n options: formatRouteRecordMatcherForStateInspector(route),\r\n };\r\n }\r\n }\r\n });\r\n api.sendInspectorTree(routerInspectorId);\r\n api.sendInspectorState(routerInspectorId);\r\n });\r\n}\r\nfunction modifierForKey(key) {\r\n if (key.optional) {\r\n return key.repeatable ? '*' : '?';\r\n }\r\n else {\r\n return key.repeatable ? '+' : '';\r\n }\r\n}\r\nfunction formatRouteRecordMatcherForStateInspector(route) {\r\n const { record } = route;\r\n const fields = [\r\n { editable: false, key: 'path', value: record.path },\r\n ];\r\n if (record.name != null) {\r\n fields.push({\r\n editable: false,\r\n key: 'name',\r\n value: record.name,\r\n });\r\n }\r\n fields.push({ editable: false, key: 'regexp', value: route.re });\r\n if (route.keys.length) {\r\n fields.push({\r\n editable: false,\r\n key: 'keys',\r\n value: {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: route.keys\r\n .map(key => `${key.name}${modifierForKey(key)}`)\r\n .join(' '),\r\n tooltip: 'Param keys',\r\n value: route.keys,\r\n },\r\n },\r\n });\r\n }\r\n if (record.redirect != null) {\r\n fields.push({\r\n editable: false,\r\n key: 'redirect',\r\n value: record.redirect,\r\n });\r\n }\r\n if (route.alias.length) {\r\n fields.push({\r\n editable: false,\r\n key: 'aliases',\r\n value: route.alias.map(alias => alias.record.path),\r\n });\r\n }\r\n fields.push({\r\n key: 'score',\r\n editable: false,\r\n value: {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: route.score.map(score => score.join(', ')).join(' | '),\r\n tooltip: 'Score used to sort routes',\r\n value: route.score,\r\n },\r\n },\r\n });\r\n return fields;\r\n}\r\n/**\r\n * Extracted from tailwind palette\r\n */\r\nconst PINK_500 = 0xec4899;\r\nconst BLUE_600 = 0x2563eb;\r\nconst LIME_500 = 0x84cc16;\r\nconst CYAN_400 = 0x22d3ee;\r\nconst ORANGE_400 = 0xfb923c;\r\n// const GRAY_100 = 0xf4f4f5\r\nconst DARK = 0x666666;\r\nfunction formatRouteRecordForInspector(route) {\r\n const tags = [];\r\n const { record } = route;\r\n if (record.name != null) {\r\n tags.push({\r\n label: String(record.name),\r\n textColor: 0,\r\n backgroundColor: CYAN_400,\r\n });\r\n }\r\n if (record.aliasOf) {\r\n tags.push({\r\n label: 'alias',\r\n textColor: 0,\r\n backgroundColor: ORANGE_400,\r\n });\r\n }\r\n if (route.__vd_match) {\r\n tags.push({\r\n label: 'matches',\r\n textColor: 0,\r\n backgroundColor: PINK_500,\r\n });\r\n }\r\n if (route.__vd_exactActive) {\r\n tags.push({\r\n label: 'exact',\r\n textColor: 0,\r\n backgroundColor: LIME_500,\r\n });\r\n }\r\n if (route.__vd_active) {\r\n tags.push({\r\n label: 'active',\r\n textColor: 0,\r\n backgroundColor: BLUE_600,\r\n });\r\n }\r\n if (record.redirect) {\r\n tags.push({\r\n label: 'redirect: ' +\r\n (typeof record.redirect === 'string' ? record.redirect : 'Object'),\r\n textColor: 0xffffff,\r\n backgroundColor: DARK,\r\n });\r\n }\r\n // add an id to be able to select it. Using the `path` is not possible because\r\n // empty path children would collide with their parents\r\n let id = record.__vd_id;\r\n if (id == null) {\r\n id = String(routeRecordId++);\r\n record.__vd_id = id;\r\n }\r\n return {\r\n id,\r\n label: record.path,\r\n tags,\r\n children: route.children.map(formatRouteRecordForInspector),\r\n };\r\n}\r\n// incremental id for route records and inspector state\r\nlet routeRecordId = 0;\r\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\r\nfunction markRouteRecordActive(route, currentRoute) {\r\n // no route will be active if matched is empty\r\n // reset the matching state\r\n const isExactActive = currentRoute.matched.length &&\r\n isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\r\n route.__vd_exactActive = route.__vd_active = isExactActive;\r\n if (!isExactActive) {\r\n route.__vd_active = currentRoute.matched.some(match => isSameRouteRecord(match, route.record));\r\n }\r\n route.children.forEach(childRoute => markRouteRecordActive(childRoute, currentRoute));\r\n}\r\nfunction resetMatchStateOnRouteRecord(route) {\r\n route.__vd_match = false;\r\n route.children.forEach(resetMatchStateOnRouteRecord);\r\n}\r\nfunction isRouteMatching(route, filter) {\r\n const found = String(route.re).match(EXTRACT_REGEXP_RE);\r\n route.__vd_match = false;\r\n if (!found || found.length < 3) {\r\n return false;\r\n }\r\n // use a regexp without $ at the end to match nested routes better\r\n const nonEndingRE = new RegExp(found[1].replace(/\\$$/, ''), found[2]);\r\n if (nonEndingRE.test(filter)) {\r\n // mark children as matches\r\n route.children.forEach(child => isRouteMatching(child, filter));\r\n // exception case: `/`\r\n if (route.record.path !== '/' || filter === '/') {\r\n route.__vd_match = route.re.test(filter);\r\n return true;\r\n }\r\n // hide the / route\r\n return false;\r\n }\r\n const path = route.record.path.toLowerCase();\r\n const decodedPath = decode(path);\r\n // also allow partial matching on the path\r\n if (!filter.startsWith('/') &&\r\n (decodedPath.includes(filter) || path.includes(filter)))\r\n return true;\r\n if (decodedPath.startsWith(filter) || path.startsWith(filter))\r\n return true;\r\n if (route.record.name && String(route.record.name).includes(filter))\r\n return true;\r\n return route.children.some(child => isRouteMatching(child, filter));\r\n}\r\nfunction omit(obj, keys) {\r\n const ret = {};\r\n for (const key in obj) {\r\n if (!keys.includes(key)) {\r\n // @ts-expect-error\r\n ret[key] = obj[key];\r\n }\r\n }\r\n return ret;\r\n}\n\n/**\r\n * Creates a Router instance that can be used by a Vue app.\r\n *\r\n * @param options - {@link RouterOptions}\r\n */\r\nfunction createRouter(options) {\r\n const matcher = createRouterMatcher(options.routes, options);\r\n const parseQuery$1 = options.parseQuery || parseQuery;\r\n const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\r\n const routerHistory = options.history;\r\n if ((process.env.NODE_ENV !== 'production') && !routerHistory)\r\n throw new Error('Provide the \"history\" option when calling \"createRouter()\":' +\r\n ' https://next.router.vuejs.org/api/#history.');\r\n const beforeGuards = useCallbacks();\r\n const beforeResolveGuards = useCallbacks();\r\n const afterGuards = useCallbacks();\r\n const currentRoute = shallowRef(START_LOCATION_NORMALIZED);\r\n let pendingLocation = START_LOCATION_NORMALIZED;\r\n // leave the scrollRestoration if no scrollBehavior is provided\r\n if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\r\n const encodeParams = applyToParams.bind(null, encodeParam);\r\n const decodeParams = \r\n // @ts-expect-error: intentionally avoid the type check\r\n applyToParams.bind(null, decode);\r\n function addRoute(parentOrRoute, route) {\r\n let parent;\r\n let record;\r\n if (isRouteName(parentOrRoute)) {\r\n parent = matcher.getRecordMatcher(parentOrRoute);\r\n record = route;\r\n }\r\n else {\r\n record = parentOrRoute;\r\n }\r\n return matcher.addRoute(record, parent);\r\n }\r\n function removeRoute(name) {\r\n const recordMatcher = matcher.getRecordMatcher(name);\r\n if (recordMatcher) {\r\n matcher.removeRoute(recordMatcher);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Cannot remove non-existent route \"${String(name)}\"`);\r\n }\r\n }\r\n function getRoutes() {\r\n return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\r\n }\r\n function hasRoute(name) {\r\n return !!matcher.getRecordMatcher(name);\r\n }\r\n function resolve(rawLocation, currentLocation) {\r\n // const objectLocation = routerLocationAsObject(rawLocation)\r\n // we create a copy to modify it later\r\n currentLocation = assign({}, currentLocation || currentRoute.value);\r\n if (typeof rawLocation === 'string') {\r\n const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\r\n const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\r\n const href = routerHistory.createHref(locationNormalized.fullPath);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (href.startsWith('//'))\r\n warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n else if (!matchedRoute.matched.length) {\r\n warn(`No match found for location with path \"${rawLocation}\"`);\r\n }\r\n }\r\n // locationNormalized is always a new object\r\n return assign(locationNormalized, matchedRoute, {\r\n params: decodeParams(matchedRoute.params),\r\n hash: decode(locationNormalized.hash),\r\n redirectedFrom: undefined,\r\n href,\r\n });\r\n }\r\n let matcherLocation;\r\n // path could be relative in object as well\r\n if ('path' in rawLocation) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n 'params' in rawLocation &&\r\n !('name' in rawLocation) &&\r\n // @ts-expect-error: the type is never\r\n Object.keys(rawLocation.params).length) {\r\n warn(`Path \"${\r\n // @ts-expect-error: the type is never\r\n rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\r\n }\r\n matcherLocation = assign({}, rawLocation, {\r\n path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\r\n });\r\n }\r\n else {\r\n // remove any nullish param\r\n const targetParams = assign({}, rawLocation.params);\r\n for (const key in targetParams) {\r\n if (targetParams[key] == null) {\r\n delete targetParams[key];\r\n }\r\n }\r\n // pass encoded values to the matcher so it can produce encoded path and fullPath\r\n matcherLocation = assign({}, rawLocation, {\r\n params: encodeParams(rawLocation.params),\r\n });\r\n // current location params are decoded, we need to encode them in case the\r\n // matcher merges the params\r\n currentLocation.params = encodeParams(currentLocation.params);\r\n }\r\n const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\r\n const hash = rawLocation.hash || '';\r\n if ((process.env.NODE_ENV !== 'production') && hash && !hash.startsWith('#')) {\r\n warn(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\r\n }\r\n // decoding them) the matcher might have merged current location params so\r\n // we need to run the decoding again\r\n matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\r\n const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\r\n hash: encodeHash(hash),\r\n path: matchedRoute.path,\r\n }));\r\n const href = routerHistory.createHref(fullPath);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (href.startsWith('//')) {\r\n warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n }\r\n else if (!matchedRoute.matched.length) {\r\n warn(`No match found for location with path \"${'path' in rawLocation ? rawLocation.path : rawLocation}\"`);\r\n }\r\n }\r\n return assign({\r\n fullPath,\r\n // keep the hash encoded so fullPath is effectively path + encodedQuery +\r\n // hash\r\n hash,\r\n query: \r\n // if the user is using a custom query lib like qs, we might have\r\n // nested objects, so we keep the query as is, meaning it can contain\r\n // numbers at `$route.query`, but at the point, the user will have to\r\n // use their own type anyway.\r\n // https://github.com/vuejs/router/issues/328#issuecomment-649481567\r\n stringifyQuery$1 === stringifyQuery\r\n ? normalizeQuery(rawLocation.query)\r\n : (rawLocation.query || {}),\r\n }, matchedRoute, {\r\n redirectedFrom: undefined,\r\n href,\r\n });\r\n }\r\n function locationAsObject(to) {\r\n return typeof to === 'string'\r\n ? parseURL(parseQuery$1, to, currentRoute.value.path)\r\n : assign({}, to);\r\n }\r\n function checkCanceledNavigation(to, from) {\r\n if (pendingLocation !== to) {\r\n return createRouterError(8 /* NAVIGATION_CANCELLED */, {\r\n from,\r\n to,\r\n });\r\n }\r\n }\r\n function push(to) {\r\n return pushWithRedirect(to);\r\n }\r\n function replace(to) {\r\n return push(assign(locationAsObject(to), { replace: true }));\r\n }\r\n function handleRedirectRecord(to) {\r\n const lastMatched = to.matched[to.matched.length - 1];\r\n if (lastMatched && lastMatched.redirect) {\r\n const { redirect } = lastMatched;\r\n let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\r\n if (typeof newTargetLocation === 'string') {\r\n newTargetLocation =\r\n newTargetLocation.includes('?') || newTargetLocation.includes('#')\r\n ? (newTargetLocation = locationAsObject(newTargetLocation))\r\n : // force empty params\r\n { path: newTargetLocation };\r\n // @ts-expect-error: force empty params when a string is passed to let\r\n // the router parse them again\r\n newTargetLocation.params = {};\r\n }\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !('path' in newTargetLocation) &&\r\n !('name' in newTargetLocation)) {\r\n warn(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\r\n throw new Error('Invalid redirect');\r\n }\r\n return assign({\r\n query: to.query,\r\n hash: to.hash,\r\n params: to.params,\r\n }, newTargetLocation);\r\n }\r\n }\r\n function pushWithRedirect(to, redirectedFrom) {\r\n const targetLocation = (pendingLocation = resolve(to));\r\n const from = currentRoute.value;\r\n const data = to.state;\r\n const force = to.force;\r\n // to could be a string where `replace` is a function\r\n const replace = to.replace === true;\r\n const shouldRedirect = handleRedirectRecord(targetLocation);\r\n if (shouldRedirect)\r\n return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\r\n state: data,\r\n force,\r\n replace,\r\n }), \r\n // keep original redirectedFrom if it exists\r\n redirectedFrom || targetLocation);\r\n // if it was a redirect we already called `pushWithRedirect` above\r\n const toLocation = targetLocation;\r\n toLocation.redirectedFrom = redirectedFrom;\r\n let failure;\r\n if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\r\n failure = createRouterError(16 /* NAVIGATION_DUPLICATED */, { to: toLocation, from });\r\n // trigger scroll to allow scrolling to the same anchor\r\n handleScroll(from, from, \r\n // this is a push, the only way for it to be triggered from a\r\n // history.listen is with a redirect, which makes it become a push\r\n true, \r\n // This cannot be the first navigation because the initial location\r\n // cannot be manually navigated to\r\n false);\r\n }\r\n return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\r\n .catch((error) => isNavigationFailure(error)\r\n ? // navigation redirects still mark the router as ready\r\n isNavigationFailure(error, 2 /* NAVIGATION_GUARD_REDIRECT */)\r\n ? error\r\n : markAsReady(error) // also returns the error\r\n : // reject any unknown error\r\n triggerError(error, toLocation, from))\r\n .then((failure) => {\r\n if (failure) {\r\n if (isNavigationFailure(failure, 2 /* NAVIGATION_GUARD_REDIRECT */)) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n // we are redirecting to the same location we were already at\r\n isSameRouteLocation(stringifyQuery$1, resolve(failure.to), toLocation) &&\r\n // and we have done it a couple of times\r\n redirectedFrom &&\r\n // @ts-expect-error: added only in dev\r\n (redirectedFrom._count = redirectedFrom._count\r\n ? // @ts-expect-error\r\n redirectedFrom._count + 1\r\n : 1) > 10) {\r\n warn(`Detected an infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow. This will break in production if not fixed.`);\r\n return Promise.reject(new Error('Infinite redirect in navigation guard'));\r\n }\r\n return pushWithRedirect(\r\n // keep options\r\n assign(locationAsObject(failure.to), {\r\n state: data,\r\n force,\r\n replace,\r\n }), \r\n // preserve the original redirectedFrom if any\r\n redirectedFrom || toLocation);\r\n }\r\n }\r\n else {\r\n // if we fail we don't finalize the navigation\r\n failure = finalizeNavigation(toLocation, from, true, replace, data);\r\n }\r\n triggerAfterEach(toLocation, from, failure);\r\n return failure;\r\n });\r\n }\r\n /**\r\n * Helper to reject and skip all navigation guards if a new navigation happened\r\n * @param to\r\n * @param from\r\n */\r\n function checkCanceledNavigationAndReject(to, from) {\r\n const error = checkCanceledNavigation(to, from);\r\n return error ? Promise.reject(error) : Promise.resolve();\r\n }\r\n // TODO: refactor the whole before guards by internally using router.beforeEach\r\n function navigate(to, from) {\r\n let guards;\r\n const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\r\n // all components here have been resolved once because we are leaving\r\n guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\r\n // leavingRecords is already reversed\r\n for (const record of leavingRecords) {\r\n record.leaveGuards.forEach(guard => {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n });\r\n }\r\n const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeRouteLeave guards\r\n return (runGuardQueue(guards)\r\n .then(() => {\r\n // check global guards beforeEach\r\n guards = [];\r\n for (const guard of beforeGuards.list()) {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n }\r\n guards.push(canceledNavigationCheck);\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check in components beforeRouteUpdate\r\n guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\r\n for (const record of updatingRecords) {\r\n record.updateGuards.forEach(guard => {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n });\r\n }\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check the route beforeEnter\r\n guards = [];\r\n for (const record of to.matched) {\r\n // do not trigger beforeEnter on reused views\r\n if (record.beforeEnter && !from.matched.includes(record)) {\r\n if (Array.isArray(record.beforeEnter)) {\r\n for (const beforeEnter of record.beforeEnter)\r\n guards.push(guardToPromiseFn(beforeEnter, to, from));\r\n }\r\n else {\r\n guards.push(guardToPromiseFn(record.beforeEnter, to, from));\r\n }\r\n }\r\n }\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\r\n // clear existing enterCallbacks, these are added by extractComponentsGuards\r\n to.matched.forEach(record => (record.enterCallbacks = {}));\r\n // check in-component beforeRouteEnter\r\n guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from);\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check global guards beforeResolve\r\n guards = [];\r\n for (const guard of beforeResolveGuards.list()) {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n }\r\n guards.push(canceledNavigationCheck);\r\n return runGuardQueue(guards);\r\n })\r\n // catch any navigation canceled\r\n .catch(err => isNavigationFailure(err, 8 /* NAVIGATION_CANCELLED */)\r\n ? err\r\n : Promise.reject(err)));\r\n }\r\n function triggerAfterEach(to, from, failure) {\r\n // navigation is confirmed, call afterGuards\r\n // TODO: wrap with error handlers\r\n for (const guard of afterGuards.list())\r\n guard(to, from, failure);\r\n }\r\n /**\r\n * - Cleans up any navigation guards\r\n * - Changes the url if necessary\r\n * - Calls the scrollBehavior\r\n */\r\n function finalizeNavigation(toLocation, from, isPush, replace, data) {\r\n // a more recent navigation took place\r\n const error = checkCanceledNavigation(toLocation, from);\r\n if (error)\r\n return error;\r\n // only consider as push if it's not the first navigation\r\n const isFirstNavigation = from === START_LOCATION_NORMALIZED;\r\n const state = !isBrowser ? {} : history.state;\r\n // change URL only if the user did a push/replace and if it's not the initial navigation because\r\n // it's just reflecting the url\r\n if (isPush) {\r\n // on the initial navigation, we want to reuse the scroll position from\r\n // history state if it exists\r\n if (replace || isFirstNavigation)\r\n routerHistory.replace(toLocation.fullPath, assign({\r\n scroll: isFirstNavigation && state && state.scroll,\r\n }, data));\r\n else\r\n routerHistory.push(toLocation.fullPath, data);\r\n }\r\n // accept current navigation\r\n currentRoute.value = toLocation;\r\n handleScroll(toLocation, from, isPush, isFirstNavigation);\r\n markAsReady();\r\n }\r\n let removeHistoryListener;\r\n // attach listener to history to trigger navigations\r\n function setupListeners() {\r\n removeHistoryListener = routerHistory.listen((to, _from, info) => {\r\n // cannot be a redirect route because it was in history\r\n const toLocation = resolve(to);\r\n // due to dynamic routing, and to hash history with manual navigation\r\n // (manually changing the url or calling history.hash = '#/somewhere'),\r\n // there could be a redirect record in history\r\n const shouldRedirect = handleRedirectRecord(toLocation);\r\n if (shouldRedirect) {\r\n pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop);\r\n return;\r\n }\r\n pendingLocation = toLocation;\r\n const from = currentRoute.value;\r\n // TODO: should be moved to web history?\r\n if (isBrowser) {\r\n saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\r\n }\r\n navigate(toLocation, from)\r\n .catch((error) => {\r\n if (isNavigationFailure(error, 4 /* NAVIGATION_ABORTED */ | 8 /* NAVIGATION_CANCELLED */)) {\r\n return error;\r\n }\r\n if (isNavigationFailure(error, 2 /* NAVIGATION_GUARD_REDIRECT */)) {\r\n // Here we could call if (info.delta) routerHistory.go(-info.delta,\r\n // false) but this is bug prone as we have no way to wait the\r\n // navigation to be finished before calling pushWithRedirect. Using\r\n // a setTimeout of 16ms seems to work but there is not guarantee for\r\n // it to work on every browser. So Instead we do not restore the\r\n // history entry and trigger a new navigation as requested by the\r\n // navigation guard.\r\n // the error is already handled by router.push we just want to avoid\r\n // logging the error\r\n pushWithRedirect(error.to, toLocation\r\n // avoid an uncaught rejection, let push call triggerError\r\n )\r\n .then(failure => {\r\n // manual change in hash history #916 ending up in the URL not\r\n // changing but it was changed by the manual url change, so we\r\n // need to manually change it ourselves\r\n if (isNavigationFailure(failure, 4 /* NAVIGATION_ABORTED */ |\r\n 16 /* NAVIGATION_DUPLICATED */) &&\r\n !info.delta &&\r\n info.type === NavigationType.pop) {\r\n routerHistory.go(-1, false);\r\n }\r\n })\r\n .catch(noop);\r\n // avoid the then branch\r\n return Promise.reject();\r\n }\r\n // do not restore history on unknown direction\r\n if (info.delta)\r\n routerHistory.go(-info.delta, false);\r\n // unrecognized error, transfer to the global handler\r\n return triggerError(error, toLocation, from);\r\n })\r\n .then((failure) => {\r\n failure =\r\n failure ||\r\n finalizeNavigation(\r\n // after navigation, all matched components are resolved\r\n toLocation, from, false);\r\n // revert the navigation\r\n if (failure) {\r\n if (info.delta) {\r\n routerHistory.go(-info.delta, false);\r\n }\r\n else if (info.type === NavigationType.pop &&\r\n isNavigationFailure(failure, 4 /* NAVIGATION_ABORTED */ | 16 /* NAVIGATION_DUPLICATED */)) {\r\n // manual change in hash history #916\r\n // it's like a push but lacks the information of the direction\r\n routerHistory.go(-1, false);\r\n }\r\n }\r\n triggerAfterEach(toLocation, from, failure);\r\n })\r\n .catch(noop);\r\n });\r\n }\r\n // Initialization and Errors\r\n let readyHandlers = useCallbacks();\r\n let errorHandlers = useCallbacks();\r\n let ready;\r\n /**\r\n * Trigger errorHandlers added via onError and throws the error as well\r\n *\r\n * @param error - error to throw\r\n * @param to - location we were navigating to when the error happened\r\n * @param from - location we were navigating from when the error happened\r\n * @returns the error as a rejected promise\r\n */\r\n function triggerError(error, to, from) {\r\n markAsReady(error);\r\n const list = errorHandlers.list();\r\n if (list.length) {\r\n list.forEach(handler => handler(error, to, from));\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('uncaught error during route navigation:');\r\n }\r\n console.error(error);\r\n }\r\n return Promise.reject(error);\r\n }\r\n function isReady() {\r\n if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\r\n return Promise.resolve();\r\n return new Promise((resolve, reject) => {\r\n readyHandlers.add([resolve, reject]);\r\n });\r\n }\r\n function markAsReady(err) {\r\n if (!ready) {\r\n // still not ready if an error happened\r\n ready = !err;\r\n setupListeners();\r\n readyHandlers\r\n .list()\r\n .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\r\n readyHandlers.reset();\r\n }\r\n return err;\r\n }\r\n // Scroll behavior\r\n function handleScroll(to, from, isPush, isFirstNavigation) {\r\n const { scrollBehavior } = options;\r\n if (!isBrowser || !scrollBehavior)\r\n return Promise.resolve();\r\n const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\r\n ((isFirstNavigation || !isPush) &&\r\n history.state &&\r\n history.state.scroll) ||\r\n null;\r\n return nextTick()\r\n .then(() => scrollBehavior(to, from, scrollPosition))\r\n .then(position => position && scrollToPosition(position))\r\n .catch(err => triggerError(err, to, from));\r\n }\r\n const go = (delta) => routerHistory.go(delta);\r\n let started;\r\n const installedApps = new Set();\r\n const router = {\r\n currentRoute,\r\n addRoute,\r\n removeRoute,\r\n hasRoute,\r\n getRoutes,\r\n resolve,\r\n options,\r\n push,\r\n replace,\r\n go,\r\n back: () => go(-1),\r\n forward: () => go(1),\r\n beforeEach: beforeGuards.add,\r\n beforeResolve: beforeResolveGuards.add,\r\n afterEach: afterGuards.add,\r\n onError: errorHandlers.add,\r\n isReady,\r\n install(app) {\r\n const router = this;\r\n app.component('RouterLink', RouterLink);\r\n app.component('RouterView', RouterView);\r\n app.config.globalProperties.$router = router;\r\n Object.defineProperty(app.config.globalProperties, '$route', {\r\n enumerable: true,\r\n get: () => unref(currentRoute),\r\n });\r\n // this initial navigation is only necessary on client, on server it doesn't\r\n // make sense because it will create an extra unnecessary navigation and could\r\n // lead to problems\r\n if (isBrowser &&\r\n // used for the initial navigation client side to avoid pushing\r\n // multiple times when the router is used in multiple apps\r\n !started &&\r\n currentRoute.value === START_LOCATION_NORMALIZED) {\r\n // see above\r\n started = true;\r\n push(routerHistory.location).catch(err => {\r\n if ((process.env.NODE_ENV !== 'production'))\r\n warn('Unexpected error when starting the router:', err);\r\n });\r\n }\r\n const reactiveRoute = {};\r\n for (const key in START_LOCATION_NORMALIZED) {\r\n // @ts-expect-error: the key matches\r\n reactiveRoute[key] = computed(() => currentRoute.value[key]);\r\n }\r\n app.provide(routerKey, router);\r\n app.provide(routeLocationKey, reactive(reactiveRoute));\r\n app.provide(routerViewLocationKey, currentRoute);\r\n const unmountApp = app.unmount;\r\n installedApps.add(app);\r\n app.unmount = function () {\r\n installedApps.delete(app);\r\n // the router is not attached to an app anymore\r\n if (installedApps.size < 1) {\r\n // invalidate the current navigation\r\n pendingLocation = START_LOCATION_NORMALIZED;\r\n removeHistoryListener && removeHistoryListener();\r\n currentRoute.value = START_LOCATION_NORMALIZED;\r\n started = false;\r\n ready = false;\r\n }\r\n unmountApp();\r\n };\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n addDevtools(app, router, matcher);\r\n }\r\n },\r\n };\r\n return router;\r\n}\r\nfunction runGuardQueue(guards) {\r\n return guards.reduce((promise, guard) => promise.then(() => guard()), Promise.resolve());\r\n}\r\nfunction extractChangingRecords(to, from) {\r\n const leavingRecords = [];\r\n const updatingRecords = [];\r\n const enteringRecords = [];\r\n const len = Math.max(from.matched.length, to.matched.length);\r\n for (let i = 0; i < len; i++) {\r\n const recordFrom = from.matched[i];\r\n if (recordFrom) {\r\n if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\r\n updatingRecords.push(recordFrom);\r\n else\r\n leavingRecords.push(recordFrom);\r\n }\r\n const recordTo = to.matched[i];\r\n if (recordTo) {\r\n // the type doesn't matter because we are comparing per reference\r\n if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\r\n enteringRecords.push(recordTo);\r\n }\r\n }\r\n }\r\n return [leavingRecords, updatingRecords, enteringRecords];\r\n}\n\n/**\r\n * Returns the router instance. Equivalent to using `$router` inside\r\n * templates.\r\n */\r\nfunction useRouter() {\r\n return inject(routerKey);\r\n}\r\n/**\r\n * Returns the current route location. Equivalent to using `$route` inside\r\n * templates.\r\n */\r\nfunction useRoute() {\r\n return inject(routeLocationKey);\r\n}\n\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };\n"], - "mappings": "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", - "names": [] -} diff --git a/docs/.vuepress/.cache/deps/vue.js b/docs/.vuepress/.cache/deps/vue.js deleted file mode 100644 index 993e673..0000000 --- a/docs/.vuepress/.cache/deps/vue.js +++ /dev/null @@ -1,303 +0,0 @@ -import { - BaseTransition, - Comment, - EffectScope, - Fragment, - KeepAlive, - ReactiveEffect, - Static, - Suspense, - Teleport, - Text, - Transition, - TransitionGroup, - VueElement, - callWithAsyncErrorHandling, - callWithErrorHandling, - cloneVNode, - compatUtils, - computed, - createApp, - createBaseVNode, - createBlock, - createCommentVNode, - createElementBlock, - createHydrationRenderer, - createPropsRestProxy, - createRenderer, - createSSRApp, - createSlots, - createStaticVNode, - createTextVNode, - createVNode, - customRef, - defineAsyncComponent, - defineComponent, - defineCustomElement, - defineEmits, - defineExpose, - defineProps, - defineSSRCustomElement, - devtools, - effect, - effectScope, - getCurrentInstance, - getCurrentScope, - getTransitionRawChildren, - guardReactiveProps, - h, - handleError, - hydrate, - initCustomFormatter, - initDirectivesForSSR, - inject, - isMemoSame, - isProxy, - isReactive, - isReadonly, - isRef, - isRuntimeOnly, - isShallow, - isVNode, - markRaw, - mergeDefaults, - mergeProps, - nextTick, - onActivated, - onBeforeMount, - onBeforeUnmount, - onBeforeUpdate, - onDeactivated, - onErrorCaptured, - onMounted, - onRenderTracked, - onRenderTriggered, - onScopeDispose, - onServerPrefetch, - onUnmounted, - onUpdated, - openBlock, - popScopeId, - provide, - proxyRefs, - pushScopeId, - queuePostFlushCb, - reactive, - readonly, - ref, - registerRuntimeCompiler, - render, - renderList, - renderSlot, - resolveComponent, - resolveDirective, - resolveDynamicComponent, - resolveFilter, - resolveTransitionHooks, - setBlockTracking, - setDevtoolsHook, - setTransitionHooks, - shallowReactive, - shallowReadonly, - shallowRef, - ssrContextKey, - ssrUtils, - stop, - toHandlers, - toRaw, - toRef, - toRefs, - transformVNodeArgs, - triggerRef, - unref, - useAttrs, - useCssModule, - useCssVars, - useSSRContext, - useSlots, - useTransitionState, - vModelCheckbox, - vModelDynamic, - vModelRadio, - vModelSelect, - vModelText, - vShow, - version, - warn, - watch, - watchEffect, - watchPostEffect, - watchSyncEffect, - withAsyncContext, - withCtx, - withDefaults, - withDirectives, - withKeys, - withMemo, - withModifiers, - withScopeId -} from "./chunk-J5QUGD5J.js"; -import { - camelize, - capitalize, - normalizeClass, - normalizeProps, - normalizeStyle, - toDisplayString, - toHandlerKey -} from "./chunk-SDTWZDHJ.js"; -import { - init_define_EXTERNAL_LINK_ICON_LOCALES, - init_define_MZ_ZOOM_OPTIONS -} from "./chunk-JQISXBHW.js"; - -// dep:vue -init_define_EXTERNAL_LINK_ICON_LOCALES(); -init_define_MZ_ZOOM_OPTIONS(); -export { - BaseTransition, - Comment, - EffectScope, - Fragment, - KeepAlive, - ReactiveEffect, - Static, - Suspense, - Teleport, - Text, - Transition, - TransitionGroup, - VueElement, - callWithAsyncErrorHandling, - callWithErrorHandling, - camelize, - capitalize, - cloneVNode, - compatUtils, - computed, - createApp, - createBlock, - createCommentVNode, - createElementBlock, - createBaseVNode as createElementVNode, - createHydrationRenderer, - createPropsRestProxy, - createRenderer, - createSSRApp, - createSlots, - createStaticVNode, - createTextVNode, - createVNode, - customRef, - defineAsyncComponent, - defineComponent, - defineCustomElement, - defineEmits, - defineExpose, - defineProps, - defineSSRCustomElement, - devtools, - effect, - effectScope, - getCurrentInstance, - getCurrentScope, - getTransitionRawChildren, - guardReactiveProps, - h, - handleError, - hydrate, - initCustomFormatter, - initDirectivesForSSR, - inject, - isMemoSame, - isProxy, - isReactive, - isReadonly, - isRef, - isRuntimeOnly, - isShallow, - isVNode, - markRaw, - mergeDefaults, - mergeProps, - nextTick, - normalizeClass, - normalizeProps, - normalizeStyle, - onActivated, - onBeforeMount, - onBeforeUnmount, - onBeforeUpdate, - onDeactivated, - onErrorCaptured, - onMounted, - onRenderTracked, - onRenderTriggered, - onScopeDispose, - onServerPrefetch, - onUnmounted, - onUpdated, - openBlock, - popScopeId, - provide, - proxyRefs, - pushScopeId, - queuePostFlushCb, - reactive, - readonly, - ref, - registerRuntimeCompiler, - render, - renderList, - renderSlot, - resolveComponent, - resolveDirective, - resolveDynamicComponent, - resolveFilter, - resolveTransitionHooks, - setBlockTracking, - setDevtoolsHook, - setTransitionHooks, - shallowReactive, - shallowReadonly, - shallowRef, - ssrContextKey, - ssrUtils, - stop, - toDisplayString, - toHandlerKey, - toHandlers, - toRaw, - toRef, - toRefs, - transformVNodeArgs, - triggerRef, - unref, - useAttrs, - useCssModule, - useCssVars, - useSSRContext, - useSlots, - useTransitionState, - vModelCheckbox, - vModelDynamic, - vModelRadio, - vModelSelect, - vModelText, - vShow, - version, - warn, - watch, - watchEffect, - watchPostEffect, - watchSyncEffect, - withAsyncContext, - withCtx, - withDefaults, - withDirectives, - withKeys, - withMemo, - withModifiers, - withScopeId -}; -//# sourceMappingURL=vue.js.map diff --git a/docs/.vuepress/.cache/deps/vue.js.map b/docs/.vuepress/.cache/deps/vue.js.map deleted file mode 100644 index 687c64d..0000000 --- a/docs/.vuepress/.cache/deps/vue.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["dep:vue"], - "sourcesContent": ["\nexport * from \"../../../../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js\""], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;", - "names": [] -} diff --git a/docs/.vuepress/.temp/internal/clientAppEnhances.js b/docs/.vuepress/.temp/internal/clientAppEnhances.js deleted file mode 100644 index 1236c97..0000000 --- a/docs/.vuepress/.temp/internal/clientAppEnhances.js +++ /dev/null @@ -1,11 +0,0 @@ -import clientAppEnhance0 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/plugin-external-link-icon/lib/client/clientAppEnhance.js' -import clientAppEnhance1 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/plugin-medium-zoom/lib/client/clientAppEnhance.js' -import clientAppEnhance2 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/plugin-theme-data/lib/client/clientAppEnhance.js' -import clientAppEnhance3 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/theme-default/lib/client/clientAppEnhance.js' - -export const clientAppEnhances = [ - clientAppEnhance0, - clientAppEnhance1, - clientAppEnhance2, - clientAppEnhance3, -] diff --git a/docs/.vuepress/.temp/internal/clientAppRootComponents.js b/docs/.vuepress/.temp/internal/clientAppRootComponents.js deleted file mode 100644 index db7e55f..0000000 --- a/docs/.vuepress/.temp/internal/clientAppRootComponents.js +++ /dev/null @@ -1,5 +0,0 @@ -import clientAppRootComponent0 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/plugin-back-to-top/lib/client/components/BackToTop.js' - -export const clientAppRootComponents = [ - clientAppRootComponent0, -] diff --git a/docs/.vuepress/.temp/internal/clientAppSetups.js b/docs/.vuepress/.temp/internal/clientAppSetups.js deleted file mode 100644 index 4d7ee9d..0000000 --- a/docs/.vuepress/.temp/internal/clientAppSetups.js +++ /dev/null @@ -1,9 +0,0 @@ -import clientAppSetup0 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/plugin-active-header-links/lib/client/clientAppSetup.js' -import clientAppSetup1 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/plugin-nprogress/lib/client/clientAppSetup.js' -import clientAppSetup2 from '/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/theme-default/lib/client/clientAppSetup.js' - -export const clientAppSetups = [ - clientAppSetup0, - clientAppSetup1, - clientAppSetup2, -] diff --git a/docs/.vuepress/.temp/internal/layoutComponents.js b/docs/.vuepress/.temp/internal/layoutComponents.js deleted file mode 100644 index b5f02b4..0000000 --- a/docs/.vuepress/.temp/internal/layoutComponents.js +++ /dev/null @@ -1,6 +0,0 @@ -import { defineAsyncComponent } from 'vue' - -export const layoutComponents = { - "404": defineAsyncComponent(() => import("/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/theme-default/lib/client/layouts/404.vue")), - "Layout": defineAsyncComponent(() => import("/Users/mmdapl/Desktop/github/408CSFamily/node_modules/@vuepress/theme-default/lib/client/layouts/Layout.vue")), -} diff --git a/docs/.vuepress/.temp/internal/pagesComponents.js b/docs/.vuepress/.temp/internal/pagesComponents.js deleted file mode 100644 index acea6b5..0000000 --- a/docs/.vuepress/.temp/internal/pagesComponents.js +++ /dev/null @@ -1,64 +0,0 @@ -import { defineAsyncComponent } from 'vue' - -export const pagesComponents = { - // path: /Big_Event_History.html - "v-8bf0fafc": defineAsyncComponent(() => import(/* webpackChunkName: "v-8bf0fafc" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/Big_Event_History.html.vue")), - // path: / - "v-8daa1a0e": defineAsyncComponent(() => import(/* webpackChunkName: "v-8daa1a0e" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/index.html.vue")), - // path: /CN/ - "v-2d0a038b": defineAsyncComponent(() => import(/* webpackChunkName: "v-2d0a038b" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/CN/index.html.vue")), - // path: /OS/ - "v-2d0a3132": defineAsyncComponent(() => import(/* webpackChunkName: "v-2d0a3132" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/OS/index.html.vue")), - // path: /NoteMap/CN_Map.html - "v-62bd4033": defineAsyncComponent(() => import(/* webpackChunkName: "v-62bd4033" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.vue")), - // path: /NoteMap/DS_Map.html - "v-85ddaee2": defineAsyncComponent(() => import(/* webpackChunkName: "v-85ddaee2" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.vue")), - // path: /pages/c1bec1/ - "v-5c57558c": defineAsyncComponent(() => import(/* webpackChunkName: "v-5c57558c" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.vue")), - // path: /DS/ - "v-2d0a07e7": defineAsyncComponent(() => import(/* webpackChunkName: "v-2d0a07e7" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/index.html.vue")), - // path: /DS/basic_introduction.html - "v-75163b67": defineAsyncComponent(() => import(/* webpackChunkName: "v-75163b67" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/basic_introduction.html.vue")), - // path: /DS/linear_table.html - "v-c8ed33c4": defineAsyncComponent(() => import(/* webpackChunkName: "v-c8ed33c4" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/linear_table.html.vue")), - // path: /pages/c12319/ - "v-599b7814": defineAsyncComponent(() => import(/* webpackChunkName: "v-599b7814" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/c12319/index.html.vue")), - // path: /pages/add102/ - "v-4995d319": defineAsyncComponent(() => import(/* webpackChunkName: "v-4995d319" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/add102/index.html.vue")), - // path: /pages/15aa63/ - "v-0e2293aa": defineAsyncComponent(() => import(/* webpackChunkName: "v-0e2293aa" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/15aa63/index.html.vue")), - // path: /pages/c33acd/ - "v-5d28eacc": defineAsyncComponent(() => import(/* webpackChunkName: "v-5d28eacc" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/c33acd/index.html.vue")), - // path: /pages/bdad06/ - "v-7e68f740": defineAsyncComponent(() => import(/* webpackChunkName: "v-7e68f740" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/bdad06/index.html.vue")), - // path: /pages/53976b/ - "v-47e9dd3a": defineAsyncComponent(() => import(/* webpackChunkName: "v-47e9dd3a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/53976b/index.html.vue")), - // path: /pages/3f923d/ - "v-6d791ca4": defineAsyncComponent(() => import(/* webpackChunkName: "v-6d791ca4" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/3f923d/index.html.vue")), - // path: /pages/18d025/ - "v-13550f15": defineAsyncComponent(() => import(/* webpackChunkName: "v-13550f15" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/18d025/index.html.vue")), - // path: /DS/coding/algorithm.html - "v-37abb588": defineAsyncComponent(() => import(/* webpackChunkName: "v-37abb588" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.vue")), - // path: /pages/924aed/ - "v-a4870ef4": defineAsyncComponent(() => import(/* webpackChunkName: "v-a4870ef4" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/924aed/index.html.vue")), - // path: /pages/ff395c/ - "v-52cfe897": defineAsyncComponent(() => import(/* webpackChunkName: "v-52cfe897" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/ff395c/index.html.vue")), - // path: /pages/0a7dde/ - "v-2203c86c": defineAsyncComponent(() => import(/* webpackChunkName: "v-2203c86c" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.vue")), - // path: /pages/e577f8/ - "v-6af7422e": defineAsyncComponent(() => import(/* webpackChunkName: "v-6af7422e" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/e577f8/index.html.vue")), - // path: /pages/a7b602/ - "v-069c5402": defineAsyncComponent(() => import(/* webpackChunkName: "v-069c5402" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/a7b602/index.html.vue")), - // path: /pages/5de3a5/ - "v-32135c7a": defineAsyncComponent(() => import(/* webpackChunkName: "v-32135c7a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.vue")), - // path: /pages/7088fd/ - "v-40ac0f54": defineAsyncComponent(() => import(/* webpackChunkName: "v-40ac0f54" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/7088fd/index.html.vue")), - // path: /pages/56b8ef/ - "v-3926f79a": defineAsyncComponent(() => import(/* webpackChunkName: "v-3926f79a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.vue")), - // path: /pages/cddc8f/ - "v-990daf06": defineAsyncComponent(() => import(/* webpackChunkName: "v-990daf06" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.vue")), - // path: /pages/10b7a4/ - "v-0595fa04": defineAsyncComponent(() => import(/* webpackChunkName: "v-0595fa04" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.vue")), - // path: /404.html - "v-3706649a": defineAsyncComponent(() => import(/* webpackChunkName: "v-3706649a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/404.html.vue")), -} diff --git a/docs/.vuepress/.temp/internal/pagesData.js b/docs/.vuepress/.temp/internal/pagesData.js deleted file mode 100644 index 636f22c..0000000 --- a/docs/.vuepress/.temp/internal/pagesData.js +++ /dev/null @@ -1,62 +0,0 @@ -export const pagesData = { - // path: /Big_Event_History.html - "v-8bf0fafc": () => import(/* webpackChunkName: "v-8bf0fafc" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/Big_Event_History.html.js").then(({ data }) => data), - // path: / - "v-8daa1a0e": () => import(/* webpackChunkName: "v-8daa1a0e" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/index.html.js").then(({ data }) => data), - // path: /CN/ - "v-2d0a038b": () => import(/* webpackChunkName: "v-2d0a038b" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/CN/index.html.js").then(({ data }) => data), - // path: /OS/ - "v-2d0a3132": () => import(/* webpackChunkName: "v-2d0a3132" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/OS/index.html.js").then(({ data }) => data), - // path: /NoteMap/CN_Map.html - "v-62bd4033": () => import(/* webpackChunkName: "v-62bd4033" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.js").then(({ data }) => data), - // path: /NoteMap/DS_Map.html - "v-85ddaee2": () => import(/* webpackChunkName: "v-85ddaee2" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.js").then(({ data }) => data), - // path: /pages/c1bec1/ - "v-5c57558c": () => import(/* webpackChunkName: "v-5c57558c" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.js").then(({ data }) => data), - // path: /DS/ - "v-2d0a07e7": () => import(/* webpackChunkName: "v-2d0a07e7" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/index.html.js").then(({ data }) => data), - // path: /DS/basic_introduction.html - "v-75163b67": () => import(/* webpackChunkName: "v-75163b67" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/basic_introduction.html.js").then(({ data }) => data), - // path: /DS/linear_table.html - "v-c8ed33c4": () => import(/* webpackChunkName: "v-c8ed33c4" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/linear_table.html.js").then(({ data }) => data), - // path: /pages/c12319/ - "v-599b7814": () => import(/* webpackChunkName: "v-599b7814" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/c12319/index.html.js").then(({ data }) => data), - // path: /pages/add102/ - "v-4995d319": () => import(/* webpackChunkName: "v-4995d319" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/add102/index.html.js").then(({ data }) => data), - // path: /pages/15aa63/ - "v-0e2293aa": () => import(/* webpackChunkName: "v-0e2293aa" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/15aa63/index.html.js").then(({ data }) => data), - // path: /pages/c33acd/ - "v-5d28eacc": () => import(/* webpackChunkName: "v-5d28eacc" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/c33acd/index.html.js").then(({ data }) => data), - // path: /pages/bdad06/ - "v-7e68f740": () => import(/* webpackChunkName: "v-7e68f740" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/bdad06/index.html.js").then(({ data }) => data), - // path: /pages/53976b/ - "v-47e9dd3a": () => import(/* webpackChunkName: "v-47e9dd3a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/53976b/index.html.js").then(({ data }) => data), - // path: /pages/3f923d/ - "v-6d791ca4": () => import(/* webpackChunkName: "v-6d791ca4" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/3f923d/index.html.js").then(({ data }) => data), - // path: /pages/18d025/ - "v-13550f15": () => import(/* webpackChunkName: "v-13550f15" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/18d025/index.html.js").then(({ data }) => data), - // path: /DS/coding/algorithm.html - "v-37abb588": () => import(/* webpackChunkName: "v-37abb588" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.js").then(({ data }) => data), - // path: /pages/924aed/ - "v-a4870ef4": () => import(/* webpackChunkName: "v-a4870ef4" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/924aed/index.html.js").then(({ data }) => data), - // path: /pages/ff395c/ - "v-52cfe897": () => import(/* webpackChunkName: "v-52cfe897" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/ff395c/index.html.js").then(({ data }) => data), - // path: /pages/0a7dde/ - "v-2203c86c": () => import(/* webpackChunkName: "v-2203c86c" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.js").then(({ data }) => data), - // path: /pages/e577f8/ - "v-6af7422e": () => import(/* webpackChunkName: "v-6af7422e" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/e577f8/index.html.js").then(({ data }) => data), - // path: /pages/a7b602/ - "v-069c5402": () => import(/* webpackChunkName: "v-069c5402" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/a7b602/index.html.js").then(({ data }) => data), - // path: /pages/5de3a5/ - "v-32135c7a": () => import(/* webpackChunkName: "v-32135c7a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.js").then(({ data }) => data), - // path: /pages/7088fd/ - "v-40ac0f54": () => import(/* webpackChunkName: "v-40ac0f54" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/7088fd/index.html.js").then(({ data }) => data), - // path: /pages/56b8ef/ - "v-3926f79a": () => import(/* webpackChunkName: "v-3926f79a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.js").then(({ data }) => data), - // path: /pages/cddc8f/ - "v-990daf06": () => import(/* webpackChunkName: "v-990daf06" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.js").then(({ data }) => data), - // path: /pages/10b7a4/ - "v-0595fa04": () => import(/* webpackChunkName: "v-0595fa04" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.js").then(({ data }) => data), - // path: /404.html - "v-3706649a": () => import(/* webpackChunkName: "v-3706649a" */"/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/.temp/pages/404.html.js").then(({ data }) => data), -} diff --git a/docs/.vuepress/.temp/internal/pagesRoutes.js b/docs/.vuepress/.temp/internal/pagesRoutes.js deleted file mode 100644 index 6c5cafd..0000000 --- a/docs/.vuepress/.temp/internal/pagesRoutes.js +++ /dev/null @@ -1,59 +0,0 @@ -import { Vuepress } from '@vuepress/client/lib/components/Vuepress' - -const routeItems = [ - ["v-8bf0fafc","/Big_Event_History.html",{"title":""},["/Big_Event_History","/Big_Event_History.md"]], - ["v-8daa1a0e","/",{"title":""},["/index.html","/README.md"]], - ["v-2d0a038b","/CN/",{"title":""},["/CN/index.html","/CN/Readme.md"]], - ["v-2d0a3132","/OS/",{"title":"Readme"},["/OS/index.html","/OS/Readme.md"]], - ["v-62bd4033","/NoteMap/CN_Map.html",{"title":""},["/NoteMap/CN_Map","/NoteMap/CN_Map.md"]], - ["v-85ddaee2","/NoteMap/DS_Map.html",{"title":""},["/NoteMap/DS_Map","/NoteMap/DS_Map.md"]], - ["v-5c57558c","/pages/c1bec1/",{"title":""},["/pages/c1bec1/index.html","/DS/README11.html","/DS/README11.md"]], - ["v-2d0a07e7","/DS/",{"title":""},["/DS/index.html","/DS/Readme.md"]], - ["v-75163b67","/DS/basic_introduction.html",{"title":"基础入门"},["/DS/basic_introduction","/DS/basic_introduction.md"]], - ["v-c8ed33c4","/DS/linear_table.html",{"title":"线性表"},["/DS/linear_table","/DS/linear_table.md"]], - ["v-599b7814","/pages/c12319/",{"title":"Readme"},["/pages/c12319/index.html","/CCP/","/CCP/Readme.md"]], - ["v-4995d319","/pages/add102/",{"title":""},["/pages/add102/index.html","/category/","/category/README.md"]], - ["v-0e2293aa","/pages/15aa63/",{"title":"关于作者"},["/pages/15aa63/index.html","/category/about_author.html","/category/about_author.md"]], - ["v-5d28eacc","/pages/c33acd/",{"title":"赞赏支持"},["/pages/c33acd/index.html","/category/reader_donate.html","/category/reader_donate.md"]], - ["v-7e68f740","/pages/bdad06/",{"title":"更新日志"},["/pages/bdad06/index.html","/category/update_logs.html","/category/update_logs.md"]], - ["v-47e9dd3a","/pages/53976b/",{"title":"test"},["/pages/53976b/index.html","/DS/basic_introduction/1.basic_concepts.html","/DS/basic_introduction/1.basic_concepts.md"]], - ["v-6d791ca4","/pages/3f923d/",{"title":"three_elements_of_data_structure"},["/pages/3f923d/index.html","/DS/basic_introduction/2.three_elements_of_data_structure.html","/DS/basic_introduction/2.three_elements_of_data_structure.md"]], - ["v-13550f15","/pages/18d025/",{"title":"algorithm_and_algorithm_evaluation"},["/pages/18d025/index.html","/DS/basic_introduction/3.algorithm_and_algorithm_evaluation.html","/DS/basic_introduction/3.algorithm_and_algorithm_evaluation.md"]], - ["v-37abb588","/DS/coding/algorithm.html",{"title":""},["/DS/coding/algorithm","/DS/coding/algorithm.md"]], - ["v-a4870ef4","/pages/924aed/",{"title":"basic_concept_and_operation"},["/pages/924aed/index.html","/DS/linear_table/1.basic_concept_and_operation.html","/DS/linear_table/1.basic_concept_and_operation.md"]], - ["v-52cfe897","/pages/ff395c/",{"title":"sequential_representation"},["/pages/ff395c/index.html","/DS/linear_table/2.sequential_representation.html","/DS/linear_table/2.sequential_representation.md"]], - ["v-2203c86c","/pages/0a7dde/",{"title":"chain_representation"},["/pages/0a7dde/index.html","/DS/linear_table/3.chain_representation.html","/DS/linear_table/3.chain_representation.md"]], - ["v-6af7422e","/pages/e577f8/",{"title":"double_linked_list"},["/pages/e577f8/index.html","/DS/linear_table/4.double_linked_list.html","/DS/linear_table/4.double_linked_list.md"]], - ["v-069c5402","/pages/a7b602/",{"title":"circular_list"},["/pages/a7b602/index.html","/DS/linear_table/5.circular_list.html","/DS/linear_table/5.circular_list.md"]], - ["v-32135c7a","/pages/5de3a5/",{"title":"static_linked_list"},["/pages/5de3a5/index.html","/DS/linear_table/6.static_linked_list.html","/DS/linear_table/6.static_linked_list.md"]], - ["v-40ac0f54","/pages/7088fd/",{"title":"comparison_of_sequential_list_and_linked_list"},["/pages/7088fd/index.html","/DS/linear_table/7.comparison_of_sequential_list_and_linked_list.html","/DS/linear_table/7.comparison_of_sequential_list_and_linked_list.md"]], - ["v-3926f79a","/pages/56b8ef/",{"title":"selection_of_storage_structure"},["/pages/56b8ef/index.html","/DS/linear_table/8.selection_of_storage_structure.html","/DS/linear_table/8.selection_of_storage_structure.md"]], - ["v-990daf06","/pages/cddc8f/",{"title":"piecemeal_knowledge_supplement"},["/pages/cddc8f/index.html","/DS/linear_table/9.piecemeal_knowledge_supplement.html","/DS/linear_table/9.piecemeal_knowledge_supplement.md"]], - ["v-0595fa04","/pages/10b7a4/",{"title":"test"},["/pages/10b7a4/index.html","/category/test/1.test.html","/category/test/1.test.md"]], - ["v-3706649a","/404.html",{"title":""},["/404"]], -] - -export const pagesRoutes = routeItems.reduce( - (result, [name, path, meta, redirects]) => { - result.push( - { - name, - path, - component: Vuepress, - meta, - }, - ...redirects.map((item) => ({ - path: item, - redirect: path, - })) - ) - return result - }, - [ - { - name: "404", - path: "/:catchAll(.*)", - component: Vuepress, - } - ] -) diff --git a/docs/.vuepress/.temp/internal/searchIndex.js b/docs/.vuepress/.temp/internal/searchIndex.js deleted file mode 100644 index 0870966..0000000 --- a/docs/.vuepress/.temp/internal/searchIndex.js +++ /dev/null @@ -1,1106 +0,0 @@ -export const searchIndex = [ - { - "title": "", - "headers": [], - "path": "/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "Readme", - "headers": [ - { - "level": 2, - "title": "当前状态", - "slug": "当前状态", - "children": [] - } - ], - "path": "/pages/c12319/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "", - "headers": [ - { - "level": 2, - "title": "写最前面", - "slug": "写最前面", - "children": [] - }, - { - "level": 2, - "title": "关于作者", - "slug": "关于作者", - "children": [] - }, - { - "level": 2, - "title": "思维导图", - "slug": "思维导图", - "children": [] - }, - { - "level": 2, - "title": "日常推荐", - "slug": "日常推荐", - "children": [] - }, - { - "level": 2, - "title": "前端", - "slug": "前端", - "children": [] - }, - { - "level": 2, - "title": "", - "slug": "-1", - "children": [] - }, - { - "level": 2, - "title": "后端【Node】", - "slug": "后端【node】", - "children": [] - }, - { - "level": 2, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 2, - "title": "数据库", - "slug": "数据库", - "children": [] - }, - { - "level": 2, - "title": "服务部署", - "slug": "服务部署", - "children": [] - }, - { - "level": 2, - "title": "服务网关", - "slug": "服务网关", - "children": [] - }, - { - "level": 2, - "title": "服务注册", - "slug": "服务注册", - "children": [] - }, - { - "level": 2, - "title": "消息中间件", - "slug": "消息中间件", - "children": [] - }, - { - "level": 2, - "title": "RPC框架", - "slug": "rpc框架", - "children": [] - }, - { - "level": 2, - "title": "Elk日志管理平台", - "slug": "elk日志管理平台", - "children": [] - }, - { - "level": 2, - "title": "监控工具", - "slug": "监控工具", - "children": [] - }, - { - "level": 2, - "title": "高可用架构", - "slug": "高可用架构", - "children": [] - }, - { - "level": 2, - "title": "网站搭建", - "slug": "网站搭建", - "children": [] - }, - { - "level": 2, - "title": "书籍整理", - "slug": "书籍整理", - "children": [ - { - "level": 3, - "title": "技术类", - "slug": "技术类", - "children": [] - }, - { - "level": 3, - "title": "非技术类", - "slug": "非技术类", - "children": [] - } - ] - }, - { - "level": 2, - "title": "公众号汇总", - "slug": "公众号汇总", - "children": [ - { - "level": 3, - "title": "2020年", - "slug": "_2020年", - "children": [] - }, - { - "level": 3, - "title": "2021年", - "slug": "_2021年", - "children": [] - } - ] - }, - { - "level": 2, - "title": "赞赏支持", - "slug": "赞赏支持", - "children": [] - }, - { - "level": 2, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 2, - "title": "鸣谢", - "slug": "鸣谢", - "children": [] - }, - { - "level": 2, - "title": "赞助列表", - "slug": "赞助列表", - "children": [] - }, - { - "level": 2, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ], - "path": "/pages/c1bec1/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "", - "headers": [ - { - "level": 2, - "title": "title: 开始阅读sidebarDepth: 1", - "slug": "title-开始阅读sidebardepth-1", - "children": [] - }, - { - "level": 2, - "title": "写在最前面", - "slug": "写在最前面", - "children": [] - }, - { - "level": 2, - "title": "阅读须知", - "slug": "阅读须知", - "children": [] - }, - { - "level": 2, - "title": "技术支持", - "slug": "技术支持", - "children": [] - }, - { - "level": 2, - "title": "适用群体", - "slug": "适用群体", - "children": [] - }, - { - "level": 2, - "title": "资料共享", - "slug": "资料共享", - "children": [] - }, - { - "level": 2, - "title": "参考资料", - "slug": "参考资料", - "children": [ - { - "level": 3, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 3, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ] - } - ], - "path": "/DS/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "基础入门", - "headers": [ - { - "level": 2, - "title": "基础概念", - "slug": "基础概念", - "children": [ - { - "level": 3, - "title": "数据", - "slug": "数据", - "children": [] - }, - { - "level": 3, - "title": "数据元素", - "slug": "数据元素", - "children": [] - }, - { - "level": 3, - "title": "数据对象", - "slug": "数据对象", - "children": [] - }, - { - "level": 3, - "title": "数据类型", - "slug": "数据类型", - "children": [] - }, - { - "level": 3, - "title": "抽象数据类型(ADT)", - "slug": "抽象数据类型-adt", - "children": [] - }, - { - "level": 3, - "title": "数据结构", - "slug": "数据结构", - "children": [] - } - ] - }, - { - "level": 2, - "title": "数据结构三要素", - "slug": "数据结构三要素", - "children": [ - { - "level": 3, - "title": "数据的逻辑结构", - "slug": "数据的逻辑结构", - "children": [] - }, - { - "level": 3, - "title": "数据的存储(物理)结构", - "slug": "数据的存储-物理-结构", - "children": [] - }, - { - "level": 3, - "title": "数据的运算", - "slug": "数据的运算", - "children": [] - } - ] - }, - { - "level": 2, - "title": "算法和算法评价", - "slug": "算法和算法评价", - "children": [ - { - "level": 3, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 3, - "title": "效率的度量", - "slug": "效率的度量", - "children": [] - } - ] - } - ], - "path": "/DS/basic_introduction.html", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "线性表", - "headers": [ - { - "level": 2, - "title": "基础概念和基本操作", - "slug": "基础概念和基本操作", - "children": [ - { - "level": 3, - "title": "定义", - "slug": "定义", - "children": [] - }, - { - "level": 3, - "title": "基本操作", - "slug": "基本操作", - "children": [] - } - ] - } - ], - "path": "/DS/linear_table.html", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "Readme", - "headers": [], - "path": "/pages/01c16a/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "Readme", - "headers": [], - "path": "/OS/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "", - "headers": [ - { - "level": 2, - "title": "写最前面", - "slug": "写最前面", - "children": [] - }, - { - "level": 2, - "title": "关于作者", - "slug": "关于作者", - "children": [] - }, - { - "level": 2, - "title": "思维导图", - "slug": "思维导图", - "children": [] - }, - { - "level": 2, - "title": "日常推荐", - "slug": "日常推荐", - "children": [] - }, - { - "level": 2, - "title": "前端", - "slug": "前端", - "children": [] - }, - { - "level": 2, - "title": "", - "slug": "-1", - "children": [] - }, - { - "level": 2, - "title": "后端【Node】", - "slug": "后端【node】", - "children": [] - }, - { - "level": 2, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 2, - "title": "数据库", - "slug": "数据库", - "children": [] - }, - { - "level": 2, - "title": "服务部署", - "slug": "服务部署", - "children": [] - }, - { - "level": 2, - "title": "服务网关", - "slug": "服务网关", - "children": [] - }, - { - "level": 2, - "title": "服务注册", - "slug": "服务注册", - "children": [] - }, - { - "level": 2, - "title": "消息中间件", - "slug": "消息中间件", - "children": [] - }, - { - "level": 2, - "title": "RPC框架", - "slug": "rpc框架", - "children": [] - }, - { - "level": 2, - "title": "Elk日志管理平台", - "slug": "elk日志管理平台", - "children": [] - }, - { - "level": 2, - "title": "监控工具", - "slug": "监控工具", - "children": [] - }, - { - "level": 2, - "title": "高可用架构", - "slug": "高可用架构", - "children": [] - }, - { - "level": 2, - "title": "网站搭建", - "slug": "网站搭建", - "children": [] - }, - { - "level": 2, - "title": "书籍整理", - "slug": "书籍整理", - "children": [ - { - "level": 3, - "title": "技术类", - "slug": "技术类", - "children": [] - }, - { - "level": 3, - "title": "非技术类", - "slug": "非技术类", - "children": [] - } - ] - }, - { - "level": 2, - "title": "公众号汇总", - "slug": "公众号汇总", - "children": [ - { - "level": 3, - "title": "2020年", - "slug": "_2020年", - "children": [] - }, - { - "level": 3, - "title": "2021年", - "slug": "_2021年", - "children": [] - } - ] - }, - { - "level": 2, - "title": "赞赏支持", - "slug": "赞赏支持", - "children": [] - }, - { - "level": 2, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 2, - "title": "鸣谢", - "slug": "鸣谢", - "children": [] - }, - { - "level": 2, - "title": "赞助列表", - "slug": "赞助列表", - "children": [] - }, - { - "level": 2, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ], - "path": "/pages/add102/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "关于作者", - "headers": [ - { - "level": 2, - "title": "我在做哪些事情?", - "slug": "我在做哪些事情", - "children": [ - { - "level": 3, - "title": "代码开源", - "slug": "代码开源", - "children": [] - }, - { - "level": 3, - "title": "知识仓库", - "slug": "知识仓库", - "children": [] - }, - { - "level": 3, - "title": "npm插件", - "slug": "npm插件", - "children": [] - }, - { - "level": 3, - "title": "项目", - "slug": "项目", - "children": [] - } - ] - }, - { - "level": 2, - "title": "平台账号", - "slug": "平台账号", - "children": [] - }, - { - "level": 2, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 2, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ], - "path": "/pages/15aa63/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "赞赏支持", - "headers": [ - { - "level": 2, - "title": "赞赏支持", - "slug": "赞赏支持", - "children": [] - }, - { - "level": 2, - "title": "鸣谢列表", - "slug": "鸣谢列表", - "children": [] - }, - { - "level": 2, - "title": "赞助列表", - "slug": "赞助列表", - "children": [] - } - ], - "path": "/pages/c33acd/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "更新日志", - "headers": [ - { - "level": 2, - "title": "基本说明", - "slug": "基本说明", - "children": [] - }, - { - "level": 2, - "title": "提交记录", - "slug": "提交记录", - "children": [] - }, - { - "level": 2, - "title": "版本记录", - "slug": "版本记录", - "children": [ - { - "level": 3, - "title": "0.1.2", - "slug": "_0-1-2", - "children": [] - }, - { - "level": 3, - "title": "0.1.1", - "slug": "_0-1-1", - "children": [] - } - ] - } - ], - "path": "/pages/bdad06/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "test", - "headers": [ - { - "level": 2, - "title": "基础概念", - "slug": "基础概念", - "children": [ - { - "level": 3, - "title": "数据", - "slug": "数据", - "children": [] - }, - { - "level": 3, - "title": "数据元素", - "slug": "数据元素", - "children": [] - }, - { - "level": 3, - "title": "数据对象", - "slug": "数据对象", - "children": [] - }, - { - "level": 3, - "title": "数据类型", - "slug": "数据类型", - "children": [] - }, - { - "level": 3, - "title": "抽象数据类型(ADT)", - "slug": "抽象数据类型-adt", - "children": [] - }, - { - "level": 3, - "title": "数据结构", - "slug": "数据结构", - "children": [] - } - ] - } - ], - "path": "/pages/53976b/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "three_elements_of_data_structure", - "headers": [ - { - "level": 2, - "title": "数据结构三要素", - "slug": "数据结构三要素", - "children": [ - { - "level": 3, - "title": "数据的逻辑结构", - "slug": "数据的逻辑结构", - "children": [] - }, - { - "level": 3, - "title": "数据的存储(物理)结构", - "slug": "数据的存储-物理-结构", - "children": [] - }, - { - "level": 3, - "title": "数据的运算", - "slug": "数据的运算", - "children": [] - } - ] - } - ], - "path": "/pages/3f923d/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "algorithm_and_algorithm_evaluation", - "headers": [ - { - "level": 2, - "title": "算法和算法评价", - "slug": "算法和算法评价", - "children": [ - { - "level": 3, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 3, - "title": "效率的度量", - "slug": "效率的度量", - "children": [] - } - ] - } - ], - "path": "/pages/18d025/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "", - "headers": [ - { - "level": 2, - "title": "恶补算法", - "slug": "恶补算法", - "children": [] - } - ], - "path": "/DS/coding/algorithm.html", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "basic_concept_and_operation", - "headers": [ - { - "level": 2, - "title": "线性表的基础概念和基本操作", - "slug": "线性表的基础概念和基本操作", - "children": [ - { - "level": 3, - "title": "定义", - "slug": "定义", - "children": [] - }, - { - "level": 3, - "title": "基本操作", - "slug": "基本操作", - "children": [] - } - ] - } - ], - "path": "/pages/924aed/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "sequential_representation", - "headers": [ - { - "level": 2, - "title": "线性表的顺序表示", - "slug": "线性表的顺序表示", - "children": [ - { - "level": 3, - "title": "定义", - "slug": "定义", - "children": [] - }, - { - "level": 3, - "title": "基本操作", - "slug": "基本操作", - "children": [] - } - ] - } - ], - "path": "/pages/ff395c/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "chain_representation", - "headers": [ - { - "level": 2, - "title": "线性表的链式表示", - "slug": "线性表的链式表示", - "children": [ - { - "level": 3, - "title": "单链表", - "slug": "单链表", - "children": [] - } - ] - } - ], - "path": "/pages/0a7dde/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "double_linked_list", - "headers": [ - { - "level": 2, - "title": "双链表", - "slug": "双链表", - "children": [ - { - "level": 3, - "title": "基本特点", - "slug": "基本特点", - "children": [] - }, - { - "level": 3, - "title": "插入结点", - "slug": "插入结点", - "children": [] - }, - { - "level": 3, - "title": "删除结点", - "slug": "删除结点", - "children": [] - } - ] - } - ], - "path": "/pages/e577f8/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "circular_list", - "headers": [ - { - "level": 2, - "title": "循环链表", - "slug": "循环链表", - "children": [ - { - "level": 3, - "title": "循环单链表", - "slug": "循环单链表", - "children": [] - }, - { - "level": 3, - "title": "循环双链表", - "slug": "循环双链表", - "children": [] - } - ] - } - ], - "path": "/pages/a7b602/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "static_linked_list", - "headers": [ - { - "level": 2, - "title": "静态链表", - "slug": "静态链表", - "children": [] - } - ], - "path": "/pages/5de3a5/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "comparison_of_sequential_list_and_linked_list", - "headers": [ - { - "level": 2, - "title": "顺序表和链表的比较", - "slug": "顺序表和链表的比较", - "children": [ - { - "level": 3, - "title": "存取方式", - "slug": "存取方式", - "children": [] - }, - { - "level": 3, - "title": "逻辑结构与物理结构", - "slug": "逻辑结构与物理结构", - "children": [] - }, - { - "level": 3, - "title": "时间复杂度", - "slug": "时间复杂度", - "children": [] - }, - { - "level": 3, - "title": "空间分配", - "slug": "空间分配", - "children": [] - } - ] - } - ], - "path": "/pages/7088fd/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "selection_of_storage_structure", - "headers": [ - { - "level": 2, - "title": "存储结构的选取", - "slug": "存储结构的选取", - "children": [ - { - "level": 3, - "title": "基于存储的考虑", - "slug": "基于存储的考虑", - "children": [] - }, - { - "level": 3, - "title": "基于运算的考虑", - "slug": "基于运算的考虑", - "children": [] - }, - { - "level": 3, - "title": "基于环境的考虑", - "slug": "基于环境的考虑", - "children": [] - } - ] - } - ], - "path": "/pages/56b8ef/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "piecemeal_knowledge_supplement", - "headers": [ - { - "level": 2, - "title": "零碎知识补充", - "slug": "零碎知识补充", - "children": [ - { - "level": 3, - "title": "单链表设置头结点", - "slug": "单链表设置头结点", - "children": [] - } - ] - } - ], - "path": "/pages/cddc8f/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "test", - "headers": [], - "path": "/pages/10b7a4/", - "pathLocale": "/", - "extraFields": [] - }, - { - "title": "", - "headers": [], - "path": "/404.html", - "pathLocale": "/", - "extraFields": [] - } -] - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updateSearchIndex) { - __VUE_HMR_RUNTIME__.updateSearchIndex(searchIndex) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ searchIndex }) => { - __VUE_HMR_RUNTIME__.updateSearchIndex(searchIndex) - }) -} diff --git a/docs/.vuepress/.temp/internal/siteData.js b/docs/.vuepress/.temp/internal/siteData.js deleted file mode 100644 index 4e1eb59..0000000 --- a/docs/.vuepress/.temp/internal/siteData.js +++ /dev/null @@ -1,29 +0,0 @@ -export const siteData = { - "base": "/", - "lang": "en-US", - "title": "计算机应试全家桶", - "description": "磨刀不误砍柴工,读完硕士再打工", - "head": [ - [ - "link", - { - "rel": "icon", - "href": "/assets/fight_favicon.ico" - } - ] - ], - "locales": {} -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updateSiteData) { - __VUE_HMR_RUNTIME__.updateSiteData(siteData) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ siteData }) => { - __VUE_HMR_RUNTIME__.updateSiteData(siteData) - }) -} diff --git a/docs/.vuepress/.temp/internal/themeData.js b/docs/.vuepress/.temp/internal/themeData.js deleted file mode 100644 index d1fb216..0000000 --- a/docs/.vuepress/.temp/internal/themeData.js +++ /dev/null @@ -1,140 +0,0 @@ -export const themeData = { - "logo": "/assets/fight_favicon.ico", - "darkMode": false, - "navbar": [ - { - "text": "首页", - "link": "/" - }, - { - "text": "恶补算法", - "children": [ - { - "text": "课本习题", - "link": "/" - }, - { - "text": "刷题笔记", - "link": "/todo" - }, - { - "text": "在线刷题", - "children": [ - { - "text": "杭电OJ", - "link": "http://acm.hdu.edu.cn/" - }, - { - "text": "牛客网", - "link": "https://www.nowcoder.com/" - }, - { - "text": "LeetCode", - "link": "https://leetcode-cn.com/" - } - ] - } - ] - }, - { - "text": "数据结构", - "link": "/DS/" - }, - { - "text": "操作系统", - "link": "/OS/" - }, - { - "text": "计算机组成原理", - "link": "/CCP/" - }, - { - "text": "计算机网络", - "link": "/CN/" - }, - { - "text": "其他资料", - "children": [ - { - "text": "考研相关", - "children": [ - { - "text": "111", - "link": "/333" - } - ] - }, - { - "text": "思维导图", - "children": [ - { - "text": "数据结构", - "link": "/NoteMap/DS_Map" - }, - { - "text": "操作系统", - "link": "/NoteMap/OS_Map" - }, - { - "text": "计组", - "link": "/NoteMap/CCP_Map" - }, - { - "text": "计算机网络", - "link": "/NoteMap/CN_Map" - } - ] - } - ] - }, - { - "text": "大事记", - "link": "/Big_Event_History/" - } - ], - "sidebar": { - "/DS/": [ - "basic_introduction", - "linear_table" - ] - }, - "smoothScroll": true, - "lastUpdated": true, - "lastUpdatedText": "最近更新", - "contributorsText": "贡献者", - "notFound": [ - "宝贝不要急,我努力更新就会慢慢有的哟...想要什么,也欢迎微信后台私信哟!" - ], - "backToHome": "返回首页", - "repo": "https://github.com/mmdapl/408CSFamily", - "editLink": false, - "displayAllHeaders": true, - "search": true, - "searchMaxSuggestions": 10, - "locales": { - "/": { - "selectLanguageName": "English" - } - }, - "selectLanguageText": "Languages", - "selectLanguageAriaLabel": "Select language", - "sidebarDepth": 2, - "editLinkText": "Edit this page", - "contributors": true, - "openInNewWindow": "open in new window", - "toggleDarkMode": "toggle dark mode", - "toggleSidebar": "toggle sidebar" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updateThemeData) { - __VUE_HMR_RUNTIME__.updateThemeData(themeData) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ themeData }) => { - __VUE_HMR_RUNTIME__.updateThemeData(themeData) - }) -} diff --git a/docs/.vuepress/.temp/pages/404.html.js b/docs/.vuepress/.temp/pages/404.html.js deleted file mode 100644 index 09dc53f..0000000 --- a/docs/.vuepress/.temp/pages/404.html.js +++ /dev/null @@ -1,26 +0,0 @@ -export const data = { - "key": "v-3706649a", - "path": "/404.html", - "title": "", - "lang": "en-US", - "frontmatter": { - "layout": "404" - }, - "excerpt": "", - "headers": [], - "git": {}, - "filePathRelative": null -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/404.html.vue b/docs/.vuepress/.temp/pages/404.html.vue deleted file mode 100644 index cc340bc..0000000 --- a/docs/.vuepress/.temp/pages/404.html.vue +++ /dev/null @@ -1 +0,0 @@ -<template></template> diff --git a/docs/.vuepress/.temp/pages/Big_Event_History.html.js b/docs/.vuepress/.temp/pages/Big_Event_History.html.js deleted file mode 100644 index eaf3ee9..0000000 --- a/docs/.vuepress/.temp/pages/Big_Event_History.html.js +++ /dev/null @@ -1,34 +0,0 @@ -export const data = { - "key": "v-8bf0fafc", - "path": "/Big_Event_History.html", - "title": "", - "lang": "en-US", - "frontmatter": {}, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "网站大事记", - "slug": "网站大事记", - "children": [] - } - ], - "git": { - "updatedTime": null, - "contributors": [] - }, - "filePathRelative": "Big_Event_History.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/Big_Event_History.html.vue b/docs/.vuepress/.temp/pages/Big_Event_History.html.vue deleted file mode 100644 index e7da497..0000000 --- a/docs/.vuepress/.temp/pages/Big_Event_History.html.vue +++ /dev/null @@ -1,10 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:43:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:44:50 ---> -<h2 id="网站大事记" tabindex="-1"><a class="header-anchor" href="#网站大事记" aria-hidden="true">#</a> 网站大事记</h2> -</template> diff --git a/docs/.vuepress/.temp/pages/CN/index.html.js b/docs/.vuepress/.temp/pages/CN/index.html.js deleted file mode 100644 index 93c2758..0000000 --- a/docs/.vuepress/.temp/pages/CN/index.html.js +++ /dev/null @@ -1,40 +0,0 @@ -export const data = { - "key": "v-2d0a038b", - "path": "/CN/", - "title": "", - "lang": "en-US", - "frontmatter": {}, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "计算机网络", - "slug": "计算机网络", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "CN/Readme.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/CN/index.html.vue b/docs/.vuepress/.temp/pages/CN/index.html.vue deleted file mode 100644 index 7763a2d..0000000 --- a/docs/.vuepress/.temp/pages/CN/index.html.vue +++ /dev/null @@ -1,11 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:10:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:33:59 ---> -<h2 id="计算机网络" tabindex="-1"><a class="header-anchor" href="#计算机网络" aria-hidden="true">#</a> 计算机网络</h2> -<p>doing</p> -</template> diff --git a/docs/.vuepress/.temp/pages/DS/basic_introduction.html.js b/docs/.vuepress/.temp/pages/DS/basic_introduction.html.js deleted file mode 100644 index 98710c5..0000000 --- a/docs/.vuepress/.temp/pages/DS/basic_introduction.html.js +++ /dev/null @@ -1,123 +0,0 @@ -export const data = { - "key": "v-75163b67", - "path": "/DS/basic_introduction.html", - "title": "基础入门", - "lang": "en-US", - "frontmatter": { - "title": "基础入门" - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "基础概念", - "slug": "基础概念", - "children": [ - { - "level": 3, - "title": "数据", - "slug": "数据", - "children": [] - }, - { - "level": 3, - "title": "数据元素", - "slug": "数据元素", - "children": [] - }, - { - "level": 3, - "title": "数据对象", - "slug": "数据对象", - "children": [] - }, - { - "level": 3, - "title": "数据类型", - "slug": "数据类型", - "children": [] - }, - { - "level": 3, - "title": "抽象数据类型(ADT)", - "slug": "抽象数据类型-adt", - "children": [] - }, - { - "level": 3, - "title": "数据结构", - "slug": "数据结构", - "children": [] - } - ] - }, - { - "level": 2, - "title": "数据结构三要素", - "slug": "数据结构三要素", - "children": [ - { - "level": 3, - "title": "数据的逻辑结构", - "slug": "数据的逻辑结构", - "children": [] - }, - { - "level": 3, - "title": "数据的存储(物理)结构", - "slug": "数据的存储-物理-结构", - "children": [] - }, - { - "level": 3, - "title": "数据的运算", - "slug": "数据的运算", - "children": [] - } - ] - }, - { - "level": 2, - "title": "算法和算法评价", - "slug": "算法和算法评价", - "children": [ - { - "level": 3, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 3, - "title": "效率的度量", - "slug": "效率的度量", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/basic_introduction.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/DS/basic_introduction.html.vue b/docs/.vuepress/.temp/pages/DS/basic_introduction.html.vue deleted file mode 100644 index 89ade02..0000000 --- a/docs/.vuepress/.temp/pages/DS/basic_introduction.html.vue +++ /dev/null @@ -1,221 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:54:07 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-09 00:25:07 ---> -<h2 id="基础概念" tabindex="-1"><a class="header-anchor" href="#基础概念" aria-hidden="true">#</a> 基础概念</h2> -<h3 id="数据" tabindex="-1"><a class="header-anchor" href="#数据" aria-hidden="true">#</a> 数据</h3> -<p><strong>信息的载体</strong>,是客观事物属性的数、字符以及所有能够输入到计算机包中并且被计算机程序识别和处理的<strong>集合</strong></p> -<h3 id="数据元素" tabindex="-1"><a class="header-anchor" href="#数据元素" aria-hidden="true">#</a> 数据元素</h3> -<p><strong>数据的基本单位</strong>,通常按照一个整数来进行考虑和处理。</p> -<p>特别注意:一个数据元素由若干个<strong>数据项</strong>组成,数据项是构成数组元素的最小单位,且不可分割。</p> -<h3 id="数据对象" tabindex="-1"><a class="header-anchor" href="#数据对象" aria-hidden="true">#</a> 数据对象</h3> -<p>具有<strong>相同性质</strong>的数据元素的<strong>集合</strong>,<strong>是数据的子集</strong></p> -<h3 id="数据类型" tabindex="-1"><a class="header-anchor" href="#数据类型" aria-hidden="true">#</a> 数据类型</h3> -<p>值的集合和定义在此集合上一组操作的总称</p> -<ul> -<li>原子类型:不可再分的数据类型;</li> -<li>结构类型:可以分解成若干分量(成分)的数据类型;</li> -<li><strong>抽象数据类型</strong>:抽象出具组织和其相关的操作;</li> -</ul> -<h3 id="抽象数据类型-adt" tabindex="-1"><a class="header-anchor" href="#抽象数据类型-adt" aria-hidden="true">#</a> 抽象数据类型(ADT)</h3> -<blockquote> -<p>Tips: 可以结合高级语言中类对象封装来理解;</p> -</blockquote> -<div class="language-bash ext-sh line-numbers-mode"><pre v-pre class="language-bash"><code>ADT抽象数据类型名<span class="token punctuation">{</span> - 数据对象:<span class="token operator"><</span>数据对象的定义<span class="token operator">></span> - 数据关系:<span class="token operator"><</span>数据关系的定义<span class="token operator">></span> - 基本操作:<span class="token operator"><</span>基本操作的定义<span class="token operator">></span> -<span class="token punctuation">}</span> ADT抽象数据类型名 -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>一个数学模型以及定义在该模型上的一组操作。定义仅仅取决于它的一组逻辑操作。与计算机内部如何表示和实现是没有关系;</p> -<p><strong>不论内部结构如何变化,只要其数学特性不变,就不会影响到外部的使用,实现了数据封装和信息隐藏</strong></p> -<p>通常由(数据对象、数据关系、数据操作集)三元组来表示抽象数据类型;</p> -<p>抽象数据类型的主要作用是<strong>数据封装和信息隐藏,让实现与使用相分离</strong>。数据及其相关操作的结合称为数据封装。对象可以对其他对象隐藏某些操作细节,从而使这些操作不会受到其他对象的影响。</p> -<p>抽象数据类型独立于运算的具体实现,使用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据,实现了信息隐藏。</p> -<h3 id="数据结构" tabindex="-1"><a class="header-anchor" href="#数据结构" aria-hidden="true">#</a> 数据结构</h3> -<p>首先明确:数据元素都不是孤立存在的。元素与元素之间存在着某种关系,这种相互之间的关系就是<strong>结构</strong>。</p> -<p><strong>数据结构是相互之间存在一种或者多种特定关系的数据元素的集合</strong></p> -<ul> -<li>逻辑结构</li> -<li>存储结构(物理结构)</li> -<li>数据运算</li> -</ul> -<p>数据的逻辑结构和存储结构是密不可分的。</p> -<p><strong>算法的设计取决于所选定的逻辑结构;算法的实现依赖于所采用的存储结构;</strong></p> -<hr> -<h2 id="数据结构三要素" tabindex="-1"><a class="header-anchor" href="#数据结构三要素" aria-hidden="true">#</a> 数据结构三要素</h2> -<ul> -<li>数据的逻辑结构</li> -<li>数据的存储结构</li> -<li>数据的运算</li> -</ul> -<h3 id="数据的逻辑结构" tabindex="-1"><a class="header-anchor" href="#数据的逻辑结构" aria-hidden="true">#</a> 数据的逻辑结构</h3> -<p>数据元素之间的逻辑关系,从逻辑关系上描述数据,叫做数据的逻辑结构。</p> -<p>与数据的存储(物理)结构无关,是独立于计算机的。</p> -<p>可以分为:</p> -<ul> -<li>线性结构</li> -<li>非线性结构</li> -</ul> -<p>线性表是典型的线性结构,衍生出的栈、队列、串、数组、广义表也都是线性结构;</p> -<p>非线性结构主要有:集合、树(一般树、二叉树)、图(有向图、无向图)</p> -<p>特别注意:</p> -<ul> -<li><code>集合</code>:结构中的数据元素之间<strong>除了“同属于一个集合”的关系外,别无其他关系。</strong></li> -<li><code>线性结构</code>:结构中的数据元素之间<strong>只存在一对一的关系</strong>。</li> -<li><code>树形结构</code>:结构中的数据元素之间<strong>存在一对多的关系。</strong></li> -<li><code>图状结构和网状结构</code>:结构中的数据元素之间<strong>存在多对多的关系。</strong></li> -</ul> -<h3 id="数据的存储-物理-结构" tabindex="-1"><a class="header-anchor" href="#数据的存储-物理-结构" aria-hidden="true">#</a> 数据的存储(物理)结构</h3> -<p>数据结构在计算机中的表示(映像)。包括数据<code>元素的表示</code>和<code>关系的表示</code>。</p> -<p>存储结构是逻辑结构用计算机语言实现的,依赖于计算机语言。</p> -<p>可以分为:</p> -<ul> -<li>顺序存储</li> -<li>链式存储</li> -<li>索引存储</li> -<li>散列(Hash)存储</li> -</ul> -<p><strong>注意:存储和存取的概念不一样</strong></p> -<h4 id="顺序存储" tabindex="-1"><a class="header-anchor" href="#顺序存储" aria-hidden="true">#</a> 顺序存储</h4> -<p><strong>逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。</strong></p> -<p>优点:</p> -<ul> -<li>可以实现随机存取</li> -<li>元素占用最少的存储空间</li> -</ul> -<p>缺点:</p> -<ul> -<li>只能使用相邻的一整块存储单元,依赖于物理结构相邻;</li> -<li>容易产生<code>外部碎片</code></li> -</ul> -<p>什么是内外部碎片?</p> -<blockquote> -<p>参考资料:https://blog.csdn.net/qq_22238021/article/details/80209062</p> -</blockquote> -<ul> -<li>外部碎片:<code>还没有分配出去</code>(不属于任何进程),但是<strong>由于大小而无法分配给申请内存空间的新进程的内存空闲块。</strong></li> -<li>内部碎片:<code>已经被分配出去</code>(能明确指出属于哪个进程)的<strong>内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片。</strong></li> -</ul> -<h4 id="链式存储" tabindex="-1"><a class="header-anchor" href="#链式存储" aria-hidden="true">#</a> 链式存储</h4> -<p>与顺序存储不同,<strong>链式存储不要求逻辑上相邻的元素在物理位置上也相邻。</strong></p> -<p>借助指示元素存储地址的<code>指针</code>表示元素之间的逻辑关系。</p> -<p>优点:</p> -<ul> -<li>不会出现碎片现象</li> -<li>充分利用所有存储单元</li> -</ul> -<p>缺点:</p> -<ul> -<li>除了存储元素外,还需要额外存储指针,会占用额外的存储空间(结合数据库索引学习)。</li> -<li>链式存储,<strong>只能实现<code>顺序存取</code>,不能实现<code>随机存取</code>(指针的遍历)</strong></li> -</ul> -<h4 id="索引存储" tabindex="-1"><a class="header-anchor" href="#索引存储" aria-hidden="true">#</a> 索引存储</h4> -<p>存放数据元素和元素间关系的存储方式,在存储元素信息的同时,还需要建立附加的<code>索引表</code>。</p> -<p><strong>索引表的每一项称为索引项,索引项的一般形式是:<关键字,地址></strong></p> -<p>优点:</p> -<ul> -<li>检索快(就好比字典有了目录,查询就很快了)</li> -</ul> -<p>缺点:</p> -<ul> -<li>增加了索引表,占用较多的存储空间(典型的空间换时间策略)</li> -<li>增加、删除数据时,需要对应修改索引表,花费更多时间。</li> -</ul> -<h4 id="散列-hash-存储" tabindex="-1"><a class="header-anchor" href="#散列-hash-存储" aria-hidden="true">#</a> 散列(Hash)存储</h4> -<p>根据元素的关键字直接通过散列(Hash)函数计算出元素的存储地址。</p> -<p>优点:</p> -<ul> -<li>检索快,添加、删除元素结点操作快(获取元素地址直接,整体时间就少了)</li> -</ul> -<p>缺点:</p> -<ul> -<li>非常依赖于<code>散列函数</code></li> -<li>会出现<code>散列冲突</code>(主要依赖与散列函数,散列函数不好就很容易出现散列冲突)</li> -<li>出现<code>散列冲突</code>时,解决冲突就会增加时间和空间上的开销</li> -</ul> -<h3 id="数据的运算" tabindex="-1"><a class="header-anchor" href="#数据的运算" aria-hidden="true">#</a> 数据的运算</h3> -<p>数据上的运算包括:<code>运算的定义</code> 、<code>运算的实现</code></p> -<ul> -<li><code>运算的定义</code>:针对逻辑结构,指出运算的功能</li> -<li><code>原酸的实现</code>:针对存储结构,指出运算的具体操作步骤</li> -</ul> -<p>线性表既可以用顺序存储方式实现,也可以用链式存储方式实现。</p> -<hr> -<h2 id="算法和算法评价" tabindex="-1"><a class="header-anchor" href="#算法和算法评价" aria-hidden="true">#</a> 算法和算法评价</h2> -<h3 id="算法" tabindex="-1"><a class="header-anchor" href="#算法" aria-hidden="true">#</a> 算法</h3> -<p><code>算法</code> : 对特定问题求解步骤的一种描述,<strong>是指令的有序集合</strong>,每一条指令表示一个或多个操作。</p> -<h4 id="重要特性" tabindex="-1"><a class="header-anchor" href="#重要特性" aria-hidden="true">#</a> 重要特性</h4> -<ul> -<li><code>有穷性</code>:必须总是(对任何合法的输入值)在<strong>执行有穷步后结束</strong>,并且每一步都可<strong>在有穷时间内完成</strong></li> -<li><code>确定性</code>:每条指令的含义明确,不会产生二义性(歧义),<strong>对相同的输入只能得出相同的结果</strong></li> -<li><code>可行性</code>:算法是可行的。<strong>算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的</strong></li> -<li><code>输入</code>:有零个或者多个输入,<strong>输入取决于某个特定的对象的集合。</strong></li> -<li><code>输出</code>:有一个或者多个输出,<strong>输出是和输入有着某种特定关系的量(强调输出与输入的关系)</strong></li> -</ul> -<blockquote> -<p><strong>算法是有穷的,但是程序不一定满足有穷性</strong>,程序只是算法在计算机上的特定的实现, 例如:死循环</p> -</blockquote> -<h4 id="算法的目标" tabindex="-1"><a class="header-anchor" href="#算法的目标" aria-hidden="true">#</a> 算法的目标</h4> -<p>由于设计思路、解决问题方案等方面不同,不同算法之间也是有好坏的,就像人与人之间存在着差异。为设计出更好的算算法,往往需要追求更高的目标,而好的算法需要考虑到的目标就有:</p> -<ul> -<li>正确性:首先算法肯定是<strong>需要正确的解决求解问题</strong></li> -<li>可读性:<strong>算法应该具有良好的可读性</strong>,就像项目代码一样,好的业务代码、逻辑清楚,<strong>便于理解</strong>。</li> -<li>健壮性:<strong>在输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名奇妙的输出结果</strong>(在高级语言编程中,类似于强调封装方法的参数校验)</li> -<li>效率与低存储量需求:<strong>效率即算法执行的时间</strong>,<strong>存储量需求即算法那执行过程中所有要的最大存储空间</strong>,这些与算法所解决问题的规模有关;</li> -</ul> -<blockquote> -<p>Tips: 效率可以结合时间复杂度来理解,存储量需求可以结合空间复杂度理解;</p> -</blockquote> -<h3 id="效率的度量" tabindex="-1"><a class="header-anchor" href="#效率的度量" aria-hidden="true">#</a> 效率的度量</h3> -<p>算法效率的度量是通过<code>时间复杂度</code>和<code>空间复杂度</code>来描述的;</p> -<h4 id="时间复杂度" tabindex="-1"><a class="header-anchor" href="#时间复杂度" aria-hidden="true">#</a> 时间复杂度</h4> -<p>语句的频度:语句在算法中被重复执行的次数</p> -<p>算法中所有语句的<code>频度之和</code>记作T(n),即:对应算法问题规模n的函数,时间复杂度主要是来分析T(n)的数量级;</p> -<p><strong>算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)</strong></p> -<p>上面这句话是不是不能理解??? 哈哈哈,我第一次看,也是!!</p> -<div class="language-c ext-c line-numbers-mode"><pre v-pre class="language-c"><code> -<span class="token keyword">int</span> <span class="token function">test</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token punctuation">{</span> - <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator"><</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span> - <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> - <span class="token punctuation">}</span> - <span class="token comment">// 循环叠加 输出</span> - <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> -<span class="token punctuation">}</span> - - - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><p>在这个简单的函数里</p> -<ul> -<li>当n<1的时候,例如:-2,就不需要循环,此时时间复杂度可以理解为T(1)</li> -<li>当n>1的时候,例如:5 此时时间复杂度可以理解为T(n)</li> -</ul> -<p>当然,这里只是简单举例子便于理解:</p> -<blockquote> -<p><strong>算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)</strong></p> -</blockquote> -<ul> -<li><code>最坏时间复杂度</code>:<strong>最坏情况下</strong>,算法的时间复杂度</li> -<li><code>平均时间复杂度</code>:<strong>所有可能输入实例在同等概率出现的情况下</strong>,算法的期望运行时间</li> -<li><code>最好时间复杂度</code>:<strong>最好的情况下</strong>,算法的时间复杂度</li> -</ul> -<p>一般情况下,考虑最坏情况的时间复杂度(即:最坏时间复杂度),保证算法的运行时间不会更长(最糟糕我都能预料,难道还有更糟糕?????噗呲)</p> -<h4 id="空间复杂度" tabindex="-1"><a class="header-anchor" href="#空间复杂度" aria-hidden="true">#</a> 空间复杂度</h4> -<p>算法的空间复杂度可以用函数记作:S(n),<strong>用来定义算法运行过程中需要耗费的存储空间</strong>,是问题规模n的函数;</p> -<blockquote> -<p>渐进空间复杂度也被称为空间复杂度,记作:S(n)=O(g(n))</p> -</blockquote> -<p><strong>一个程序除了需要存储空间来存放本身所用的指令、常数、变量和输入数据外,也需要对数据进行操作的工作单元和存储一些实现计算所需要信息的辅助空间。</strong></p> -<p>当输入数据所占用的空间只取决于问题本身,和算法无关时,只需要去分析除了输入和程序之外的额外空间</p> -<p>算法原地工作:算法所需要辅助空间是常量,记作S(1),例如:</p> -<div class="language-c ext-c line-numbers-mode"><pre v-pre class="language-c"><code><span class="token keyword">int</span> <span class="token function">switchValue</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">{</span> - <span class="token comment">// 定义临时变量</span> - <span class="token keyword">int</span> temp<span class="token operator">=</span>a<span class="token punctuation">;</span> - b<span class="token operator">=</span>temp<span class="token punctuation">;</span> - a<span class="token operator">=</span>b<span class="token punctuation">;</span> -<span class="token punctuation">}</span> -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>在上面的函数中,只是通过临时变量temp来实现a和b的值交换,没有需要更多变量,因此可以简单理解函数的在<code>原地工作</code>,辅助空间是常量,记作S(1)</p> -</template> diff --git a/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.js b/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.js deleted file mode 100644 index 058a61d..0000000 --- a/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.js +++ /dev/null @@ -1,34 +0,0 @@ -export const data = { - "key": "v-37abb588", - "path": "/DS/coding/algorithm.html", - "title": "", - "lang": "en-US", - "frontmatter": {}, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "恶补算法", - "slug": "恶补算法", - "children": [] - } - ], - "git": { - "updatedTime": null, - "contributors": [] - }, - "filePathRelative": "DS/coding/algorithm.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.vue b/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.vue deleted file mode 100644 index 2c6f1bb..0000000 --- a/docs/.vuepress/.temp/pages/DS/coding/algorithm.html.vue +++ /dev/null @@ -1,13 +0,0 @@ -<template><!-- - * @Description: 恶补算法 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-19 08:56:55 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-19 08:56:56 ---> -<h2 id="恶补算法" tabindex="-1"><a class="header-anchor" href="#恶补算法" aria-hidden="true">#</a> 恶补算法</h2> -<blockquote> -<p>todo</p> -</blockquote> -</template> diff --git a/docs/.vuepress/.temp/pages/DS/index.html.js b/docs/.vuepress/.temp/pages/DS/index.html.js deleted file mode 100644 index a519877..0000000 --- a/docs/.vuepress/.temp/pages/DS/index.html.js +++ /dev/null @@ -1,83 +0,0 @@ -export const data = { - "key": "v-2d0a07e7", - "path": "/DS/", - "title": "", - "lang": "en-US", - "frontmatter": {}, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "写在最前面", - "slug": "写在最前面", - "children": [] - }, - { - "level": 2, - "title": "阅读须知", - "slug": "阅读须知", - "children": [] - }, - { - "level": 2, - "title": "技术支持", - "slug": "技术支持", - "children": [] - }, - { - "level": 2, - "title": "适用群体", - "slug": "适用群体", - "children": [] - }, - { - "level": 2, - "title": "资料共享", - "slug": "资料共享", - "children": [] - }, - { - "level": 2, - "title": "参考资料", - "slug": "参考资料", - "children": [ - { - "level": 3, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 3, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/Readme.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/DS/index.html.vue b/docs/.vuepress/.temp/pages/DS/index.html.vue deleted file mode 100644 index d1bba1b..0000000 --- a/docs/.vuepress/.temp/pages/DS/index.html.vue +++ /dev/null @@ -1,73 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-08 23:10:00 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:26:09 ---> -<h2 id="写在最前面" tabindex="-1"><a class="header-anchor" href="#写在最前面" aria-hidden="true">#</a> 写在最前面</h2> -<p>这份《薛定谔的Egg.js》文档,是我考虑很久之后,才决定要整理出来的,在这上面倾注了很多时间</p> -<ul> -<li>也不知道有没有用</li> -<li>也不知道能不能整理完</li> -<li>更不知道对你会不会有所帮助</li> -</ul> -<p>但愿我们都能在此有所收获,放手开始吧!!</p> -<p>最后,仅以“<strong>祷以恒切, 盼以喜乐,苦以坚忍,必有所得</strong>”,共勉~</p> -<hr> -<h2 id="阅读须知" tabindex="-1"><a class="header-anchor" href="#阅读须知" aria-hidden="true">#</a> 阅读须知</h2> -<ul> -<li>该部分为框架基础,是基于<a href="https://eggjs.org/zh-cn/" target="_blank" rel="noopener noreferrer">Egg.js官网<ExternalLinkIcon/></a>和自己使用体验进行整理汇总,难免会存在重复部分。</li> -<li>若在阅读、学习过程中发现与官网描述有所差异,可以立即与我联系进行确认与更改。</li> -<li><strong>文档用于个人整理和技术学习,禁止无授权转载、商用。</strong></li> -</ul> -<h2 id="技术支持" tabindex="-1"><a class="header-anchor" href="#技术支持" aria-hidden="true">#</a> 技术支持</h2> -<ul> -<li><a href="https://eggjs.org/zh-cn/" target="_blank" rel="noopener noreferrer">Egg.js官网<ExternalLinkIcon/></a></li> -<li><a href="https://www.vuepress.cn/guide" target="_blank" rel="noopener noreferrer">VuePress<ExternalLinkIcon/></a></li> -<li><a href="https://antdocs.seeyoz.cn/guide/" target="_blank" rel="noopener noreferrer">AntDocs<ExternalLinkIcon/></a></li> -</ul> -<h2 id="适用群体" tabindex="-1"><a class="header-anchor" href="#适用群体" aria-hidden="true">#</a> 适用群体</h2> -<ul> -<li>默认已了解过<a href="https://es6.ruanyifeng.com/" target="_blank" rel="noopener noreferrer">ES6<ExternalLinkIcon/></a>语法和部分Node后端框架(<a href="https://www.expressjs.com.cn/" target="_blank" rel="noopener noreferrer">Express<ExternalLinkIcon/></a>、<a href="https://koa.bootcss.com/" target="_blank" rel="noopener noreferrer">Koa<ExternalLinkIcon/></a>)。</li> -<li>具有一定JavaScript开发基础,对JavaScript开发有浓烈兴趣。</li> -<li><strong>已有Egg.js开发经验,但细节用法不胜了解的,非常适合用来查缺补漏。</strong></li> -</ul> -<h2 id="资料共享" tabindex="-1"><a class="header-anchor" href="#资料共享" aria-hidden="true">#</a> 资料共享</h2> -<blockquote> -<p>链接失效可以关注公众号或私信获取"链接"</p> -</blockquote> -<h2 id="参考资料" tabindex="-1"><a class="header-anchor" href="#参考资料" aria-hidden="true">#</a> 参考资料</h2> -<ul> -<li>大话数据结构 - 程杰</li> -<li>数据结构复习全书 - 王道论坛</li> -<li>视频教程 - 王道论坛</li> -</ul> -<hr> -<h3 id="联系我" tabindex="-1"><a class="header-anchor" href="#联系我" aria-hidden="true">#</a> 联系我</h3> -<ul> -<li>有任何问题或建议,欢迎微信“骚扰”,商务合作请备注!</li> -</ul> -<div align="left"> -<img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/wechat_code.jpg" width="300" height="300" style="border-radius:4px;"/> -</div> -<h1 id="" tabindex="-1"><a class="header-anchor" href="#" aria-hidden="true">#</a> </h1> -<h3 id="公众号" tabindex="-1"><a class="header-anchor" href="#公众号" aria-hidden="true">#</a> 公众号</h3> -<ul> -<li> -<p>相逢不用忙归去,明日黄花蝶也愁....</p> -</li> -<li> -<p><strong>若系列文章对你有所帮助,不如来公众号交个朋友吧.</strong></p> -</li> -</ul> -<template> - <div> - <a-row> - <a-col :xs="20" :sm="16" :md="12" :lg="10" :xl="10"><img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/gongzhonghao.jpg"/> - </a-col> - </a-row> - </div> -</template> -</template> diff --git a/docs/.vuepress/.temp/pages/DS/linear_table.html.js b/docs/.vuepress/.temp/pages/DS/linear_table.html.js deleted file mode 100644 index 2d7e3a4..0000000 --- a/docs/.vuepress/.temp/pages/DS/linear_table.html.js +++ /dev/null @@ -1,55 +0,0 @@ -export const data = { - "key": "v-c8ed33c4", - "path": "/DS/linear_table.html", - "title": "线性表", - "lang": "en-US", - "frontmatter": { - "title": "线性表" - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "基础概念和基本操作", - "slug": "基础概念和基本操作", - "children": [ - { - "level": 3, - "title": "定义", - "slug": "定义", - "children": [] - }, - { - "level": 3, - "title": "基本操作", - "slug": "基本操作", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/DS/linear_table.html.vue b/docs/.vuepress/.temp/pages/DS/linear_table.html.vue deleted file mode 100644 index 1aa06df..0000000 --- a/docs/.vuepress/.temp/pages/DS/linear_table.html.vue +++ /dev/null @@ -1,50 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:57:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-09 01:06:17 ---> -<!-- ## 线性表的基础概念和基本操作 --> -<h2 id="基础概念和基本操作" tabindex="-1"><a class="header-anchor" href="#基础概念和基本操作" aria-hidden="true">#</a> 基础概念和基本操作</h2> -<blockquote> -<p>强调线性表是一种逻辑结构,不是存储结构</p> -</blockquote> -<h3 id="定义" tabindex="-1"><a class="header-anchor" href="#定义" aria-hidden="true">#</a> 定义</h3> -<p>线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。一般表示:</p> -<p>L=(a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>......a<sub>n</sub>) 其中n可以理解为表长(线性表的长度),n=0时候,即表空</p> -<ul> -<li><code>表头元素</code>:线性表中唯一的“第一个”数据元素,例如a<sub>1</sub></li> -<li><code>表尾元素</code>:线性表中唯一的“最后一个”数据元素,例如a<sub>n</sub></li> -</ul> -<p>重要逻辑特性:</p> -<ul> -<li>除表头元素外,线性表中每个元素有且仅有一个<code>直接前驱</code></li> -<li>除表尾元素外,线性表中每个元素有且仅有一个<code>直接后继</code></li> -</ul> -<p>基于此,这种<strong>线性有序的逻辑结构</strong>,使得线性表的特点如下:</p> -<ul> -<li>元素的<strong>个数有限</strong>(强调有限序列)</li> -<li>元素在逻辑上具有<strong>顺序性</strong>,在序列中每个元素都是都有先后次序的</li> -<li>元素都数据元素,<strong>每个元素都是单个元素</strong></li> -<li>元素的<strong>数据类型都相同</strong>(强调相同数据类型),每个数据元素占用相同大小的存储空间</li> -<li>元素具有<strong>抽象性</strong>,仅仅讨论元素之间的逻辑关系,不需要去考虑元素究竟表示的什么内容</li> -</ul> -<blockquote> -<p>Tips: <strong>线性表是一种逻辑结构</strong>,表示元素之间一对一的相邻关系。<strong>顺序表和链表则指的是存储结构</strong></p> -</blockquote> -<h3 id="基本操作" tabindex="-1"><a class="header-anchor" href="#基本操作" aria-hidden="true">#</a> 基本操作</h3> -<ul> -<li><code>InitList(&L)</code>: <strong>初始化表</strong>。构造空的线性表</li> -<li><code>Length(L)</code>:<strong>获取表的长度</strong>。返回线性表L的长度,即表中的数据元素个数</li> -<li><code>LocateElem(L,e)</code>:<strong>按值查找操作</strong>。在表L中国查找具有给定关键字的元素</li> -<li><code>GetElem(L,i)</code>:<strong>按位查找操作</strong>。获取表中第i个位置的元素的值</li> -<li><code>ListInsert(&L,i,e)</code>:<strong>插入操作</strong>。在表的第i个位置上插入指定元素e</li> -<li><code>ListDelete(&L,i,&e)</code>:<strong>删除操作</strong>。删除表中第i个位置的元素,并用e返回删除元素的值</li> -<li><code>PrintList(L)</code>:<strong>输出操作</strong>。按照前后顺序(如:1、2....n)输出线性表的所有元素值</li> -<li><code>Empty(L)</code>:<strong>判空操作</strong>。当表L为空,则返回true,否则返回false</li> -<li><code>DestoryList(&L)</code>:<strong>销毁操作</strong>。将线性表销毁,释放线性表L所占用的内存空间(类似:释放内存)</li> -</ul> -<p>线性表是具有相同的数据类型的有限个数据元素组成的,<strong>数据元素是由数据项组成的</strong></p> -</template> diff --git a/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.js b/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.js deleted file mode 100644 index ad7132d..0000000 --- a/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.js +++ /dev/null @@ -1,34 +0,0 @@ -export const data = { - "key": "v-62bd4033", - "path": "/NoteMap/CN_Map.html", - "title": "", - "lang": "en-US", - "frontmatter": {}, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "计算机网络思维导图", - "slug": "计算机网络思维导图", - "children": [] - } - ], - "git": { - "updatedTime": null, - "contributors": [] - }, - "filePathRelative": "NoteMap/CN_Map.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.vue b/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.vue deleted file mode 100644 index b301abe..0000000 --- a/docs/.vuepress/.temp/pages/NoteMap/CN_Map.html.vue +++ /dev/null @@ -1,10 +0,0 @@ -<template><!-- - * @Description: 计算机网络思维导图 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:21:16 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:21:17 ---> -<h2 id="计算机网络思维导图" tabindex="-1"><a class="header-anchor" href="#计算机网络思维导图" aria-hidden="true">#</a> 计算机网络思维导图</h2> -</template> diff --git a/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.js b/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.js deleted file mode 100644 index 2a053b0..0000000 --- a/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.js +++ /dev/null @@ -1,34 +0,0 @@ -export const data = { - "key": "v-85ddaee2", - "path": "/NoteMap/DS_Map.html", - "title": "", - "lang": "en-US", - "frontmatter": {}, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "数据结构思维导图", - "slug": "数据结构思维导图", - "children": [] - } - ], - "git": { - "updatedTime": null, - "contributors": [] - }, - "filePathRelative": "NoteMap/DS_Map.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.vue b/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.vue deleted file mode 100644 index 6e3d4de..0000000 --- a/docs/.vuepress/.temp/pages/NoteMap/DS_Map.html.vue +++ /dev/null @@ -1,10 +0,0 @@ -<template><!-- - * @Description: 数据结构思维导图 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:21:49 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:21:49 ---> -<h2 id="数据结构思维导图" tabindex="-1"><a class="header-anchor" href="#数据结构思维导图" aria-hidden="true">#</a> 数据结构思维导图</h2> -</template> diff --git a/docs/.vuepress/.temp/pages/OS/index.html.js b/docs/.vuepress/.temp/pages/OS/index.html.js deleted file mode 100644 index dc41678..0000000 --- a/docs/.vuepress/.temp/pages/OS/index.html.js +++ /dev/null @@ -1,42 +0,0 @@ -export const data = { - "key": "v-2d0a3132", - "path": "/OS/", - "title": "Readme", - "lang": "en-US", - "frontmatter": { - "title": "Readme" - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "操作系统", - "slug": "操作系统", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "OS/Readme.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/OS/index.html.vue b/docs/.vuepress/.temp/pages/OS/index.html.vue deleted file mode 100644 index 017ee00..0000000 --- a/docs/.vuepress/.temp/pages/OS/index.html.vue +++ /dev/null @@ -1,11 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:10:52 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:13:11 ---> -<h2 id="操作系统" tabindex="-1"><a class="header-anchor" href="#操作系统" aria-hidden="true">#</a> 操作系统</h2> -<p>doing</p> -</template> diff --git a/docs/.vuepress/.temp/pages/index.html.js b/docs/.vuepress/.temp/pages/index.html.js deleted file mode 100644 index d2aad41..0000000 --- a/docs/.vuepress/.temp/pages/index.html.js +++ /dev/null @@ -1,192 +0,0 @@ -export const data = { - "key": "v-8daa1a0e", - "path": "/", - "title": "", - "lang": "en-US", - "frontmatter": { - "home": true, - "heroImage": "https://static01.imgkr.com/temp/f0108d7c178b4ce196e43ebec14fbf23.png", - "heroText": "计算机应试全家桶", - "externalLinkIcon": false, - "tagline": "磨刀不误砍柴工、读完硕士再打工,笔记内容持续更新...", - "actions": [ - { - "text": "快速开始→", - "link": "/guide/", - "type": "primary" - }, - { - "text": "工作机会", - "link": "/gangg", - "type": "secondary" - } - ], - "features": [ - { - "title": "基础概览", - "details": "与官网同步的Egg.js框架基础知识整理,有效地降低日常开发和复习巩固的查询、学习时间。" - }, - { - "title": "整理强化", - "details": "官方插件的基础上,抽象、封装出适合自己功能的plus插件,能够快速集成、使用在新的项目中。" - }, - { - "title": "反复反复", - "details": "通过以项目Demo示例的方式,对框架常用的功能进行Code编写和整理,提供有效且易用的代码封装。" - } - ], - "footerColumn": 3, - "footerWrap": [ - { - "headline": "相关资料", - "items": [ - { - "title": "王道论坛", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "全平台都可以关注" - }, - { - "title": "研招网", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "考研最新消息" - } - ] - }, - { - "headline": "开源共享", - "items": [ - { - "title": "408Family", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "egg-axios-plus" - }, - { - "title": "408CSFamily", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "egg-grpc-plus" - }, - { - "title": "mysql", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "egg-mysql-plus" - }, - { - "title": "sequelize", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "egg-sequleize-plus" - }, - { - "title": "MQ", - "link": "https://github.com/zpfz/vuepress-theme-antdocs", - "details": "egg-rabbit-plus" - } - ] - }, - { - "headline": "线上平台", - "items": [ - { - "title": "Oauth2", - "link": "http://oauth2.142vip.cn", - "details": "授权管理" - }, - { - "title": "Yapi", - "link": "https://yapi.142vip.cn", - "details": "高效、易用的api平台" - } - ] - }, - { - "headline": "联系方式", - "items": [ - { - "title": "掘金", - "link": "https://juejin.cn/user/448256476724807", - "details": "不定期更新" - }, - { - "title": "CSDN", - "link": "https://blog.csdn.net/Mmdapls", - "details": "不定期更新" - }, - { - "title": "Github", - "link": "https://github.com/mmdapl", - "details": "日常更新" - }, - { - "title": "哔哩哔哩", - "link": "https://space.bilibili.com/350937042", - "details": "不定期更新" - } - ] - } - ], - "footer": "Copyrights © 2019-2022 妍荣姑娘网络工作室 | <a href=\"https://github.com/mmdapl\" target=\"_blank\">Rong姐姐好可爱</a>", - "footerHtml": true - }, - "excerpt": "", - "headers": [ - { - "level": 3, - "title": "本地浏览【推荐】", - "slug": "本地浏览【推荐】", - "children": [] - }, - { - "level": 3, - "title": "提交记录", - "slug": "提交记录", - "children": [] - }, - { - "level": 3, - "title": "赞赏列表", - "slug": "赞赏列表", - "children": [] - }, - { - "level": 3, - "title": "赞助商", - "slug": "赞助商", - "children": [] - }, - { - "level": 3, - "title": "联系作者", - "slug": "联系作者", - "children": [] - }, - { - "level": 3, - "title": "外链", - "slug": "外链", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 4 - } - ] - }, - "filePathRelative": "README.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/index.html.vue b/docs/.vuepress/.temp/pages/index.html.vue deleted file mode 100644 index 7fddb3c..0000000 --- a/docs/.vuepress/.temp/pages/index.html.vue +++ /dev/null @@ -1,97 +0,0 @@ -<template><hr> -<h3 id="本地浏览【推荐】" tabindex="-1"><a class="header-anchor" href="#本地浏览【推荐】" aria-hidden="true">#</a> 本地浏览【推荐】</h3> -<p>由于平台、网络等原因,在线浏览容易出现加载面、加载不出来等常见问题,因此非常建议在本地进行浏览、学习;<strong>下面指令默认你已经安装<a href="https://git-scm.com/download" target="_blank" rel="noopener noreferrer">Git</a>、<a href="https://www.npmjs.com/" target="_blank" rel="noopener noreferrer">NPM</a>、<a href="https://www.pnpm.cn/" target="_blank" rel="noopener noreferrer">PNPM</a>、<a href="https://yarn.bootcss.com/" target="_blank" rel="noopener noreferrer">Yarn</a>、<a href="http://nodejs.cn" target="_blank" rel="noopener noreferrer">Node</a>等环境,并对此有一定了解!</strong></p> -<CodeGroup> -<CodeGroupItem title="PNPM(推荐)" > -<div class="language-bash ext-sh"><pre v-pre class="language-bash"><code><span class="token comment">## 进入cmd命令行,直接克隆仓库</span> -<span class="token function">git</span> clone https://github.com/mmdapl/408CSFamily.git - -<span class="token comment">## 进入408CSFamily文件夹中</span> -<span class="token builtin class-name">cd</span> 408CSFamily/ - -<span class="token comment">## tips: 如果本地已经clone过仓库,建议执行pull指令,获取最新</span> -<span class="token function">git</span> pull - -<span class="token comment">## 下载依赖包</span> -<span class="token function">pnpm</span> <span class="token function">install</span> - -<span class="token comment">## 执行dev指令,本地启动项目,打开http://localhost:4200即可访问文档</span> -<span class="token function">pnpm</span> dev - -</code></pre></div></CodeGroupItem> -<CodeGroupItem title=" NPM "> -<div class="language-bash ext-sh"><pre v-pre class="language-bash"><code><span class="token comment">## 进入cmd命令行,直接克隆仓库</span> -<span class="token function">git</span> clone https://github.com/mmdapl/408CSFamily.git - -<span class="token comment">## 进入408CSFamily文件夹中</span> -<span class="token builtin class-name">cd</span> 408CSFamily/ - -<span class="token comment">## tips: 如果本地已经clone过仓库,建议执行pull指令,获取最新</span> -<span class="token function">git</span> pull - -<span class="token comment">## 下载依赖包</span> -<span class="token function">npm</span> <span class="token function">install</span> - -<span class="token comment">## 执行dev指令,本地启动项目,打开http://localhost:4200即可访问文档</span> -<span class="token function">npm</span> run dev - -</code></pre></div></CodeGroupItem> -<CodeGroupItem title=" YARN "> -<div class="language-bash ext-sh"><pre v-pre class="language-bash"><code><span class="token comment">## 进入cmd命令行,直接克隆仓库</span> -<span class="token function">git</span> clone https://github.com/mmdapl/408CSFamily.git - -<span class="token comment">## 进入408CSFamily文件夹中</span> -<span class="token builtin class-name">cd</span> 408CSFamily/ - -<span class="token comment">## tips: 如果本地已经clone过仓库,建议执行pull指令,获取最新</span> -<span class="token function">git</span> pull - -<span class="token comment">## 下载依赖包</span> -<span class="token function">yarn</span> <span class="token function">install</span> - -<span class="token comment">## 执行dev指令,本地启动项目,打开http://localhost:4200即可访问文档</span> -<span class="token function">yarn</span> run dev - -</code></pre></div></CodeGroupItem> -</CodeGroup> -<p>查看项目启动日志并访问:<a href="http://localhost:4200" target="_blank" rel="noopener noreferrer">http://127.0.0.1:4200</a>,开启学习之旅吧~</p> -<h3 id="提交记录" tabindex="-1"><a class="header-anchor" href="#提交记录" aria-hidden="true">#</a> 提交记录</h3> -<hr> -<h3 id="赞赏列表" tabindex="-1"><a class="header-anchor" href="#赞赏列表" aria-hidden="true">#</a> 赞赏列表</h3> -<p>以下排名不分先后! <a href="">详细统计</a></p> -<div> - <a href="https://github.com/ChiefPing" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/34122068?s=460&v=4" width="50px" style="brder-radius:5px;"/> - </a> - <a name="gzh"></a> - <a href="https://github.com/xiaoliuxin" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/60652527?s=460&v=4" style="border-radius:5px;" width="50px"/> - </a> -</div> -<h3 id="赞助商" tabindex="-1"><a class="header-anchor" href="#赞助商" aria-hidden="true">#</a> 赞助商</h3> -<p>以下排名不分先后! 哈哈哈,还木有收到赞助,先留坑</p> -<hr> -<h3 id="联系作者" tabindex="-1"><a class="header-anchor" href="#联系作者" aria-hidden="true">#</a> 联系作者</h3> -<div class="open-info-div"> -<!-- <a href="#gzh" target="self_blank"><img src="https://img.shields.io/badge/WeChat-公众号-5wd.svg"></a> -<a href="#wechat" target="_blank"><img src="https://img.shields.io/badge/WeChat-微信-yellow.svg"></a> --> -<a href="https://space.bilibili.com/350937042" target="_blank"><img src="https://img.shields.io/badge/Bilibili-B站-green.svg"></a> -<a href="https://142vip.cn" target="_blank"><img src="https://img.shields.io/badge/142vip-网站-orange.svg"></a> -<a href="https://blog.142vip.cn" target="_blank"><img src="https://img.shields.io/badge/blog-博客-blue.svg"></a> -<a href="https://github.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/Github-Github-9ac.svg"></a> -<a href="https://gitee.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/Gitee-码云-4ed.svg"></a> -<a href="https://blog.csdn.net/Mmdapl" target="_blank"><img src="https://img.shields.io/badge/csdn-CSDN-8ea.svg"></a> -<a href="https://juejin.im/user/448256476724807" target="_blank"><img src="https://img.shields.io/badge/JueJin-掘金-75c.svg"></a> -</div> -<p>若系列文章对你有所帮助,欢迎订阅公众号,获取更多内容。也可微信”骚扰“,商务合作请备注来意</p> -<!-- <div align="left"> -<img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/wechat_code.jpg" width="300" height="300" style="border-radius:5px;"/> -</div> --> -<p><a name="gzh"></a></p> -<p> - <img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/gongzhonghao.jpg" style="border-radius:10px;"> -</p> -<p>交流/加群/互看朋友圈 -当然:<strong>聊天 /提问 /建议 /提需求</strong> 可以在本公众号直接<strong>私信</strong>,后台可以看到,有时间即会回复,偶尔的延迟和疏漏还请小伙伴们谅解,蟹蟹。</p> -<h3 id="外链" tabindex="-1"><a class="header-anchor" href="#外链" aria-hidden="true">#</a> 外链</h3> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/01c16a/index.html.js b/docs/.vuepress/.temp/pages/pages/01c16a/index.html.js deleted file mode 100644 index 790fe70..0000000 --- a/docs/.vuepress/.temp/pages/pages/01c16a/index.html.js +++ /dev/null @@ -1,43 +0,0 @@ -export const data = { - "key": "v-5b214e9e", - "path": "/pages/01c16a/", - "title": "Readme", - "lang": "en-US", - "frontmatter": { - "title": "Readme", - "date": "2021-03-08T10:10:27.000Z", - "permalink": "/pages/01c16a/", - "categories": [ - "ComputerNetwork" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [], - "git": { - "updatedTime": 1649437776000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 1 - } - ] - }, - "filePathRelative": "CN/Readme.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/01c16a/index.html.vue b/docs/.vuepress/.temp/pages/pages/01c16a/index.html.vue deleted file mode 100644 index 7e2ea8f..0000000 --- a/docs/.vuepress/.temp/pages/pages/01c16a/index.html.vue +++ /dev/null @@ -1,10 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:10:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-08 10:10:28 ---> -<p>doing</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.js b/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.js deleted file mode 100644 index 2e55172..0000000 --- a/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.js +++ /dev/null @@ -1,58 +0,0 @@ -export const data = { - "key": "v-2203c86c", - "path": "/pages/0a7dde/", - "title": "chain_representation", - "lang": "en-US", - "frontmatter": { - "title": "chain_representation", - "date": "2021-03-07T21:58:40.000Z", - "permalink": "/pages/0a7dde/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "线性表的链式表示", - "slug": "线性表的链式表示", - "children": [ - { - "level": 3, - "title": "单链表", - "slug": "单链表", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/3.chain_representation.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.vue b/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.vue deleted file mode 100644 index b81459e..0000000 --- a/docs/.vuepress/.temp/pages/pages/0a7dde/index.html.vue +++ /dev/null @@ -1,336 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:58:40 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:58:40 ---> -<h2 id="线性表的链式表示" tabindex="-1"><a class="header-anchor" href="#线性表的链式表示" aria-hidden="true">#</a> 线性表的链式表示</h2> -<p>顺序表的插入、删除操作需要移动大量元素,影响了运行效率(虽然时间复杂度为O(1)的情况也存在)。</p> -<p><strong>链式存储线性表时,不需要使用连续的存储单元,不要求逻辑上相邻的两个元素在物理位置上也相邻</strong></p> -<p>理解“链”的含义,链条--->捆绑、指向------>指针</p> -<p><strong>链式存储线性表时,对线性表的插入、删除元素是不需要移动元素的,只是需要修改指针</strong></p> -<ul> -<li>单链表</li> -<li>双链表</li> -<li>循环链表</li> -<li>静态链表</li> -</ul> -<h3 id="单链表" tabindex="-1"><a class="header-anchor" href="#单链表" aria-hidden="true">#</a> 单链表</h3> -<p>线性表的链式存储称作<code>单链表</code>,通过<strong>一组任意的存储单元</strong>来存储线性表中的数据元素。</p> -<p>每个链表结点(node)除了存放元素自身的信息外,还需要存放一个指向其后继结点的指针。目的是:<strong>通过指针建立起链表元素之间的线性关系</strong></p> -<p>单链表中结点类型的描述:</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 单链表结点类型定义 -typeof struct LNode{ - ElemType data; // 数据域 - struct LNode *next; // 指针域 -}LNode , *LinkList; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><p>单链表可以解决顺序表需要大量连续存储空间的缺点,但是单链表在数据域的基础上附加了指针域,存在浪费存储空间的缺点;</p> -<p>单链表的元素是<strong>离散地分布</strong>在存储空间中的,因此<strong>单链表是非随机存取的存储结构</strong>,不能直接找到表中特定的结点,需要从头开始遍历、一次查找;</p> -<p>通常,<strong>头指针用来标识一个单链表</strong>。头指针指向<code>NULL</code>时,标识单链表为空。</p> -<h4 id="头结点" tabindex="-1"><a class="header-anchor" href="#头结点" aria-hidden="true">#</a> 头结点</h4> -<p>为了操作上的方便,在单链表第一个结点之前附加一个结点,叫做<strong>头结点</strong>。</p> -<ul> -<li>头结点的数据域可以不存任何信息、也可以记录表长等基础信息</li> -<li>头结点的指针域指向线性表的第一个元素结点;</li> -</ul> -<p><strong>不论单链表是否带头结点(可选),头指针始终指向链表的第一个结点。</strong></p> -<p>头结点是带头结点的链表中的第一个结点【重要】</p> -<ul> -<li>头结点的数据域可以不存任何信息、也可以记录表长等基础信息</li> -<li>头结点的指针域指向线性表的第一个元素结点;</li> -</ul> -<p>头结点的优点:</p> -<ul> -<li>因为开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作和在表的其他位置上的操作一致,不需要进行特殊处理;</li> -<li>无论链表是否为空,头指针始终是指向头结点的头结点的非空指针【空表中,往往就只有头结点,此时头结点的指针域为空,可以有效避免头指针空指针异常问题】-----> <strong>头结点的引入,很好的统一了空表和非空表的操作;</strong></li> -</ul> -<h4 id="头插法" tabindex="-1"><a class="header-anchor" href="#头插法" aria-hidden="true">#</a> 头插法</h4> -<blockquote> -<p>从空表开始,生成新的结点,将读取的数据存放在新结点的数据域中,将新结点插入到当前链表的表头【头结点之后】</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code>/* - * @Description: 单链表头插法创建 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LinkList CreateListWithStartNode(LinkList &L){ - - LNode *s; - int x; - L=(LinkList)malloc(sizeof(LNode)); // 创建头结点L - L->next=NULL; // 初始化空链表 - - // 控制台输入值 - scanf("%d",&x); - - // 输入9999 表示结束 - while(x!==9999){ - // 开辟新结点存储空间 - s=(LNode*)malloc(sizeof(LNode)); - // 结点数据域赋值 - s->data=x; - // 修改指针,新结点插入表中【注意:L->next为头结点的指针域】 - s->next=L->next; - L->next=s; - scanf("%d",&x); - } - - // 返回单链表 - return L; -} - - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br></div></div><p>特点:</p> -<ul> -<li>读入数据的顺序与生成的链表中的元素顺序是相反的【结合队列先进先出思考】</li> -<li>每个结点插入的时间复杂度为O(1),单链表长度为n时,头插法的时间复杂度为O(n)【结合算法中的while循环,可以很明确看出时间复杂度】</li> -</ul> -<h4 id="尾插法" tabindex="-1"><a class="header-anchor" href="#尾插法" aria-hidden="true">#</a> 尾插法</h4> -<p>头插法建立的单链表,链表中结点的次序和输入数据的顺序不一致【相反】,尾插法则很好的避免了这个问题;</p> -<blockquote> -<p>新结点插入到当前链表的表尾上,必须增加一个尾指针r,始终指向当前链表的尾结点;</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -/* - * @Description: 单链表尾插法创建 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LinkList CreateListWithEndNode(LinkList &L){ - - - int x; // 输入结点值 - L=(LinkList)malloc(sizeof(LNode)); - LNode *s; // 新结点s - LNode *r=L; // r为尾指针 - - // 控制台输入值 - scanf("%d",&x); - - while(x!==9999){ - // 开辟新结点存储空间 - s=(LNode *)malloc(sizeof(LNode)); - - // 新结点s的数据域赋值为x - s->data=x; - // 单链表L的尾指针指向新的结点s - r->next=s; - - // 指针r指向新的表尾结点 - r=s; - - scanf("%d",&x); - } - - // 表尾指针置空【重要】 - r->next=NULL; - - // 返回单链表 - return L; - -} - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br></div></div><p>特点:</p> -<ul> -<li>读入数据的顺序与生成的链表中的元素顺序完全一致</li> -<li>每个结点插入的时间复杂度为O(1),单链表长度为n时,尾巴插法的时间复杂度为O(n)【结合算法中的while循环,可以很明确看出时间复杂度】</li> -<li>相比头插法附设了一个指向表尾结点的指针,但时间复杂度与头插法相同</li> -</ul> -<h4 id="按序号查找" tabindex="-1"><a class="header-anchor" href="#按序号查找" aria-hidden="true">#</a> 按序号查找</h4> -<blockquote> -<p>在单链表中从第一个结点出发,顺指针next域逐个往下搜索、遍历,直到找出第i个结点为止,否则返回最后一个结点指针域NULL</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -/* - * @Description: 单链表按序号查找 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LNode *GetElem(LinkList L,int i){ - int j=1; // 查询计数,初始为1 - LNode *p=L->next; // 单链表头结点指针赋值给指针p - - - // 第0个元素,则指向头结点,返回头结点 - if(i==0){ - // 头结点包含数据域和指针域 - return L; - } - - // 不等于0,却小于1,则i为负数无效,直接返回NULL,查询结果空; - if(i<1){ - return NULL; - } - - // p存在且计数没有走到初始i的位置 - while(p&&j<i){ - - // 指针后移 - p=p->next; - - // 计数标记+1 - j++; - } - - // 注意: 当p不存在时, 跳出循环,p=NULL; 当p存在但是j大于等于i,跳出循环,返回查找的结果,返回p - // 从跳出循环上来分析,p要么存在即:找到的结点元素,要么为空即NULL - - // 跳出循环,返回第i个结点的指针 - return p; - -} -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br></div></div><p>需要遍历(扫描)单链表,时间复杂度为:O(n)</p> -<h4 id="按值查找" tabindex="-1"><a class="header-anchor" href="#按值查找" aria-hidden="true">#</a> 按值查找</h4> -<blockquote> -<p>从单链表的第一个结点开始,从前往后依次比较表中个结点数据域的值,等于给定值e,则返回该结点的指针;若整个单链表【遍历完】中没有数据域值为e的结点,则返回NULL;</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -/* - * @Description: 单链表按值查找 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LNode *LocateElem(LinkList L,ElemType e){ - - // 指针【哨兵】 - LNode *p=L->next; - // 从第1个结点开始查找数据域(data)为e的结点 - while(p!=NULL&&p->data!=e){ - // 无法匹配,指针后移 - p=p->next; - } - - // 注意:p为NULL的时候,说明单链表已经遍历的尾结点了,跳出循环,没有找到目标结点; - - // 查找到第1个匹配的结点,跳出循环,返回结点指针 - return p; - // -} - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br></div></div><p>链表遍历无法匹配,会返回NULL,因为在尾结点无法匹配的时候,直接返回尾结点指针域</p> -<p>需要遍历(扫描)单链表,时间复杂度为:O(n)</p> -<h4 id="结点插入" tabindex="-1"><a class="header-anchor" href="#结点插入" aria-hidden="true">#</a> 结点插入</h4> -<blockquote> -<p>单链表中,将值为x的新结点插入到单链表的第i个位置上</p> -</blockquote> -<ul> -<li>第一步: 检查插入位置的合法性;</li> -<li>第二步: 找到待插入位置的前驱结点,即第(i-1)个结点;</li> -<li>第三部: 在前驱结点后插入新结点;</li> -</ul> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> // 循环遍历,时间复杂度O(n) - p=GetElem(L,i-1); - - // 移动指针,时间复杂度O(1) - s->next=p->next; - p->next=s; -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>结合上面的代码可以看出,将元素x插入到单链表L的第i个元素上,必须先找到单链表L的i个结点的前驱结点,即(i-1)的位置,需要采用<code>GetElem()</code>函数,按照序号查找;</p> -<p>如果返回的前驱结点不为空,则说明插入的位置i合法,否则位置非法,插入失败;</p> -<p>找到前驱结点p后,最重要的是移动指针,将新的结点s的指针域指向结点p的指针域,也就是s的指针域指向元素p的后继结点,第i个结点元素</p> -<p>原来的(i-1)位置上的元素,也就是前驱结点p的指针域则必须指向新的结点元素;</p> -<p><strong>上面的过程不能更换,避免后继指针不存在的问题</strong></p> -<p>最后的最后,一定要注意将s的数据域赋值x</p> -<p>插入结点的时间复杂度集中在查找第(i-1)个元素,时间复杂度为O(n);如果在给定结点的后面插入新结点,只需要执行<code>p->next=s</code>操作,时间复杂度为O(1)</p> -<h5 id="前插操作" tabindex="-1"><a class="header-anchor" href="#前插操作" aria-hidden="true">#</a> 前插操作</h5> -<blockquote> -<p>在某结点的前面插入一个新的结点</p> -</blockquote> -<p><strong>对结点的前插操作都可以转化为后插操作,前提:需要从单链表的头结点开始顺序查找到其前驱结点;时间复杂度为O(n)。</strong></p> -<h5 id="后插操作" tabindex="-1"><a class="header-anchor" href="#后插操作" aria-hidden="true">#</a> 后插操作</h5> -<blockquote> -<p>在某结点的后面插入一个新的结点,单链表插入算法中,通常采用后插操作的</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 结点s插入到结点p的前面,修改指针域,顺序不能改变 -s->next=p->next; -p->next=s; - - -// 经典的借助变量,进行值交换 -temp=p->data; -p->data=s->data; -s->data=temp; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><p>上述借助临时变量<code>temp</code>来将结点s和结点p的数据域进行交换,需要开辟O(1)的空间复杂度,但是时间复杂度却从O(n)改变为O(1),典型的空间换时间策略</p> -<h4 id="删除结点" tabindex="-1"><a class="header-anchor" href="#删除结点" aria-hidden="true">#</a> 删除结点</h4> -<blockquote> -<p>将单链表L的第i个结点元素删除;</p> -</blockquote> -<ul> -<li>第一步: 先检查删除位置的合法性;</li> -<li>第二步: 查找表中的第(i-1)个结点,即被删结点的前驱结点;</li> -<li>第三步: 移动指针,删除结点元素;</li> -</ul> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 获取删除位置结点元素的前驱结点 -p=GetElem(L,i-1); - -// 删除位置结点元素指针 -q=p->next; - -// 修改指针,将删除位置结点元素前驱结点的指针域指向其后继结点 -p->next=q->next; - -// 释放结点元素的内存控件 -free(q) - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><p>和插入算法一样,时间都消耗在查询前驱结点上,时间复杂度为:O(n)</p> -<blockquote> -<p>删除单链表L中给点结点元素*p,通常是按值查找获取到p结点的前驱元素,再执行删除操作,这样很明显会导致时间复杂度为:O(n),主要都消耗在<code>按值查找</code>上</p> -</blockquote> -<p>这里可以利用p结点的后继结点将p结点删除</p> -<ul> -<li>第一步:申请结点q,使其只想p结点的后继结点;</li> -<li>第二步:将p结点的数据域值换成其后继结点的数据域;【注意,交换没什么意义,最终p的后继结点会删除、释放】</li> -<li>第三步:p的指针域指向q的指针域,q结点从链中“断开”</li> -<li>第四步:释放q的内存空间</li> -</ul> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> // 存放p的后继结点指针 - q=p->next; - - // 结点p的后继结点元素赋值给结点p,避免后继结点的数据域丢失 - p->data=p->next->data; - p->next=q->next; - - // 此时q指向更换数据域后的p,即原来p的后继结点 - free(q) - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><p>相比按值查找前驱结点来删除给定的结点p,利用后继结点来删除的时间复杂度更小,为:O(1)</p> -<h4 id="计算表长" tabindex="-1"><a class="header-anchor" href="#计算表长" aria-hidden="true">#</a> 计算表长</h4> -<blockquote> -<p>计算单链表中数据结点(不含头结点)的个数</p> -</blockquote> -<p>算法思路:从第一个结点开始顺序依次访问表中的每一个结点,为此需要设置一个<code>计数器变量</code>,每访问一个结点,计算器加1,直到访问到空结点为止。</p> -<p>算法时间复杂度:O(n)</p> -<p><strong>单链表的长度是不包括头结点的,不带头结点和带头结点的单链表在求表长操作上会略有不同。</strong></p> -<p>不带头结点的单链表,当表为空时候,需要单独处理;</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code>// 不带头结点的单链表L为空,判定条件是L=NULL。 -if(L===NULL){ -// 链表为空,表长为0 - return 0; -} - -// 带头结点的单链表L为空,判空条件:L->next=NULL; - -if(L->next===NULL){ - // 链表为空,不包含头结点,表长为0 - return 0; -} - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div></template> diff --git a/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.js b/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.js deleted file mode 100644 index 1e86c09..0000000 --- a/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.js +++ /dev/null @@ -1,44 +0,0 @@ -export const data = { - "key": "v-0595fa04", - "path": "/pages/10b7a4/", - "title": "test", - "lang": "en-US", - "frontmatter": { - "title": "test", - "date": "2021-03-07T23:06:30.000Z", - "permalink": "/pages/10b7a4/", - "categories": [ - "category", - "test" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 3 - } - ] - }, - "filePathRelative": "category/test/1.test.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.vue b/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.vue deleted file mode 100644 index dec2348..0000000 --- a/docs/.vuepress/.temp/pages/pages/10b7a4/index.html.vue +++ /dev/null @@ -1,10 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 23:06:30 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 23:06:31 ---> -<p>werwre</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/15aa63/index.html.js b/docs/.vuepress/.temp/pages/pages/15aa63/index.html.js deleted file mode 100644 index 27da9aa..0000000 --- a/docs/.vuepress/.temp/pages/pages/15aa63/index.html.js +++ /dev/null @@ -1,94 +0,0 @@ -export const data = { - "key": "v-0e2293aa", - "path": "/pages/15aa63/", - "title": "关于作者", - "lang": "en-US", - "frontmatter": { - "title": "关于作者", - "sidebarDepth": 0, - "date": "2021-01-19T08:04:19.000Z", - "permalink": "/pages/15aa63/", - "categories": [ - "category" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "我在做哪些事情?", - "slug": "我在做哪些事情", - "children": [ - { - "level": 3, - "title": "代码开源", - "slug": "代码开源", - "children": [] - }, - { - "level": 3, - "title": "知识仓库", - "slug": "知识仓库", - "children": [] - }, - { - "level": 3, - "title": "npm插件", - "slug": "npm插件", - "children": [] - }, - { - "level": 3, - "title": "项目", - "slug": "项目", - "children": [] - } - ] - }, - { - "level": 2, - "title": "平台账号", - "slug": "平台账号", - "children": [] - }, - { - "level": 2, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 2, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 3 - } - ] - }, - "filePathRelative": "category/about_author.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/15aa63/index.html.vue b/docs/.vuepress/.temp/pages/pages/15aa63/index.html.vue deleted file mode 100644 index eb881a1..0000000 --- a/docs/.vuepress/.temp/pages/pages/15aa63/index.html.vue +++ /dev/null @@ -1,161 +0,0 @@ -<template><!-- - * @Description: 关于作者 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-01-19 08:04:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-02-14 22:17:49 ---> -<h2 id="我在做哪些事情" tabindex="-1"><a class="header-anchor" href="#我在做哪些事情" aria-hidden="true">#</a> 我在做哪些事情?</h2> -<h3 id="代码开源" tabindex="-1"><a class="header-anchor" href="#代码开源" aria-hidden="true">#</a> 代码开源</h3> -<!-- - **「bilibili-reptile」** https://github.com/mmdapl/bilibili-reptile -- **「project-display」** https://github.com/mmdapl/project-display --> -<table> -<thead> -<tr> -<th style="text-align:center">仓库名称</th> -<th style="text-align:center">链接地址</th> -<th style="text-align:center">当前状态</th> -</tr> -</thead> -<tbody> -<tr> -<td style="text-align:center"><strong>bilibili-reptile</strong></td> -<td style="text-align:center"><a href="hhttps://github.com/mmdapl/bilibili-reptile">https://github.com/mmdapl/bilibili-reptile</a></td> -<td style="text-align:center">done</td> -</tr> -<tr> -<td style="text-align:center"><strong>project-display</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl/project-display" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl/project-display<ExternalLinkIcon/></a></td> -<td style="text-align:center">done</td> -</tr> -</tbody> -</table> -<h3 id="知识仓库" tabindex="-1"><a class="header-anchor" href="#知识仓库" aria-hidden="true">#</a> 知识仓库</h3> -<p>利用业余时间,结合工作经验,以JavaScript和CS专业课为主题,持续维护的知识文档型仓库,其中</p> -<ul> -<li><code>408CSFamily</code> 主攻计算机408基础知识,以考研基础作为切入点</li> -<li><code>JavaScriptCollection</code> 偏向工作实战,以JavaScript技术栈及周边技术作为切入点</li> -</ul> -<!-- - **「JavaScriptCollection」** https://github.com/mmdapl/JavaScriptCollection - -- **「408CSFamily」** https://github.com/mmdapl/408CSFamily --> -<table> -<thead> -<tr> -<th style="text-align:center">仓库名称</th> -<th style="text-align:center">链接地址</th> -<th style="text-align:center">当前状态</th> -</tr> -</thead> -<tbody> -<tr> -<td style="text-align:center"><strong>408CSFamily</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl/408CSFamily" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl/408CSFamily<ExternalLinkIcon/></a></td> -<td style="text-align:center">日常维护</td> -</tr> -<tr> -<td style="text-align:center"><strong>JavaScriptCollection</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl/JavaScriptCollection" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl/JavaScriptCollection<ExternalLinkIcon/></a></td> -<td style="text-align:center">日常维护</td> -</tr> -</tbody> -</table> -<h3 id="npm插件" tabindex="-1"><a class="header-anchor" href="#npm插件" aria-hidden="true">#</a> npm插件</h3> -<!-- - **「egg-sequelize-plus」** https://github.com/mmdapl/egg-sequelize-plus -- **「egg-axios-plus」** https://github.com/mmdapl/egg-axios-plus -- **「grpc相关」** doing.. --> -<table> -<thead> -<tr> -<th style="text-align:center">插件名称</th> -<th style="text-align:center">链接地址</th> -<th style="text-align:center">当前状态</th> -</tr> -</thead> -<tbody> -<tr> -<td style="text-align:center"><strong>egg-axios-plus</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl/egg-axios-plus" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl/egg-axios-plus<ExternalLinkIcon/></a></td> -<td style="text-align:center">done</td> -</tr> -<tr> -<td style="text-align:center"><strong>egg-sequelize-plus</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl/egg-sequelize-plus" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl/egg-sequelize-plus<ExternalLinkIcon/></a></td> -<td style="text-align:center">done</td> -</tr> -<tr> -<td style="text-align:center"><strong>grpc相关</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl<ExternalLinkIcon/></a></td> -<td style="text-align:center">doing</td> -</tr> -</tbody> -</table> -<h3 id="项目" tabindex="-1"><a class="header-anchor" href="#项目" aria-hidden="true">#</a> 项目</h3> -<blockquote> -<p>正在整理汇总</p> -</blockquote> -<h4 id="工作项目" tabindex="-1"><a class="header-anchor" href="#工作项目" aria-hidden="true">#</a> 工作项目</h4> -<blockquote> -<p>采用分布式微服务架构的邮箱类项目,涉及服务网关、消息队列、Apollo配置中心、Consul服务注册发现、redis集群及优化、mysql集群及优化、grpc远程调用、Oauth2授权认证等功能的新框架重构项目,待整理</p> -</blockquote> -<h4 id="日常项目" tabindex="-1"><a class="header-anchor" href="#日常项目" aria-hidden="true">#</a> 日常项目</h4> -<blockquote> -<p>oauth2授权平台....</p> -</blockquote> -<h2 id="平台账号" tabindex="-1"><a class="header-anchor" href="#平台账号" aria-hidden="true">#</a> 平台账号</h2> -<p>「目前活跃于Bilibili、Github上,新注册了掘金、微信公众号,均可直接搜:<strong>Rong姐姐好可爱</strong>,访问主页;所有内容以微信公众号和Github为准,选择部分公众号内容发表博客」</p> -<table> -<thead> -<tr> -<th style="text-align:center">平台名称</th> -<th style="text-align:center">链接地址</th> -</tr> -</thead> -<tbody> -<tr> -<td style="text-align:center"><strong>Bilibili</strong></td> -<td style="text-align:center"><a href="https://space.bilibili.com/350937042" target="_blank" rel="noopener noreferrer">https://space.bilibili.com/350937042<ExternalLinkIcon/></a></td> -</tr> -<tr> -<td style="text-align:center"><strong>CSDN</strong></td> -<td style="text-align:center"><a href="https://blog.csdn.net/Mmdapl" target="_blank" rel="noopener noreferrer">https://blog.csdn.net/Mmdapl<ExternalLinkIcon/></a></td> -</tr> -<tr> -<td style="text-align:center"><strong>Github</strong></td> -<td style="text-align:center"><a href="https://github.com/mmdapl" target="_blank" rel="noopener noreferrer">https://github.com/mmdapl<ExternalLinkIcon/></a></td> -</tr> -<tr> -<td style="text-align:center"><strong>掘金</strong></td> -<td style="text-align:center"><a href="https://juejin.im/user/448256476724807" target="_blank" rel="noopener noreferrer">https://juejin.im/user/448256476724807<ExternalLinkIcon/></a></td> -</tr> -</tbody> -</table> -<!-- - **Bilibili** [https://space.bilibili.com/350937042](https://space.bilibili.com/350937042) -- **CSDN** [https://blog.csdn.net/Mmdapl](https://blog.csdn.net/Mmdapl) -- **Github** [https://github.com/mmdapl](https://github.com/mmdapl) -- **掘金** [https://juejin.im/user/448256476724807](https://juejin.im/user/448256476724807) -- **个人博客** [http://blog.142vip.cn/](http://blog.142vip.cn/) --> -<h2 id="联系我" tabindex="-1"><a class="header-anchor" href="#联系我" aria-hidden="true">#</a> 联系我</h2> -<p>对仓库有任何问题或建议,欢迎公众号留言“骚扰”,商务合作请备注!</p> -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/wechat.jpg" width="300" height="300" style="border-radius:5px;"/> -</div> -<h2 id="公众号" tabindex="-1"><a class="header-anchor" href="#公众号" aria-hidden="true">#</a> 公众号</h2> -<ul> -<li> -<p>相逢不用忙归去,明日黄花蝶也愁....</p> -</li> -<li> -<p><strong>若系列文章对你有所帮助,不如来公众号交个朋友吧.</strong></p> -</li> -</ul> -<template> - <div> - <a-row> - <a-col :xs="20" :sm="16" :md="12" :lg="10" :xl="10"><img src="/assets/image_code/official_wechat_code.png"/> - </a-col> - </a-row> - </div> -</template> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/18d025/index.html.js b/docs/.vuepress/.temp/pages/pages/18d025/index.html.js deleted file mode 100644 index 4fea3b8..0000000 --- a/docs/.vuepress/.temp/pages/pages/18d025/index.html.js +++ /dev/null @@ -1,64 +0,0 @@ -export const data = { - "key": "v-13550f15", - "path": "/pages/18d025/", - "title": "algorithm_and_algorithm_evaluation", - "lang": "en-US", - "frontmatter": { - "title": "algorithm_and_algorithm_evaluation", - "date": "2021-03-07T21:55:28.000Z", - "permalink": "/pages/18d025/", - "categories": [ - "DataStructure", - "basic_introduction" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "算法和算法评价", - "slug": "算法和算法评价", - "children": [ - { - "level": 3, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 3, - "title": "效率的度量", - "slug": "效率的度量", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/basic_introduction/3.algorithm_and_algorithm_evaluation.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/18d025/index.html.vue b/docs/.vuepress/.temp/pages/pages/18d025/index.html.vue deleted file mode 100644 index 29bb91b..0000000 --- a/docs/.vuepress/.temp/pages/pages/18d025/index.html.vue +++ /dev/null @@ -1,82 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:55:28 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:55:36 ---> -<h2 id="算法和算法评价" tabindex="-1"><a class="header-anchor" href="#算法和算法评价" aria-hidden="true">#</a> 算法和算法评价</h2> -<h3 id="算法" tabindex="-1"><a class="header-anchor" href="#算法" aria-hidden="true">#</a> 算法</h3> -<p><code>算法</code> : 对特定问题求解步骤的一种描述,<strong>是指令的有序集合</strong>,每一条指令表示一个或多个操作。</p> -<h4 id="重要特性" tabindex="-1"><a class="header-anchor" href="#重要特性" aria-hidden="true">#</a> 重要特性</h4> -<ul> -<li><code>有穷性</code>:必须总是(对任何合法的输入值)在<strong>执行有穷步后结束</strong>,并且每一步都可<strong>在有穷时间内完成</strong></li> -<li><code>确定性</code>:每条指令的含义明确,不会产生二义性(歧义),<strong>对相同的输入只能得出相同的结果</strong></li> -<li><code>可行性</code>:算法是可行的。<strong>算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的</strong></li> -<li><code>输入</code>:有零个或者多个输入,<strong>输入取决于某个特定的对象的集合。</strong></li> -<li><code>输出</code>:有一个或者多个输出,<strong>输出是和输入有着某种特定关系的量(强调输出与输入的关系)</strong></li> -</ul> -<blockquote> -<p><strong>算法是有穷的,但是程序不一定满足有穷性</strong>,程序只是算法在计算机上的特定的实现, 例如:死循环</p> -</blockquote> -<h4 id="算法的目标" tabindex="-1"><a class="header-anchor" href="#算法的目标" aria-hidden="true">#</a> 算法的目标</h4> -<p>由于设计思路、解决问题方案等方面不同,不同算法之间也是有好坏的,就像人与人之间存在着差异。为设计出更好的算算法,往往需要追求更高的目标,而好的算法需要考虑到的目标就有:</p> -<ul> -<li>正确性:首先算法肯定是<strong>需要正确的解决求解问题</strong></li> -<li>可读性:<strong>算法应该具有良好的可读性</strong>,就像项目代码一样,好的业务代码、逻辑清楚,<strong>便于理解</strong>。</li> -<li>健壮性:<strong>在输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名奇妙的输出结果</strong>(在高级语言编程中,类似于强调封装方法的参数校验)</li> -<li>效率与低存储量需求:<strong>效率即算法执行的时间</strong>,<strong>存储量需求即算法那执行过程中所有要的最大存储空间</strong>,这些与算法所解决问题的规模有关;</li> -</ul> -<blockquote> -<p>Tips: 效率可以结合时间复杂度来理解,存储量需求可以结合空间复杂度理解;</p> -</blockquote> -<h3 id="效率的度量" tabindex="-1"><a class="header-anchor" href="#效率的度量" aria-hidden="true">#</a> 效率的度量</h3> -<p>算法效率的度量是通过<code>时间复杂度</code>和<code>空间复杂度</code>来描述的;</p> -<h4 id="时间复杂度" tabindex="-1"><a class="header-anchor" href="#时间复杂度" aria-hidden="true">#</a> 时间复杂度</h4> -<p>语句的频度:语句在算法中被重复执行的次数</p> -<p>算法中所有语句的<code>频度之和</code>记作T(n),即:对应算法问题规模n的函数,时间复杂度主要是来分析T(n)的数量级;</p> -<p><strong>算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)</strong></p> -<p>上面这句话是不是不能理解??? 哈哈哈,我第一次看,也是!!</p> -<div class="language-c ext-c line-numbers-mode"><pre v-pre class="language-c"><code> -<span class="token keyword">int</span> <span class="token function">test</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token punctuation">{</span> - <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator"><</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span> - <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span> - <span class="token punctuation">}</span> - <span class="token comment">// 循环叠加 输出</span> - <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> -<span class="token punctuation">}</span> - - - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><p>在这个简单的函数里</p> -<ul> -<li>当n<1的时候,例如:-2,就不需要循环,此时时间复杂度可以理解为T(1)</li> -<li>当n>1的时候,例如:5 此时时间复杂度可以理解为T(n)</li> -</ul> -<p>当然,这里只是简单举例子便于理解:</p> -<blockquote> -<p><strong>算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)</strong></p> -</blockquote> -<ul> -<li><code>最坏时间复杂度</code>:<strong>最坏情况下</strong>,算法的时间复杂度</li> -<li><code>平均时间复杂度</code>:<strong>所有可能输入实例在同等概率出现的情况下</strong>,算法的期望运行时间</li> -<li><code>最好时间复杂度</code>:<strong>最好的情况下</strong>,算法的时间复杂度</li> -</ul> -<p>一般情况下,考虑最坏情况的时间复杂度(即:最坏时间复杂度),保证算法的运行时间不会更长(最糟糕我都能预料,难道还有更糟糕?????噗呲)</p> -<h4 id="空间复杂度" tabindex="-1"><a class="header-anchor" href="#空间复杂度" aria-hidden="true">#</a> 空间复杂度</h4> -<p>算法的空间复杂度可以用函数记作:S(n),<strong>用来定义算法运行过程中需要耗费的存储空间</strong>,是问题规模n的函数;</p> -<blockquote> -<p>渐进空间复杂度也被称为空间复杂度,记作:S(n)=O(g(n))</p> -</blockquote> -<p><strong>一个程序除了需要存储空间来存放本身所用的指令、常数、变量和输入数据外,也需要对数据进行操作的工作单元和存储一些实现计算所需要信息的辅助空间。</strong></p> -<p>当输入数据所占用的空间只取决于问题本身,和算法无关时,只需要去分析除了输入和程序之外的额外空间</p> -<p>算法原地工作:算法所需要辅助空间是常量,记作S(1),例如:</p> -<div class="language-c ext-c line-numbers-mode"><pre v-pre class="language-c"><code><span class="token keyword">int</span> <span class="token function">switchValue</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">{</span> - <span class="token comment">// 定义临时变量</span> - <span class="token keyword">int</span> temp<span class="token operator">=</span>a<span class="token punctuation">;</span> - b<span class="token operator">=</span>temp<span class="token punctuation">;</span> - a<span class="token operator">=</span>b<span class="token punctuation">;</span> -<span class="token punctuation">}</span> -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>在上面的函数中,只是通过临时变量temp来实现a和b的值交换,没有需要更多变量,因此可以简单理解函数的在<code>原地工作</code>,辅助空间是常量,记作S(1)</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/3f923d/index.html.js b/docs/.vuepress/.temp/pages/pages/3f923d/index.html.js deleted file mode 100644 index 6b431c1..0000000 --- a/docs/.vuepress/.temp/pages/pages/3f923d/index.html.js +++ /dev/null @@ -1,70 +0,0 @@ -export const data = { - "key": "v-6d791ca4", - "path": "/pages/3f923d/", - "title": "three_elements_of_data_structure", - "lang": "en-US", - "frontmatter": { - "title": "three_elements_of_data_structure", - "date": "2021-03-07T21:55:06.000Z", - "permalink": "/pages/3f923d/", - "categories": [ - "DataStructure", - "basic_introduction" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "数据结构三要素", - "slug": "数据结构三要素", - "children": [ - { - "level": 3, - "title": "数据的逻辑结构", - "slug": "数据的逻辑结构", - "children": [] - }, - { - "level": 3, - "title": "数据的存储(物理)结构", - "slug": "数据的存储-物理-结构", - "children": [] - }, - { - "level": 3, - "title": "数据的运算", - "slug": "数据的运算", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/basic_introduction/2.three_elements_of_data_structure.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/3f923d/index.html.vue b/docs/.vuepress/.temp/pages/pages/3f923d/index.html.vue deleted file mode 100644 index bddc801..0000000 --- a/docs/.vuepress/.temp/pages/pages/3f923d/index.html.vue +++ /dev/null @@ -1,107 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:55:06 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:55:14 ---> -<h2 id="数据结构三要素" tabindex="-1"><a class="header-anchor" href="#数据结构三要素" aria-hidden="true">#</a> 数据结构三要素</h2> -<ul> -<li>数据的逻辑结构</li> -<li>数据的存储结构</li> -<li>数据的运算</li> -</ul> -<h3 id="数据的逻辑结构" tabindex="-1"><a class="header-anchor" href="#数据的逻辑结构" aria-hidden="true">#</a> 数据的逻辑结构</h3> -<p>数据元素之间的逻辑关系,从逻辑关系上描述数据,叫做数据的逻辑结构。</p> -<p>与数据的存储(物理)结构无关,是独立于计算机的。</p> -<p>可以分为:</p> -<ul> -<li>线性结构</li> -<li>非线性结构</li> -</ul> -<p>线性表是典型的线性结构,衍生出的栈、队列、串、数组、广义表也都是线性结构;</p> -<p>非线性结构主要有:集合、树(一般树、二叉树)、图(有向图、无向图)</p> -<p>特别注意:</p> -<ul> -<li><code>集合</code>:结构中的数据元素之间<strong>除了“同属于一个集合”的关系外,别无其他关系。</strong></li> -<li><code>线性结构</code>:结构中的数据元素之间<strong>只存在一对一的关系</strong>。</li> -<li><code>树形结构</code>:结构中的数据元素之间<strong>存在一对多的关系。</strong></li> -<li><code>图状结构和网状结构</code>:结构中的数据元素之间<strong>存在多对多的关系。</strong></li> -</ul> -<h3 id="数据的存储-物理-结构" tabindex="-1"><a class="header-anchor" href="#数据的存储-物理-结构" aria-hidden="true">#</a> 数据的存储(物理)结构</h3> -<p>数据结构在计算机中的表示(映像)。包括数据<code>元素的表示</code>和<code>关系的表示</code>。</p> -<p>存储结构是逻辑结构用计算机语言实现的,依赖于计算机语言。</p> -<p>可以分为:</p> -<ul> -<li>顺序存储</li> -<li>链式存储</li> -<li>索引存储</li> -<li>散列(Hash)存储</li> -</ul> -<p><strong>注意:存储和存取的概念不一样</strong></p> -<h4 id="顺序存储" tabindex="-1"><a class="header-anchor" href="#顺序存储" aria-hidden="true">#</a> 顺序存储</h4> -<p><strong>逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。</strong></p> -<p>优点:</p> -<ul> -<li>可以实现随机存取</li> -<li>元素占用最少的存储空间</li> -</ul> -<p>缺点:</p> -<ul> -<li>只能使用相邻的一整块存储单元,依赖于物理结构相邻;</li> -<li>容易产生<code>外部碎片</code></li> -</ul> -<p>什么是内外部碎片?</p> -<blockquote> -<p>参考资料:https://blog.csdn.net/qq_22238021/article/details/80209062</p> -</blockquote> -<ul> -<li>外部碎片:<code>还没有分配出去</code>(不属于任何进程),但是<strong>由于大小而无法分配给申请内存空间的新进程的内存空闲块。</strong></li> -<li>内部碎片:<code>已经被分配出去</code>(能明确指出属于哪个进程)的<strong>内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片。</strong></li> -</ul> -<h4 id="链式存储" tabindex="-1"><a class="header-anchor" href="#链式存储" aria-hidden="true">#</a> 链式存储</h4> -<p>与顺序存储不同,<strong>链式存储不要求逻辑上相邻的元素在物理位置上也相邻。</strong></p> -<p>借助指示元素存储地址的<code>指针</code>表示元素之间的逻辑关系。</p> -<p>优点:</p> -<ul> -<li>不会出现碎片现象</li> -<li>充分利用所有存储单元</li> -</ul> -<p>缺点:</p> -<ul> -<li>除了存储元素外,还需要额外存储指针,会占用额外的存储空间(结合数据库索引学习)。</li> -<li>链式存储,<strong>只能实现<code>顺序存取</code>,不能实现<code>随机存取</code>(指针的遍历)</strong></li> -</ul> -<h4 id="索引存储" tabindex="-1"><a class="header-anchor" href="#索引存储" aria-hidden="true">#</a> 索引存储</h4> -<p>存放数据元素和元素间关系的存储方式,在存储元素信息的同时,还需要建立附加的<code>索引表</code>。</p> -<p><strong>索引表的每一项称为索引项,索引项的一般形式是:<关键字,地址></strong></p> -<p>优点:</p> -<ul> -<li>检索快(就好比字典有了目录,查询就很快了)</li> -</ul> -<p>缺点:</p> -<ul> -<li>增加了索引表,占用较多的存储空间(典型的空间换时间策略)</li> -<li>增加、删除数据时,需要对应修改索引表,花费更多时间。</li> -</ul> -<h4 id="散列-hash-存储" tabindex="-1"><a class="header-anchor" href="#散列-hash-存储" aria-hidden="true">#</a> 散列(Hash)存储</h4> -<p>根据元素的关键字直接通过散列(Hash)函数计算出元素的存储地址。</p> -<p>优点:</p> -<ul> -<li>检索快,添加、删除元素结点操作快(获取元素地址直接,整体时间就少了)</li> -</ul> -<p>缺点:</p> -<ul> -<li>非常依赖于<code>散列函数</code></li> -<li>会出现<code>散列冲突</code>(主要依赖与散列函数,散列函数不好就很容易出现散列冲突)</li> -<li>出现<code>散列冲突</code>时,解决冲突就会增加时间和空间上的开销</li> -</ul> -<h3 id="数据的运算" tabindex="-1"><a class="header-anchor" href="#数据的运算" aria-hidden="true">#</a> 数据的运算</h3> -<p>数据上的运算包括:<code>运算的定义</code> 、<code>运算的实现</code></p> -<ul> -<li><code>运算的定义</code>:针对逻辑结构,指出运算的功能</li> -<li><code>原酸的实现</code>:针对存储结构,指出运算的具体操作步骤</li> -</ul> -<p>线性表既可以用顺序存储方式实现,也可以用链式存储方式实现。</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/53976b/index.html.js b/docs/.vuepress/.temp/pages/pages/53976b/index.html.js deleted file mode 100644 index 8ca251d..0000000 --- a/docs/.vuepress/.temp/pages/pages/53976b/index.html.js +++ /dev/null @@ -1,88 +0,0 @@ -export const data = { - "key": "v-47e9dd3a", - "path": "/pages/53976b/", - "title": "test", - "lang": "en-US", - "frontmatter": { - "title": "test", - "date": "2021-03-07T21:54:07.000Z", - "permalink": "/pages/53976b/", - "categories": [ - "DataStructure", - "basic_introduction" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "基础概念", - "slug": "基础概念", - "children": [ - { - "level": 3, - "title": "数据", - "slug": "数据", - "children": [] - }, - { - "level": 3, - "title": "数据元素", - "slug": "数据元素", - "children": [] - }, - { - "level": 3, - "title": "数据对象", - "slug": "数据对象", - "children": [] - }, - { - "level": 3, - "title": "数据类型", - "slug": "数据类型", - "children": [] - }, - { - "level": 3, - "title": "抽象数据类型(ADT)", - "slug": "抽象数据类型-adt", - "children": [] - }, - { - "level": 3, - "title": "数据结构", - "slug": "数据结构", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/basic_introduction/1.basic_concepts.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/53976b/index.html.vue b/docs/.vuepress/.temp/pages/pages/53976b/index.html.vue deleted file mode 100644 index ac31264..0000000 --- a/docs/.vuepress/.temp/pages/pages/53976b/index.html.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:54:07 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:59:29 ---> -<h2 id="基础概念" tabindex="-1"><a class="header-anchor" href="#基础概念" aria-hidden="true">#</a> 基础概念</h2> -<h3 id="数据" tabindex="-1"><a class="header-anchor" href="#数据" aria-hidden="true">#</a> 数据</h3> -<p><strong>信息的载体</strong>,是客观事物属性的数、字符以及所有能够输入到计算机包中并且被计算机程序识别和处理的<strong>集合</strong></p> -<h3 id="数据元素" tabindex="-1"><a class="header-anchor" href="#数据元素" aria-hidden="true">#</a> 数据元素</h3> -<p><strong>数据的基本单位</strong>,通常按照一个整数来进行考虑和处理。</p> -<p>特别注意:一个数据元素由若干个<strong>数据项</strong>组成,数据项是构成数组元素的最小单位,且不可分割。</p> -<h3 id="数据对象" tabindex="-1"><a class="header-anchor" href="#数据对象" aria-hidden="true">#</a> 数据对象</h3> -<p>具有<strong>相同性质</strong>的数据元素的<strong>集合</strong>,<strong>是数据的子集</strong></p> -<h3 id="数据类型" tabindex="-1"><a class="header-anchor" href="#数据类型" aria-hidden="true">#</a> 数据类型</h3> -<p>值的集合和定义在此集合上一组操作的总称</p> -<ul> -<li>原子类型:不可再分的数据类型;</li> -<li>结构类型:可以分解成若干分量(成分)的数据类型;</li> -<li><strong>抽象数据类型</strong>:抽象出具组织和其相关的操作;</li> -</ul> -<h3 id="抽象数据类型-adt" tabindex="-1"><a class="header-anchor" href="#抽象数据类型-adt" aria-hidden="true">#</a> 抽象数据类型(ADT)</h3> -<blockquote> -<p>Tips: 可以结合高级语言中类对象封装来理解;</p> -</blockquote> -<div class="language-bash ext-sh line-numbers-mode"><pre v-pre class="language-bash"><code>ADT抽象数据类型名<span class="token punctuation">{</span> - 数据对象:<span class="token operator"><</span>数据对象的定义<span class="token operator">></span> - 数据关系:<span class="token operator"><</span>数据关系的定义<span class="token operator">></span> - 基本操作:<span class="token operator"><</span>基本操作的定义<span class="token operator">></span> -<span class="token punctuation">}</span> ADT抽象数据类型名 -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>一个数学模型以及定义在该模型上的一组操作。定义仅仅取决于它的一组逻辑操作。与计算机内部如何表示和实现是没有关系;</p> -<p><strong>不论内部结构如何变化,只要其数学特性不变,就不会影响到外部的使用,实现了数据封装和信息隐藏</strong></p> -<p>通常由(数据对象、数据关系、数据操作集)三元组来表示抽象数据类型;</p> -<p>抽象数据类型的主要作用是<strong>数据封装和信息隐藏,让实现与使用相分离</strong>。数据及其相关操作的结合称为数据封装。对象可以对其他对象隐藏某些操作细节,从而使这些操作不会受到其他对象的影响。</p> -<p>抽象数据类型独立于运算的具体实现,使用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据,实现了信息隐藏。</p> -<h3 id="数据结构" tabindex="-1"><a class="header-anchor" href="#数据结构" aria-hidden="true">#</a> 数据结构</h3> -<p>首先明确:数据元素都不是孤立存在的。元素与元素之间存在着某种关系,这种相互之间的关系就是<strong>结构</strong>。</p> -<p><strong>数据结构是相互之间存在一种或者多种特定关系的数据元素的集合</strong></p> -<ul> -<li>逻辑结构</li> -<li>存储结构(物理结构)</li> -<li>数据运算</li> -</ul> -<p>数据的逻辑结构和存储结构是密不可分的。</p> -<p><strong>算法的设计取决于所选定的逻辑结构;算法的实现依赖于所采用的存储结构;</strong></p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.js b/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.js deleted file mode 100644 index b83017c..0000000 --- a/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.js +++ /dev/null @@ -1,70 +0,0 @@ -export const data = { - "key": "v-3926f79a", - "path": "/pages/56b8ef/", - "title": "selection_of_storage_structure", - "lang": "en-US", - "frontmatter": { - "title": "selection_of_storage_structure", - "date": "2021-03-07T22:00:36.000Z", - "permalink": "/pages/56b8ef/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "存储结构的选取", - "slug": "存储结构的选取", - "children": [ - { - "level": 3, - "title": "基于存储的考虑", - "slug": "基于存储的考虑", - "children": [] - }, - { - "level": 3, - "title": "基于运算的考虑", - "slug": "基于运算的考虑", - "children": [] - }, - { - "level": 3, - "title": "基于环境的考虑", - "slug": "基于环境的考虑", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/8.selection_of_storage_structure.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.vue b/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.vue deleted file mode 100644 index ed1b29c..0000000 --- a/docs/.vuepress/.temp/pages/pages/56b8ef/index.html.vue +++ /dev/null @@ -1,33 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 22:00:36 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:00:43 ---> -<h2 id="存储结构的选取" tabindex="-1"><a class="header-anchor" href="#存储结构的选取" aria-hidden="true">#</a> 存储结构的选取</h2> -<h3 id="基于存储的考虑" tabindex="-1"><a class="header-anchor" href="#基于存储的考虑" aria-hidden="true">#</a> 基于存储的考虑</h3> -<ul> -<li>对线性表的长度和存储规模难以估计时,不宜采用顺序表存储</li> -<li>链表不用事先估计存储规模,但存储密度较低</li> -<li>链式存储结构的存储密度小于1,不要求连续的存储空间</li> -</ul> -<h3 id="基于运算的考虑" tabindex="-1"><a class="header-anchor" href="#基于运算的考虑" aria-hidden="true">#</a> 基于运算的考虑</h3> -<ul> -<li>顺序表支持随机存取,按序号查找顺序表的时间复杂度为O(1);</li> -<li>链表不支持随机存取,按序号查找链表的时间复杂度为O(n);</li> -<li>顺序表的插入、删除操作,平均需要移动表中一半的元素,当表的数据量较大时,这种情况需要重点考虑的。</li> -<li>链表的插入、删除操作,也是需要找插入位置(前驱结点、后继结点),主要的操作还是比较操作,相对较好;</li> -</ul> -<h3 id="基于环境的考虑" tabindex="-1"><a class="header-anchor" href="#基于环境的考虑" aria-hidden="true">#</a> 基于环境的考虑</h3> -<ul> -<li>顺序表容易实现,任何高级语言中都有数组类型;</li> -<li>链表操作是基于指针的,指针移动,相对复杂;</li> -</ul> -<p>综上比较</p> -<ul> -<li>通常比较稳定的线性表选择顺序存储;</li> -<li>频繁进行插入、删除操作的线性表,应该选择链式存储,动态性较强</li> -</ul> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.js b/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.js deleted file mode 100644 index 21c0c1e..0000000 --- a/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.js +++ /dev/null @@ -1,51 +0,0 @@ -export const data = { - "key": "v-32135c7a", - "path": "/pages/5de3a5/", - "title": "static_linked_list", - "lang": "en-US", - "frontmatter": { - "title": "static_linked_list", - "date": "2021-03-07T21:59:47.000Z", - "permalink": "/pages/5de3a5/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "静态链表", - "slug": "静态链表", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/6.static_linked_list.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.vue b/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.vue deleted file mode 100644 index db25e46..0000000 --- a/docs/.vuepress/.temp/pages/pages/5de3a5/index.html.vue +++ /dev/null @@ -1,31 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:59:47 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:59:47 ---> -<h2 id="静态链表" tabindex="-1"><a class="header-anchor" href="#静态链表" aria-hidden="true">#</a> 静态链表</h2> -<blockquote> -<p>借助数组来描述线性表的链式存储结构,结点元素同样存在数据域<code>data</code>和指针域<code>next</code></p> -</blockquote> -<p>注意: 和普通的链表的指针域不同的是,静态链表的指针是结点元素的相对地址(数组下标),也称为<code>游标</code>,建议结合高级语言中数组的概念来理解;</p> -<p><strong>与顺序表一样,虽然静态链表属于链表,但是存储时需要预先分配一块连续的内存空间</strong></p> -<p>静态链表结构类型:</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 定义静态链表的最大长度 -# define MaxSize 50 - -typedef struct{ - ElemType data; // 存储数据元素,数据域 - int next; // 下个元素的相对地址,数组下标 -}SLinkList[MaxSize]; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p>很显然,静态链表是通过<code>数组游标</code>来访问下一个结点元素,可以和<code>指针域</code>的相关概念结合理解;</p> -<ul> -<li>静态链表以<code>next=-1</code>作为结束的标志【尾结点】</li> -<li>和动态链表相同,<strong>插入、删除操作不需要移动元素,只需要修改指针</strong>;</li> -<li>总体来说,静态链表没有单链表使用方便,需要将整个链表存储在一块连续的内存空间中,内部的存储可以分散,通过指针构成<code>链</code>的关系</li> -</ul> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/7088fd/index.html.js b/docs/.vuepress/.temp/pages/pages/7088fd/index.html.js deleted file mode 100644 index 4c2a050..0000000 --- a/docs/.vuepress/.temp/pages/pages/7088fd/index.html.js +++ /dev/null @@ -1,76 +0,0 @@ -export const data = { - "key": "v-40ac0f54", - "path": "/pages/7088fd/", - "title": "comparison_of_sequential_list_and_linked_list", - "lang": "en-US", - "frontmatter": { - "title": "comparison_of_sequential_list_and_linked_list", - "date": "2021-03-07T22:00:10.000Z", - "permalink": "/pages/7088fd/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "顺序表和链表的比较", - "slug": "顺序表和链表的比较", - "children": [ - { - "level": 3, - "title": "存取方式", - "slug": "存取方式", - "children": [] - }, - { - "level": 3, - "title": "逻辑结构与物理结构", - "slug": "逻辑结构与物理结构", - "children": [] - }, - { - "level": 3, - "title": "时间复杂度", - "slug": "时间复杂度", - "children": [] - }, - { - "level": 3, - "title": "空间分配", - "slug": "空间分配", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/7.comparison_of_sequential_list_and_linked_list.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/7088fd/index.html.vue b/docs/.vuepress/.temp/pages/pages/7088fd/index.html.vue deleted file mode 100644 index 41ca6d3..0000000 --- a/docs/.vuepress/.temp/pages/pages/7088fd/index.html.vue +++ /dev/null @@ -1,58 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 22:00:10 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:00:10 ---> -<h2 id="顺序表和链表的比较" tabindex="-1"><a class="header-anchor" href="#顺序表和链表的比较" aria-hidden="true">#</a> 顺序表和链表的比较</h2> -<h3 id="存取方式" tabindex="-1"><a class="header-anchor" href="#存取方式" aria-hidden="true">#</a> 存取方式</h3> -<ul> -<li>顺序表支持顺序存取和随机存取;</li> -<li>链表只能从表头顺序存取元素,支持顺序存取;</li> -</ul> -<h3 id="逻辑结构与物理结构" tabindex="-1"><a class="header-anchor" href="#逻辑结构与物理结构" aria-hidden="true">#</a> 逻辑结构与物理结构</h3> -<ul> -<li>顺序存储时,逻辑上相邻的元素,对应的物理存储位置也相邻【一定性】。</li> -<li>链式存储时,逻辑上相邻的元素,对应的物理存储位置不一定相邻【可以相邻,也可以不相邻】。</li> -<li>链式存储的逻辑关系通过指针链接表示;</li> -</ul> -<h3 id="时间复杂度" tabindex="-1"><a class="header-anchor" href="#时间复杂度" aria-hidden="true">#</a> 时间复杂度</h3> -<h4 id="按值查找" tabindex="-1"><a class="header-anchor" href="#按值查找" aria-hidden="true">#</a> 按值查找</h4> -<ul> -<li>顺序表无序的情况下,顺序表和链表的时间复杂度均为O(n)</li> -<li>顺序表有序的情况下,顺序表的时间复杂度为O(log<sub>2</sub>n),链表的时间复杂度为O(n);</li> -</ul> -<p><strong>注意:O(log<sub>2</sub>n) < O(n)</strong></p> -<h4 id="按序号查找" tabindex="-1"><a class="header-anchor" href="#按序号查找" aria-hidden="true">#</a> 按序号查找</h4> -<ul> -<li>顺序表支持随机访问,时间复杂度为O(1);</li> -<li>顺序表不支持随机访问,时间复杂度为O(n);</li> -</ul> -<h4 id="插入、删除" tabindex="-1"><a class="header-anchor" href="#插入、删除" aria-hidden="true">#</a> 插入、删除</h4> -<ul> -<li>顺序表平均需要移动半个表长的元素;</li> -<li>链表只需要修改相应结点的指针域,不需要移动元素;</li> -<li>链表结点除了数据域,还有指针域,在存储空间上比顺序存储需要更大的存储空间,付出更大的存储代价,存储密度不够大</li> -</ul> -<h3 id="空间分配" tabindex="-1"><a class="header-anchor" href="#空间分配" aria-hidden="true">#</a> 空间分配</h3> -<h4 id="顺序存储" tabindex="-1"><a class="header-anchor" href="#顺序存储" aria-hidden="true">#</a> 顺序存储</h4> -<h5 id="静态分配" tabindex="-1"><a class="header-anchor" href="#静态分配" aria-hidden="true">#</a> 静态分配</h5> -<ul> -<li>需要预先分配足够大的存储空间;</li> -<li>空间装满后不能扩充,存储新元素将出现<code>内存溢出</code>;</li> -<li>存储空间过大,顺序表后部闲置空间过多,造成<code>内部碎片</code></li> -<li>存储空间过小,会造成<code>内存溢出</code></li> -</ul> -<h5 id="动态分配" tabindex="-1"><a class="header-anchor" href="#动态分配" aria-hidden="true">#</a> 动态分配</h5> -<ul> -<li>动态分配能够扩充存储空间,但需要移动大量元素,操作效率降低</li> -<li>内存中没有更大块的连续存储空间,将会导致空间分配失败;</li> -</ul> -<h4 id="链式存储" tabindex="-1"><a class="header-anchor" href="#链式存储" aria-hidden="true">#</a> 链式存储</h4> -<ul> -<li>链式存储的结点空间只在需要的时候申请分配</li> -<li>只要内存由空间就可以分配,操作灵活、高效</li> -</ul> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/924aed/index.html.js b/docs/.vuepress/.temp/pages/pages/924aed/index.html.js deleted file mode 100644 index 491af7b..0000000 --- a/docs/.vuepress/.temp/pages/pages/924aed/index.html.js +++ /dev/null @@ -1,64 +0,0 @@ -export const data = { - "key": "v-a4870ef4", - "path": "/pages/924aed/", - "title": "basic_concept_and_operation", - "lang": "en-US", - "frontmatter": { - "title": "basic_concept_and_operation", - "date": "2021-03-07T21:57:27.000Z", - "permalink": "/pages/924aed/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "线性表的基础概念和基本操作", - "slug": "线性表的基础概念和基本操作", - "children": [ - { - "level": 3, - "title": "定义", - "slug": "定义", - "children": [] - }, - { - "level": 3, - "title": "基本操作", - "slug": "基本操作", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/1.basic_concept_and_operation.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/924aed/index.html.vue b/docs/.vuepress/.temp/pages/pages/924aed/index.html.vue deleted file mode 100644 index d082cf4..0000000 --- a/docs/.vuepress/.temp/pages/pages/924aed/index.html.vue +++ /dev/null @@ -1,49 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:57:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:57:35 ---> -<h2 id="线性表的基础概念和基本操作" tabindex="-1"><a class="header-anchor" href="#线性表的基础概念和基本操作" aria-hidden="true">#</a> 线性表的基础概念和基本操作</h2> -<blockquote> -<p>强调线性表是一种逻辑结构,不是存储结构</p> -</blockquote> -<h3 id="定义" tabindex="-1"><a class="header-anchor" href="#定义" aria-hidden="true">#</a> 定义</h3> -<p>线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。一般表示:</p> -<p>L=(a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>......a<sub>n</sub>) 其中n可以理解为表长(线性表的长度),n=0时候,即表空</p> -<ul> -<li><code>表头元素</code>:线性表中唯一的“第一个”数据元素,例如a<sub>1</sub></li> -<li><code>表尾元素</code>:线性表中唯一的“最后一个”数据元素,例如a<sub>n</sub></li> -</ul> -<p>重要逻辑特性:</p> -<ul> -<li>除表头元素外,线性表中每个元素有且仅有一个<code>直接前驱</code></li> -<li>除表尾元素外,线性表中每个元素有且仅有一个<code>直接后继</code></li> -</ul> -<p>基于此,这种<strong>线性有序的逻辑结构</strong>,使得线性表的特点如下:</p> -<ul> -<li>元素的<strong>个数有限</strong>(强调有限序列)</li> -<li>元素在逻辑上具有<strong>顺序性</strong>,在序列中每个元素都是都有先后次序的</li> -<li>元素都数据元素,<strong>每个元素都是单个元素</strong></li> -<li>元素的<strong>数据类型都相同</strong>(强调相同数据类型),每个数据元素占用相同大小的存储空间</li> -<li>元素具有<strong>抽象性</strong>,仅仅讨论元素之间的逻辑关系,不需要去考虑元素究竟表示的什么内容</li> -</ul> -<blockquote> -<p>Tips: <strong>线性表是一种逻辑结构</strong>,表示元素之间一对一的相邻关系。<strong>顺序表和链表则指的是存储结构</strong></p> -</blockquote> -<h3 id="基本操作" tabindex="-1"><a class="header-anchor" href="#基本操作" aria-hidden="true">#</a> 基本操作</h3> -<ul> -<li><code>InitList(&L)</code>: <strong>初始化表</strong>。构造空的线性表</li> -<li><code>Length(L)</code>:<strong>获取表的长度</strong>。返回线性表L的长度,即表中的数据元素个数</li> -<li><code>LocateElem(L,e)</code>:<strong>按值查找操作</strong>。在表L中国查找具有给定关键字的元素</li> -<li><code>GetElem(L,i)</code>:<strong>按位查找操作</strong>。获取表中第i个位置的元素的值</li> -<li><code>ListInsert(&L,i,e)</code>:<strong>插入操作</strong>。在表的第i个位置上插入指定元素e</li> -<li><code>ListDelete(&L,i,&e)</code>:<strong>删除操作</strong>。删除表中第i个位置的元素,并用e返回删除元素的值</li> -<li><code>PrintList(L)</code>:<strong>输出操作</strong>。按照前后顺序(如:1、2....n)输出线性表的所有元素值</li> -<li><code>Empty(L)</code>:<strong>判空操作</strong>。当表L为空,则返回true,否则返回false</li> -<li><code>DestoryList(&L)</code>:<strong>销毁操作</strong>。将线性表销毁,释放线性表L所占用的内存空间(类似:释放内存)</li> -</ul> -<p>线性表是具有相同的数据类型的有限个数据元素组成的,<strong>数据元素是由数据项组成的</strong></p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/a7b602/index.html.js b/docs/.vuepress/.temp/pages/pages/a7b602/index.html.js deleted file mode 100644 index 5ad5aea..0000000 --- a/docs/.vuepress/.temp/pages/pages/a7b602/index.html.js +++ /dev/null @@ -1,64 +0,0 @@ -export const data = { - "key": "v-069c5402", - "path": "/pages/a7b602/", - "title": "circular_list", - "lang": "en-US", - "frontmatter": { - "title": "circular_list", - "date": "2021-03-07T21:59:27.000Z", - "permalink": "/pages/a7b602/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "循环链表", - "slug": "循环链表", - "children": [ - { - "level": 3, - "title": "循环单链表", - "slug": "循环单链表", - "children": [] - }, - { - "level": 3, - "title": "循环双链表", - "slug": "循环双链表", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/5.circular_list.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/a7b602/index.html.vue b/docs/.vuepress/.temp/pages/pages/a7b602/index.html.vue deleted file mode 100644 index 4cebcfb..0000000 --- a/docs/.vuepress/.temp/pages/pages/a7b602/index.html.vue +++ /dev/null @@ -1,52 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:59:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:59:27 ---> -<h2 id="循环链表" tabindex="-1"><a class="header-anchor" href="#循环链表" aria-hidden="true">#</a> 循环链表</h2> -<ul> -<li>循环单链表</li> -<li>循环双链表</li> -</ul> -<h3 id="循环单链表" tabindex="-1"><a class="header-anchor" href="#循环单链表" aria-hidden="true">#</a> 循环单链表</h3> -<p><code>循环单链表</code>是在单链表的基础上,将最后一个结点(尾结点)的指针由<code>NULL</code>改为指向<code>头结点</code>,形成<code>环</code>。【单链表----->循环单链表】</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code>// 双链表结点类型 -typedef struct DNode{ - ElemType data; // 结点的数据域 - struct DNode *prior; // 结点的前驱指针 - struct DNode *next; // 结点的后继指针 -}DNode, *DlinkList; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><h4 id="判空条件" tabindex="-1"><a class="header-anchor" href="#判空条件" aria-hidden="true">#</a> 判空条件</h4> -<p><strong>不是判断头结点的指针是否为空,而是需要判断是否等于头指针</strong>,表为空时,头结点的next指针域其实是指向自己;</p> -<h4 id="特点" tabindex="-1"><a class="header-anchor" href="#特点" aria-hidden="true">#</a> 特点</h4> -<ul> -<li>在循环单链表中,尾结点*p的next指针域指向链表L(即:头结点),形成了<code>闭环</code>,不存在指针域为<code>NULL</code>的结点。</li> -<li><strong>由于循环单链表是个<code>环</code>,在任何位置上的插入、删除操作都是等价的,不需要去判断是否是表尾</strong>。当其中的结点的next指针指向自己,也就能判断表为空</li> -<li>单链表只能从头结点(表头结点)开始往后顺序遍历整个表,循环单链表可以从表中任意位置开始遍历整个链表,结点是等价的;</li> -<li><strong>循环单链表可以抽象为时钟,形成的<code>环</code>是有顺序的;</strong></li> -<li>频繁的<code>表头</code>和<code>表尾</code>操作,可以对循环单链表设置<code>尾指针</code>,而不设置<code>头指针</code>,明确尾指针r后,头指针即为:<code>r->next</code> ,减少头指针到尾指针间的遍历,时间复杂度:O(n)---->O(1)</li> -</ul> -<h3 id="循环双链表" tabindex="-1"><a class="header-anchor" href="#循环双链表" aria-hidden="true">#</a> 循环双链表</h3> -<p><code>循环双链表</code>是在双链表的基础上,将<code>尾结点</code>的<code>next</code>指针指向<code>头结点</code>,将<code>头结点</code>的<code>prior</code>指针指向<code>尾结点</code>。【双链表----->循环双链表】</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code>// 双链表结点类型 -typedef struct DNode{ - ElemType data; // 结点的数据域 - struct DNode *prior; // 结点的前驱指针 - struct DNode *next; // 结点的后继指针 -}DNode, *DlinkList; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><h4 id="判空条件-1" tabindex="-1"><a class="header-anchor" href="#判空条件-1" aria-hidden="true">#</a> 判空条件</h4> -<p>循环双链表为空时,头结点*p的prior指针和next指针都指向L,即同时满足:</p> -<ul> -<li>p->next=L</li> -<li>p->prior=L</li> -</ul> -<h4 id="基本特点" tabindex="-1"><a class="header-anchor" href="#基本特点" aria-hidden="true">#</a> 基本特点</h4> -<ul> -<li>从双向链表中的任意一个结点开始,都可以很方便地访问它的<code>前驱结点</code>和<code>后继结点</code>。</li> -</ul> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/add102/index.html.js b/docs/.vuepress/.temp/pages/pages/add102/index.html.js deleted file mode 100644 index e57eb48..0000000 --- a/docs/.vuepress/.temp/pages/pages/add102/index.html.js +++ /dev/null @@ -1,220 +0,0 @@ -export const data = { - "key": "v-4995d319", - "path": "/pages/add102/", - "title": "", - "lang": "en-US", - "frontmatter": { - "title": null, - "date": "2021-01-19T08:04:19.000Z", - "permalink": "/pages/add102/", - "categories": [ - "category" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "写最前面", - "slug": "写最前面", - "children": [] - }, - { - "level": 2, - "title": "关于作者", - "slug": "关于作者", - "children": [] - }, - { - "level": 2, - "title": "思维导图", - "slug": "思维导图", - "children": [] - }, - { - "level": 2, - "title": "日常推荐", - "slug": "日常推荐", - "children": [] - }, - { - "level": 2, - "title": "前端", - "slug": "前端", - "children": [] - }, - { - "level": 2, - "title": "", - "slug": "-1", - "children": [] - }, - { - "level": 2, - "title": "后端【Node】", - "slug": "后端【node】", - "children": [] - }, - { - "level": 2, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 2, - "title": "数据库", - "slug": "数据库", - "children": [] - }, - { - "level": 2, - "title": "服务部署", - "slug": "服务部署", - "children": [] - }, - { - "level": 2, - "title": "服务网关", - "slug": "服务网关", - "children": [] - }, - { - "level": 2, - "title": "服务注册", - "slug": "服务注册", - "children": [] - }, - { - "level": 2, - "title": "消息中间件", - "slug": "消息中间件", - "children": [] - }, - { - "level": 2, - "title": "RPC框架", - "slug": "rpc框架", - "children": [] - }, - { - "level": 2, - "title": "Elk日志管理平台", - "slug": "elk日志管理平台", - "children": [] - }, - { - "level": 2, - "title": "监控工具", - "slug": "监控工具", - "children": [] - }, - { - "level": 2, - "title": "高可用架构", - "slug": "高可用架构", - "children": [] - }, - { - "level": 2, - "title": "网站搭建", - "slug": "网站搭建", - "children": [] - }, - { - "level": 2, - "title": "书籍整理", - "slug": "书籍整理", - "children": [ - { - "level": 3, - "title": "技术类", - "slug": "技术类", - "children": [] - }, - { - "level": 3, - "title": "非技术类", - "slug": "非技术类", - "children": [] - } - ] - }, - { - "level": 2, - "title": "公众号汇总", - "slug": "公众号汇总", - "children": [ - { - "level": 3, - "title": "2020年", - "slug": "_2020年", - "children": [] - }, - { - "level": 3, - "title": "2021年", - "slug": "_2021年", - "children": [] - } - ] - }, - { - "level": 2, - "title": "赞赏支持", - "slug": "赞赏支持", - "children": [] - }, - { - "level": 2, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 2, - "title": "鸣谢", - "slug": "鸣谢", - "children": [] - }, - { - "level": 2, - "title": "赞助列表", - "slug": "赞助列表", - "children": [] - }, - { - "level": 2, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 3 - } - ] - }, - "filePathRelative": "category/README.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/add102/index.html.vue b/docs/.vuepress/.temp/pages/pages/add102/index.html.vue deleted file mode 100644 index 2c1c10b..0000000 --- a/docs/.vuepress/.temp/pages/pages/add102/index.html.vue +++ /dev/null @@ -1,839 +0,0 @@ -<template><h1 id="" tabindex="-1"><a class="header-anchor" href="#" aria-hidden="true">#</a> </h1> -<p align="center"> - <img src="https://cdn.142vip.cn/article-notes/img/image-20200605224832237.png"> -</p> -<p align="center"> - <a href="#gzh" target="_blank"><img src="https://img.shields.io/badge/WeChat-公众号-5wd.svg"></a> -<a href="#wechat" target="_blank"><img src="https://img.shields.io/badge/WeChat-微信-yellow.svg"></a> -<a href="https://space.bilibili.com/350937042" target="_blank"><img src="https://img.shields.io/badge/Bilibili-哔哩哔哩-green.svg"></a> -<a href="https://142vip.cn" target="_blank"><img src="https://img.shields.io/badge/142vip-网站-orange.svg"></a> -<a href="https://blog.142vip.cn" target="_blank"><img src="https://img.shields.io/badge/blog-博客-blue.svg"></a> -<a href="https://github.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/github-Github-9ac.svg"></a> -<a href="https://gitee.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/gitee-码云-4ed.svg"></a> -<a href="https://blog.csdn.net/Mmdapl" target="_blank"><img src="https://img.shields.io/badge/csdn-CSDN-8ea.svg"></a> -<a href="https://juejin.im/user/448256476724807" target="_blank"><img src="https://img.shields.io/badge/JueJin-掘金-75c.svg"></a> -</p> -<div align="center" style="font-size:20px"> - <a href="https://gitee.com/mmdapl/JavaScriptCollection" target="_blank">码云版</a> - <!-- || - <a href="readme-wechat.md" target="_blank">微信版</a> --> -</div> -<h2 id="写最前面" tabindex="-1"><a class="header-anchor" href="#写最前面" aria-hidden="true">#</a> 写最前面</h2> -<blockquote> -<p>这里是日常工作、学习、生活中总结的各类文章笔记,主要涉及开发技术总结记录,偶尔也会感慨万千,水一些无关技术的文章;若发现博客外链不能访问则可能博客设置修改过,请直接访问博客;所有内容会选择性的发表于<strong>微信公众号、个人博客、掘金、CSDN ,实际内容以本仓库排版、校对为主。</strong> 也会不定时同步到 <strong>码云</strong> 。 -<strong>以下内容没有链接的代表尚未完成,大家善用快捷键Ctrl+F</strong></p> -<p>创建时间:2020年2月14日</p> -</blockquote> -<h2 id="关于作者" tabindex="-1"><a class="header-anchor" href="#关于作者" aria-hidden="true">#</a> 关于作者</h2> -<ul> -<li><img src="https://cdn.142vip.cn/article-notes/img/original.png" width="36" height="26" align="left" /><a href="http://blog.142vip.cn/s/projects" target="_blank" rel="noopener noreferrer">个人项目整理<ExternalLinkIcon/></a></li> -<li><img src="https://cdn.142vip.cn/article-notes/img/original.png" width="36" height="26" align="left" /><a href="">自我介绍</a></li> -</ul> -<h2 id="思维导图" tabindex="-1"><a class="header-anchor" href="#思维导图" aria-hidden="true">#</a> 思维导图</h2> -<blockquote> -<p>内容同步与文档,可以结合思维导图对文档进行有效学习.相关目录的xmind文件为思维导图原文件</p> -</blockquote> -<h2 id="日常推荐" tabindex="-1"><a class="header-anchor" href="#日常推荐" aria-hidden="true">#</a> 日常推荐</h2> -<ul> -<li><RouterLink to="/category/docs/recommend/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A8%E8%8D%90.html">云服务器推荐</RouterLink></li> -<li><RouterLink to="/category/docs/recommend/%E5%AD%A6%E4%B9%A0%E7%BD%91%E7%AB%99%E3%80%81%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7.html">学习网站、使用工具</RouterLink></li> -<li><RouterLink to="/category/docs/recommend/%E5%80%BC%E5%BE%97%E7%BB%86%E8%AF%BB%E7%9A%84%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0%E6%8E%A8%E8%8D%90.html">值得细读的技术文章推荐</RouterLink></li> -</ul> -<h1 id="文章笔记" tabindex="-1"><a class="header-anchor" href="#文章笔记" aria-hidden="true">#</a> 文章笔记</h1> -<p><strong>注:无高亮有效访问链接的待完成/同步</strong></p> -<h2 id="前端" tabindex="-1"><a class="header-anchor" href="#前端" aria-hidden="true">#</a> 前端</h2> -<blockquote> -<p>前端技术百花齐放、层出不穷,个人认为要注重广度,学会看官方文档熟练操作即可;</p> -</blockquote> -<h4 id="css" tabindex="-1"><a class="header-anchor" href="#css" aria-hidden="true">#</a> CSS</h4> -<blockquote> -<p>依赖W3CSchool文档和日常整理,主要是对CSS常用操作和基础属性进行整理总结。不会过多深入</p> -</blockquote> -<ul> -<li> -<p><RouterLink to="/category/docs/css/CSS%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.html">CSS开发规范</RouterLink></p> -</li> -<li> -<p>样式属性</p> -</li> -<li> -<p>页面布局</p> -</li> -<li> -<p>移动端适配</p> -</li> -</ul> -<h5 id="基础教程" tabindex="-1"><a class="header-anchor" href="#基础教程" aria-hidden="true">#</a> <a href="docs/css/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B">基础教程</a></h5> -<h2 id="-1" tabindex="-1"><a class="header-anchor" href="#-1" aria-hidden="true">#</a> </h2> -<h4 id="javascript" tabindex="-1"><a class="header-anchor" href="#javascript" aria-hidden="true">#</a> JavaScript</h4> -<blockquote> -<p><strong>本级目录下的JavaScript内容没有发表到<a href="http://blog.142vip.cn" target="_blank" rel="noopener noreferrer">博客<ExternalLinkIcon/></a>上,建议对照<RouterLink to="/category/docs/javascript/">脑图</RouterLink>在<a href="javascript">JavaScript主目录</a>下学习</strong>,依赖官方文档及自身对JavaScript语言的初步了解,进行的关于JavaScript知识整理,主要目的是复习基础概念、了解新特性、熟练ES6/7操作;整体相对来说由易到难,方便后续查阅学习~</p> -</blockquote> -<h5 id="快速入门" tabindex="-1"><a class="header-anchor" href="#快速入门" aria-hidden="true">#</a> 快速入门</h5> -<ul> -<li><RouterLink to="/category/docs/javascript/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/javascript%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D.html">简单介绍</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/javascript%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8.html">快速了解</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/JavaScript%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.html">JavasScript开发规范</RouterLink></li> -</ul> -<h5 id="基础教程-1" tabindex="-1"><a class="header-anchor" href="#基础教程-1" aria-hidden="true">#</a> 基础教程</h5> -<ul> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E8%AF%AD%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.html">语法与数据结构</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E5%BE%AA%E7%8E%AF%E4%B8%8E%E8%BF%AD%E4%BB%A3.html">循环与迭代</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E4%B8%8E%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86.html">流程控制与错误处理</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C%E8%BF%90%E7%AE%97%E7%AC%A6.html">表达式和运算符</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E5%87%BD%E6%95%B0.html">函数和方法</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E6%95%B0%E5%AD%97%E5%92%8C%E6%97%A5%E6%9C%9F.html">数字和日期</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E5%AF%B9%E8%B1%A1%E7%9A%84%E4%BD%BF%E7%94%A8.html">对象的使用</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html">正则表达式</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/promise%E5%AF%B9%E8%B1%A1%E7%9A%84%E4%BD%BF%E7%94%A8.html">promise对象的使用</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/modules%E6%A8%A1%E5%9D%97.html">modules模块</RouterLink></li> -</ul> -<h5 id="中级教程" tabindex="-1"><a class="header-anchor" href="#中级教程" aria-hidden="true">#</a> 中级教程</h5> -<ul> -<li><RouterLink to="/category/docs/javascript/%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B/promise%E5%AF%B9%E8%B1%A1.html">Promise对象</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B/async%E5%87%BD%E6%95%B0.html">async函数</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B/class%E7%B1%BB.html">class类</RouterLink></li> -</ul> -<h5 id="高级教程" tabindex="-1"><a class="header-anchor" href="#高级教程" aria-hidden="true">#</a> 高级教程</h5> -<ul> -<li> -<p><RouterLink to="/category/docs/javascript/%E9%AB%98%E7%BA%A7%E6%95%99%E7%A8%8B/%E4%B8%8D%E4%B8%80%E6%A0%B7%E7%9A%84ajax.html">不一样的ajax</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/javascript/%E9%AB%98%E7%BA%A7%E6%95%99%E7%A8%8B/%E4%BB%80%E4%B9%88%E6%98%AF%E4%BA%8B%E4%BB%B6%E5%BE%AA%E7%8E%AF.html">什么是事件循环</RouterLink></p> -</li> -<li> -<p><a href="">JSON.stringify()的三个参数</a></p> -</li> -</ul> -<h5 id="最后稻草" tabindex="-1"><a class="header-anchor" href="#最后稻草" aria-hidden="true">#</a> 最后稻草</h5> -<ul> -<li><RouterLink to="/category/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/ES6%E3%80%81ES7%E3%80%81ES8%E3%80%81ES9%E3%80%81ES10%E7%9A%84%E6%96%B0%E7%89%B9%E6%80%A7.html">ES6、ES7、ES8、ES9、ES10的新特性</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/ES2020%E6%96%B0%E7%89%B9%E6%80%A7.html">ES2020新特性</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/JavaScript%E5%B7%A5%E5%85%B7%E5%87%BD%E6%95%B0%E5%A4%A7%E5%85%A8.html">JavaScript 工具函数大全</RouterLink></li> -<li><RouterLink to="/category/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0%E6%96%B9%E6%B3%95%E6%95%B4%E7%90%86.html">常用函数方法整理</RouterLink></li> -</ul> -<h4 id="jquery" tabindex="-1"><a class="header-anchor" href="#jquery" aria-hidden="true">#</a> JQuery</h4> -<ul> -<li> -<p><RouterLink to="/category/docs/jquery/%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8.html">安装使用</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/jquery/%E5%9F%BA%E6%9C%AC%E5%B1%9E%E6%80%A7.html">基本属性</RouterLink></p> -</li> -<li> -<p>Css样式</p> -</li> -<li> -<p>选择器</p> -</li> -<li> -<p>文档处理</p> -</li> -<li> -<p>筛选</p> -</li> -<li> -<p>事件</p> -</li> -<li> -<p>效果</p> -</li> -<li> -<p>事件对象</p> -</li> -<li> -<p>延迟对象</p> -</li> -<li> -<p>回调函数</p> -</li> -<li> -<p>其他整理</p> -</li> -</ul> -<h4 id="vuejs" tabindex="-1"><a class="header-anchor" href="#vuejs" aria-hidden="true">#</a> Vuejs</h4> -<blockquote> -<p>介绍基础、常用的vue功能,不会很深入的涉及到vue源码及原理</p> -</blockquote> -<h4 id="react" tabindex="-1"><a class="header-anchor" href="#react" aria-hidden="true">#</a> React</h4> -<h4 id="nuxtjs" tabindex="-1"><a class="header-anchor" href="#nuxtjs" aria-hidden="true">#</a> Nuxtjs</h4> -<blockquote> -<p>Nuxtjs是在vue框架上进行封装的,主要是用来解决单体页面的服务端渲染问题,提供网站进行SEO优化的可能</p> -</blockquote> -<p><a href="">前端读写cookie</a></p> -<h4 id="ui框架" tabindex="-1"><a class="header-anchor" href="#ui框架" aria-hidden="true">#</a> UI框架</h4> -<blockquote> -<p>市面上前端框架层出不穷,不同的技术栈依赖的UI框架也不尽相同,这里将会依据笔者使用的UI框架,以线上项目展示的方式,介绍用过的框架;</p> -</blockquote> -<ul> -<li>Bootstrap</li> -<li>LayerUI</li> -<li>Ant-design-vue</li> -<li>iView-UI</li> -<li>VantUI</li> -<li>Element-UI</li> -</ul> -<h2 id="后端【node】" tabindex="-1"><a class="header-anchor" href="#后端【node】" aria-hidden="true">#</a> 后端【Node】</h2> -<blockquote> -<p>相比前端,作为偏后端的开发者, 后端技术的学习则需要稳扎稳打、不断积累整理,在会用、能用、熟练的基础上,更应该学习其中的原理;所以若你为后端开发者,不论Java、Nodejs、Go等技术栈,对待下面将提及的微服务架构、容器技术、服务治理、高可用等都需要努力学习,抓住重点;</p> -<p>在面试面前,能力是不会说谎的,打铁还需自身硬,加油~</p> -</blockquote> -<h4 id="express框架" tabindex="-1"><a class="header-anchor" href="#express框架" aria-hidden="true">#</a> Express框架</h4> -<ul> -<li><RouterLink to="/category/docs/express/%E6%A1%86%E6%9E%B6%E4%BB%8B%E7%BB%8D.html">框架概念简介</RouterLink></li> -<li><RouterLink to="/category/docs/express/brew%E5%92%8Ctree%E7%9A%84%E5%AE%89%E8%A3%85.html">brew和tree的安装</RouterLink></li> -<li>搭建express基础项目</li> -<li>安装</li> -<li>路由</li> -<li>静态文件</li> -<li>中间件</li> -<li>统一错误处理</li> -<li><RouterLink to="/category/docs/express/express()%E5%87%BD%E6%95%B0.html">express()函数</RouterLink></li> -<li><RouterLink to="/category/docs/express/application%E5%AF%B9%E8%B1%A1%E8%AF%A6%E8%A7%A3.html">application对象详解</RouterLink></li> -<li><RouterLink to="/category/docs/express/request%E5%AF%B9%E8%B1%A1.html">request对象</RouterLink></li> -<li><a href="">respon对象</a></li> -<li><a href="">router对象</a></li> -<li>数据库集成</li> -<li>MVC分层</li> -<li><RouterLink to="/category/docs/express/pm2%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86.html">pm2进程管理</RouterLink></li> -<li>分环境部署上线</li> -</ul> -<h4 id="koa框架" tabindex="-1"><a class="header-anchor" href="#koa框架" aria-hidden="true">#</a> Koa框架</h4> -<ul> -<li>koa介绍</li> -<li>手把手搭建第一个koa项目</li> -<li>应用(Application)</li> -<li>中间件(Middleware)</li> -<li>上下文(Context)</li> -<li>请求(Request)</li> -<li>响应(Response)</li> -</ul> -<h4 id="eggjs框架" tabindex="-1"><a class="header-anchor" href="#eggjs框架" aria-hidden="true">#</a> Eggjs框架</h4> -<h5 id="基础篇" tabindex="-1"><a class="header-anchor" href="#基础篇" aria-hidden="true">#</a> 基础篇</h5> -<ul> -<li><RouterLink to="/category/docs/eggjs/git-README.html">第一部分:Git概述</RouterLink></li> -</ul> -<ul> -<li><RouterLink to="/category/docs/eggjs/git-download.html">1.1 下载和安装</RouterLink> -<ul> -<li><RouterLink to="/category/docs/eggjs/git-config.html">1.2 基本配置</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/git-dns.html">1.3 常用命令</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/git-github.html">1.4 GitHub简单使用</RouterLink></li> -<li><a href="https://mp.weixin.qq.com/s/Wn_IZ6K4eqh1PtomRtqdqg" target="_blank" rel="noopener noreferrer">1.5 GitBook简单使用<ExternalLinkIcon/></a> -<ul> -<li><RouterLink to="/category/docs/eggjs/git-typora.html">1.5.1 Typora简介</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/git-markdown.html">1.5.2 MarkDown语法</RouterLink></li> -</ul> -</li> -<li><RouterLink to="/category/docs/eggjs/git-choice.html">1.6 码云和GitHub的选择</RouterLink></li> -</ul> -</li> -</ul> -<ul> -<li> -<p><RouterLink to="/category/docs/eggjs/mysql-README.html">第二部分:数据库概述</RouterLink></p> -<ul> -<li><RouterLink to="/category/docs/eggjs/mysql-download.html">2.1 下载和安装</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/git-connect.html">2.2 连接数据库</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/mysql-curd.html">2.3 CURD操作</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/mysql-redis.html">2.4 Redis缓存</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/mysql-redis-install.html">2.4.1 redis安装</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/mysql-redis-dns.html">2.4.2 redis常用指令</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/mysql-redis-view.html">2.5 可视化管理</RouterLink></li> -</ul> -</li> -</ul> -<h5 id="入门篇" tabindex="-1"><a class="header-anchor" href="#入门篇" aria-hidden="true">#</a> 入门篇</h5> -<ul> -<li> -<p><RouterLink to="/category/docs/eggjs/egg-README.html">第一部分:Egg框架快速入门</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/eggjs/egg-base.html">1.1 基础功能</RouterLink></p> -<ul> -<li><RouterLink to="/category/docs/eggjs/egg-request-params.html">1.1.1 接口参数获取</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-object.html">1.1.2 Egg内置对象 </RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-config.html">1.1.3 Config配置</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-life.html">1.1.4 Egg生命周期</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-middleware.html">1.1.5 中间件理解</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-router.html">1.1.6 Router路由分发</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-controller.html">1.1.7 Controller控制器</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-service.html">1.1.8 Service服务</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-plugin.html">1.1.9 常用插件</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/category/docs/eggjs/egg-core.html">1.2 核心功能</RouterLink></p> -<ul> -<li><RouterLink to="/category/docs/eggjs/egg-logger.html">1.2.1 日志输出</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-schedule.html">1.2.2 定时任务</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-httpclient.html">1.2.2 HttpClient网络请求</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-cookies.html">1.2.3 Cookie的基本使用</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-session.html">1.2.4 Session的基本使用</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-try-catch.html">1.2.5 统一异常-错误处理</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-csrf-xss.html">1.2.6 CSRF防范和XSS攻击</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/egg-restful.html">1.2.7 RESTful API接口风格</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/category/docs/eggjs/plugin-README.html">第二部分:插件开发</RouterLink></p> -<ul> -<li><RouterLink to="/category/docs/eggjs/plugin-egg-validate.html">2.1 egg-validate参数校验</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/plugin-egg-view.ejs.html">2.2 egg-view-ejs页面渲染</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/plugin-egg-redis.html">2.3 egg-redis缓存</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/plugin-egg-mysql.html">2.4 egg-mysql</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/plugin-egg-sequelize.html">2.5 egg-sequelize</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/plugin-egg-socket.io.html">2.6 egg-socket.io即时通讯</RouterLink></li> -</ul> -</li> -</ul> -<h5 id="代码实战篇" tabindex="-1"><a class="header-anchor" href="#代码实战篇" aria-hidden="true">#</a> 代码实战篇</h5> -<ul> -<li> -<p><RouterLink to="/category/docs/eggjs/project-README-CODE.html">第一部分:常用代码</RouterLink></p> -<ul> -<li><RouterLink to="/category/docs/eggjs/project-images-cropper.html">1.1 图片前端在线剪辑</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-upload.html">1.2 文件上传后台处理</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-md5.html">1.3 MD5加密-解密算法</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-token.html">1.4 Egg Jwt加密和校验</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/category/docs/eggjs/project-README-INTRODUCE.html">第二部分:项目简介</RouterLink></p> -<ul> -<li><RouterLink to="/category/docs/eggjs/project-ssoCenterSystem.html">2.1 基于OAuth2的统一认证中心系统</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-pagenation.html">2.2 常用前后端分页比较与实现</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-spring-boot-blog.html">2.3基于Spring Boot实现的个人博客</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-webapi.html">2.4 基于Yapi搭建的接口管理系统</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-gitbook.html">2.5 GitBook开源笔记总结站点搭建</RouterLink></li> -<li><RouterLink to="/category/docs/eggjs/project-142vip.cn.html">2.6 个人网站及接口服务搭建搭建</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/category/docs/eggjs/egg-egg-example.html">第三部分:手把手搭建基础Egg开发框架</RouterLink></p> -</li> -</ul> -<h4 id="nestjs框架" tabindex="-1"><a class="header-anchor" href="#nestjs框架" aria-hidden="true">#</a> Nestjs框架</h4> -<blockquote> -<p>Nestjs框架推崇typescript语法,并且友好的兼容express框架,因此在学习Nestjs框架之前,请务必先熟悉express框架相关操作并进行typescript入门;在一定程度上typescript和面向对象语言Java、Net等很相似,如果你之前有JavaScript和Java的基础,那么应该恭喜你,你的学习速度将会倍速提高</p> -</blockquote> -<ul> -<li><RouterLink to="/category/nestjs/nestjs%E6%A0%B8%E5%BF%83%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5.html">核心基础概念</RouterLink></li> -<li><RouterLink to="/category/nestjs/nestjs%E9%A1%B9%E7%9B%AE%E5%88%9B%E5%BB%BA%E5%88%9D%E5%A7%8B%E5%8C%96%E5%85%A5%E9%97%A8.html">项目创建初始化入门</RouterLink></li> -<li><RouterLink to="/category/nestjs/nestjs%E6%95%B4%E5%90%88swagger%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3.html">整合swagger快速生成api文档</RouterLink></li> -<li><RouterLink to="/category/nestjs/nestjs%E6%8E%A5%E5%8F%A3%E8%B7%AF%E7%94%B1%E8%AF%B7%E6%B1%82%E4%BC%A0%E5%8F%82.html">接口路由请求传参</RouterLink></li> -</ul> -<h2 id="算法" tabindex="-1"><a class="header-anchor" href="#算法" aria-hidden="true">#</a> 算法</h2> -<ul> -<li>算法分析</li> -</ul> -<h4 id="查找" tabindex="-1"><a class="header-anchor" href="#查找" aria-hidden="true">#</a> 查找</h4> -<ul> -<li>顺序查找</li> -<li>折半查找</li> -<li>分块查找</li> -<li>B树和B+树</li> -<li>散列(Hash)表</li> -<li>字符串模式匹配(KPM)</li> -</ul> -<h4 id="排序" tabindex="-1"><a class="header-anchor" href="#排序" aria-hidden="true">#</a> 排序</h4> -<ul> -<li>插入排序</li> -<li>交换排序</li> -<li>选择排序</li> -<li>归并排序</li> -<li>基数排序</li> -<li>内部排序比较</li> -<li>外部排序比较</li> -</ul> -<h4 id="leetcode刷题" tabindex="-1"><a class="header-anchor" href="#leetcode刷题" aria-hidden="true">#</a> LeetCode刷题</h4> -<h2 id="数据库" tabindex="-1"><a class="header-anchor" href="#数据库" aria-hidden="true">#</a> 数据库</h2> -<blockquote> -<p>主讲数据库基础知识,结合node的简单使用,相关的部署方案参照下方的文档</p> -</blockquote> -<h4 id="mysql" tabindex="-1"><a class="header-anchor" href="#mysql" aria-hidden="true">#</a> MySQL</h4> -<ul> -<li><a href="https://mp.weixin.qq.com/s/U1OUZYHEChFDx03FvgbMHA" target="_blank" rel="noopener noreferrer">【服务器版】MySQL的安装部署<ExternalLinkIcon/></a></li> -<li><RouterLink to="/category/docs/mysql/MySQL%E4%BC%98%E5%8C%96%E4%B9%8BExplain%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E.html">MySQL优化之Explain参数说明</RouterLink></li> -<li>索引</li> -<li>sql优化</li> -<li><RouterLink to="/category/docs/mysql/%E5%9F%BA%E4%BA%8EGTID%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E7%9A%84%E5%8E%9F%E7%90%86%E5%92%8C%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE.html">基于GTID主从复制的原理和基础配置</RouterLink></li> -<li><RouterLink to="/category/docs/mysql/mysql%E6%97%A5%E5%BF%97%E6%AF%94%E8%BE%83.html">MySQL日志类型把我难哭了,你学废了吗?</RouterLink></li> -</ul> -<h4 id="redis" tabindex="-1"><a class="header-anchor" href="#redis" aria-hidden="true">#</a> Redis</h4> -<blockquote> -<p>将围绕redis基础概念、使用场景、使用方式、简单部署等方面 展开介绍,<a href="redis">主目录</a>下有自己觉得还不错PDF文档~</p> -</blockquote> -<ul> -<li><RouterLink to="/category/docs/redis/key%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83%E4%B8%8E%E5%BB%BA%E8%AE%AE.html">key命名规范与建议</RouterLink></li> -<li><RouterLink to="/category/docs/redis/redis%E5%BC%80%E5%8F%91%E4%BD%BF%E7%94%A8%E8%A7%84%E8%8C%83.html">redis开发使用规范</RouterLink></li> -<li><RouterLink to="/category/docs/redis/redis%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D.html">redis基础介绍</RouterLink></li> -<li><a href="https://mp.weixin.qq.com/s/Xe-ZDf2kgUWfYSkuULAdlw" target="_blank" rel="noopener noreferrer">redis的简单安装和部署<ExternalLinkIcon/></a></li> -<li><a href="code/docs/redis/redis-default.conf">官方默认配置模板</a></li> -<li>数据类型</li> -<li><RouterLink to="/category/docs/docs/redis/redis%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2.html">redis简单主从集群部署-docker方式</RouterLink></li> -<li><RouterLink to="/category/docs/redis/memCache%E4%B8%8ERedis.html">memCache与Redis比较</RouterLink></li> -</ul> -<h4 id="mongo" tabindex="-1"><a class="header-anchor" href="#mongo" aria-hidden="true">#</a> Mongo</h4> -<ul> -<li>基本介绍</li> -<li>安装部署</li> -<li>简单使用</li> -<li>Node下的CURD操作</li> -</ul> -<h2 id="服务部署" tabindex="-1"><a class="header-anchor" href="#服务部署" aria-hidden="true">#</a> 服务部署</h2> -<h4 id="nginx" tabindex="-1"><a class="header-anchor" href="#nginx" aria-hidden="true">#</a> nginx</h4> -<ul> -<li><RouterLink to="/category/docs/nginx/nginx%E5%9F%BA%E7%A1%80%E9%83%A8%E7%BD%B2.html">nginx安装,普通安装 Or Docker搞定?</RouterLink></li> -<li><a href="">手把手nginx基础入门</a></li> -<li><a href="">反向代理、负载均衡真有那么难吗?</a></li> -<li><RouterLink to="/category/docs/nginx/nginx%E6%9C%8D%E5%8A%A1%E5%99%A8ssl%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE.html">Nginx SSL证书,从此踏上Https之路</RouterLink></li> -</ul> -<h4 id="docker" tabindex="-1"><a class="header-anchor" href="#docker" aria-hidden="true">#</a> docker</h4> -<ul> -<li>我与docker的第一次硬碰硬</li> -<li>docker操作入门真有那么难吗?</li> -<li>这些基础操作指令,你会吗?</li> -<li>那些年,我常用的docker指令操作汇总</li> -</ul> -<h4 id="docker-compose" tabindex="-1"><a class="header-anchor" href="#docker-compose" aria-hidden="true">#</a> docker-compose</h4> -<ul> -<li>听说你装了N次都没搞定?</li> -<li>集群启动失败,yaml规范不清楚?</li> -<li><a href="https://mp.weixin.qq.com/s/nC4nF51xn61TZlenuUxDog" target="_blank" rel="noopener noreferrer">我了解的docker-compose都在这里了<ExternalLinkIcon/></a></li> -</ul> -<h4 id="linux下shell编程" tabindex="-1"><a class="header-anchor" href="#linux下shell编程" aria-hidden="true">#</a> linux下shell编程</h4> -<ul> -<li><a href="https://mp.weixin.qq.com/s/gctrWdB1JEK59_a9tJQSkg" target="_blank" rel="noopener noreferrer">shell基础整理<ExternalLinkIcon/></a></li> -<li><RouterLink to="/category/shell/shell%E8%BF%9E%E6%8E%A5mysql.html">操作mysql数据库</RouterLink></li> -<li>shell操作docker</li> -<li>环境变量env</li> -</ul> -<h2 id="服务网关" tabindex="-1"><a class="header-anchor" href="#服务网关" aria-hidden="true">#</a> 服务网关</h2> -<h4 id="kong" tabindex="-1"><a class="header-anchor" href="#kong" aria-hidden="true">#</a> kong</h4> -<ul> -<li><RouterLink to="/api-gateway/kong/kong%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D.html">kong的的基本介绍</RouterLink></li> -<li><RouterLink to="/api-gateway/kong/%E5%9F%BA%E4%BA%8Edocker%E9%83%A8%E7%BD%B2kong%E7%BD%91%E5%85%B3%E6%9C%8D%E5%8A%A1.html">docker下kong的部署</RouterLink></li> -<li>docker-compose搭建kong集群</li> -<li>可视化管理界面介绍</li> -</ul> -<h4 id="konga" tabindex="-1"><a class="header-anchor" href="#konga" aria-hidden="true">#</a> konga</h4> -<ul> -<li>基本介绍与docker部署</li> -<li>简单使用</li> -<li>路由管理</li> -</ul> -<h4 id="kong-dashboard" tabindex="-1"><a class="header-anchor" href="#kong-dashboard" aria-hidden="true">#</a> kong-dashboard</h4> -<ul> -<li>docker简单部署</li> -<li>路由管理</li> -<li>插件介绍</li> -</ul> -<h2 id="服务注册" tabindex="-1"><a class="header-anchor" href="#服务注册" aria-hidden="true">#</a> 服务注册</h2> -<h4 id="apollo" tabindex="-1"><a class="header-anchor" href="#apollo" aria-hidden="true">#</a> Apollo</h4> -<blockquote> -<p>携程开发的配置中心经典项目,可集成多语言客户端,实现灰度部署,在分布式微服务的场景下抽离出服务配置,方便统一管理、发布</p> -</blockquote> -<h4 id="consul" tabindex="-1"><a class="header-anchor" href="#consul" aria-hidden="true">#</a> Consul</h4> -<blockquote> -<p>服务注册、发现,key-value键值对管理</p> -</blockquote> -<h4 id="nacos" tabindex="-1"><a class="header-anchor" href="#nacos" aria-hidden="true">#</a> Nacos</h4> -<blockquote> -<p>背靠国内一线互联网大厂——阿里巴巴,也是可适用于微服务下的配置管理,支持Java、Nodejs等主流语言,目前生态良好,技术支持表现一般,属于Apollo替代产品</p> -</blockquote> -<h2 id="消息中间件" tabindex="-1"><a class="header-anchor" href="#消息中间件" aria-hidden="true">#</a> 消息中间件</h2> -<blockquote> -<p>消息队列已经逐渐成为企业IT系统内部通信的核心手段。具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。</p> -<p>目前个人了解的有:RabbitMQ、Kafka、RocketMQ</p> -</blockquote> -<h4 id="rabbitmq" tabindex="-1"><a class="header-anchor" href="#rabbitmq" aria-hidden="true">#</a> RabbitMQ</h4> -<h4 id="kafka" tabindex="-1"><a class="header-anchor" href="#kafka" aria-hidden="true">#</a> kafka</h4> -<h4 id="rocketmq" tabindex="-1"><a class="header-anchor" href="#rocketmq" aria-hidden="true">#</a> RocketMQ</h4> -<h2 id="rpc框架" tabindex="-1"><a class="header-anchor" href="#rpc框架" aria-hidden="true">#</a> RPC框架</h2> -<h4 id="grpc" tabindex="-1"><a class="header-anchor" href="#grpc" aria-hidden="true">#</a> gRPC</h4> -<blockquote> -<p>gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统,tensorflow分布式与tensorflow serving底层通信都是是用的grpc。我自己基于JavaScript技术栈上较多的接触到gRPC,传送门:<a href="">基于js下各框架grpc的使用</a></p> -</blockquote> -<ul> -<li> -<p>nodejs下grpc的简单实用</p> -</li> -<li> -<p>grpc集成express框架</p> -</li> -<li> -<p>grpc集成koa框架</p> -</li> -<li> -<p>eggjs框架下grpc的线上部署</p> -</li> -<li> -<p>grpc插件开发示例</p> -</li> -</ul> -<h4 id="dubbo" tabindex="-1"><a class="header-anchor" href="#dubbo" aria-hidden="true">#</a> Dubbo</h4> -<blockquote> -<p>Alibaba开发的一个RPC框架,远程接口基于Java Interface, 依托于Spring框架(<strong>Java技术栈重点研究</strong>)</p> -</blockquote> -<h4 id="thrift" tabindex="-1"><a class="header-anchor" href="#thrift" aria-hidden="true">#</a> Thrift</h4> -<blockquote> -<p>Apache的一个项目(http://thrift.apache.org),前身是Facebook开发的一个RPC框架,采用thrift作为IDL (Interface description language)。</p> -</blockquote> -<h2 id="elk日志管理平台" tabindex="-1"><a class="header-anchor" href="#elk日志管理平台" aria-hidden="true">#</a> Elk日志管理平台</h2> -<blockquote> -<p>全链路日志</p> -</blockquote> -<ul> -<li><RouterLink to="/category/docs/elk/%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5%E4%B8%8E%E5%B8%B8%E7%94%A8%E6%9E%B6%E6%9E%84%E6%95%B4%E7%90%86.html">ELK基础概念与常用架构整理</RouterLink></li> -</ul> -<h4 id="elasticsearch" tabindex="-1"><a class="header-anchor" href="#elasticsearch" aria-hidden="true">#</a> ElasticSearch</h4> -<blockquote> -<p>数据存储</p> -</blockquote> -<h4 id="logstash" tabindex="-1"><a class="header-anchor" href="#logstash" aria-hidden="true">#</a> Logstash</h4> -<blockquote> -<p>数据收集</p> -</blockquote> -<h4 id="kibana" tabindex="-1"><a class="header-anchor" href="#kibana" aria-hidden="true">#</a> Kibana</h4> -<blockquote> -<p>数据展示</p> -</blockquote> -<h2 id="监控工具" tabindex="-1"><a class="header-anchor" href="#监控工具" aria-hidden="true">#</a> 监控工具</h2> -<blockquote> -<p>参考笔者线上平台:http://view.142vip.cn/grafana 账号/密码:test/123456 基于docker部署,由于是个人学生服务器,站点访问延迟较高</p> -<p>常用工具:promethus 、grafana、zabbix、lepus等</p> -</blockquote> -<h4 id="prometheus" tabindex="-1"><a class="header-anchor" href="#prometheus" aria-hidden="true">#</a> Prometheus</h4> -<h4 id="grafana" tabindex="-1"><a class="header-anchor" href="#grafana" aria-hidden="true">#</a> Grafana</h4> -<h4 id="zabbix" tabindex="-1"><a class="header-anchor" href="#zabbix" aria-hidden="true">#</a> Zabbix</h4> -<h4 id="lepus-天兔" tabindex="-1"><a class="header-anchor" href="#lepus-天兔" aria-hidden="true">#</a> lepus(天兔)</h4> -<h2 id="高可用架构" tabindex="-1"><a class="header-anchor" href="#高可用架构" aria-hidden="true">#</a> 高可用架构</h2> -<h4 id="mysql集群" tabindex="-1"><a class="header-anchor" href="#mysql集群" aria-hidden="true">#</a> MySQL集群</h4> -<h5 id="主从同步" tabindex="-1"><a class="header-anchor" href="#主从同步" aria-hidden="true">#</a> 主从同步</h5> -<blockquote> -<p>实现功能:主从服务器数据一致,低延迟、高并发</p> -</blockquote> -<ul> -<li>Binlog主从复制</li> -<li>GTID主从复制</li> -<li>主主复制</li> -</ul> -<h5 id="代理中间件" tabindex="-1"><a class="header-anchor" href="#代理中间件" aria-hidden="true">#</a> 代理中间件</h5> -<blockquote> -<p>实现功能:读写分离、分库分表、负载均衡、故障切换</p> -</blockquote> -<ul> -<li>Mycat</li> -<li>360Atlas</li> -</ul> -<h4 id="集群监控" tabindex="-1"><a class="header-anchor" href="#集群监控" aria-hidden="true">#</a> 集群监控</h4> -<blockquote> -<p>实现功能:实时监控、可视化数据显示、故障报警</p> -</blockquote> -<h5 id="prometheus-1" tabindex="-1"><a class="header-anchor" href="#prometheus-1" aria-hidden="true">#</a> Prometheus</h5> -<ul> -<li>监控MySQL集群</li> -<li>监控Mongo数据库</li> -<li>监控Node服务</li> -<li>监控linux服务器</li> -<li>监控redis集群</li> -</ul> -<h5 id="grafana-1" tabindex="-1"><a class="header-anchor" href="#grafana-1" aria-hidden="true">#</a> Grafana</h5> -<ul> -<li>基本安装部署</li> -<li>功能介绍和简单操作</li> -<li>可视化数据图形显示界面</li> -<li>常用模板</li> -</ul> -<h5 id="alter-manager" tabindex="-1"><a class="header-anchor" href="#alter-manager" aria-hidden="true">#</a> alter-manager</h5> -<ul> -<li>推送到邮箱</li> -<li>推送到钉钉、微信机器人</li> -<li>推送到自定义消息接口(webhook钩子)</li> -</ul> -<h4 id="压力测试" tabindex="-1"><a class="header-anchor" href="#压力测试" aria-hidden="true">#</a> 压力测试</h4> -<ul> -<li>jmeter</li> -</ul> -<h4 id="redis集群" tabindex="-1"><a class="header-anchor" href="#redis集群" aria-hidden="true">#</a> Redis集群</h4> -<blockquote> -<p>持续整理中...</p> -</blockquote> -<h5 id="简单主从模式" tabindex="-1"><a class="header-anchor" href="#简单主从模式" aria-hidden="true">#</a> 简单主从模式</h5> -<h4 id="哨兵模式" tabindex="-1"><a class="header-anchor" href="#哨兵模式" aria-hidden="true">#</a> 哨兵模式</h4> -<h5 id="cluster模式" tabindex="-1"><a class="header-anchor" href="#cluster模式" aria-hidden="true">#</a> cluster模式</h5> -<h2 id="网站搭建" tabindex="-1"><a class="header-anchor" href="#网站搭建" aria-hidden="true">#</a> 网站搭建</h2> -<blockquote> -<p>从大二开始搭建个人网站:http://www.142vip.cn 起初非常简陋,工作之后计划进行第三版迭代,一直抽空佛系谢谢, 目前在重构中..</p> -</blockquote> -<ul> -<li>最初的梦想</li> -<li>舍弃Java,我的重构之路</li> -<li>网站正规化,Nginx配置SSL证书</li> -<li>小小网站却耗费三台学生服务器?</li> -</ul> -<h2 id="书籍整理" tabindex="-1"><a class="header-anchor" href="#书籍整理" aria-hidden="true">#</a> 书籍整理</h2> -<h3 id="技术类" tabindex="-1"><a class="header-anchor" href="#技术类" aria-hidden="true">#</a> 技术类</h3> -<blockquote> -<p>待整理</p> -</blockquote> -<h4 id="狼书-了不起的node-js" tabindex="-1"><a class="header-anchor" href="#狼书-了不起的node-js" aria-hidden="true">#</a> <RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/">狼书 - 了不起的Node.js</RouterLink></h4> -<ul> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%B8%80%E7%AB%A0%20Node.js%E5%88%9D%E8%AF%86.html">第一章 Node.js初识</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20Nodejs%E5%AE%89%E8%A3%85%E4%B8%8E%E5%85%A5%E9%97%A8.html">第二章 Nodejs安装与入门</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%9B%B4%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js.html">第三章 更了不起的Node.js</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%9B%B4%E5%A5%BD%E7%9A%84Node.js.html">第四章 更好的Node.js</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%BA%94%E7%AB%A0%20Node.js%E6%98%AF%E5%A6%82%E4%BD%95%E6%89%A7%E8%A1%8C%E7%9A%84.html">第五章 Node.js是如何执行的</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E6%A8%A1%E5%9D%97%E4%B8%8E%E6%A0%B8%E5%BF%83.html">第六章 模块与核心</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E5%BC%82%E6%AD%A5%E5%86%99%E6%B3%95%E4%B8%8E%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6.html">第七章 异步写法与流程控制</RouterLink></p> -</li> -<li> -<p><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E5%85%A8%E9%83%A8%E7%AC%94%E8%AE%B0.html">全部笔记</RouterLink></p> -</li> -</ul> -<h4 id="es6标准入门——阮一峰" tabindex="-1"><a class="header-anchor" href="#es6标准入门——阮一峰" aria-hidden="true">#</a> <a href="">ES6标准入门——阮一峰</a></h4> -<blockquote> -<p>本书内容较多,很多基础细节都有说明,难度中等、适合入门,书中很多例子我也摘抄了很多,主要是我认为重要的,笔记按照自己学习逻辑整理的,请君慢用</p> -</blockquote> -<ul> -<li><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ES6%E6%A0%87%E5%87%86%E5%85%A5%E9%97%A8/1.ECMAScript%206%20%E7%AE%80%E4%BB%8B.html">1.ECMAScript 6 简介</RouterLink></li> -<li><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ES6%E6%A0%87%E5%87%86%E5%85%A5%E9%97%A8/2.let%E5%92%8Cconst%E7%9A%84%E5%91%BD%E4%BB%A4.html">2.let和const命令</RouterLink></li> -<li><RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ES6%E6%A0%87%E5%87%86%E5%85%A5%E9%97%A8/3.%E5%8F%98%E9%87%8F%E7%9A%84%E8%A7%A3%E6%9E%84%E8%B5%8B%E5%80%BC.html">3.变量的解构赋值</RouterLink></li> -<li><a href="">4.字符串详解</a></li> -</ul> -<h3 id="非技术类" tabindex="-1"><a class="header-anchor" href="#非技术类" aria-hidden="true">#</a> 非技术类</h3> -<blockquote> -<p>主要是跟计算机无关的一些书,在看完之后,会选择性的进行思维导图、经典词句整理,也可能添加个人思考</p> -</blockquote> -<h4 id="你好孤独-陈果" tabindex="-1"><a class="header-anchor" href="#你好孤独-陈果" aria-hidden="true">#</a> <RouterLink to="/category/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%A5%BD%E7%9A%84%E5%AD%A4%E7%8B%AC-%E9%99%88%E6%9E%9C/">你好孤独 - 陈果</RouterLink></h4> -<h2 id="公众号汇总" tabindex="-1"><a class="header-anchor" href="#公众号汇总" aria-hidden="true">#</a> 公众号汇总</h2> -<h3 id="_2020年" tabindex="-1"><a class="header-anchor" href="#_2020年" aria-hidden="true">#</a> 2020年</h3> -<h4 id="_7月" tabindex="-1"><a class="header-anchor" href="#_7月" aria-hidden="true">#</a> 7月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483659&idx=1&sn=ac7b633a45ac06d388e0698163a2543e&chksm=fcdfb887cba8319151aedfa80c5b59d130838af81fe51c76e5c4926f82f4937b51c8c0c1470e&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-26】微信公众号我来了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483760&idx=1&sn=30a9fa2a051079c5330039615950c34d&chksm=fcdfb8fccba831ea64644be501ecca3cea5846f16367faed9c84b44a30d9b6dc30456dae6548&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-27】介绍一下,我在B站<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483762&idx=1&sn=e9ea759f1c1589881cc3bd9cabddb70a&chksm=fcdfb8fecba831e8c4635a4cefd302977071ed11a4dda6161cf9ad8458865297194f87cb013a&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-28】五年了,我终于换了人生中的第一台MacBookPro<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483770&idx=1&sn=6b760873a814f4e18baab415bee3d863&chksm=fcdfb8f6cba831e00802de653ff6723a0bb169a93fe3a6a9762ee62d75d8cd88409268db9047&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-29】工作中第一次被喷,我到底是如何应对的?<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483778&idx=1&sn=3d9f623c58d595f75d7092783a6c5abe&chksm=fcdfb80ecba83118e76de1ed88a5be51229e4145182aee6e0bcc13e4697707cf9f4609d8799d&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-31】CSDN关注100了,就这????<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_8月" tabindex="-1"><a class="header-anchor" href="#_8月" aria-hidden="true">#</a> 8月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483790&idx=1&sn=76e13ac79ad498309542c9f41878bb1c&chksm=fcdfb802cba8311456ea9ff3309c4354055022cd0056b13c11fac44252231550e17a03f26f29&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-08-01】旧友相见,甚是怀念<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483805&idx=1&sn=4da4e0d3a2912aee146248c1d8f7f96f&chksm=fcdfb811cba83107fd8f08d3e35af7c72bf7d908d577ad83e45d80b0e9d1bbdbf16b1f169d64&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-08-03】JavaScript基础介绍和快速入门<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_9月" tabindex="-1"><a class="header-anchor" href="#_9月" aria-hidden="true">#</a> 9月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484600&idx=1&sn=489aa1bd12487b0bf8f2a7694f4ca1aa&chksm=fcdfbd34cba83422f0afee027747d9e95773e093fa3a24225c2729029c4392bf42043964782f&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-01】Redis的简单安装和部署 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484600&idx=2&sn=a9962c6ca3a5eddd085bcd15617f64d9&chksm=fcdfbd34cba83422b987020a858b7cf31bfde6033642d697d5a00ad9ed618f3cf14deb207d67&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-01】就很像?? <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484702&idx=1&sn=6e3e862153755d9e61f5f4ebf220381d&chksm=fcdfbc92cba835844e8b6fd37d86a34ccf83342895f448c88ba5b62db974eb536a8e74a121aa&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-03】shell编程基础整理 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484702&idx=2&sn=c7589eecbe58ff8939f72c0ff0bf567d&chksm=fcdfbc92cba83584b03dfeea7290606ce8249b0c3105b0b3b95a9087c77e3b1c7f863d8e30f9&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-03】大学四年建站用过的云服务器都在这里了 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484711&idx=1&sn=bf362439ccfad04da53ce65c824a988d&chksm=fcdfbcabcba835bddc43c40fd3a454793adf7849a5d5bb356825d481b82ae3e58a749859502c&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-04】面试复盘和思考 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484759&idx=1&sn=e0f8a7a70ddede75d94b202ddc6106d6&chksm=fcdfbcdbcba835cd2138658d750f7e09a820b34daf4624f253a21a11b5de56635d35e4c0df19&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-06】朋友是“无用”的,不是你瞧不起我,就是我瞧不起你 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484759&idx=2&sn=ade86739c94f99f944a3d387bc7e13ef&chksm=fcdfbcdbcba835cd192c3b7b7eeea8f5dbb16b2b2fa58b6e2094184f5aa3341927a6d1fad6f8&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-06】GitHub简单使用 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484771&idx=1&sn=6ae4c6e8d333b0e1aa5cd1aee161d9b8&chksm=fcdfbcefcba835f94e3c0abc189477f241f675f38a63eb03bd320447e89da39cb08b72038ba3&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-07】MySQL日志类型把我难哭了,你学废了吗?<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484783&idx=1&sn=b9e82a2c2b04b7050d0659085af537ef&chksm=fcdfbce3cba835f5e692f5ffbb16505dbf3b5ccc9bb0bdf4b3f467629b293d0e0ce3086ec8dc&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-11】向各位汇报这周状态,再也不敢鸽了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484783&idx=1&sn=b9e82a2c2b04b7050d0659085af537ef&chksm=fcdfbce3cba835f5e692f5ffbb16505dbf3b5ccc9bb0bdf4b3f467629b293d0e0ce3086ec8dc&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-11】向各位汇报这周状态,再也不敢鸽了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484784&idx=1&sn=ae73f1f4e53b622039a75ec41cabe378&chksm=fcdfbcfccba835eafefe304913e4078cf8dfac22f62fd9d686b307bbdf46d147016f5e876e05&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-12】向各位汇报,再也不敢鸽了,人生处处有惊喜<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=1&sn=10d26a600112ec4f95b3b3f470955744&chksm=fcdfbc03cba83515b07f0ae6cee791d1fb5fd619364cff3a17a4deab91333f0a6277b09a66a9&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-13】来来来,无厘头技术(水)文,各种尬。简简单单评价一下<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=2&sn=94a6455ed6b17fa5b27e96358e935803&chksm=fcdfbc03cba83515d13dcfc2dea2445085a34ff4360e0a367fd914bb04bc6ba18a780a0cd2d2&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-13】基础Brew和Tree的安装实录<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=3&sn=38a289efffda9510b5ff04c5bed0663e&chksm=fcdfbc03cba835154c888b9d7f86eac85c250eefb9d053687173274373f2f8d7b19fc307e76a&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-13】PM2进程管理,给我学!<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484823&idx=1&sn=d41bb8da02585cf9ea8d0b3ef27e3dbb&chksm=fcdfbc1bcba8350d84ba2f01eaf187cbaa2d4cf5a9078beb1f2fafe94edb0126c82595ed8191&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-14】数据结构,一定要学废了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484837&idx=1&sn=7f0de3eeea3fc6ee299587704f5c44cd&chksm=fcdfbc29cba8353fd894582da7ae2c93b5920c4dbb1e197b011a817dc0962e317842a32d5560&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-16】ELK基础概念与常用架构整理<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484850&idx=1&sn=7af55ef3a7d843d9c43de6d6c7911da3&chksm=fcdfbc3ecba835287b2c644cda606454a713d370fbd7d14714b22a04277f7a7784b96b8b277e&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-17】分享书上一段话,问一个问题<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484850&idx=2&sn=c59839c677d7c9652a09d1f8c70ef8d6&chksm=fcdfbc3ecba83528cf8271a2615129340a6f11954b6d9396160d0fb2c41593253d5e3510a031&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-17】看源码遇到的三个知识点,一个也没懂<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484865&idx=2&sn=63e6b669341217135013816464dd5bd9&chksm=fcdfbc4dcba8355b4de0f712047709425a35fa3b122378b31f0e4db3afb82dfd38872862aab4&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-20】express()函数整理<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484865&idx=1&sn=e39e3547da49f40e1b64deadf9a9cfef&chksm=fcdfbc4dcba8355bfa9c8b9531a463fc652b764064528dd6c243f47a157b20e017bad3f410f4&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-22】入秋了,安好<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484897&idx=1&sn=b1073522cfd3ce6ebbe85e85ad4e35e0&chksm=fcdfbc6dcba8357bdb212c9db1378a045d0dcfd95b79ed05688180f05d2b391f9b724d0d752f&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-22】Nginx安装详解,我服务器上也是这样的<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484897&idx=2&sn=34c61ed01c6522d2861be3342ec12ad5&chksm=fcdfbc6dcba8357b76eb0fe6c502d932def6cd232297b010f9b2f9a1fca35c38df77dacce7f2&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-22】被攻击的一天<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484929&idx=1&sn=394783dd2bfd65da24ae6dcb89d69ec6&chksm=fcdfbf8dcba8369b926b7083bbe3515aa5857f7589acc3f9d6d4987c67539a76dbd6e3cb70a1&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-26】跟父亲视频的一个半小时,聊到了我,也聊到了Ta<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_10月" tabindex="-1"><a class="header-anchor" href="#_10月" aria-hidden="true">#</a> 10月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484943&idx=1&sn=ad37db87dc40f381fd18cc828e492384&chksm=fcdfbf83cba8369598fc2773b63df235a9719b43749e7daab753c621fef5af4fba054dbb46ea&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-07】时间太快,溜了溜了,杭州见<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484951&idx=1&sn=edddf3d6c8f3fc6dd1d14063b536c732&chksm=fcdfbf9bcba8368d81ddffcbd258f7e4b7fb573d2a8963859e1b156e8a5f5d81f5629c49be6e&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-14】写不了代码就不写嘛<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484968&idx=1&sn=d37960ed81044fbf314440af85049d65&chksm=fcdfbfa4cba836b25082535910f7137d1513d834d54fbfadf48a433b29511ccf4d532f19b88a&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-18】我不行了,这号关注量男女7:3 还怎么相亲嘛?<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484988&idx=1&sn=947c487946fa3574d33e9c6861a1ee28&chksm=fcdfbfb0cba836a626d2efa904a5177c2e0916c381b26c89b6dcfc610a380b906d4480f7cc9b&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-26】悄悄接你下班,陪你回家<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_11月" tabindex="-1"><a class="header-anchor" href="#_11月" aria-hidden="true">#</a> 11月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485002&idx=1&sn=3760eba58f7ded433b71bec48b89a681&chksm=fcdfbfc6cba836d0b7db1f2aa5a4a884f68f8ce20a59aa44b4ac46c59eb4dd1c233079241a4a&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-01】11月,你好<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485042&idx=1&sn=181ae5062c31ee7931390607b6f10358&chksm=fcdfbffecba836e8275c849007470db6964f7cd675af59fe73c94369334d17d4840e8c0413d5&token=898438314&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-15】她来了她来了,她带着剪了三遍的视频来了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485053&idx=1&sn=ed2fe0de87b70781cdb7755ef4726340&chksm=fcdfbff1cba836e7165dc53722aaf96ef38d8f43cfadadcb4695d8ff430ea64619caada81cfa&token=1939941957&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-18】陪我一路的小姐姐,谢谢啦~ 我大意了呀,没有闪<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485066&idx=1&sn=1d357917f548a6d977af96c6582db527&chksm=fcdfbf06cba836103152f7a3fdfbf97c1be2472a84f824cbddd532c15aefe14c71b3b076233f&token=831506871&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-30】11月的尾巴,12月你好<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_12月" tabindex="-1"><a class="header-anchor" href="#_12月" aria-hidden="true">#</a> 12月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485080&idx=2&sn=bdc551f2e9bf54dc01881979339af8ad&chksm=fcdfbf14cba836022a05854547cbca03b5a08b912a0e0f195d4856d6b53ecd78aee2f167b515&token=1581389686&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-06】周末小记——忆旧友、吃火锅,也会感慨<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485100&idx=1&sn=e7c0c41229d51ebfab2939deb1751672&chksm=fcdfbf20cba836364da35ab5acfed076876aae486126bc1c41cdd2502cc89a41cbde7c645610&token=1054397108&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-10】上火、牙疼,也要砍程序媛一刀<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485136&idx=1&sn=4619fb835e6d57e106ab01116012662a&chksm=fcdfbf5ccba8364aecddf14d11ed8ba36f38050b83b30b8d46e10f86b164aab05322b8455b36&token=755050934&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-17】今晚不蹦迪,来聊一聊个人项目的接口返回<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485180&idx=1&sn=15ab9be3e15130103f26c919cbe0b605&chksm=fcdfbf70cba83666d287acc35485d02ddf67bacad6ea46d9ef04521f9f429fcb015d371c918e&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-20】事情,从英吉利海岸的那杯卡布奇诺美式咖啡说起<ExternalLinkIcon/></a></p> -</li> -</ul> -<h3 id="_2021年" tabindex="-1"><a class="header-anchor" href="#_2021年" aria-hidden="true">#</a> 2021年</h3> -<h4 id="_1月" tabindex="-1"><a class="header-anchor" href="#_1月" aria-hidden="true">#</a> 1月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485228&idx=1&sn=1c30866a209af2a5eb927fd7bd63cc8b&chksm=fcdfbea0cba837b6d4cf9865b72a6a1553c4d9b6a6cce369bb09f66730ab37ec649071e7ab7c&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-06】谁在看小王子呀~<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485249&idx=1&sn=dadf2a6dbed1879bbd98c62491436a9c&chksm=fcdfbecdcba837db5c11b8023ffa7ad6cf5a47c03027a0029604a50d0a77c75908efc05af39a&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-15】2020小结,没事就点点看看呗,反正小目标都没完成<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485258&idx=1&sn=fb71007a5feed8e18674be27b1c749ab&chksm=fcdfbec6cba837d099e90a5f45781ee8cac474388e25ad9383a4fbc05fdb16a8e1377265c018&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-17】搞波大的,浅谈深拷贝——文末有彩蛋<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485277&idx=1&sn=9eb7c3cef21ace2cc5853e382f2bb03f&chksm=fcdfbed1cba837c7839f3b57836f43b3425c8b5a7888f543bf4a1dd8b39cd82ed7d51a24a685&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-18】到底该如何发布Npm插件,常用指令在这里<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485291&idx=1&sn=19f13df8131a9f662973f2d9240c1eab&chksm=fcdfbee7cba837f180d8ad30735cd61e6c73fe195e63d46046bb24f80e1536aa0a585c3e1015&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-20】好用的AntDocs,也来学着用一下,基本过程整理<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485318&idx=1&sn=6ae5fc9f1cf994818ff89d53a926761e&chksm=fcdfbe0acba8371c9d0025008084857cf14c52b01dfb1b9460d3388ba543c36da2abcbf90216&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-27】【持续更新】从查找算法开始数据结构入门,大家都在掘金等你<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485341&idx=1&sn=fc493c28ab138056567e916b769ddbf2&chksm=fcdfbe11cba8370793e8e0d71e7766f4e1e7f3e8672921d6b98757f7d7b271b290f3edc65d6f&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-30】ORM框架入门之Sequelize,我快翻译不动了<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_2月" tabindex="-1"><a class="header-anchor" href="#_2月" aria-hidden="true">#</a> 2月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485376&idx=1&sn=049a5df5cb97786e80aded38a1bf3732&chksm=fcdfbe4ccba8375a52cb8d7077836216e5f5f41ee9453aebf524eb0a5d8a5db48cbabc11f3e4&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-02-07】被妹妹支配的一周,晚上差点连家都回不去..<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485404&idx=1&sn=276100858df23daf987dbc68997477df&chksm=fcdfbe50cba837460079fc9ab414754a49668f82dc0f6a5a41ec320d3e5dd77c1a8c271e061b&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-02-11】【新年快乐】程序员的2020,就这样悄咪咪地溜走了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485420&idx=1&sn=26c0e3690363af5dddd805ae417eeee9&chksm=fcdfbe60cba8377645e44333ccbe35147b9844578008e5699aba62b82c12fc03634e2d68781c&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-02-13】抢红包、拼手气来啦,之前答应的抽奖变成新年红包啦~<ExternalLinkIcon/></a></p> -</li> -</ul> -<h2 id="赞赏支持" tabindex="-1"><a class="header-anchor" href="#赞赏支持" aria-hidden="true">#</a> 赞赏支持</h2> -<blockquote> -<p>相逢不用忙归去,明日黄花蝶也愁;若系列文章对你有帮助,不如请作者喝一杯伏见桃山...</p> -<p><strong>赞赏过的一定要扫下方右侧微信跟我说呀!!!!!!</strong></p> -</blockquote> -<p><a name="wechat"></a></p> -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/weChatDonate.jpg" width="300" height="300" style="border-radius:10px;" /> -</div> -<h2 id="联系我" tabindex="-1"><a class="header-anchor" href="#联系我" aria-hidden="true">#</a> 联系我</h2> -<blockquote> -<p>对仓库有任何问题或建议,欢迎微信“骚扰”,商务合作请备注!</p> -</blockquote> -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/wechat.jpg" width="300" height="300" style="border-radius:10px;"/> -</div> -<h2 id="鸣谢" tabindex="-1"><a class="header-anchor" href="#鸣谢" aria-hidden="true">#</a> 鸣谢</h2> -<p>以下排名不分先后!(<a href="">详细统计</a>)</p> -<div> - <a href="https://github.com/ChiefPing" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/34122068?s=460&v=4" width="50px" style="brder-radius:5px;"/> - </a> <a href="https://github.com/xiaoliuxin" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/60652527?s=460&v=4" style="border-radius:5px;" width="50px"/> - </a> -</div> -<h2 id="赞助列表" tabindex="-1"><a class="header-anchor" href="#赞助列表" aria-hidden="true">#</a> 赞助列表</h2> -<p>以下排名不分先后!</p> -<h2 id="公众号" tabindex="-1"><a class="header-anchor" href="#公众号" aria-hidden="true">#</a> 公众号</h2> -<p>如果大家想要实时关注我更新的文章以及我的日常的话,可以关注我的公众号,基本每天都会更新技术和各种吹水文章,就当做是记录心情、成长的地方吧</p> -<p><a name="gzh"></a></p> -<div> - <img src="https://cdn.142vip.cn/gzh.png" style="border-radius:10px;"> -</div></template> diff --git a/docs/.vuepress/.temp/pages/pages/bdad06/index.html.js b/docs/.vuepress/.temp/pages/pages/bdad06/index.html.js deleted file mode 100644 index c9c86a9..0000000 --- a/docs/.vuepress/.temp/pages/pages/bdad06/index.html.js +++ /dev/null @@ -1,76 +0,0 @@ -export const data = { - "key": "v-7e68f740", - "path": "/pages/bdad06/", - "title": "更新日志", - "lang": "en-US", - "frontmatter": { - "title": "更新日志", - "sidebarDepth": 0, - "date": "2021-02-14T20:52:54.000Z", - "permalink": "/pages/bdad06/", - "categories": [ - "category" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "基本说明", - "slug": "基本说明", - "children": [] - }, - { - "level": 2, - "title": "提交记录", - "slug": "提交记录", - "children": [] - }, - { - "level": 2, - "title": "版本记录", - "slug": "版本记录", - "children": [ - { - "level": 3, - "title": "0.1.2", - "slug": "_0-1-2", - "children": [] - }, - { - "level": 3, - "title": "0.1.1", - "slug": "_0-1-1", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 3 - } - ] - }, - "filePathRelative": "category/update_logs.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/bdad06/index.html.vue b/docs/.vuepress/.temp/pages/pages/bdad06/index.html.vue deleted file mode 100644 index b23f944..0000000 --- a/docs/.vuepress/.temp/pages/pages/bdad06/index.html.vue +++ /dev/null @@ -1,43 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-02-14 20:52:54 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-02-14 22:37:05 ---> -<h1 id="" tabindex="-1"><a class="header-anchor" href="#" aria-hidden="true">#</a> </h1> -<h2 id="基本说明" tabindex="-1"><a class="header-anchor" href="#基本说明" aria-hidden="true">#</a> 基本说明</h2> -<ul> -<li> -<a-tag color="green">优化</a-tag>表示优化、已完成、可正式使用状态。 -</li> -<li> -<a-tag color="purple">紫色</a-tag>表示修复、可测试状态。 -</li> -<li> -<a-tag color="red">红色</a-tag>红色表示出现异常、告警、错误状态。 -</li> -<li> -<a-tag color="orange">橙色</a-tag>表示新增、正在进行、默认状态。 -</li> -</ul> -<h2 id="提交记录" tabindex="-1"><a class="header-anchor" href="#提交记录" aria-hidden="true">#</a> 提交记录</h2> -<p>以下为个人Github账号<strong>Rong姐姐好可爱</strong>所有仓库代码提交记录</p> -<p><img src="https://ghchart.rshah.org/mmdapl" alt=""></p> -<h2 id="版本记录" tabindex="-1"><a class="header-anchor" href="#版本记录" aria-hidden="true">#</a> 版本记录</h2> -<h3 id="_0-1-2" tabindex="-1"><a class="header-anchor" href="#_0-1-2" aria-hidden="true">#</a> 0.1.2</h3> -<p><strong>2020-11-01</strong></p> -<ul> -<li>Egg.js框架基础整理完成</li> -<li>基于VuePress进行md文档修订,规整文档样式及模板</li> -</ul> -<h3 id="_0-1-1" tabindex="-1"><a class="header-anchor" href="#_0-1-1" aria-hidden="true">#</a> 0.1.1</h3> -<p><strong>2020-10-09</strong></p> -<ul> -<li> -<a-tag color="red">2332</a-tag>第一篇egg相关文档 -</li> -<li>初次接触VuePress</li> -</ul> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/c12319/index.html.js b/docs/.vuepress/.temp/pages/pages/c12319/index.html.js deleted file mode 100644 index 3ffdec5..0000000 --- a/docs/.vuepress/.temp/pages/pages/c12319/index.html.js +++ /dev/null @@ -1,50 +0,0 @@ -export const data = { - "key": "v-599b7814", - "path": "/pages/c12319/", - "title": "Readme", - "lang": "en-US", - "frontmatter": { - "title": "Readme", - "date": "2021-03-08T10:09:25.000Z", - "permalink": "/pages/c12319/", - "categories": [ - "ComputerComposePrinciple" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "当前状态", - "slug": "当前状态", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "CCP/Readme.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/c12319/index.html.vue b/docs/.vuepress/.temp/pages/pages/c12319/index.html.vue deleted file mode 100644 index 6523994..0000000 --- a/docs/.vuepress/.temp/pages/pages/c12319/index.html.vue +++ /dev/null @@ -1,11 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:09:25 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-08 10:09:52 ---> -<h2 id="当前状态" tabindex="-1"><a class="header-anchor" href="#当前状态" aria-hidden="true">#</a> 当前状态</h2> -<p>doing</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.js b/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.js deleted file mode 100644 index db80dd7..0000000 --- a/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.js +++ /dev/null @@ -1,220 +0,0 @@ -export const data = { - "key": "v-5c57558c", - "path": "/pages/c1bec1/", - "title": "", - "lang": "en-US", - "frontmatter": { - "title": null, - "date": "2021-03-07T23:04:24.000Z", - "permalink": "/pages/c1bec1/", - "categories": [ - "DataStructure" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "写最前面", - "slug": "写最前面", - "children": [] - }, - { - "level": 2, - "title": "关于作者", - "slug": "关于作者", - "children": [] - }, - { - "level": 2, - "title": "思维导图", - "slug": "思维导图", - "children": [] - }, - { - "level": 2, - "title": "日常推荐", - "slug": "日常推荐", - "children": [] - }, - { - "level": 2, - "title": "前端", - "slug": "前端", - "children": [] - }, - { - "level": 2, - "title": "", - "slug": "-1", - "children": [] - }, - { - "level": 2, - "title": "后端【Node】", - "slug": "后端【node】", - "children": [] - }, - { - "level": 2, - "title": "算法", - "slug": "算法", - "children": [] - }, - { - "level": 2, - "title": "数据库", - "slug": "数据库", - "children": [] - }, - { - "level": 2, - "title": "服务部署", - "slug": "服务部署", - "children": [] - }, - { - "level": 2, - "title": "服务网关", - "slug": "服务网关", - "children": [] - }, - { - "level": 2, - "title": "服务注册", - "slug": "服务注册", - "children": [] - }, - { - "level": 2, - "title": "消息中间件", - "slug": "消息中间件", - "children": [] - }, - { - "level": 2, - "title": "RPC框架", - "slug": "rpc框架", - "children": [] - }, - { - "level": 2, - "title": "Elk日志管理平台", - "slug": "elk日志管理平台", - "children": [] - }, - { - "level": 2, - "title": "监控工具", - "slug": "监控工具", - "children": [] - }, - { - "level": 2, - "title": "高可用架构", - "slug": "高可用架构", - "children": [] - }, - { - "level": 2, - "title": "网站搭建", - "slug": "网站搭建", - "children": [] - }, - { - "level": 2, - "title": "书籍整理", - "slug": "书籍整理", - "children": [ - { - "level": 3, - "title": "技术类", - "slug": "技术类", - "children": [] - }, - { - "level": 3, - "title": "非技术类", - "slug": "非技术类", - "children": [] - } - ] - }, - { - "level": 2, - "title": "公众号汇总", - "slug": "公众号汇总", - "children": [ - { - "level": 3, - "title": "2020年", - "slug": "_2020年", - "children": [] - }, - { - "level": 3, - "title": "2021年", - "slug": "_2021年", - "children": [] - } - ] - }, - { - "level": 2, - "title": "赞赏支持", - "slug": "赞赏支持", - "children": [] - }, - { - "level": 2, - "title": "联系我", - "slug": "联系我", - "children": [] - }, - { - "level": 2, - "title": "鸣谢", - "slug": "鸣谢", - "children": [] - }, - { - "level": 2, - "title": "赞助列表", - "slug": "赞助列表", - "children": [] - }, - { - "level": 2, - "title": "公众号", - "slug": "公众号", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/README11.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.vue b/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.vue deleted file mode 100644 index 64c94e2..0000000 --- a/docs/.vuepress/.temp/pages/pages/c1bec1/index.html.vue +++ /dev/null @@ -1,839 +0,0 @@ -<template><h1 id="" tabindex="-1"><a class="header-anchor" href="#" aria-hidden="true">#</a> </h1> -<p align="center"> - <img src="https://cdn.142vip.cn/article-notes/img/image-20200605224832237.png"> -</p> -<p align="center"> - <a href="#gzh" target="_blank"><img src="https://img.shields.io/badge/WeChat-公众号-5wd.svg"></a> -<a href="#wechat" target="_blank"><img src="https://img.shields.io/badge/WeChat-微信-yellow.svg"></a> -<a href="https://space.bilibili.com/350937042" target="_blank"><img src="https://img.shields.io/badge/Bilibili-哔哩哔哩-green.svg"></a> -<a href="https://142vip.cn" target="_blank"><img src="https://img.shields.io/badge/142vip-网站-orange.svg"></a> -<a href="https://blog.142vip.cn" target="_blank"><img src="https://img.shields.io/badge/blog-博客-blue.svg"></a> -<a href="https://github.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/github-Github-9ac.svg"></a> -<a href="https://gitee.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/gitee-码云-4ed.svg"></a> -<a href="https://blog.csdn.net/Mmdapl" target="_blank"><img src="https://img.shields.io/badge/csdn-CSDN-8ea.svg"></a> -<a href="https://juejin.im/user/448256476724807" target="_blank"><img src="https://img.shields.io/badge/JueJin-掘金-75c.svg"></a> -</p> -<div align="center" style="font-size:20px"> - <a href="https://gitee.com/mmdapl/JavaScriptCollection" target="_blank">码云版</a> - <!-- || - <a href="readme-wechat.md" target="_blank">微信版</a> --> -</div> -<h2 id="写最前面" tabindex="-1"><a class="header-anchor" href="#写最前面" aria-hidden="true">#</a> 写最前面</h2> -<blockquote> -<p>这里是日常工作、学习、生活中总结的各类文章笔记,主要涉及开发技术总结记录,偶尔也会感慨万千,水一些无关技术的文章;若发现博客外链不能访问则可能博客设置修改过,请直接访问博客;所有内容会选择性的发表于<strong>微信公众号、个人博客、掘金、CSDN ,实际内容以本仓库排版、校对为主。</strong> 也会不定时同步到 <strong>码云</strong> 。 -<strong>以下内容没有链接的代表尚未完成,大家善用快捷键Ctrl+F</strong></p> -<p>创建时间:2020年2月14日</p> -</blockquote> -<h2 id="关于作者" tabindex="-1"><a class="header-anchor" href="#关于作者" aria-hidden="true">#</a> 关于作者</h2> -<ul> -<li><img src="https://cdn.142vip.cn/article-notes/img/original.png" width="36" height="26" align="left" /><a href="http://blog.142vip.cn/s/projects" target="_blank" rel="noopener noreferrer">个人项目整理<ExternalLinkIcon/></a></li> -<li><img src="https://cdn.142vip.cn/article-notes/img/original.png" width="36" height="26" align="left" /><a href="">自我介绍</a></li> -</ul> -<h2 id="思维导图" tabindex="-1"><a class="header-anchor" href="#思维导图" aria-hidden="true">#</a> 思维导图</h2> -<blockquote> -<p>内容同步与文档,可以结合思维导图对文档进行有效学习.相关目录的xmind文件为思维导图原文件</p> -</blockquote> -<h2 id="日常推荐" tabindex="-1"><a class="header-anchor" href="#日常推荐" aria-hidden="true">#</a> 日常推荐</h2> -<ul> -<li><RouterLink to="/DS/docs/recommend/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A8%E8%8D%90.html">云服务器推荐</RouterLink></li> -<li><RouterLink to="/DS/docs/recommend/%E5%AD%A6%E4%B9%A0%E7%BD%91%E7%AB%99%E3%80%81%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7.html">学习网站、使用工具</RouterLink></li> -<li><RouterLink to="/DS/docs/recommend/%E5%80%BC%E5%BE%97%E7%BB%86%E8%AF%BB%E7%9A%84%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0%E6%8E%A8%E8%8D%90.html">值得细读的技术文章推荐</RouterLink></li> -</ul> -<h1 id="文章笔记" tabindex="-1"><a class="header-anchor" href="#文章笔记" aria-hidden="true">#</a> 文章笔记</h1> -<p><strong>注:无高亮有效访问链接的待完成/同步</strong></p> -<h2 id="前端" tabindex="-1"><a class="header-anchor" href="#前端" aria-hidden="true">#</a> 前端</h2> -<blockquote> -<p>前端技术百花齐放、层出不穷,个人认为要注重广度,学会看官方文档熟练操作即可;</p> -</blockquote> -<h4 id="css" tabindex="-1"><a class="header-anchor" href="#css" aria-hidden="true">#</a> CSS</h4> -<blockquote> -<p>依赖W3CSchool文档和日常整理,主要是对CSS常用操作和基础属性进行整理总结。不会过多深入</p> -</blockquote> -<ul> -<li> -<p><RouterLink to="/DS/docs/css/CSS%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.html">CSS开发规范</RouterLink></p> -</li> -<li> -<p>样式属性</p> -</li> -<li> -<p>页面布局</p> -</li> -<li> -<p>移动端适配</p> -</li> -</ul> -<h5 id="基础教程" tabindex="-1"><a class="header-anchor" href="#基础教程" aria-hidden="true">#</a> <a href="docs/css/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B">基础教程</a></h5> -<h2 id="-1" tabindex="-1"><a class="header-anchor" href="#-1" aria-hidden="true">#</a> </h2> -<h4 id="javascript" tabindex="-1"><a class="header-anchor" href="#javascript" aria-hidden="true">#</a> JavaScript</h4> -<blockquote> -<p><strong>本级目录下的JavaScript内容没有发表到<a href="http://blog.142vip.cn" target="_blank" rel="noopener noreferrer">博客<ExternalLinkIcon/></a>上,建议对照<RouterLink to="/DS/docs/javascript/">脑图</RouterLink>在<a href="javascript">JavaScript主目录</a>下学习</strong>,依赖官方文档及自身对JavaScript语言的初步了解,进行的关于JavaScript知识整理,主要目的是复习基础概念、了解新特性、熟练ES6/7操作;整体相对来说由易到难,方便后续查阅学习~</p> -</blockquote> -<h5 id="快速入门" tabindex="-1"><a class="header-anchor" href="#快速入门" aria-hidden="true">#</a> 快速入门</h5> -<ul> -<li><RouterLink to="/DS/docs/javascript/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/javascript%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D.html">简单介绍</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/javascript%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8.html">快速了解</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/JavaScript%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.html">JavasScript开发规范</RouterLink></li> -</ul> -<h5 id="基础教程-1" tabindex="-1"><a class="header-anchor" href="#基础教程-1" aria-hidden="true">#</a> 基础教程</h5> -<ul> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E8%AF%AD%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.html">语法与数据结构</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E5%BE%AA%E7%8E%AF%E4%B8%8E%E8%BF%AD%E4%BB%A3.html">循环与迭代</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E4%B8%8E%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86.html">流程控制与错误处理</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C%E8%BF%90%E7%AE%97%E7%AC%A6.html">表达式和运算符</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E5%87%BD%E6%95%B0.html">函数和方法</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E6%95%B0%E5%AD%97%E5%92%8C%E6%97%A5%E6%9C%9F.html">数字和日期</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E5%AF%B9%E8%B1%A1%E7%9A%84%E4%BD%BF%E7%94%A8.html">对象的使用</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/javascript%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.html">正则表达式</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/promise%E5%AF%B9%E8%B1%A1%E7%9A%84%E4%BD%BF%E7%94%A8.html">promise对象的使用</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/modules%E6%A8%A1%E5%9D%97.html">modules模块</RouterLink></li> -</ul> -<h5 id="中级教程" tabindex="-1"><a class="header-anchor" href="#中级教程" aria-hidden="true">#</a> 中级教程</h5> -<ul> -<li><RouterLink to="/DS/docs/javascript/%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B/promise%E5%AF%B9%E8%B1%A1.html">Promise对象</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B/async%E5%87%BD%E6%95%B0.html">async函数</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E4%B8%AD%E7%BA%A7%E6%95%99%E7%A8%8B/class%E7%B1%BB.html">class类</RouterLink></li> -</ul> -<h5 id="高级教程" tabindex="-1"><a class="header-anchor" href="#高级教程" aria-hidden="true">#</a> 高级教程</h5> -<ul> -<li> -<p><RouterLink to="/DS/docs/javascript/%E9%AB%98%E7%BA%A7%E6%95%99%E7%A8%8B/%E4%B8%8D%E4%B8%80%E6%A0%B7%E7%9A%84ajax.html">不一样的ajax</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/javascript/%E9%AB%98%E7%BA%A7%E6%95%99%E7%A8%8B/%E4%BB%80%E4%B9%88%E6%98%AF%E4%BA%8B%E4%BB%B6%E5%BE%AA%E7%8E%AF.html">什么是事件循环</RouterLink></p> -</li> -<li> -<p><a href="">JSON.stringify()的三个参数</a></p> -</li> -</ul> -<h5 id="最后稻草" tabindex="-1"><a class="header-anchor" href="#最后稻草" aria-hidden="true">#</a> 最后稻草</h5> -<ul> -<li><RouterLink to="/DS/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/ES6%E3%80%81ES7%E3%80%81ES8%E3%80%81ES9%E3%80%81ES10%E7%9A%84%E6%96%B0%E7%89%B9%E6%80%A7.html">ES6、ES7、ES8、ES9、ES10的新特性</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/ES2020%E6%96%B0%E7%89%B9%E6%80%A7.html">ES2020新特性</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/JavaScript%E5%B7%A5%E5%85%B7%E5%87%BD%E6%95%B0%E5%A4%A7%E5%85%A8.html">JavaScript 工具函数大全</RouterLink></li> -<li><RouterLink to="/DS/docs/javascript/%E6%9C%80%E5%90%8E%E7%A8%BB%E8%8D%89/%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0%E6%96%B9%E6%B3%95%E6%95%B4%E7%90%86.html">常用函数方法整理</RouterLink></li> -</ul> -<h4 id="jquery" tabindex="-1"><a class="header-anchor" href="#jquery" aria-hidden="true">#</a> JQuery</h4> -<ul> -<li> -<p><RouterLink to="/DS/docs/jquery/%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8.html">安装使用</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/jquery/%E5%9F%BA%E6%9C%AC%E5%B1%9E%E6%80%A7.html">基本属性</RouterLink></p> -</li> -<li> -<p>Css样式</p> -</li> -<li> -<p>选择器</p> -</li> -<li> -<p>文档处理</p> -</li> -<li> -<p>筛选</p> -</li> -<li> -<p>事件</p> -</li> -<li> -<p>效果</p> -</li> -<li> -<p>事件对象</p> -</li> -<li> -<p>延迟对象</p> -</li> -<li> -<p>回调函数</p> -</li> -<li> -<p>其他整理</p> -</li> -</ul> -<h4 id="vuejs" tabindex="-1"><a class="header-anchor" href="#vuejs" aria-hidden="true">#</a> Vuejs</h4> -<blockquote> -<p>介绍基础、常用的vue功能,不会很深入的涉及到vue源码及原理</p> -</blockquote> -<h4 id="react" tabindex="-1"><a class="header-anchor" href="#react" aria-hidden="true">#</a> React</h4> -<h4 id="nuxtjs" tabindex="-1"><a class="header-anchor" href="#nuxtjs" aria-hidden="true">#</a> Nuxtjs</h4> -<blockquote> -<p>Nuxtjs是在vue框架上进行封装的,主要是用来解决单体页面的服务端渲染问题,提供网站进行SEO优化的可能</p> -</blockquote> -<p><a href="">前端读写cookie</a></p> -<h4 id="ui框架" tabindex="-1"><a class="header-anchor" href="#ui框架" aria-hidden="true">#</a> UI框架</h4> -<blockquote> -<p>市面上前端框架层出不穷,不同的技术栈依赖的UI框架也不尽相同,这里将会依据笔者使用的UI框架,以线上项目展示的方式,介绍用过的框架;</p> -</blockquote> -<ul> -<li>Bootstrap</li> -<li>LayerUI</li> -<li>Ant-design-vue</li> -<li>iView-UI</li> -<li>VantUI</li> -<li>Element-UI</li> -</ul> -<h2 id="后端【node】" tabindex="-1"><a class="header-anchor" href="#后端【node】" aria-hidden="true">#</a> 后端【Node】</h2> -<blockquote> -<p>相比前端,作为偏后端的开发者, 后端技术的学习则需要稳扎稳打、不断积累整理,在会用、能用、熟练的基础上,更应该学习其中的原理;所以若你为后端开发者,不论Java、Nodejs、Go等技术栈,对待下面将提及的微服务架构、容器技术、服务治理、高可用等都需要努力学习,抓住重点;</p> -<p>在面试面前,能力是不会说谎的,打铁还需自身硬,加油~</p> -</blockquote> -<h4 id="express框架" tabindex="-1"><a class="header-anchor" href="#express框架" aria-hidden="true">#</a> Express框架</h4> -<ul> -<li><RouterLink to="/DS/docs/express/%E6%A1%86%E6%9E%B6%E4%BB%8B%E7%BB%8D.html">框架概念简介</RouterLink></li> -<li><RouterLink to="/DS/docs/express/brew%E5%92%8Ctree%E7%9A%84%E5%AE%89%E8%A3%85.html">brew和tree的安装</RouterLink></li> -<li>搭建express基础项目</li> -<li>安装</li> -<li>路由</li> -<li>静态文件</li> -<li>中间件</li> -<li>统一错误处理</li> -<li><RouterLink to="/DS/docs/express/express()%E5%87%BD%E6%95%B0.html">express()函数</RouterLink></li> -<li><RouterLink to="/DS/docs/express/application%E5%AF%B9%E8%B1%A1%E8%AF%A6%E8%A7%A3.html">application对象详解</RouterLink></li> -<li><RouterLink to="/DS/docs/express/request%E5%AF%B9%E8%B1%A1.html">request对象</RouterLink></li> -<li><a href="">respon对象</a></li> -<li><a href="">router对象</a></li> -<li>数据库集成</li> -<li>MVC分层</li> -<li><RouterLink to="/DS/docs/express/pm2%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86.html">pm2进程管理</RouterLink></li> -<li>分环境部署上线</li> -</ul> -<h4 id="koa框架" tabindex="-1"><a class="header-anchor" href="#koa框架" aria-hidden="true">#</a> Koa框架</h4> -<ul> -<li>koa介绍</li> -<li>手把手搭建第一个koa项目</li> -<li>应用(Application)</li> -<li>中间件(Middleware)</li> -<li>上下文(Context)</li> -<li>请求(Request)</li> -<li>响应(Response)</li> -</ul> -<h4 id="eggjs框架" tabindex="-1"><a class="header-anchor" href="#eggjs框架" aria-hidden="true">#</a> Eggjs框架</h4> -<h5 id="基础篇" tabindex="-1"><a class="header-anchor" href="#基础篇" aria-hidden="true">#</a> 基础篇</h5> -<ul> -<li><RouterLink to="/DS/docs/eggjs/git-README.html">第一部分:Git概述</RouterLink></li> -</ul> -<ul> -<li><RouterLink to="/DS/docs/eggjs/git-download.html">1.1 下载和安装</RouterLink> -<ul> -<li><RouterLink to="/DS/docs/eggjs/git-config.html">1.2 基本配置</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/git-dns.html">1.3 常用命令</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/git-github.html">1.4 GitHub简单使用</RouterLink></li> -<li><a href="https://mp.weixin.qq.com/s/Wn_IZ6K4eqh1PtomRtqdqg" target="_blank" rel="noopener noreferrer">1.5 GitBook简单使用<ExternalLinkIcon/></a> -<ul> -<li><RouterLink to="/DS/docs/eggjs/git-typora.html">1.5.1 Typora简介</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/git-markdown.html">1.5.2 MarkDown语法</RouterLink></li> -</ul> -</li> -<li><RouterLink to="/DS/docs/eggjs/git-choice.html">1.6 码云和GitHub的选择</RouterLink></li> -</ul> -</li> -</ul> -<ul> -<li> -<p><RouterLink to="/DS/docs/eggjs/mysql-README.html">第二部分:数据库概述</RouterLink></p> -<ul> -<li><RouterLink to="/DS/docs/eggjs/mysql-download.html">2.1 下载和安装</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/git-connect.html">2.2 连接数据库</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/mysql-curd.html">2.3 CURD操作</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/mysql-redis.html">2.4 Redis缓存</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/mysql-redis-install.html">2.4.1 redis安装</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/mysql-redis-dns.html">2.4.2 redis常用指令</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/mysql-redis-view.html">2.5 可视化管理</RouterLink></li> -</ul> -</li> -</ul> -<h5 id="入门篇" tabindex="-1"><a class="header-anchor" href="#入门篇" aria-hidden="true">#</a> 入门篇</h5> -<ul> -<li> -<p><RouterLink to="/DS/docs/eggjs/egg-README.html">第一部分:Egg框架快速入门</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/eggjs/egg-base.html">1.1 基础功能</RouterLink></p> -<ul> -<li><RouterLink to="/DS/docs/eggjs/egg-request-params.html">1.1.1 接口参数获取</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-object.html">1.1.2 Egg内置对象 </RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-config.html">1.1.3 Config配置</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-life.html">1.1.4 Egg生命周期</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-middleware.html">1.1.5 中间件理解</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-router.html">1.1.6 Router路由分发</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-controller.html">1.1.7 Controller控制器</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-service.html">1.1.8 Service服务</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-plugin.html">1.1.9 常用插件</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/DS/docs/eggjs/egg-core.html">1.2 核心功能</RouterLink></p> -<ul> -<li><RouterLink to="/DS/docs/eggjs/egg-logger.html">1.2.1 日志输出</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-schedule.html">1.2.2 定时任务</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-httpclient.html">1.2.2 HttpClient网络请求</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-cookies.html">1.2.3 Cookie的基本使用</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-session.html">1.2.4 Session的基本使用</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-try-catch.html">1.2.5 统一异常-错误处理</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-csrf-xss.html">1.2.6 CSRF防范和XSS攻击</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/egg-restful.html">1.2.7 RESTful API接口风格</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/DS/docs/eggjs/plugin-README.html">第二部分:插件开发</RouterLink></p> -<ul> -<li><RouterLink to="/DS/docs/eggjs/plugin-egg-validate.html">2.1 egg-validate参数校验</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/plugin-egg-view.ejs.html">2.2 egg-view-ejs页面渲染</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/plugin-egg-redis.html">2.3 egg-redis缓存</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/plugin-egg-mysql.html">2.4 egg-mysql</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/plugin-egg-sequelize.html">2.5 egg-sequelize</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/plugin-egg-socket.io.html">2.6 egg-socket.io即时通讯</RouterLink></li> -</ul> -</li> -</ul> -<h5 id="代码实战篇" tabindex="-1"><a class="header-anchor" href="#代码实战篇" aria-hidden="true">#</a> 代码实战篇</h5> -<ul> -<li> -<p><RouterLink to="/DS/docs/eggjs/project-README-CODE.html">第一部分:常用代码</RouterLink></p> -<ul> -<li><RouterLink to="/DS/docs/eggjs/project-images-cropper.html">1.1 图片前端在线剪辑</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-upload.html">1.2 文件上传后台处理</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-md5.html">1.3 MD5加密-解密算法</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-token.html">1.4 Egg Jwt加密和校验</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/DS/docs/eggjs/project-README-INTRODUCE.html">第二部分:项目简介</RouterLink></p> -<ul> -<li><RouterLink to="/DS/docs/eggjs/project-ssoCenterSystem.html">2.1 基于OAuth2的统一认证中心系统</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-pagenation.html">2.2 常用前后端分页比较与实现</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-spring-boot-blog.html">2.3基于Spring Boot实现的个人博客</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-webapi.html">2.4 基于Yapi搭建的接口管理系统</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-gitbook.html">2.5 GitBook开源笔记总结站点搭建</RouterLink></li> -<li><RouterLink to="/DS/docs/eggjs/project-142vip.cn.html">2.6 个人网站及接口服务搭建搭建</RouterLink></li> -</ul> -</li> -<li> -<p><RouterLink to="/DS/docs/eggjs/egg-egg-example.html">第三部分:手把手搭建基础Egg开发框架</RouterLink></p> -</li> -</ul> -<h4 id="nestjs框架" tabindex="-1"><a class="header-anchor" href="#nestjs框架" aria-hidden="true">#</a> Nestjs框架</h4> -<blockquote> -<p>Nestjs框架推崇typescript语法,并且友好的兼容express框架,因此在学习Nestjs框架之前,请务必先熟悉express框架相关操作并进行typescript入门;在一定程度上typescript和面向对象语言Java、Net等很相似,如果你之前有JavaScript和Java的基础,那么应该恭喜你,你的学习速度将会倍速提高</p> -</blockquote> -<ul> -<li><RouterLink to="/DS/nestjs/nestjs%E6%A0%B8%E5%BF%83%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5.html">核心基础概念</RouterLink></li> -<li><RouterLink to="/DS/nestjs/nestjs%E9%A1%B9%E7%9B%AE%E5%88%9B%E5%BB%BA%E5%88%9D%E5%A7%8B%E5%8C%96%E5%85%A5%E9%97%A8.html">项目创建初始化入门</RouterLink></li> -<li><RouterLink to="/DS/nestjs/nestjs%E6%95%B4%E5%90%88swagger%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3.html">整合swagger快速生成api文档</RouterLink></li> -<li><RouterLink to="/DS/nestjs/nestjs%E6%8E%A5%E5%8F%A3%E8%B7%AF%E7%94%B1%E8%AF%B7%E6%B1%82%E4%BC%A0%E5%8F%82.html">接口路由请求传参</RouterLink></li> -</ul> -<h2 id="算法" tabindex="-1"><a class="header-anchor" href="#算法" aria-hidden="true">#</a> 算法</h2> -<ul> -<li>算法分析</li> -</ul> -<h4 id="查找" tabindex="-1"><a class="header-anchor" href="#查找" aria-hidden="true">#</a> 查找</h4> -<ul> -<li>顺序查找</li> -<li>折半查找</li> -<li>分块查找</li> -<li>B树和B+树</li> -<li>散列(Hash)表</li> -<li>字符串模式匹配(KPM)</li> -</ul> -<h4 id="排序" tabindex="-1"><a class="header-anchor" href="#排序" aria-hidden="true">#</a> 排序</h4> -<ul> -<li>插入排序</li> -<li>交换排序</li> -<li>选择排序</li> -<li>归并排序</li> -<li>基数排序</li> -<li>内部排序比较</li> -<li>外部排序比较</li> -</ul> -<h4 id="leetcode刷题" tabindex="-1"><a class="header-anchor" href="#leetcode刷题" aria-hidden="true">#</a> LeetCode刷题</h4> -<h2 id="数据库" tabindex="-1"><a class="header-anchor" href="#数据库" aria-hidden="true">#</a> 数据库</h2> -<blockquote> -<p>主讲数据库基础知识,结合node的简单使用,相关的部署方案参照下方的文档</p> -</blockquote> -<h4 id="mysql" tabindex="-1"><a class="header-anchor" href="#mysql" aria-hidden="true">#</a> MySQL</h4> -<ul> -<li><a href="https://mp.weixin.qq.com/s/U1OUZYHEChFDx03FvgbMHA" target="_blank" rel="noopener noreferrer">【服务器版】MySQL的安装部署<ExternalLinkIcon/></a></li> -<li><RouterLink to="/DS/docs/mysql/MySQL%E4%BC%98%E5%8C%96%E4%B9%8BExplain%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E.html">MySQL优化之Explain参数说明</RouterLink></li> -<li>索引</li> -<li>sql优化</li> -<li><RouterLink to="/DS/docs/mysql/%E5%9F%BA%E4%BA%8EGTID%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E7%9A%84%E5%8E%9F%E7%90%86%E5%92%8C%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE.html">基于GTID主从复制的原理和基础配置</RouterLink></li> -<li><RouterLink to="/DS/docs/mysql/mysql%E6%97%A5%E5%BF%97%E6%AF%94%E8%BE%83.html">MySQL日志类型把我难哭了,你学废了吗?</RouterLink></li> -</ul> -<h4 id="redis" tabindex="-1"><a class="header-anchor" href="#redis" aria-hidden="true">#</a> Redis</h4> -<blockquote> -<p>将围绕redis基础概念、使用场景、使用方式、简单部署等方面 展开介绍,<a href="redis">主目录</a>下有自己觉得还不错PDF文档~</p> -</blockquote> -<ul> -<li><RouterLink to="/DS/docs/redis/key%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83%E4%B8%8E%E5%BB%BA%E8%AE%AE.html">key命名规范与建议</RouterLink></li> -<li><RouterLink to="/DS/docs/redis/redis%E5%BC%80%E5%8F%91%E4%BD%BF%E7%94%A8%E8%A7%84%E8%8C%83.html">redis开发使用规范</RouterLink></li> -<li><RouterLink to="/DS/docs/redis/redis%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D.html">redis基础介绍</RouterLink></li> -<li><a href="https://mp.weixin.qq.com/s/Xe-ZDf2kgUWfYSkuULAdlw" target="_blank" rel="noopener noreferrer">redis的简单安装和部署<ExternalLinkIcon/></a></li> -<li><a href="code/docs/redis/redis-default.conf">官方默认配置模板</a></li> -<li>数据类型</li> -<li><RouterLink to="/DS/docs/docs/redis/redis%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2.html">redis简单主从集群部署-docker方式</RouterLink></li> -<li><RouterLink to="/DS/docs/redis/memCache%E4%B8%8ERedis.html">memCache与Redis比较</RouterLink></li> -</ul> -<h4 id="mongo" tabindex="-1"><a class="header-anchor" href="#mongo" aria-hidden="true">#</a> Mongo</h4> -<ul> -<li>基本介绍</li> -<li>安装部署</li> -<li>简单使用</li> -<li>Node下的CURD操作</li> -</ul> -<h2 id="服务部署" tabindex="-1"><a class="header-anchor" href="#服务部署" aria-hidden="true">#</a> 服务部署</h2> -<h4 id="nginx" tabindex="-1"><a class="header-anchor" href="#nginx" aria-hidden="true">#</a> nginx</h4> -<ul> -<li><RouterLink to="/DS/docs/nginx/nginx%E5%9F%BA%E7%A1%80%E9%83%A8%E7%BD%B2.html">nginx安装,普通安装 Or Docker搞定?</RouterLink></li> -<li><a href="">手把手nginx基础入门</a></li> -<li><a href="">反向代理、负载均衡真有那么难吗?</a></li> -<li><RouterLink to="/DS/docs/nginx/nginx%E6%9C%8D%E5%8A%A1%E5%99%A8ssl%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE.html">Nginx SSL证书,从此踏上Https之路</RouterLink></li> -</ul> -<h4 id="docker" tabindex="-1"><a class="header-anchor" href="#docker" aria-hidden="true">#</a> docker</h4> -<ul> -<li>我与docker的第一次硬碰硬</li> -<li>docker操作入门真有那么难吗?</li> -<li>这些基础操作指令,你会吗?</li> -<li>那些年,我常用的docker指令操作汇总</li> -</ul> -<h4 id="docker-compose" tabindex="-1"><a class="header-anchor" href="#docker-compose" aria-hidden="true">#</a> docker-compose</h4> -<ul> -<li>听说你装了N次都没搞定?</li> -<li>集群启动失败,yaml规范不清楚?</li> -<li><a href="https://mp.weixin.qq.com/s/nC4nF51xn61TZlenuUxDog" target="_blank" rel="noopener noreferrer">我了解的docker-compose都在这里了<ExternalLinkIcon/></a></li> -</ul> -<h4 id="linux下shell编程" tabindex="-1"><a class="header-anchor" href="#linux下shell编程" aria-hidden="true">#</a> linux下shell编程</h4> -<ul> -<li><a href="https://mp.weixin.qq.com/s/gctrWdB1JEK59_a9tJQSkg" target="_blank" rel="noopener noreferrer">shell基础整理<ExternalLinkIcon/></a></li> -<li><RouterLink to="/DS/shell/shell%E8%BF%9E%E6%8E%A5mysql.html">操作mysql数据库</RouterLink></li> -<li>shell操作docker</li> -<li>环境变量env</li> -</ul> -<h2 id="服务网关" tabindex="-1"><a class="header-anchor" href="#服务网关" aria-hidden="true">#</a> 服务网关</h2> -<h4 id="kong" tabindex="-1"><a class="header-anchor" href="#kong" aria-hidden="true">#</a> kong</h4> -<ul> -<li><RouterLink to="/api-gateway/kong/kong%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%BB%8D.html">kong的的基本介绍</RouterLink></li> -<li><RouterLink to="/api-gateway/kong/%E5%9F%BA%E4%BA%8Edocker%E9%83%A8%E7%BD%B2kong%E7%BD%91%E5%85%B3%E6%9C%8D%E5%8A%A1.html">docker下kong的部署</RouterLink></li> -<li>docker-compose搭建kong集群</li> -<li>可视化管理界面介绍</li> -</ul> -<h4 id="konga" tabindex="-1"><a class="header-anchor" href="#konga" aria-hidden="true">#</a> konga</h4> -<ul> -<li>基本介绍与docker部署</li> -<li>简单使用</li> -<li>路由管理</li> -</ul> -<h4 id="kong-dashboard" tabindex="-1"><a class="header-anchor" href="#kong-dashboard" aria-hidden="true">#</a> kong-dashboard</h4> -<ul> -<li>docker简单部署</li> -<li>路由管理</li> -<li>插件介绍</li> -</ul> -<h2 id="服务注册" tabindex="-1"><a class="header-anchor" href="#服务注册" aria-hidden="true">#</a> 服务注册</h2> -<h4 id="apollo" tabindex="-1"><a class="header-anchor" href="#apollo" aria-hidden="true">#</a> Apollo</h4> -<blockquote> -<p>携程开发的配置中心经典项目,可集成多语言客户端,实现灰度部署,在分布式微服务的场景下抽离出服务配置,方便统一管理、发布</p> -</blockquote> -<h4 id="consul" tabindex="-1"><a class="header-anchor" href="#consul" aria-hidden="true">#</a> Consul</h4> -<blockquote> -<p>服务注册、发现,key-value键值对管理</p> -</blockquote> -<h4 id="nacos" tabindex="-1"><a class="header-anchor" href="#nacos" aria-hidden="true">#</a> Nacos</h4> -<blockquote> -<p>背靠国内一线互联网大厂——阿里巴巴,也是可适用于微服务下的配置管理,支持Java、Nodejs等主流语言,目前生态良好,技术支持表现一般,属于Apollo替代产品</p> -</blockquote> -<h2 id="消息中间件" tabindex="-1"><a class="header-anchor" href="#消息中间件" aria-hidden="true">#</a> 消息中间件</h2> -<blockquote> -<p>消息队列已经逐渐成为企业IT系统内部通信的核心手段。具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。</p> -<p>目前个人了解的有:RabbitMQ、Kafka、RocketMQ</p> -</blockquote> -<h4 id="rabbitmq" tabindex="-1"><a class="header-anchor" href="#rabbitmq" aria-hidden="true">#</a> RabbitMQ</h4> -<h4 id="kafka" tabindex="-1"><a class="header-anchor" href="#kafka" aria-hidden="true">#</a> kafka</h4> -<h4 id="rocketmq" tabindex="-1"><a class="header-anchor" href="#rocketmq" aria-hidden="true">#</a> RocketMQ</h4> -<h2 id="rpc框架" tabindex="-1"><a class="header-anchor" href="#rpc框架" aria-hidden="true">#</a> RPC框架</h2> -<h4 id="grpc" tabindex="-1"><a class="header-anchor" href="#grpc" aria-hidden="true">#</a> gRPC</h4> -<blockquote> -<p>gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统,tensorflow分布式与tensorflow serving底层通信都是是用的grpc。我自己基于JavaScript技术栈上较多的接触到gRPC,传送门:<a href="">基于js下各框架grpc的使用</a></p> -</blockquote> -<ul> -<li> -<p>nodejs下grpc的简单实用</p> -</li> -<li> -<p>grpc集成express框架</p> -</li> -<li> -<p>grpc集成koa框架</p> -</li> -<li> -<p>eggjs框架下grpc的线上部署</p> -</li> -<li> -<p>grpc插件开发示例</p> -</li> -</ul> -<h4 id="dubbo" tabindex="-1"><a class="header-anchor" href="#dubbo" aria-hidden="true">#</a> Dubbo</h4> -<blockquote> -<p>Alibaba开发的一个RPC框架,远程接口基于Java Interface, 依托于Spring框架(<strong>Java技术栈重点研究</strong>)</p> -</blockquote> -<h4 id="thrift" tabindex="-1"><a class="header-anchor" href="#thrift" aria-hidden="true">#</a> Thrift</h4> -<blockquote> -<p>Apache的一个项目(http://thrift.apache.org),前身是Facebook开发的一个RPC框架,采用thrift作为IDL (Interface description language)。</p> -</blockquote> -<h2 id="elk日志管理平台" tabindex="-1"><a class="header-anchor" href="#elk日志管理平台" aria-hidden="true">#</a> Elk日志管理平台</h2> -<blockquote> -<p>全链路日志</p> -</blockquote> -<ul> -<li><RouterLink to="/DS/docs/elk/%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5%E4%B8%8E%E5%B8%B8%E7%94%A8%E6%9E%B6%E6%9E%84%E6%95%B4%E7%90%86.html">ELK基础概念与常用架构整理</RouterLink></li> -</ul> -<h4 id="elasticsearch" tabindex="-1"><a class="header-anchor" href="#elasticsearch" aria-hidden="true">#</a> ElasticSearch</h4> -<blockquote> -<p>数据存储</p> -</blockquote> -<h4 id="logstash" tabindex="-1"><a class="header-anchor" href="#logstash" aria-hidden="true">#</a> Logstash</h4> -<blockquote> -<p>数据收集</p> -</blockquote> -<h4 id="kibana" tabindex="-1"><a class="header-anchor" href="#kibana" aria-hidden="true">#</a> Kibana</h4> -<blockquote> -<p>数据展示</p> -</blockquote> -<h2 id="监控工具" tabindex="-1"><a class="header-anchor" href="#监控工具" aria-hidden="true">#</a> 监控工具</h2> -<blockquote> -<p>参考笔者线上平台:http://view.142vip.cn/grafana 账号/密码:test/123456 基于docker部署,由于是个人学生服务器,站点访问延迟较高</p> -<p>常用工具:promethus 、grafana、zabbix、lepus等</p> -</blockquote> -<h4 id="prometheus" tabindex="-1"><a class="header-anchor" href="#prometheus" aria-hidden="true">#</a> Prometheus</h4> -<h4 id="grafana" tabindex="-1"><a class="header-anchor" href="#grafana" aria-hidden="true">#</a> Grafana</h4> -<h4 id="zabbix" tabindex="-1"><a class="header-anchor" href="#zabbix" aria-hidden="true">#</a> Zabbix</h4> -<h4 id="lepus-天兔" tabindex="-1"><a class="header-anchor" href="#lepus-天兔" aria-hidden="true">#</a> lepus(天兔)</h4> -<h2 id="高可用架构" tabindex="-1"><a class="header-anchor" href="#高可用架构" aria-hidden="true">#</a> 高可用架构</h2> -<h4 id="mysql集群" tabindex="-1"><a class="header-anchor" href="#mysql集群" aria-hidden="true">#</a> MySQL集群</h4> -<h5 id="主从同步" tabindex="-1"><a class="header-anchor" href="#主从同步" aria-hidden="true">#</a> 主从同步</h5> -<blockquote> -<p>实现功能:主从服务器数据一致,低延迟、高并发</p> -</blockquote> -<ul> -<li>Binlog主从复制</li> -<li>GTID主从复制</li> -<li>主主复制</li> -</ul> -<h5 id="代理中间件" tabindex="-1"><a class="header-anchor" href="#代理中间件" aria-hidden="true">#</a> 代理中间件</h5> -<blockquote> -<p>实现功能:读写分离、分库分表、负载均衡、故障切换</p> -</blockquote> -<ul> -<li>Mycat</li> -<li>360Atlas</li> -</ul> -<h4 id="集群监控" tabindex="-1"><a class="header-anchor" href="#集群监控" aria-hidden="true">#</a> 集群监控</h4> -<blockquote> -<p>实现功能:实时监控、可视化数据显示、故障报警</p> -</blockquote> -<h5 id="prometheus-1" tabindex="-1"><a class="header-anchor" href="#prometheus-1" aria-hidden="true">#</a> Prometheus</h5> -<ul> -<li>监控MySQL集群</li> -<li>监控Mongo数据库</li> -<li>监控Node服务</li> -<li>监控linux服务器</li> -<li>监控redis集群</li> -</ul> -<h5 id="grafana-1" tabindex="-1"><a class="header-anchor" href="#grafana-1" aria-hidden="true">#</a> Grafana</h5> -<ul> -<li>基本安装部署</li> -<li>功能介绍和简单操作</li> -<li>可视化数据图形显示界面</li> -<li>常用模板</li> -</ul> -<h5 id="alter-manager" tabindex="-1"><a class="header-anchor" href="#alter-manager" aria-hidden="true">#</a> alter-manager</h5> -<ul> -<li>推送到邮箱</li> -<li>推送到钉钉、微信机器人</li> -<li>推送到自定义消息接口(webhook钩子)</li> -</ul> -<h4 id="压力测试" tabindex="-1"><a class="header-anchor" href="#压力测试" aria-hidden="true">#</a> 压力测试</h4> -<ul> -<li>jmeter</li> -</ul> -<h4 id="redis集群" tabindex="-1"><a class="header-anchor" href="#redis集群" aria-hidden="true">#</a> Redis集群</h4> -<blockquote> -<p>持续整理中...</p> -</blockquote> -<h5 id="简单主从模式" tabindex="-1"><a class="header-anchor" href="#简单主从模式" aria-hidden="true">#</a> 简单主从模式</h5> -<h4 id="哨兵模式" tabindex="-1"><a class="header-anchor" href="#哨兵模式" aria-hidden="true">#</a> 哨兵模式</h4> -<h5 id="cluster模式" tabindex="-1"><a class="header-anchor" href="#cluster模式" aria-hidden="true">#</a> cluster模式</h5> -<h2 id="网站搭建" tabindex="-1"><a class="header-anchor" href="#网站搭建" aria-hidden="true">#</a> 网站搭建</h2> -<blockquote> -<p>从大二开始搭建个人网站:http://www.142vip.cn 起初非常简陋,工作之后计划进行第三版迭代,一直抽空佛系谢谢, 目前在重构中..</p> -</blockquote> -<ul> -<li>最初的梦想</li> -<li>舍弃Java,我的重构之路</li> -<li>网站正规化,Nginx配置SSL证书</li> -<li>小小网站却耗费三台学生服务器?</li> -</ul> -<h2 id="书籍整理" tabindex="-1"><a class="header-anchor" href="#书籍整理" aria-hidden="true">#</a> 书籍整理</h2> -<h3 id="技术类" tabindex="-1"><a class="header-anchor" href="#技术类" aria-hidden="true">#</a> 技术类</h3> -<blockquote> -<p>待整理</p> -</blockquote> -<h4 id="狼书-了不起的node-js" tabindex="-1"><a class="header-anchor" href="#狼书-了不起的node-js" aria-hidden="true">#</a> <RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/">狼书 - 了不起的Node.js</RouterLink></h4> -<ul> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%B8%80%E7%AB%A0%20Node.js%E5%88%9D%E8%AF%86.html">第一章 Node.js初识</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20Nodejs%E5%AE%89%E8%A3%85%E4%B8%8E%E5%85%A5%E9%97%A8.html">第二章 Nodejs安装与入门</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%9B%B4%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js.html">第三章 更了不起的Node.js</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%9B%B4%E5%A5%BD%E7%9A%84Node.js.html">第四章 更好的Node.js</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%BA%94%E7%AB%A0%20Node.js%E6%98%AF%E5%A6%82%E4%BD%95%E6%89%A7%E8%A1%8C%E7%9A%84.html">第五章 Node.js是如何执行的</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E6%A8%A1%E5%9D%97%E4%B8%8E%E6%A0%B8%E5%BF%83.html">第六章 模块与核心</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E5%BC%82%E6%AD%A5%E5%86%99%E6%B3%95%E4%B8%8E%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6.html">第七章 异步写法与流程控制</RouterLink></p> -</li> -<li> -<p><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%8B%BC%E4%B9%A6-%E4%BA%86%E4%B8%8D%E8%B5%B7%E7%9A%84Node.js/%E5%85%A8%E9%83%A8%E7%AC%94%E8%AE%B0.html">全部笔记</RouterLink></p> -</li> -</ul> -<h4 id="es6标准入门——阮一峰" tabindex="-1"><a class="header-anchor" href="#es6标准入门——阮一峰" aria-hidden="true">#</a> <a href="">ES6标准入门——阮一峰</a></h4> -<blockquote> -<p>本书内容较多,很多基础细节都有说明,难度中等、适合入门,书中很多例子我也摘抄了很多,主要是我认为重要的,笔记按照自己学习逻辑整理的,请君慢用</p> -</blockquote> -<ul> -<li><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ES6%E6%A0%87%E5%87%86%E5%85%A5%E9%97%A8/1.ECMAScript%206%20%E7%AE%80%E4%BB%8B.html">1.ECMAScript 6 简介</RouterLink></li> -<li><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ES6%E6%A0%87%E5%87%86%E5%85%A5%E9%97%A8/2.let%E5%92%8Cconst%E7%9A%84%E5%91%BD%E4%BB%A4.html">2.let和const命令</RouterLink></li> -<li><RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ES6%E6%A0%87%E5%87%86%E5%85%A5%E9%97%A8/3.%E5%8F%98%E9%87%8F%E7%9A%84%E8%A7%A3%E6%9E%84%E8%B5%8B%E5%80%BC.html">3.变量的解构赋值</RouterLink></li> -<li><a href="">4.字符串详解</a></li> -</ul> -<h3 id="非技术类" tabindex="-1"><a class="header-anchor" href="#非技术类" aria-hidden="true">#</a> 非技术类</h3> -<blockquote> -<p>主要是跟计算机无关的一些书,在看完之后,会选择性的进行思维导图、经典词句整理,也可能添加个人思考</p> -</blockquote> -<h4 id="你好孤独-陈果" tabindex="-1"><a class="header-anchor" href="#你好孤独-陈果" aria-hidden="true">#</a> <RouterLink to="/DS/docs/article-records/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%A5%BD%E7%9A%84%E5%AD%A4%E7%8B%AC-%E9%99%88%E6%9E%9C/">你好孤独 - 陈果</RouterLink></h4> -<h2 id="公众号汇总" tabindex="-1"><a class="header-anchor" href="#公众号汇总" aria-hidden="true">#</a> 公众号汇总</h2> -<h3 id="_2020年" tabindex="-1"><a class="header-anchor" href="#_2020年" aria-hidden="true">#</a> 2020年</h3> -<h4 id="_7月" tabindex="-1"><a class="header-anchor" href="#_7月" aria-hidden="true">#</a> 7月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483659&idx=1&sn=ac7b633a45ac06d388e0698163a2543e&chksm=fcdfb887cba8319151aedfa80c5b59d130838af81fe51c76e5c4926f82f4937b51c8c0c1470e&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-26】微信公众号我来了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483760&idx=1&sn=30a9fa2a051079c5330039615950c34d&chksm=fcdfb8fccba831ea64644be501ecca3cea5846f16367faed9c84b44a30d9b6dc30456dae6548&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-27】介绍一下,我在B站<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483762&idx=1&sn=e9ea759f1c1589881cc3bd9cabddb70a&chksm=fcdfb8fecba831e8c4635a4cefd302977071ed11a4dda6161cf9ad8458865297194f87cb013a&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-28】五年了,我终于换了人生中的第一台MacBookPro<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483770&idx=1&sn=6b760873a814f4e18baab415bee3d863&chksm=fcdfb8f6cba831e00802de653ff6723a0bb169a93fe3a6a9762ee62d75d8cd88409268db9047&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-29】工作中第一次被喷,我到底是如何应对的?<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483778&idx=1&sn=3d9f623c58d595f75d7092783a6c5abe&chksm=fcdfb80ecba83118e76de1ed88a5be51229e4145182aee6e0bcc13e4697707cf9f4609d8799d&token=1304241434&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-07-31】CSDN关注100了,就这????<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_8月" tabindex="-1"><a class="header-anchor" href="#_8月" aria-hidden="true">#</a> 8月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483790&idx=1&sn=76e13ac79ad498309542c9f41878bb1c&chksm=fcdfb802cba8311456ea9ff3309c4354055022cd0056b13c11fac44252231550e17a03f26f29&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-08-01】旧友相见,甚是怀念<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483805&idx=1&sn=4da4e0d3a2912aee146248c1d8f7f96f&chksm=fcdfb811cba83107fd8f08d3e35af7c72bf7d908d577ad83e45d80b0e9d1bbdbf16b1f169d64&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-08-03】JavaScript基础介绍和快速入门<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_9月" tabindex="-1"><a class="header-anchor" href="#_9月" aria-hidden="true">#</a> 9月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484600&idx=1&sn=489aa1bd12487b0bf8f2a7694f4ca1aa&chksm=fcdfbd34cba83422f0afee027747d9e95773e093fa3a24225c2729029c4392bf42043964782f&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-01】Redis的简单安装和部署 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484600&idx=2&sn=a9962c6ca3a5eddd085bcd15617f64d9&chksm=fcdfbd34cba83422b987020a858b7cf31bfde6033642d697d5a00ad9ed618f3cf14deb207d67&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-01】就很像?? <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484702&idx=1&sn=6e3e862153755d9e61f5f4ebf220381d&chksm=fcdfbc92cba835844e8b6fd37d86a34ccf83342895f448c88ba5b62db974eb536a8e74a121aa&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-03】shell编程基础整理 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484702&idx=2&sn=c7589eecbe58ff8939f72c0ff0bf567d&chksm=fcdfbc92cba83584b03dfeea7290606ce8249b0c3105b0b3b95a9087c77e3b1c7f863d8e30f9&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-03】大学四年建站用过的云服务器都在这里了 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484711&idx=1&sn=bf362439ccfad04da53ce65c824a988d&chksm=fcdfbcabcba835bddc43c40fd3a454793adf7849a5d5bb356825d481b82ae3e58a749859502c&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-04】面试复盘和思考 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484759&idx=1&sn=e0f8a7a70ddede75d94b202ddc6106d6&chksm=fcdfbcdbcba835cd2138658d750f7e09a820b34daf4624f253a21a11b5de56635d35e4c0df19&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-06】朋友是“无用”的,不是你瞧不起我,就是我瞧不起你 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484759&idx=2&sn=ade86739c94f99f944a3d387bc7e13ef&chksm=fcdfbcdbcba835cd192c3b7b7eeea8f5dbb16b2b2fa58b6e2094184f5aa3341927a6d1fad6f8&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-06】GitHub简单使用 <ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484771&idx=1&sn=6ae4c6e8d333b0e1aa5cd1aee161d9b8&chksm=fcdfbcefcba835f94e3c0abc189477f241f675f38a63eb03bd320447e89da39cb08b72038ba3&token=1613702159&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-07】MySQL日志类型把我难哭了,你学废了吗?<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484783&idx=1&sn=b9e82a2c2b04b7050d0659085af537ef&chksm=fcdfbce3cba835f5e692f5ffbb16505dbf3b5ccc9bb0bdf4b3f467629b293d0e0ce3086ec8dc&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-11】向各位汇报这周状态,再也不敢鸽了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484783&idx=1&sn=b9e82a2c2b04b7050d0659085af537ef&chksm=fcdfbce3cba835f5e692f5ffbb16505dbf3b5ccc9bb0bdf4b3f467629b293d0e0ce3086ec8dc&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-11】向各位汇报这周状态,再也不敢鸽了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484784&idx=1&sn=ae73f1f4e53b622039a75ec41cabe378&chksm=fcdfbcfccba835eafefe304913e4078cf8dfac22f62fd9d686b307bbdf46d147016f5e876e05&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-12】向各位汇报,再也不敢鸽了,人生处处有惊喜<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=1&sn=10d26a600112ec4f95b3b3f470955744&chksm=fcdfbc03cba83515b07f0ae6cee791d1fb5fd619364cff3a17a4deab91333f0a6277b09a66a9&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-13】来来来,无厘头技术(水)文,各种尬。简简单单评价一下<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=2&sn=94a6455ed6b17fa5b27e96358e935803&chksm=fcdfbc03cba83515d13dcfc2dea2445085a34ff4360e0a367fd914bb04bc6ba18a780a0cd2d2&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-13】基础Brew和Tree的安装实录<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=3&sn=38a289efffda9510b5ff04c5bed0663e&chksm=fcdfbc03cba835154c888b9d7f86eac85c250eefb9d053687173274373f2f8d7b19fc307e76a&token=639111151&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-13】PM2进程管理,给我学!<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484823&idx=1&sn=d41bb8da02585cf9ea8d0b3ef27e3dbb&chksm=fcdfbc1bcba8350d84ba2f01eaf187cbaa2d4cf5a9078beb1f2fafe94edb0126c82595ed8191&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-14】数据结构,一定要学废了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484837&idx=1&sn=7f0de3eeea3fc6ee299587704f5c44cd&chksm=fcdfbc29cba8353fd894582da7ae2c93b5920c4dbb1e197b011a817dc0962e317842a32d5560&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-16】ELK基础概念与常用架构整理<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484850&idx=1&sn=7af55ef3a7d843d9c43de6d6c7911da3&chksm=fcdfbc3ecba835287b2c644cda606454a713d370fbd7d14714b22a04277f7a7784b96b8b277e&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-17】分享书上一段话,问一个问题<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484850&idx=2&sn=c59839c677d7c9652a09d1f8c70ef8d6&chksm=fcdfbc3ecba83528cf8271a2615129340a6f11954b6d9396160d0fb2c41593253d5e3510a031&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-17】看源码遇到的三个知识点,一个也没懂<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484865&idx=2&sn=63e6b669341217135013816464dd5bd9&chksm=fcdfbc4dcba8355b4de0f712047709425a35fa3b122378b31f0e4db3afb82dfd38872862aab4&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-20】express()函数整理<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484865&idx=1&sn=e39e3547da49f40e1b64deadf9a9cfef&chksm=fcdfbc4dcba8355bfa9c8b9531a463fc652b764064528dd6c243f47a157b20e017bad3f410f4&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-22】入秋了,安好<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484897&idx=1&sn=b1073522cfd3ce6ebbe85e85ad4e35e0&chksm=fcdfbc6dcba8357bdb212c9db1378a045d0dcfd95b79ed05688180f05d2b391f9b724d0d752f&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-22】Nginx安装详解,我服务器上也是这样的<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484897&idx=2&sn=34c61ed01c6522d2861be3342ec12ad5&chksm=fcdfbc6dcba8357b76eb0fe6c502d932def6cd232297b010f9b2f9a1fca35c38df77dacce7f2&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-22】被攻击的一天<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484929&idx=1&sn=394783dd2bfd65da24ae6dcb89d69ec6&chksm=fcdfbf8dcba8369b926b7083bbe3515aa5857f7589acc3f9d6d4987c67539a76dbd6e3cb70a1&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-09-26】跟父亲视频的一个半小时,聊到了我,也聊到了Ta<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_10月" tabindex="-1"><a class="header-anchor" href="#_10月" aria-hidden="true">#</a> 10月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484943&idx=1&sn=ad37db87dc40f381fd18cc828e492384&chksm=fcdfbf83cba8369598fc2773b63df235a9719b43749e7daab753c621fef5af4fba054dbb46ea&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-07】时间太快,溜了溜了,杭州见<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484951&idx=1&sn=edddf3d6c8f3fc6dd1d14063b536c732&chksm=fcdfbf9bcba8368d81ddffcbd258f7e4b7fb573d2a8963859e1b156e8a5f5d81f5629c49be6e&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-14】写不了代码就不写嘛<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484968&idx=1&sn=d37960ed81044fbf314440af85049d65&chksm=fcdfbfa4cba836b25082535910f7137d1513d834d54fbfadf48a433b29511ccf4d532f19b88a&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-18】我不行了,这号关注量男女7:3 还怎么相亲嘛?<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484988&idx=1&sn=947c487946fa3574d33e9c6861a1ee28&chksm=fcdfbfb0cba836a626d2efa904a5177c2e0916c381b26c89b6dcfc610a380b906d4480f7cc9b&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-10-26】悄悄接你下班,陪你回家<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_11月" tabindex="-1"><a class="header-anchor" href="#_11月" aria-hidden="true">#</a> 11月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485002&idx=1&sn=3760eba58f7ded433b71bec48b89a681&chksm=fcdfbfc6cba836d0b7db1f2aa5a4a884f68f8ce20a59aa44b4ac46c59eb4dd1c233079241a4a&token=368257571&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-01】11月,你好<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485042&idx=1&sn=181ae5062c31ee7931390607b6f10358&chksm=fcdfbffecba836e8275c849007470db6964f7cd675af59fe73c94369334d17d4840e8c0413d5&token=898438314&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-15】她来了她来了,她带着剪了三遍的视频来了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485053&idx=1&sn=ed2fe0de87b70781cdb7755ef4726340&chksm=fcdfbff1cba836e7165dc53722aaf96ef38d8f43cfadadcb4695d8ff430ea64619caada81cfa&token=1939941957&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-18】陪我一路的小姐姐,谢谢啦~ 我大意了呀,没有闪<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485066&idx=1&sn=1d357917f548a6d977af96c6582db527&chksm=fcdfbf06cba836103152f7a3fdfbf97c1be2472a84f824cbddd532c15aefe14c71b3b076233f&token=831506871&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-11-30】11月的尾巴,12月你好<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_12月" tabindex="-1"><a class="header-anchor" href="#_12月" aria-hidden="true">#</a> 12月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485080&idx=2&sn=bdc551f2e9bf54dc01881979339af8ad&chksm=fcdfbf14cba836022a05854547cbca03b5a08b912a0e0f195d4856d6b53ecd78aee2f167b515&token=1581389686&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-06】周末小记——忆旧友、吃火锅,也会感慨<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485100&idx=1&sn=e7c0c41229d51ebfab2939deb1751672&chksm=fcdfbf20cba836364da35ab5acfed076876aae486126bc1c41cdd2502cc89a41cbde7c645610&token=1054397108&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-10】上火、牙疼,也要砍程序媛一刀<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485136&idx=1&sn=4619fb835e6d57e106ab01116012662a&chksm=fcdfbf5ccba8364aecddf14d11ed8ba36f38050b83b30b8d46e10f86b164aab05322b8455b36&token=755050934&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-17】今晚不蹦迪,来聊一聊个人项目的接口返回<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485180&idx=1&sn=15ab9be3e15130103f26c919cbe0b605&chksm=fcdfbf70cba83666d287acc35485d02ddf67bacad6ea46d9ef04521f9f429fcb015d371c918e&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2020-12-20】事情,从英吉利海岸的那杯卡布奇诺美式咖啡说起<ExternalLinkIcon/></a></p> -</li> -</ul> -<h3 id="_2021年" tabindex="-1"><a class="header-anchor" href="#_2021年" aria-hidden="true">#</a> 2021年</h3> -<h4 id="_1月" tabindex="-1"><a class="header-anchor" href="#_1月" aria-hidden="true">#</a> 1月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485228&idx=1&sn=1c30866a209af2a5eb927fd7bd63cc8b&chksm=fcdfbea0cba837b6d4cf9865b72a6a1553c4d9b6a6cce369bb09f66730ab37ec649071e7ab7c&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-06】谁在看小王子呀~<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485249&idx=1&sn=dadf2a6dbed1879bbd98c62491436a9c&chksm=fcdfbecdcba837db5c11b8023ffa7ad6cf5a47c03027a0029604a50d0a77c75908efc05af39a&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-15】2020小结,没事就点点看看呗,反正小目标都没完成<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485258&idx=1&sn=fb71007a5feed8e18674be27b1c749ab&chksm=fcdfbec6cba837d099e90a5f45781ee8cac474388e25ad9383a4fbc05fdb16a8e1377265c018&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-17】搞波大的,浅谈深拷贝——文末有彩蛋<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485277&idx=1&sn=9eb7c3cef21ace2cc5853e382f2bb03f&chksm=fcdfbed1cba837c7839f3b57836f43b3425c8b5a7888f543bf4a1dd8b39cd82ed7d51a24a685&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-18】到底该如何发布Npm插件,常用指令在这里<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485291&idx=1&sn=19f13df8131a9f662973f2d9240c1eab&chksm=fcdfbee7cba837f180d8ad30735cd61e6c73fe195e63d46046bb24f80e1536aa0a585c3e1015&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-20】好用的AntDocs,也来学着用一下,基本过程整理<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485318&idx=1&sn=6ae5fc9f1cf994818ff89d53a926761e&chksm=fcdfbe0acba8371c9d0025008084857cf14c52b01dfb1b9460d3388ba543c36da2abcbf90216&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-27】【持续更新】从查找算法开始数据结构入门,大家都在掘金等你<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485341&idx=1&sn=fc493c28ab138056567e916b769ddbf2&chksm=fcdfbe11cba8370793e8e0d71e7766f4e1e7f3e8672921d6b98757f7d7b271b290f3edc65d6f&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-01-30】ORM框架入门之Sequelize,我快翻译不动了<ExternalLinkIcon/></a></p> -</li> -</ul> -<h4 id="_2月" tabindex="-1"><a class="header-anchor" href="#_2月" aria-hidden="true">#</a> 2月</h4> -<ul> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485376&idx=1&sn=049a5df5cb97786e80aded38a1bf3732&chksm=fcdfbe4ccba8375a52cb8d7077836216e5f5f41ee9453aebf524eb0a5d8a5db48cbabc11f3e4&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-02-07】被妹妹支配的一周,晚上差点连家都回不去..<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485404&idx=1&sn=276100858df23daf987dbc68997477df&chksm=fcdfbe50cba837460079fc9ab414754a49668f82dc0f6a5a41ec320d3e5dd77c1a8c271e061b&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-02-11】【新年快乐】程序员的2020,就这样悄咪咪地溜走了<ExternalLinkIcon/></a></p> -</li> -<li> -<p><a href="https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485420&idx=1&sn=26c0e3690363af5dddd805ae417eeee9&chksm=fcdfbe60cba8377645e44333ccbe35147b9844578008e5699aba62b82c12fc03634e2d68781c&token=1356818265&lang=zh_CN#rd" target="_blank" rel="noopener noreferrer">【2021-02-13】抢红包、拼手气来啦,之前答应的抽奖变成新年红包啦~<ExternalLinkIcon/></a></p> -</li> -</ul> -<h2 id="赞赏支持" tabindex="-1"><a class="header-anchor" href="#赞赏支持" aria-hidden="true">#</a> 赞赏支持</h2> -<blockquote> -<p>相逢不用忙归去,明日黄花蝶也愁;若系列文章对你有帮助,不如请作者喝一杯伏见桃山...</p> -<p><strong>赞赏过的一定要扫下方右侧微信跟我说呀!!!!!!</strong></p> -</blockquote> -<p><a name="wechat"></a></p> -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/weChatDonate.jpg" width="300" height="300" style="border-radius:10px;" /> -</div> -<h2 id="联系我" tabindex="-1"><a class="header-anchor" href="#联系我" aria-hidden="true">#</a> 联系我</h2> -<blockquote> -<p>对仓库有任何问题或建议,欢迎微信“骚扰”,商务合作请备注!</p> -</blockquote> -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/wechat.jpg" width="300" height="300" style="border-radius:10px;"/> -</div> -<h2 id="鸣谢" tabindex="-1"><a class="header-anchor" href="#鸣谢" aria-hidden="true">#</a> 鸣谢</h2> -<p>以下排名不分先后!(<a href="">详细统计</a>)</p> -<div> - <a href="https://github.com/ChiefPing" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/34122068?s=460&v=4" width="50px" style="brder-radius:5px;"/> - </a> <a href="https://github.com/xiaoliuxin" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/60652527?s=460&v=4" style="border-radius:5px;" width="50px"/> - </a> -</div> -<h2 id="赞助列表" tabindex="-1"><a class="header-anchor" href="#赞助列表" aria-hidden="true">#</a> 赞助列表</h2> -<p>以下排名不分先后!</p> -<h2 id="公众号" tabindex="-1"><a class="header-anchor" href="#公众号" aria-hidden="true">#</a> 公众号</h2> -<p>如果大家想要实时关注我更新的文章以及我的日常的话,可以关注我的公众号,基本每天都会更新技术和各种吹水文章,就当做是记录心情、成长的地方吧</p> -<p><a name="gzh"></a></p> -<div> - <img src="https://cdn.142vip.cn/gzh.png" style="border-radius:10px;"> -</div></template> diff --git a/docs/.vuepress/.temp/pages/pages/c33acd/index.html.js b/docs/.vuepress/.temp/pages/pages/c33acd/index.html.js deleted file mode 100644 index 94662c3..0000000 --- a/docs/.vuepress/.temp/pages/pages/c33acd/index.html.js +++ /dev/null @@ -1,63 +0,0 @@ -export const data = { - "key": "v-5d28eacc", - "path": "/pages/c33acd/", - "title": "赞赏支持", - "lang": "en-US", - "frontmatter": { - "title": "赞赏支持", - "sidebarDepth": 0, - "date": "2021-01-19T08:04:19.000Z", - "permalink": "/pages/c33acd/", - "categories": [ - "category" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "赞赏支持", - "slug": "赞赏支持", - "children": [] - }, - { - "level": 2, - "title": "鸣谢列表", - "slug": "鸣谢列表", - "children": [] - }, - { - "level": 2, - "title": "赞助列表", - "slug": "赞助列表", - "children": [] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 3 - } - ] - }, - "filePathRelative": "category/reader_donate.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/c33acd/index.html.vue b/docs/.vuepress/.temp/pages/pages/c33acd/index.html.vue deleted file mode 100644 index fe7cee4..0000000 --- a/docs/.vuepress/.temp/pages/pages/c33acd/index.html.vue +++ /dev/null @@ -1,29 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-01-19 08:04:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-02-14 22:16:55 ---> -<h2 id="赞赏支持" tabindex="-1"><a class="header-anchor" href="#赞赏支持" aria-hidden="true">#</a> 赞赏支持</h2> -<ul> -<li>相逢不用忙归去,明日黄花蝶也愁;若系列文章对你有帮助,不如请作者喝一杯伏见桃山...</li> -<li><strong>赞赏过的一定要扫下方右侧微信跟我说呀!!!!!!</strong></li> -</ul> -<p><a name="wechat"></a></p> -<div align="left"> -<img src="/assets/image_code/wechat_donate_code.jpeg" width="300" height="300" style="border-radius:10px;" /> -</div> -<h2 id="鸣谢列表" tabindex="-1"><a class="header-anchor" href="#鸣谢列表" aria-hidden="true">#</a> 鸣谢列表</h2> -<p>以下排名不分先后!(<a href="">详细统计</a>)</p> -<div> - <a href="https://github.com/ChiefPing" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/34122068?s=460&v=4" width="50px" style="brder-radius:5px;"/> - </a> <a href="https://github.com/xiaoliuxin" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/60652527?s=460&v=4" style="border-radius:5px;" width="50px"/> - </a> -</div> -<h2 id="赞助列表" tabindex="-1"><a class="header-anchor" href="#赞助列表" aria-hidden="true">#</a> 赞助列表</h2> -<p>以下排名不分先后!</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.js b/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.js deleted file mode 100644 index 5f7cc31..0000000 --- a/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.js +++ /dev/null @@ -1,58 +0,0 @@ -export const data = { - "key": "v-990daf06", - "path": "/pages/cddc8f/", - "title": "piecemeal_knowledge_supplement", - "lang": "en-US", - "frontmatter": { - "title": "piecemeal_knowledge_supplement", - "date": "2021-03-07T22:00:53.000Z", - "permalink": "/pages/cddc8f/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "零碎知识补充", - "slug": "零碎知识补充", - "children": [ - { - "level": 3, - "title": "单链表设置头结点", - "slug": "单链表设置头结点", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/9.piecemeal_knowledge_supplement.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.vue b/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.vue deleted file mode 100644 index 0c6b25c..0000000 --- a/docs/.vuepress/.temp/pages/pages/cddc8f/index.html.vue +++ /dev/null @@ -1,29 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 22:00:53 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:00:53 ---> -<h2 id="零碎知识补充" tabindex="-1"><a class="header-anchor" href="#零碎知识补充" aria-hidden="true">#</a> 零碎知识补充</h2> -<ul> -<li>无论是链表的插入还是删除操作,必须保证不断链【重要】</li> -<li>顺序存储结构可以随机存取也能顺序存取,链式结构只能进行顺序存取</li> -<li>顺序存储方式同样适合图和树的存储,例如:满二叉树的顺序存储</li> -<li>队列需要在表头删除元素,在表尾插入元素【先进先出】,采用带尾指针的循环单链表比较方便</li> -<li>数组排序最少时间复杂度为O(nlog<sub>2</sub>n)【重要】</li> -<li>静态链表中的指针称为<code>游标</code>,指示下一个元素在数组中的<code>下标</code></li> -<li>静态链表用数组表示,需要预先分配较大的连续空间,同时具有一般链表的特点(插入、删除元素不需要移动元素)</li> -</ul> -<h3 id="单链表设置头结点" tabindex="-1"><a class="header-anchor" href="#单链表设置头结点" aria-hidden="true">#</a> 单链表设置头结点</h3> -<p>目的</p> -<blockquote> -<p>主要是方便运算。</p> -</blockquote> -<p>好处</p> -<ul> -<li>有头结点后,插入、删除数据元素的算法统一起来了,不需要判断是否在第一个元素之前插入或者删除第一个元素了。</li> -<li>不论链表是否为空,头指针是指向头结点的<code>非空指针</code>,链表的头指针不变,因此空链表和非空链表的处理也就统一起来了。</li> -</ul> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/e577f8/index.html.js b/docs/.vuepress/.temp/pages/pages/e577f8/index.html.js deleted file mode 100644 index e46ae1d..0000000 --- a/docs/.vuepress/.temp/pages/pages/e577f8/index.html.js +++ /dev/null @@ -1,70 +0,0 @@ -export const data = { - "key": "v-6af7422e", - "path": "/pages/e577f8/", - "title": "double_linked_list", - "lang": "en-US", - "frontmatter": { - "title": "double_linked_list", - "date": "2021-03-07T21:59:05.000Z", - "permalink": "/pages/e577f8/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "双链表", - "slug": "双链表", - "children": [ - { - "level": 3, - "title": "基本特点", - "slug": "基本特点", - "children": [] - }, - { - "level": 3, - "title": "插入结点", - "slug": "插入结点", - "children": [] - }, - { - "level": 3, - "title": "删除结点", - "slug": "删除结点", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/4.double_linked_list.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/e577f8/index.html.vue b/docs/.vuepress/.temp/pages/pages/e577f8/index.html.vue deleted file mode 100644 index 939261a..0000000 --- a/docs/.vuepress/.temp/pages/pages/e577f8/index.html.vue +++ /dev/null @@ -1,69 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:59:05 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:59:13 ---> -<h2 id="双链表" tabindex="-1"><a class="header-anchor" href="#双链表" aria-hidden="true">#</a> 双链表</h2> -<p>从单链表的结构上来看</p> -<ul> -<li>访问特定结点的前驱结点需要遍历整个单链表,移动指针,时间复杂度为:O(n)</li> -<li>访问特定结点的后继结点只需要移动一次指针,时间复杂度为:O(1)</li> -</ul> -<p>双链表的引入,很好的解决单链表访问前驱结点时间消耗大的问题。</p> -<p>双链表结点由三部分组成:</p> -<ul> -<li><code>数据域</code> 存放数据信息</li> -<li><code>prior指针域</code> 指向结点的前驱结点</li> -<li><code>next指针域</code> 指向结点的后继结点</li> -</ul> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 双链表结点类型 -typedef struct DNode{ - ElemType data; // 结点的数据域 - struct DNode *prior; // 结点的前驱指针 - struct DNode *next; // 结点的后继指针 -}DNode, *DlinkList; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><h3 id="基本特点" tabindex="-1"><a class="header-anchor" href="#基本特点" aria-hidden="true">#</a> 基本特点</h3> -<ul> -<li>双链表仅仅在单链表的结点中增加了一个指向结点前驱的<code>prior</code>指针;</li> -<li><code>按值查找</code>、<code>按序号查找</code>在单链表和双链表上的操作是相同的。</li> -<li>和单链表不同,<code>插入</code>、<code>删除</code>操作除了修改<code>next</code>指针域,双链表还需要修改<code>prior</code>指针域,确保不断<code>链</code>,时间复杂度都为:O(1)</li> -</ul> -<h3 id="插入结点" tabindex="-1"><a class="header-anchor" href="#插入结点" aria-hidden="true">#</a> 插入结点</h3> -<blockquote> -<p>在双链表中p所指的结点之后插入结点s</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 第一步 -s->next=p->next; - -// 第二步 -p->next->prior=s; - -// 第三步 -s->prior=p; - -// 第四步 -p->next=s - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><p><strong>第一步和第二步必须再第四步之前</strong>,整体时间复杂度为:O(1)</p> -<h3 id="删除结点" tabindex="-1"><a class="header-anchor" href="#删除结点" aria-hidden="true">#</a> 删除结点</h3> -<blockquote> -<p>删除双链表中结点p的后继结点q</p> -</blockquote> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -// 第一步 -p->next=q->next; - -// 第二步 -q->next->prior=p; - -// 第三步 -free(q); - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div><p><strong>第一步和第二步顺序可换</strong>,整体时间复杂度为:O(1)</p> -</template> diff --git a/docs/.vuepress/.temp/pages/pages/ff395c/index.html.js b/docs/.vuepress/.temp/pages/pages/ff395c/index.html.js deleted file mode 100644 index 7ae000a..0000000 --- a/docs/.vuepress/.temp/pages/pages/ff395c/index.html.js +++ /dev/null @@ -1,64 +0,0 @@ -export const data = { - "key": "v-52cfe897", - "path": "/pages/ff395c/", - "title": "sequential_representation", - "lang": "en-US", - "frontmatter": { - "title": "sequential_representation", - "date": "2021-03-07T21:57:52.000Z", - "permalink": "/pages/ff395c/", - "categories": [ - "DataStructure", - "linear_table" - ], - "tags": [ - null - ] - }, - "excerpt": "", - "headers": [ - { - "level": 2, - "title": "线性表的顺序表示", - "slug": "线性表的顺序表示", - "children": [ - { - "level": 3, - "title": "定义", - "slug": "定义", - "children": [] - }, - { - "level": 3, - "title": "基本操作", - "slug": "基本操作", - "children": [] - } - ] - } - ], - "git": { - "updatedTime": 1650556197000, - "contributors": [ - { - "name": "mmdapl", - "email": "2237221210@qq.com", - "commits": 2 - } - ] - }, - "filePathRelative": "DS/linear_table/2.sequential_representation.md" -} - -if (import.meta.webpackHot) { - import.meta.webpackHot.accept() - if (__VUE_HMR_RUNTIME__.updatePageData) { - __VUE_HMR_RUNTIME__.updatePageData(data) - } -} - -if (import.meta.hot) { - import.meta.hot.accept(({ data }) => { - __VUE_HMR_RUNTIME__.updatePageData(data) - }) -} diff --git a/docs/.vuepress/.temp/pages/pages/ff395c/index.html.vue b/docs/.vuepress/.temp/pages/pages/ff395c/index.html.vue deleted file mode 100644 index e3ceaa0..0000000 --- a/docs/.vuepress/.temp/pages/pages/ff395c/index.html.vue +++ /dev/null @@ -1,205 +0,0 @@ -<template><!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:57:52 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:58:00 ---> -<h2 id="线性表的顺序表示" tabindex="-1"><a class="header-anchor" href="#线性表的顺序表示" aria-hidden="true">#</a> 线性表的顺序表示</h2> -<h3 id="定义" tabindex="-1"><a class="header-anchor" href="#定义" aria-hidden="true">#</a> 定义</h3> -<p><code>顺序表</code>:顺序存储的线性表,<strong>是用一组地址连续的存储单元,依次存储线性表中的数据元素,使得在逻辑上相邻的两个元素在物理位置上也相邻。</strong></p> -<p>顺序表中的元素的逻辑顺序与实际的物理位置相同</p> -<p>注意:</p> -<ul> -<li>线性表中的元素的位序是从1开始的,例如1、2、3...</li> -<li>数组中的元素的下标是从0开始的,例如0、1、2...</li> -</ul> -<div class="language-c ext-c line-numbers-mode"><pre v-pre class="language-c"><code><span class="token macro property"><span class="token directive-hash">#</span> <span class="token directive keyword">define</span> <span class="token macro-name">MaxSize</span> <span class="token expression"><span class="token number">20</span> </span><span class="token comment">// 定义常量MaxSize 用来声明顺序表的最大长度</span></span> - -<span class="token comment">// 线性表结构体定义【ElemType用来代指顺序表中元素的类型,例如高级语言中的int、string....】</span> -<span class="token keyword">typedef</span> <span class="token keyword">struct</span><span class="token punctuation">{</span> - ElemType data<span class="token punctuation">[</span>MaxSize<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 顺序表的元素</span> - <span class="token keyword">int</span> length<span class="token punctuation">;</span> <span class="token comment">// 顺序表的长度</span> -<span class="token punctuation">}</span>SqList - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><h4 id="存储分配" tabindex="-1"><a class="header-anchor" href="#存储分配" aria-hidden="true">#</a> 存储分配</h4> -<p><code>静态分配</code>:数组的大小和空间都是实现确定好的,一旦存储空间占满就会产生溢出,直接导致程序崩溃。(有点内存不够,宕机重启的意思....)</p> -<p><code>动态分配</code>:存储数据的空间在程序执行过程中通过<code>动态存储分配语句</code>分配的,即便是数据空间占满,也可以另外开辟一块更大的空间,来替换原来的存储空间,满足扩充数据空间的目的。(有点动态规划的意思....)最重要的是:<strong>不需要像静态分配那样,一次性地固定线性表的空间和大小</strong></p> -<div class="language-c ext-c line-numbers-mode"><pre v-pre class="language-c"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">InitSize</span> <span class="token expression"><span class="token number">100</span> </span><span class="token comment">// 表长度初始化</span></span> - - -<span class="token comment">// 动态分配数组顺序表的结构体定义</span> -<span class="token keyword">typedef</span> <span class="token keyword">struct</span><span class="token punctuation">{</span> - ElemType <span class="token operator">*</span>data<span class="token punctuation">;</span> <span class="token comment">// 动态分配数组的指针</span> - <span class="token keyword">int</span> MaxSize<span class="token punctuation">,</span>length<span class="token punctuation">;</span> <span class="token comment">// 数组的最大容量和当前元素个数</span> -<span class="token punctuation">}</span>SqList<span class="token punctuation">;</span> - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p>动态分配语句</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code>// C语言中 - -L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize); - - -// C++ 中 - -L.data=new ElemType[InitSize]; - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p><code>malloc()函数</code>: 指针型函数,返回的指针指向该分配域的开头的位置。作用是在内存的动态存储区中分配一个长度为size的连续空间。<a href="https://baike.baidu.com/item/malloc%E5%87%BD%E6%95%B0/8582146?fr=aladdin" target="_blank" rel="noopener noreferrer">百度百科<ExternalLinkIcon/></a></p> -<p><strong>动态分配不是链式存储,而是属于顺序存储结构</strong>,动态分配的物理结构没有改变,依然是随机存取的方式。只是分配的空间大小可以在运行时决定;</p> -<h4 id="顺序表的特点" tabindex="-1"><a class="header-anchor" href="#顺序表的特点" aria-hidden="true">#</a> 顺序表的特点</h4> -<ul> -<li>随机访问【这是最主要的特点】,通过存储起始地址和元素序号O(1)时间内访问指定元素。</li> -<li>存储密度高,没有结点只存储数据元素,不像索引存储那样,还需要索引表什么的..</li> -<li>逻辑上相邻的元素物理上也相邻,插入和删除需要移动大量元素</li> -</ul> -<h3 id="基本操作" tabindex="-1"><a class="header-anchor" href="#基本操作" aria-hidden="true">#</a> 基本操作</h3> -<h4 id="插入" tabindex="-1"><a class="header-anchor" href="#插入" aria-hidden="true">#</a> 插入</h4> -<p>在顺序表L的第i(1≤i≤L.length+1)个位置插入新的元素e</p> -<ul> -<li>第一步:如果i非法,则直接返回false,插入失败,结束插入过程</li> -<li>第二步:i正常,将表的第i个元素以及后面的所有元素都像有移动一个位置,在腾出来的空位置插入元素e</li> -<li>第三步:顺序表插入成功,返回true</li> -</ul> -<p>注意:先判空和临界值,提高算法健壮性</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -/* - * @Description: 顺序表的插入操作 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-02-23 07:48:26 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-02-23 07:48:26 - */ -bool ListInsert(SqList &L, int i, ElemType e){ - - // i非法 i=1 表头 i=L.length+1 表尾巴 - if(i<1||i>L.length+1){ - return false; - } - - // 存储空间满,无法插入 - if(L.length >= MaxSize){ - return false; - } - - // 遍历,将位置元素往后移动,注意从后往前循环,避免值被覆盖 - for(int j=L.length; j>=i;j--){ - L.data[j]=L.data[j-1]; - } - - // 此时,表L中的第i个元素和第i+1元素素值一样,将新元素存入i位置即可 - - // 第i个元素,对应的位置角标为i-1 - L.data[i-1]=e; - - // 表长度加1 - L.length++; - - // 返回插入成功 - return true; -} - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br></div></div><p>注意:区别顺序表中的位序和角标;</p> -<p><strong>时间复杂度</strong></p> -<ul> -<li>最好情况:在表尾插入,元素向后移动循环没有执行,时间复杂度O(1);</li> -<li>最坏情况:在表头插入,元素后移循环执行n次,时间复杂度为O(n);</li> -<li>平均情况:随机插入,平均次数为:n/2,对应的平均复杂度为O(n);</li> -</ul> -<p><strong>线性表插入算法的平均时间复杂度为:O(n)</strong></p> -<blockquote> -<p>Tips: 需要根据实现代码理解循环为什么是从后往前来实现元素后移,通过for循环可以很明显的看出表尾插入快,表头插入慢</p> -</blockquote> -<h4 id="删除" tabindex="-1"><a class="header-anchor" href="#删除" aria-hidden="true">#</a> 删除</h4> -<p>删除顺序表L中第i(1≤i≤L.length+1)个位置的元素</p> -<ul> -<li>成功,返回true,将被删除的元素用引用变量返回;</li> -<li>失败,返回false</li> -</ul> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code> -/* - * @Description: 顺序表的删除操作 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-02-23 07:48:26 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-02-23 07:48:26 - */ -bool ListDelete(SqList &L, int i, ElemType &e){ - - // i非法 i=1 表头 i=L.length+1 表尾巴 - if(i<1||i>L.length+1){ - return false; - } - - // 存储空间满,无法插入 - if(L.length >= MaxSize){ - return false; - } - - // 引用变量e赋值 - e=L.data[i-1] - - // 遍历,第i个元素后面的往前移动 - for(int j=i; j<=L.length;j++){ - // 从第i个元素开始,角标从i-1开始 - L.data[j-1]=L.data[j]; - } - - // 此时,表L中的表尾元素和倒数第二个元素值一样,将表的长度-1 - - // 表长度减1 - L.length--; - - // 返回删除成功 - return true; -} - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br></div></div><p>从这里来看,删除、插入元素都会涉及到大量的元素的移动(最好情况例外),总结而言:</p> -<ul> -<li>元素从后往前移,循环从前往后遍历</li> -<li>元素从前往后移,循环从后往前遍历</li> -</ul> -<p><strong>时间复杂度:</strong></p> -<ul> -<li>最好情况:删除表尾元素,不需要移动任何元素,时间复杂度为O(1);</li> -<li>最坏情况:删除表头元素,需要移动除第一个元素外的所有元素,时间复杂度为O(n);</li> -<li>平均情况:随机删除,平均需要(n-1)/2,对应的时间复杂度为O(n);</li> -</ul> -<p><strong>线性表删除算法的平均时间复杂度为O(n);</strong></p> -<h4 id="按值查找-顺序查找" tabindex="-1"><a class="header-anchor" href="#按值查找-顺序查找" aria-hidden="true">#</a> 按值查找(顺序查找)</h4> -<p>在顺序表L中查找第一个元素值等于e的元素,并返回位序</p> -<div class="language-C ext-C line-numbers-mode"><pre v-pre class="language-C"><code>/* - * @Description: 顺序表的按值查找(顺序查找) - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-02-23 07:48:26 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-02-23 07:48:26 - */ -int LocateElem(SqList L,ElemType e){ - int i; - // 循环判断 - for(i=0;i<L.length;i++){ - if(L.data[i]===e){ - // i是元素的角标,i+1是具体元素的位序号 - return i+1; - } - } - - // 未命中,返回0,即:没有 - return 0; - -} - -</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br></div></div><p>注意理解<code>位序</code>的含义,即元素在线性表中的位置序号,角标为<code>i</code>(角标从0开始),对应的位序为<code>i+1</code>(位序从1开始)。当返回为0时,则直接代表没有<code>命中</code>;</p> -<p><strong>时间复杂度:</strong></p> -<ul> -<li>最好情况:查找的元素在表头,只需要比较一次,循环成本最小,时间复杂度为O(1);</li> -<li>最坏情况:查找的元素在表尾或者不存在,需要完整遍历,比较n次,时间复杂度为O(n);</li> -<li>平均情况:随机查找表上的第i个(1≤i≤L.length)元素,平均次数为(n+1)/2,对应时间复杂度为O(n)</li> -</ul> -<p><strong>线性表按值查找(顺序查找)的平均时间复杂度为O(n);</strong></p> -<p><strong>顺序存取是读写方式,不是存储结构;顺序存储是存储结构,包括有:顺序存储、链式存储、索引存储、散列存储</strong></p> -</template> diff --git a/docs/.vuepress/.temp/styles/index.scss b/docs/.vuepress/.temp/styles/index.scss deleted file mode 100644 index c5cc3ef..0000000 --- a/docs/.vuepress/.temp/styles/index.scss +++ /dev/null @@ -1 +0,0 @@ -@forward '/Users/mmdapl/Desktop/github/408CSFamily/docs/.vuepress/styles/index.scss'; diff --git a/docs/.vuepress/.temp/styles/palette.scss b/docs/.vuepress/.temp/styles/palette.scss deleted file mode 100644 index e69de29..0000000 diff --git a/docs/.vuepress/.temp/vite-root/index.html b/docs/.vuepress/.temp/vite-root/index.html deleted file mode 100644 index 459371d..0000000 --- a/docs/.vuepress/.temp/vite-root/index.html +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width,initial-scale=1"> - </head> - <body> - <div id="app"></div> - <script type="module"> -import '@vuepress/client/lib/app.js' -</script> -</body> -</html> diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js deleted file mode 100644 index 9822e75..0000000 --- a/docs/.vuepress/config.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-01-19 08:04:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-23 00:06:00 - */ -module.exports = { - title: "计算机应试全家桶", - description: "磨刀不误砍柴工,读完硕士再打工", - // base: "/408CSFamily/", - port: 4200, - // head: [ - // ["link",{ rel: "icon",href: "/assets/fight_favicon.ico" }] - // ], - head: [ - ["link", { rel: "icon", href: "/assets/fight_favicon.ico" }] - ], - themeConfig: { - logo: "/assets/fight_favicon.ico", - darkMode: false, // 禁用夜色 - navbar: require("./config/navbar"), // 注意这个关键字有所改变 - sidebar: require("./config/sidebar"), - smoothScroll: true, - lastUpdated: true, - lastUpdatedText: "最近更新", - contributorsText: '贡献者', - notFound: ['宝贝不要急,我努力更新就会慢慢有的哟...想要什么,也欢迎微信后台私信哟!'],// 自定义404页面提示语,数组 - backToHome: '返回首页', // 返回首页 - repo: "https://github.com/mmdapl/408CSFamily", - - editLink: false, - // 默认为 "Edit this page" - // editLinkText: '帮助我们改善此页面!', - displayAllHeaders: true,// 默认值:false 显示所有页面的标题链接 - search: true, - searchMaxSuggestions: 10, - }, - // plugins: [ - // // 全文搜索 参考配置:https://github.com/vuepress/vuepress-next/blob/main/docs/.vuepress/config.ts - // ['@vuepress/docsearch', - // { - // apiKey: '<API_KEY>', - // indexName: '<INDEX_NAME>', - // locales: { - // '/': { - // placeholder: '搜索一下', - // translations: { - // button: { - // buttonText: '搜索一下', - // buttonAriaLabel: '搜索一下', - // }, - // modal: { - // searchBox: { - // resetButtonTitle: '清除查询条件', - // resetButtonAriaLabel: '清除查询条件', - // cancelButtonText: '取消', - // cancelButtonAriaLabel: '取消' - // }, - // startScreen: { - // recentSearchesTitle: '搜索历史', - // noRecentSearchesText: '没有搜索历史', - // saveRecentSearchButtonTitle: '保存至搜索历史', - // removeRecentSearchButtonTitle: '从搜索历史中移除', - // favoriteSearchesTitle: '收藏', - // removeFavoriteSearchButtonTitle: '从收藏中移除', - // }, - // errorScreen: { - // titleText: '无法获取结果', - // helpText: '你可能需要检查你的网络连接', - // }, - // footer: { - // selectText: '查询', - // selectKeyAriaLabel: 'Enter key', - // navigateText: '切换', - // navigateUpKeyAriaLabel: 'Arrow up', - // navigateDownKeyAriaLabel: 'Arrow down', - // closeText: '关闭', - // closeKeyAriaLabel: 'Escape key', - // searchByText: '技术支持', - // }, - // noResultsScreen: { - // noResultsText: '无法找到相关结果', - // suggestedQueryText: '你可以尝试查询', - // openIssueText: '你认为该查询应该有结果?', - // openIssueLinkText: '点击反馈', - // }, - // }, - // } - // } - // } - // }], - // // other plugins - // // [ - // // // 本地全文搜索 - // // '@vuepress/plugin-search', - // // { - // // locales: { - // // '/': { - // // placeholder: '搜索', - // // }, - // // '/zh/': { - // // placeholder: '搜索', - // // }, - // // }, - // // maxSuggestions: 10 // 显示最大搜索 - // // }, - // // ], - // ] -}; \ No newline at end of file diff --git a/docs/.vuepress/config/navbar.js b/docs/.vuepress/config/navbar.js deleted file mode 100644 index d822ee8..0000000 --- a/docs/.vuepress/config/navbar.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-01-19 08:04:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:44:10 - */ - -module.exports = [ - // { - // text: "考研规划", - // link: "/DS1/" - // }, - { - text:'首页', - link:'/' - }, - { - text: "恶补算法", - // link: "/DS/coding/algorithm" - children:[{ - text:'课本习题', - link:'/' - },{ - text:'刷题笔记', - link:'/todo' - },{ - text:'在线刷题', - children:[ { - text: '杭电OJ', link: 'http://acm.hdu.edu.cn/' - }, - { - text: '牛客网', link: 'https://www.nowcoder.com/' - }, { - text: 'LeetCode', link: 'https://leetcode-cn.com/' - }] - }] - }, - { - text: "数据结构", - link: "/DS/" - }, - { - text: "操作系统", - link: "/OS/" - }, - { - text: "计算机组成原理", - link: "/CCP/" - }, - - { - text: "计算机网络", - link: "/CN/" - },{ - text:'其他资料', - children:[{ - text:'考研相关', - children:[{ - text:'111', - link:'/333' - }] - },{ - text: "思维导图", - children:[{ - text:'数据结构', - link:'/NoteMap/DS_Map' - },{ - text:'操作系统', - link:'/NoteMap/OS_Map' - },{ - text:'计组', - link:'/NoteMap/CCP_Map' - },{ - text:'计算机网络', - link:'/NoteMap/CN_Map' - }] - }] - }, - { - text: "大事记", - link: "/Big_Event_History/" - }, - -]; diff --git a/docs/.vuepress/config/sidebar.js b/docs/.vuepress/config/sidebar.js deleted file mode 100644 index c313422..0000000 --- a/docs/.vuepress/config/sidebar.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * @Description: 测试 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-01-19 08:04:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-08 23:29:11 - */ -module.exports = { - // "/category/": require("../../category/sidebar_contents"), - // "/DataStructure/": require("../../category/sidebar_contents"), - "/DS/":require("../../DS/sidebar_contents") - -}; diff --git a/docs/.vuepress/public/assets/408_favicon.ico b/docs/.vuepress/public/assets/408_favicon.ico deleted file mode 100644 index 839b6d7..0000000 Binary files a/docs/.vuepress/public/assets/408_favicon.ico and /dev/null differ diff --git a/docs/.vuepress/public/assets/fight_favicon.ico b/docs/.vuepress/public/assets/fight_favicon.ico deleted file mode 100644 index b59f641..0000000 Binary files a/docs/.vuepress/public/assets/fight_favicon.ico and /dev/null differ diff --git a/docs/.vuepress/public/assets/image_code/official_wechat_code.png b/docs/.vuepress/public/assets/image_code/official_wechat_code.png deleted file mode 100644 index ea68a5b..0000000 Binary files a/docs/.vuepress/public/assets/image_code/official_wechat_code.png and /dev/null differ diff --git a/docs/.vuepress/public/assets/image_code/wechat_donate_code.jpeg b/docs/.vuepress/public/assets/image_code/wechat_donate_code.jpeg deleted file mode 100644 index 3d1a312..0000000 Binary files a/docs/.vuepress/public/assets/image_code/wechat_donate_code.jpeg and /dev/null differ diff --git a/docs/.vuepress/public/assets/image_code/基础入门.png b/docs/.vuepress/public/assets/image_code/基础入门.png deleted file mode 100644 index d1c2919..0000000 Binary files a/docs/.vuepress/public/assets/image_code/基础入门.png and /dev/null differ diff --git a/docs/.vuepress/public/assets/image_code/线性表.png b/docs/.vuepress/public/assets/image_code/线性表.png deleted file mode 100644 index f6fdcdf..0000000 Binary files a/docs/.vuepress/public/assets/image_code/线性表.png and /dev/null differ diff --git a/docs/.vuepress/public/assets/logo.png b/docs/.vuepress/public/assets/logo.png deleted file mode 100644 index ac6beaf..0000000 Binary files a/docs/.vuepress/public/assets/logo.png and /dev/null differ diff --git a/docs/.vuepress/styles/index.scss b/docs/.vuepress/styles/index.scss deleted file mode 100644 index aca10a4..0000000 --- a/docs/.vuepress/styles/index.scss +++ /dev/null @@ -1,177 +0,0 @@ - -/* 此处自定义样式,对主题进行覆盖 */ - - -// 首页导航按钮 -.actions>a{ - margin-left: 5px; - margin-right: 5px; -} -// 隐藏 全文搜索 -.DocSearch-Logo{ - // display:none;不占位隐藏 - visibility:hidden; // 占位隐藏 -} -.DocSearch-Button-Keys{ - visibility:hidden -} -// 首页title描述 -.home .hero .description{ - max-width: fit-content; -} - -// 搜索框 -#docsearch-container>button{ - border-radius: 5px; -} - -.code-group__nav-tab-active{ - color:var(--c-brand) -} - -.open-info-div{ - text-align: center; - align-content: center; - a{ - margin: 5px; - } -} - - -// 全站主题色 -:root { - // brand colors - // --c-brand: #3eaf7c; - // --c-brand-light: #4abf8a; - - --c-brand: #4ce9ad; - --c-brand-light: #42b983; - - // background colors - --c-bg: #ffffff; - --c-bg-light: #f3f4f5; - --c-bg-lighter: #eeeeee; - --c-bg-navbar: var(--c-bg); - --c-bg-sidebar: var(--c-bg); - --c-bg-arrow: #cccccc; - - // text colors - --c-text: #2c3e50; - --c-text-accent: var(--c-brand); - --c-text-light: #3a5169; - --c-text-lighter: #4e6e8e; - --c-text-lightest: #6a8bad; - --c-text-quote: #999999; - - // border colors - --c-border: #eaecef; - --c-border-dark: #dfe2e5; - - // custom container colors - --c-tip: #42b983; - --c-tip-bg: var(--c-bg-light); - --c-tip-title: var(--c-text); - --c-tip-text: var(--c-text); - --c-tip-text-accent: var(--c-text-accent); - --c-warning: #e7c000; - --c-warning-bg: #fffae3; ---c-warning-title: #ad9000; ---c-warning-text: #746000; ---c-warning-text-accent: var(--c-text); ---c-danger: #cc0000; ---c-danger-bg: #ffe0e0; ---c-danger-title: #990000; ---c-danger-text: #660000; ---c-danger-text-accent: var(--c-text); ---c-details-bg: #eeeeee; - -// badge component colors ---c-badge-tip: var(--c-tip); ---c-badge-warning: var(--c-warning); ---c-badge-danger: var(--c-danger); - -// transition vars ---t-color: 0.3s ease; ---t-transform: 0.3s ease; - -// code blocks vars ---code-bg-color: #282c34; ---code-hl-bg-color: rgba(0, 0, 0, 0.66); ---code-ln-color: #9e9e9e; ---code-ln-wrapper-width: 3.5rem; - -// font vars ---font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, - Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; ---font-family-code: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - -// layout vars ---navbar-height: 3.6rem; ---navbar-padding-v: 0.7rem; ---navbar-padding-h: 1.5rem; ---sidebar-width: 20rem; ---sidebar-width-mobile: calc(var(--sidebar-width) * 0.82); ---content-width: 740px; ---homepage-width: 960px; -} - -// plugin-back-to-top -.back-to-top { ---back-to-top-color: var(--c-brand); ---back-to-top-color-hover: var(--c-brand-light); -} - -// plugin-docsearch -.DocSearch { ---docsearch-primary-color: var(--c-brand); ---docsearch-text-color: var(--c-text); ---docsearch-highlight-color: var(--c-brand); ---docsearch-muted-color: var(--c-text-quote); ---docsearch-container-background: rgba(9, 10, 17, 0.8); ---docsearch-modal-background: var(--c-bg-light); ---docsearch-searchbox-background: var(--c-bg-lighter); ---docsearch-searchbox-focus-background: var(--c-bg); ---docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand); ---docsearch-hit-color: var(--c-text-light); ---docsearch-hit-active-color: var(--c-bg); ---docsearch-hit-background: var(--c-bg); ---docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark); ---docsearch-footer-background: var(--c-bg); -} - -// plugin-external-link-icon -.external-link-icon { ---external-link-icon-color: var(--c-text-quote); -} - -// plugin-medium-zoom -.medium-zoom-overlay { ---medium-zoom-bg-color: var(--c-bg); -} - -// plugin-nprogress -#nprogress { ---nprogress-color: var(--c-brand); -} - -// plugin-pwa-popup -.pwa-popup { ---pwa-popup-text-color: var(--c-text); ---pwa-popup-bg-color: var(--c-bg); ---pwa-popup-border-color: var(--c-brand); ---pwa-popup-shadow: 0 4px 16px var(--c-brand); ---pwa-popup-btn-text-color: var(--c-bg); ---pwa-popup-btn-bg-color: var(--c-brand); ---pwa-popup-btn-hover-bg-color: var(--c-brand-light); -} - -// plugin-search -.search-box { ---search-bg-color: var(--c-bg); ---search-accent-color: var(--c-brand); ---search-text-color: var(--c-text); ---search-border-color: var(--c-border); - ---search-item-text-color: var(--c-text-lighter); ---search-item-focus-bg-color: var(--c-bg-light); -} diff --git a/docs/.vuepress/styles/palette.less b/docs/.vuepress/styles/palette.less deleted file mode 100644 index e69de29..0000000 diff --git a/docs/Big_Event_History.md b/docs/Big_Event_History.md deleted file mode 100644 index e4741f8..0000000 --- a/docs/Big_Event_History.md +++ /dev/null @@ -1,10 +0,0 @@ -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:43:19 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:44:50 ---> - -## 网站大事记 diff --git a/docs/CCP/Readme.md b/docs/CCP/Readme.md deleted file mode 100644 index 4170e52..0000000 --- a/docs/CCP/Readme.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Readme -date: 2021-03-08 10:09:25 -permalink: /pages/c12319/ -categories: - - ComputerComposePrinciple -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:09:25 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-08 10:09:52 ---> - - - -## 当前状态 -doing \ No newline at end of file diff --git a/docs/CCP/sidebar_content.js b/docs/CCP/sidebar_content.js deleted file mode 100644 index 7e13ccd..0000000 --- a/docs/CCP/sidebar_content.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * @Description: 计算机组成原理 导航栏 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:19:09 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:19:10 - */ - -module.exports=[ - -] \ No newline at end of file diff --git a/docs/CN/Readme.md b/docs/CN/Readme.md deleted file mode 100644 index 211a250..0000000 --- a/docs/CN/Readme.md +++ /dev/null @@ -1,12 +0,0 @@ - -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:10:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:33:59 ---> - -## 计算机网络 -doing \ No newline at end of file diff --git a/docs/DS/README11.md b/docs/DS/README11.md deleted file mode 100644 index ddff984..0000000 --- a/docs/DS/README11.md +++ /dev/null @@ -1,973 +0,0 @@ ---- -title: null -date: 2021-03-07 23:04:24 -permalink: /pages/c1bec1/ -categories: - - DataStructure -tags: - - ---- - - -# - - -<p align="center"> - <img src="https://cdn.142vip.cn/article-notes/img/image-20200605224832237.png"> -</p> -<p align="center"> - <a href="#gzh" target="_blank"><img src="https://img.shields.io/badge/WeChat-公众号-5wd.svg"></a> -<a href="#wechat" target="_blank"><img src="https://img.shields.io/badge/WeChat-微信-yellow.svg"></a> -<a href="https://space.bilibili.com/350937042" target="_blank"><img src="https://img.shields.io/badge/Bilibili-哔哩哔哩-green.svg"></a> -<a href="https://142vip.cn" target="_blank"><img src="https://img.shields.io/badge/142vip-网站-orange.svg"></a> -<a href="https://blog.142vip.cn" target="_blank"><img src="https://img.shields.io/badge/blog-博客-blue.svg"></a> -<a href="https://github.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/github-Github-9ac.svg"></a> -<a href="https://gitee.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/gitee-码云-4ed.svg"></a> -<a href="https://blog.csdn.net/Mmdapl" target="_blank"><img src="https://img.shields.io/badge/csdn-CSDN-8ea.svg"></a> -<a href="https://juejin.im/user/448256476724807" target="_blank"><img src="https://img.shields.io/badge/JueJin-掘金-75c.svg"></a> -</p> - - -<div align="center" style="font-size:20px"> - <a href="https://gitee.com/mmdapl/JavaScriptCollection" target="_blank">码云版</a> - <!-- || - <a href="readme-wechat.md" target="_blank">微信版</a> --> -</div> - - -## 写最前面 - -> 这里是日常工作、学习、生活中总结的各类文章笔记,主要涉及开发技术总结记录,偶尔也会感慨万千,水一些无关技术的文章;若发现博客外链不能访问则可能博客设置修改过,请直接访问博客;所有内容会选择性的发表于**微信公众号、个人博客、掘金、CSDN ,实际内容以本仓库排版、校对为主。** 也会不定时同步到 **码云** 。 -> **以下内容没有链接的代表尚未完成,大家善用快捷键Ctrl+F** -> -> 创建时间:2020年2月14日 - - - -## 关于作者 - - -- <img src="https://cdn.142vip.cn/article-notes/img/original.png" width="36" height="26" align="left" />[个人项目整理](http://blog.142vip.cn/s/projects) -- <img src="https://cdn.142vip.cn/article-notes/img/original.png" width="36" height="26" align="left" />[自我介绍]() - - -## 思维导图 - - -> 内容同步与文档,可以结合思维导图对文档进行有效学习.相关目录的xmind文件为思维导图原文件 - - -## 日常推荐 - - -- [云服务器推荐](docs/recommend/云服务器推荐.md) -- [学习网站、使用工具](docs/recommend/学习网站、效率工具.md) -- [值得细读的技术文章推荐](docs/recommend/值得细读的技术文章推荐.md) - - -# 文章笔记 - - -**注:无高亮有效访问链接的待完成/同步** - - -## 前端 - - -> 前端技术百花齐放、层出不穷,个人认为要注重广度,学会看官方文档熟练操作即可; - - -#### CSS - - -> 依赖W3CSchool文档和日常整理,主要是对CSS常用操作和基础属性进行整理总结。不会过多深入 - - -- [CSS开发规范](docs/css/CSS开发规范.md) - -- 样式属性 - -- 页面布局 - -- 移动端适配 - - - - -##### [基础教程](docs/css/基础教程) - - -## - - -#### JavaScript - - -> **本级目录下的JavaScript内容没有发表到[博客](http://blog.142vip.cn)上,建议对照[脑图](docs/javascript/README.md)在[JavaScript主目录](javascript)下学习**,依赖官方文档及自身对JavaScript语言的初步了解,进行的关于JavaScript知识整理,主要目的是复习基础概念、了解新特性、熟练ES6/7操作;整体相对来说由易到难,方便后续查阅学习~ - - -##### 快速入门 - - -- [简单介绍](docs/javascript/快速入门/javascript简单介绍.md) -- [快速了解](docs/javascript/快速入门/javascript快速入门.md) -- [JavasScript开发规范](docs/javascript/JavaScript开发规范.md) - - -##### 基础教程 - - -- [语法与数据结构](docs/javascript/基础教程/javascript语法与数据结构.md) -- [循环与迭代](docs/javascript/基础教程/javascript循环与迭代.md) -- [流程控制与错误处理](docs/javascript/基础教程/javascript流程控制与错误处理.md) -- [表达式和运算符](docs/javascript/基础教程/javascript表达式和运算符.md) -- [函数和方法](docs/javascript/基础教程/javascript函数.md) -- [数字和日期](docs/javascript/基础教程/javascript数字和日期.md) -- [对象的使用](docs/javascript/基础教程/javascript对象的使用.md) -- [正则表达式](docs/javascript/基础教程/javascript正则表达式.md) -- [promise对象的使用](docs/javascript/基础教程/promise对象的使用.md) -- [modules模块](docs/javascript/基础教程/modules模块.md) - - -##### 中级教程 - - -- [Promise对象](docs/javascript/中级教程/promise对象.md) -- [async函数](docs/javascript/中级教程/async函数.md) -- [class类](docs/javascript/中级教程/class类.md) - - -##### 高级教程 - - -- [不一样的ajax](docs/javascript/高级教程/不一样的ajax.md) -- [什么是事件循环](docs/javascript/高级教程/什么是事件循环.md) - -- [JSON.stringify()的三个参数]() - - -##### 最后稻草 - - -- [ES6、ES7、ES8、ES9、ES10的新特性](docs/javascript/最后稻草/ES6、ES7、ES8、ES9、ES10的新特性.md) -- [ES2020新特性](docs/javascript/最后稻草/ES2020新特性.md) -- [JavaScript 工具函数大全](docs/javascript/最后稻草/JavaScript工具函数大全.md) -- [常用函数方法整理](docs/javascript/最后稻草/常用函数方法整理.md) - - -#### JQuery - - -- [安装使用](docs/jquery/安装使用.md) -- [基本属性](docs/jquery/基本属性.md) - - -- Css样式 - - -- 选择器 - - -- 文档处理 - - -- 筛选 - - -- 事件 - - -- 效果 - - -- 事件对象 - - -- 延迟对象 - - -- 回调函数 - - -- 其他整理 - - -#### Vuejs - - -> 介绍基础、常用的vue功能,不会很深入的涉及到vue源码及原理 - - -#### React - - -#### Nuxtjs - - -> Nuxtjs是在vue框架上进行封装的,主要是用来解决单体页面的服务端渲染问题,提供网站进行SEO优化的可能 - - -[前端读写cookie]() - - -#### UI框架 - - -> 市面上前端框架层出不穷,不同的技术栈依赖的UI框架也不尽相同,这里将会依据笔者使用的UI框架,以线上项目展示的方式,介绍用过的框架; - - -- Bootstrap -- LayerUI -- Ant-design-vue -- iView-UI -- VantUI -- Element-UI - - -## 后端【Node】 - - -> 相比前端,作为偏后端的开发者, 后端技术的学习则需要稳扎稳打、不断积累整理,在会用、能用、熟练的基础上,更应该学习其中的原理;所以若你为后端开发者,不论Java、Nodejs、Go等技术栈,对待下面将提及的微服务架构、容器技术、服务治理、高可用等都需要努力学习,抓住重点; -> -> 在面试面前,能力是不会说谎的,打铁还需自身硬,加油~ - - -#### Express框架 - - -- [框架概念简介](docs/express/框架介绍.md) -- [brew和tree的安装](docs/express/brew和tree的安装.md) -- 搭建express基础项目 -- 安装 -- 路由 -- 静态文件 -- 中间件 -- 统一错误处理 -- [express()函数](docs/express/express()函数.md) -- [application对象详解](docs/express/application对象详解.md) -- [request对象](docs/express/request对象.md) -- [respon对象]() -- [router对象]() -- 数据库集成 -- MVC分层 -- [pm2进程管理](docs/express/pm2进程管理.md) -- 分环境部署上线 - - -#### Koa框架 - - -- koa介绍 -- 手把手搭建第一个koa项目 -- 应用(Application) -- 中间件(Middleware) -- 上下文(Context) -- 请求(Request) -- 响应(Response) - - -#### Eggjs框架 - - -##### 基础篇 - - -- [第一部分:Git概述](docs/eggjs/git-README.md) - - -* [1.1 下载和安装](docs/eggjs/git-download.md) - * [1.2 基本配置](docs/eggjs/git-config.md) - * [1.3 常用命令](docs/eggjs/git-dns.md) - * [1.4 GitHub简单使用](docs/eggjs/git-github.md) - * [1.5 GitBook简单使用](https://mp.weixin.qq.com/s/Wn_IZ6K4eqh1PtomRtqdqg) - * [1.5.1 Typora简介](docs/eggjs/git-typora.md) - * [1.5.2 MarkDown语法](docs/eggjs/git-markdown.md) - * [1.6 码云和GitHub的选择](docs/eggjs/git-choice.md) - - -- [第二部分:数据库概述](docs/eggjs/mysql-README.md) - - - - [2.1 下载和安装](docs/eggjs/mysql-download.md) - - [2.2 连接数据库](docs/eggjs/git-connect.md) - - [2.3 CURD操作](docs/eggjs/mysql-curd.md) - - [2.4 Redis缓存](docs/eggjs/mysql-redis.md) - - [2.4.1 redis安装](docs/eggjs/mysql-redis-install.md) - - [2.4.2 redis常用指令](docs/eggjs/mysql-redis-dns.md) - - [2.5 可视化管理](docs/eggjs/mysql-redis-view.md) - - -##### 入门篇 - - -- [第一部分:Egg框架快速入门](docs/eggjs/egg-README.md) - - -- [1.1 基础功能](docs/eggjs/egg-base.md) - - [1.1.1 接口参数获取](docs/eggjs/egg-request-params.md) - - [1.1.2 Egg内置对象 ](docs/eggjs/egg-object.md) - - [1.1.3 Config配置](docs/eggjs/egg-config.md) - - [1.1.4 Egg生命周期](docs/eggjs/egg-life.md) - - [1.1.5 中间件理解](docs/eggjs/egg-middleware.md) - - [1.1.6 Router路由分发](docs/eggjs/egg-router.md) - - [1.1.7 Controller控制器](docs/eggjs/egg-controller.md) - - [1.1.8 Service服务](docs/eggjs/egg-service.md) - - [1.1.9 常用插件](docs/eggjs/egg-plugin.md) -- [1.2 核心功能](docs/eggjs/egg-core.md) - - [1.2.1 日志输出](docs/eggjs/egg-logger.md) - - [1.2.2 定时任务](docs/eggjs/egg-schedule.md) - - [1.2.2 HttpClient网络请求](docs/eggjs/egg-httpclient.md) - - [1.2.3 Cookie的基本使用](docs/eggjs/egg-cookies.md) - - [1.2.4 Session的基本使用](docs/eggjs/egg-session.md) - - [1.2.5 统一异常-错误处理](docs/eggjs/egg-try-catch.md) - - [1.2.6 CSRF防范和XSS攻击](docs/eggjs/egg-csrf-xss.md) - - [1.2.7 RESTful API接口风格](docs/eggjs/egg-restful.md) - - -- [第二部分:插件开发](docs/eggjs/plugin-README.md) - - - - [2.1 egg-validate参数校验](docs/eggjs/plugin-egg-validate.md) - - [2.2 egg-view-ejs页面渲染](docs/eggjs/plugin-egg-view.ejs.md) - - [2.3 egg-redis缓存](docs/eggjs/plugin-egg-redis.md) - - [2.4 egg-mysql](docs/eggjs/plugin-egg-mysql.md) - - [2.5 egg-sequelize](docs/eggjs/plugin-egg-sequelize.md) - - [2.6 egg-socket.io即时通讯](docs/eggjs/plugin-egg-socket.io.md) - - -##### 代码实战篇 - - -- [第一部分:常用代码](docs/eggjs/project-README-CODE.md) - - - - [1.1 图片前端在线剪辑](docs/eggjs/project-images-cropper.md) - - [1.2 文件上传后台处理](docs/eggjs/project-upload.md) - - [1.3 MD5加密-解密算法](docs/eggjs/project-md5.md) - - [1.4 Egg Jwt加密和校验](docs/eggjs/project-token.md) -- [第二部分:项目简介](docs/eggjs/project-README-INTRODUCE.md) - - - - [2.1 基于OAuth2的统一认证中心系统](docs/eggjs/project-ssoCenterSystem.md) - - [2.2 常用前后端分页比较与实现](docs/eggjs/project-pagenation.md) - - [2.3基于Spring Boot实现的个人博客](docs/eggjs/project-spring-boot-blog.md) - - [2.4 基于Yapi搭建的接口管理系统](docs/eggjs/project-webapi.md) - - [2.5 GitBook开源笔记总结站点搭建](docs/eggjs/project-gitbook.md) - - [2.6 个人网站及接口服务搭建搭建](docs/eggjs/project-142vip.cn.md) -- [第三部分:手把手搭建基础Egg开发框架](docs/eggjs/egg-egg-example.md) - - -#### Nestjs框架 - - -> Nestjs框架推崇typescript语法,并且友好的兼容express框架,因此在学习Nestjs框架之前,请务必先熟悉express框架相关操作并进行typescript入门;在一定程度上typescript和面向对象语言Java、Net等很相似,如果你之前有JavaScript和Java的基础,那么应该恭喜你,你的学习速度将会倍速提高 - - -- [核心基础概念](nestjs/nestjs核心基础概念.md) -- [项目创建初始化入门](nestjs/nestjs项目创建初始化入门.md) -- [整合swagger快速生成api文档](nestjs/nestjs整合swagger快速生成api文档.md) -- [接口路由请求传参](nestjs/nestjs接口路由请求传参.md) - - -## 算法 - - -- 算法分析 - - -#### 查找 - - -- 顺序查找 -- 折半查找 -- 分块查找 -- B树和B+树 -- 散列(Hash)表 -- 字符串模式匹配(KPM) - - -#### 排序 - - -- 插入排序 -- 交换排序 -- 选择排序 -- 归并排序 -- 基数排序 -- 内部排序比较 -- 外部排序比较 - - -#### LeetCode刷题 - - -## 数据库 - - -> 主讲数据库基础知识,结合node的简单使用,相关的部署方案参照下方的文档 - - -#### MySQL - - -- [【服务器版】MySQL的安装部署](https://mp.weixin.qq.com/s/U1OUZYHEChFDx03FvgbMHA) -- [MySQL优化之Explain参数说明](docs/mysql/MySQL优化之Explain参数说明.md) -- 索引 -- sql优化 -- [基于GTID主从复制的原理和基础配置](docs/mysql/基于GTID主从复制的原理和基础配置.md) -- [MySQL日志类型把我难哭了,你学废了吗?](docs/mysql/mysql日志比较.md) - - -#### Redis - - -> 将围绕redis基础概念、使用场景、使用方式、简单部署等方面 展开介绍,[主目录](redis)下有自己觉得还不错PDF文档~ - - -- [key命名规范与建议](docs/redis/key命名规范与建议.md) -- [redis开发使用规范](docs/redis/redis开发使用规范.md) -- [redis基础介绍](docs/redis/redis基础介绍.md) -- [redis的简单安装和部署](https://mp.weixin.qq.com/s/Xe-ZDf2kgUWfYSkuULAdlw) -- [官方默认配置模板](code/docs/redis/redis-default.conf) -- 数据类型 -- [redis简单主从集群部署-docker方式](docs/docs/redis/redis集群部署.md) -- [memCache与Redis比较](docs/redis/memCache与Redis.md) - - -#### Mongo - - -- 基本介绍 -- 安装部署 -- 简单使用 -- Node下的CURD操作 - - -## 服务部署 - - -#### nginx - - -- [nginx安装,普通安装 Or Docker搞定?](docs/nginx/nginx基础部署.md) -- [手把手nginx基础入门]() -- [反向代理、负载均衡真有那么难吗?]() -- [Nginx SSL证书,从此踏上Https之路](docs/nginx/nginx服务器ssl证书配置.md) - - -#### docker - - -- 我与docker的第一次硬碰硬 -- docker操作入门真有那么难吗? -- 这些基础操作指令,你会吗? -- 那些年,我常用的docker指令操作汇总 - - -#### docker-compose - - -- 听说你装了N次都没搞定? -- 集群启动失败,yaml规范不清楚? -- [我了解的docker-compose都在这里了](https://mp.weixin.qq.com/s/nC4nF51xn61TZlenuUxDog) - - -#### linux下shell编程 - -- [shell基础整理](https://mp.weixin.qq.com/s/gctrWdB1JEK59_a9tJQSkg) -- [操作mysql数据库](shell/shell连接mysql.md) -- shell操作docker -- 环境变量env - - -## 服务网关 - - -#### kong - - -- [kong的的基本介绍](/api-gateway/kong/kong的基本介绍.md) -- [docker下kong的部署](/api-gateway/kong/基于docker部署kong网关服务.md) -- docker-compose搭建kong集群 -- 可视化管理界面介绍 - - -#### konga - - -- 基本介绍与docker部署 -- 简单使用 -- 路由管理 - - -#### kong-dashboard - - -- docker简单部署 -- 路由管理 -- 插件介绍 - - -## 服务注册 - - -#### Apollo - - -> 携程开发的配置中心经典项目,可集成多语言客户端,实现灰度部署,在分布式微服务的场景下抽离出服务配置,方便统一管理、发布 - - -#### Consul - - -> 服务注册、发现,key-value键值对管理 - - -#### Nacos - - -> 背靠国内一线互联网大厂——阿里巴巴,也是可适用于微服务下的配置管理,支持Java、Nodejs等主流语言,目前生态良好,技术支持表现一般,属于Apollo替代产品 - - -## 消息中间件 - - -> 消息队列已经逐渐成为企业IT系统内部通信的核心手段。具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。 -> -> 目前个人了解的有:RabbitMQ、Kafka、RocketMQ - - -#### RabbitMQ - - -#### kafka - - -#### RocketMQ - - -## RPC框架 - - -#### gRPC - - -> gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统,tensorflow分布式与tensorflow serving底层通信都是是用的grpc。我自己基于JavaScript技术栈上较多的接触到gRPC,传送门:[基于js下各框架grpc的使用]() - - -- nodejs下grpc的简单实用 - - -- grpc集成express框架 - - -- grpc集成koa框架 - - -- eggjs框架下grpc的线上部署 - - -- grpc插件开发示例 - - - - - -#### Dubbo - - -> Alibaba开发的一个RPC框架,远程接口基于Java Interface, 依托于Spring框架(**Java技术栈重点研究**) - - -#### Thrift - - -> Apache的一个项目(http://thrift.apache.org),前身是Facebook开发的一个RPC框架,采用thrift作为IDL (Interface description language)。 - - -## Elk日志管理平台 - - -> 全链路日志 - -- [ELK基础概念与常用架构整理](docs/elk/基础概念与常用架构整理.md) - - -#### ElasticSearch - - -> 数据存储 - - -#### Logstash - - -> 数据收集 - - -#### Kibana - - -> 数据展示 - - -## 监控工具 - - -> 参考笔者线上平台:http://view.142vip.cn/grafana 账号/密码:test/123456 基于docker部署,由于是个人学生服务器,站点访问延迟较高 -> -> 常用工具:promethus 、grafana、zabbix、lepus等 - - -#### Prometheus - - -#### Grafana - - -#### Zabbix - - -#### lepus(天兔) - - -## 高可用架构 - - -#### MySQL集群 - - -##### 主从同步 - - -> 实现功能:主从服务器数据一致,低延迟、高并发 - - -- Binlog主从复制 -- GTID主从复制 -- 主主复制 - - -##### 代理中间件 - - -> 实现功能:读写分离、分库分表、负载均衡、故障切换 - - -- Mycat -- 360Atlas - - -#### 集群监控 - - -> 实现功能:实时监控、可视化数据显示、故障报警 - - -##### Prometheus - - -- 监控MySQL集群 -- 监控Mongo数据库 -- 监控Node服务 -- 监控linux服务器 -- 监控redis集群 - - -##### Grafana - - -- 基本安装部署 -- 功能介绍和简单操作 -- 可视化数据图形显示界面 -- 常用模板 - - -##### alter-manager - - -- 推送到邮箱 -- 推送到钉钉、微信机器人 -- 推送到自定义消息接口(webhook钩子) - - -#### 压力测试 - - -- jmeter - - -#### Redis集群 - - -> 持续整理中... - - -##### 简单主从模式 - - -#### 哨兵模式 - - -##### cluster模式 - - -## 网站搭建 - - -> 从大二开始搭建个人网站:http://www.142vip.cn 起初非常简陋,工作之后计划进行第三版迭代,一直抽空佛系谢谢, 目前在重构中.. - - -- 最初的梦想 -- 舍弃Java,我的重构之路 -- 网站正规化,Nginx配置SSL证书 -- 小小网站却耗费三台学生服务器? - - - - - - -## 书籍整理 - -### 技术类 -> 待整理 - -#### [狼书 - 了不起的Node.js](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/Readme.md) - -- [第一章 Node.js初识](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第一章%20Node.js初识.md) -- [第二章 Nodejs安装与入门](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第二章%20Nodejs安装与入门.md) -- [第三章 更了不起的Node.js](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第三章%20更了不起的Node.js.md) -- [第四章 更好的Node.js](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第四章%20更好的Node.js.md) -- [第五章 Node.js是如何执行的](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第五章%20Node.js是如何执行的.md) -- [第六章 模块与核心](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第六章%20模块与核心.md) -- [第七章 异步写法与流程控制](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/第七章%20异步写法与流程控制.md) - -- [全部笔记](./docs/读书笔记/../article-records/读书笔记/狼书-了不起的Node.js/全部笔记.md) - - -#### [ES6标准入门——阮一峰]() - -> 本书内容较多,很多基础细节都有说明,难度中等、适合入门,书中很多例子我也摘抄了很多,主要是我认为重要的,笔记按照自己学习逻辑整理的,请君慢用 -- [1.ECMAScript 6 简介](./docs/article-records/读书笔记/ES6标准入门/1.ECMAScript%206%20简介.md) -- [2.let和const命令](./docs/article-records/读书笔记/ES6标准入门/2.let和const的命令.md) -- [3.变量的解构赋值](./docs/article-records/读书笔记/ES6标准入门/3.变量的解构赋值.md) -- [4.字符串详解]() -### 非技术类 - -> 主要是跟计算机无关的一些书,在看完之后,会选择性的进行思维导图、经典词句整理,也可能添加个人思考 - - -#### [你好孤独 - 陈果](docs/article-records/读书笔记/好的孤独-陈果/Readme.md) - -## 公众号汇总 - -### 2020年 - -#### 7月 - -- [【2020-07-26】微信公众号我来了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483659&idx=1&sn=ac7b633a45ac06d388e0698163a2543e&chksm=fcdfb887cba8319151aedfa80c5b59d130838af81fe51c76e5c4926f82f4937b51c8c0c1470e&token=1304241434&lang=zh_CN#rd) - -- [【2020-07-27】介绍一下,我在B站](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483760&idx=1&sn=30a9fa2a051079c5330039615950c34d&chksm=fcdfb8fccba831ea64644be501ecca3cea5846f16367faed9c84b44a30d9b6dc30456dae6548&token=1304241434&lang=zh_CN#rd) - - -- [【2020-07-28】五年了,我终于换了人生中的第一台MacBookPro](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483762&idx=1&sn=e9ea759f1c1589881cc3bd9cabddb70a&chksm=fcdfb8fecba831e8c4635a4cefd302977071ed11a4dda6161cf9ad8458865297194f87cb013a&token=1304241434&lang=zh_CN#rd) - - -- [【2020-07-29】工作中第一次被喷,我到底是如何应对的?](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483770&idx=1&sn=6b760873a814f4e18baab415bee3d863&chksm=fcdfb8f6cba831e00802de653ff6723a0bb169a93fe3a6a9762ee62d75d8cd88409268db9047&token=1304241434&lang=zh_CN#rd) - - -- [【2020-07-31】CSDN关注100了,就这????](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483778&idx=1&sn=3d9f623c58d595f75d7092783a6c5abe&chksm=fcdfb80ecba83118e76de1ed88a5be51229e4145182aee6e0bcc13e4697707cf9f4609d8799d&token=1304241434&lang=zh_CN#rd) - - - -#### 8月 -- [【2020-08-01】旧友相见,甚是怀念](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483790&idx=1&sn=76e13ac79ad498309542c9f41878bb1c&chksm=fcdfb802cba8311456ea9ff3309c4354055022cd0056b13c11fac44252231550e17a03f26f29&token=639111151&lang=zh_CN#rd) - -- [【2020-08-03】JavaScript基础介绍和快速入门](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247483805&idx=1&sn=4da4e0d3a2912aee146248c1d8f7f96f&chksm=fcdfb811cba83107fd8f08d3e35af7c72bf7d908d577ad83e45d80b0e9d1bbdbf16b1f169d64&token=639111151&lang=zh_CN#rd) - - -#### 9月 - -- [【2020-09-01】Redis的简单安装和部署 ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484600&idx=1&sn=489aa1bd12487b0bf8f2a7694f4ca1aa&chksm=fcdfbd34cba83422f0afee027747d9e95773e093fa3a24225c2729029c4392bf42043964782f&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-01】就很像?? ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484600&idx=2&sn=a9962c6ca3a5eddd085bcd15617f64d9&chksm=fcdfbd34cba83422b987020a858b7cf31bfde6033642d697d5a00ad9ed618f3cf14deb207d67&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-03】shell编程基础整理 ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484702&idx=1&sn=6e3e862153755d9e61f5f4ebf220381d&chksm=fcdfbc92cba835844e8b6fd37d86a34ccf83342895f448c88ba5b62db974eb536a8e74a121aa&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-03】大学四年建站用过的云服务器都在这里了 ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484702&idx=2&sn=c7589eecbe58ff8939f72c0ff0bf567d&chksm=fcdfbc92cba83584b03dfeea7290606ce8249b0c3105b0b3b95a9087c77e3b1c7f863d8e30f9&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-04】面试复盘和思考 ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484711&idx=1&sn=bf362439ccfad04da53ce65c824a988d&chksm=fcdfbcabcba835bddc43c40fd3a454793adf7849a5d5bb356825d481b82ae3e58a749859502c&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-06】朋友是“无用”的,不是你瞧不起我,就是我瞧不起你 ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484759&idx=1&sn=e0f8a7a70ddede75d94b202ddc6106d6&chksm=fcdfbcdbcba835cd2138658d750f7e09a820b34daf4624f253a21a11b5de56635d35e4c0df19&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-06】GitHub简单使用 ](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484759&idx=2&sn=ade86739c94f99f944a3d387bc7e13ef&chksm=fcdfbcdbcba835cd192c3b7b7eeea8f5dbb16b2b2fa58b6e2094184f5aa3341927a6d1fad6f8&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-07】MySQL日志类型把我难哭了,你学废了吗?](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484771&idx=1&sn=6ae4c6e8d333b0e1aa5cd1aee161d9b8&chksm=fcdfbcefcba835f94e3c0abc189477f241f675f38a63eb03bd320447e89da39cb08b72038ba3&token=1613702159&lang=zh_CN#rd) - -- [【2020-09-11】向各位汇报这周状态,再也不敢鸽了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484783&idx=1&sn=b9e82a2c2b04b7050d0659085af537ef&chksm=fcdfbce3cba835f5e692f5ffbb16505dbf3b5ccc9bb0bdf4b3f467629b293d0e0ce3086ec8dc&token=639111151&lang=zh_CN#rd) - - -- [【2020-09-11】向各位汇报这周状态,再也不敢鸽了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484783&idx=1&sn=b9e82a2c2b04b7050d0659085af537ef&chksm=fcdfbce3cba835f5e692f5ffbb16505dbf3b5ccc9bb0bdf4b3f467629b293d0e0ce3086ec8dc&token=639111151&lang=zh_CN#rd) - -- [【2020-09-12】向各位汇报,再也不敢鸽了,人生处处有惊喜](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484784&idx=1&sn=ae73f1f4e53b622039a75ec41cabe378&chksm=fcdfbcfccba835eafefe304913e4078cf8dfac22f62fd9d686b307bbdf46d147016f5e876e05&token=639111151&lang=zh_CN#rd) - - -- [【2020-09-13】来来来,无厘头技术(水)文,各种尬。简简单单评价一下](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=1&sn=10d26a600112ec4f95b3b3f470955744&chksm=fcdfbc03cba83515b07f0ae6cee791d1fb5fd619364cff3a17a4deab91333f0a6277b09a66a9&token=639111151&lang=zh_CN#rd) - -- [【2020-09-13】基础Brew和Tree的安装实录](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=2&sn=94a6455ed6b17fa5b27e96358e935803&chksm=fcdfbc03cba83515d13dcfc2dea2445085a34ff4360e0a367fd914bb04bc6ba18a780a0cd2d2&token=639111151&lang=zh_CN#rd) - -- [【2020-09-13】PM2进程管理,给我学!](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484815&idx=3&sn=38a289efffda9510b5ff04c5bed0663e&chksm=fcdfbc03cba835154c888b9d7f86eac85c250eefb9d053687173274373f2f8d7b19fc307e76a&token=639111151&lang=zh_CN#rd) - -- [【2020-09-14】数据结构,一定要学废了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484823&idx=1&sn=d41bb8da02585cf9ea8d0b3ef27e3dbb&chksm=fcdfbc1bcba8350d84ba2f01eaf187cbaa2d4cf5a9078beb1f2fafe94edb0126c82595ed8191&token=368257571&lang=zh_CN#rd) - -- [【2020-09-16】ELK基础概念与常用架构整理](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484837&idx=1&sn=7f0de3eeea3fc6ee299587704f5c44cd&chksm=fcdfbc29cba8353fd894582da7ae2c93b5920c4dbb1e197b011a817dc0962e317842a32d5560&token=368257571&lang=zh_CN#rd) - - -- [【2020-09-17】分享书上一段话,问一个问题](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484850&idx=1&sn=7af55ef3a7d843d9c43de6d6c7911da3&chksm=fcdfbc3ecba835287b2c644cda606454a713d370fbd7d14714b22a04277f7a7784b96b8b277e&token=368257571&lang=zh_CN#rd) - - -- [【2020-09-17】看源码遇到的三个知识点,一个也没懂](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484850&idx=2&sn=c59839c677d7c9652a09d1f8c70ef8d6&chksm=fcdfbc3ecba83528cf8271a2615129340a6f11954b6d9396160d0fb2c41593253d5e3510a031&token=368257571&lang=zh_CN#rd) - - -- [【2020-09-20】express()函数整理](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484865&idx=2&sn=63e6b669341217135013816464dd5bd9&chksm=fcdfbc4dcba8355b4de0f712047709425a35fa3b122378b31f0e4db3afb82dfd38872862aab4&token=368257571&lang=zh_CN#rd) - - -- [【2020-09-22】入秋了,安好](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484865&idx=1&sn=e39e3547da49f40e1b64deadf9a9cfef&chksm=fcdfbc4dcba8355bfa9c8b9531a463fc652b764064528dd6c243f47a157b20e017bad3f410f4&token=368257571&lang=zh_CN#rd) - - -- [【2020-09-22】Nginx安装详解,我服务器上也是这样的](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484897&idx=1&sn=b1073522cfd3ce6ebbe85e85ad4e35e0&chksm=fcdfbc6dcba8357bdb212c9db1378a045d0dcfd95b79ed05688180f05d2b391f9b724d0d752f&token=368257571&lang=zh_CN#rd) - -- [【2020-09-22】被攻击的一天](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484897&idx=2&sn=34c61ed01c6522d2861be3342ec12ad5&chksm=fcdfbc6dcba8357b76eb0fe6c502d932def6cd232297b010f9b2f9a1fca35c38df77dacce7f2&token=368257571&lang=zh_CN#rd) - - -- [【2020-09-26】跟父亲视频的一个半小时,聊到了我,也聊到了Ta](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484929&idx=1&sn=394783dd2bfd65da24ae6dcb89d69ec6&chksm=fcdfbf8dcba8369b926b7083bbe3515aa5857f7589acc3f9d6d4987c67539a76dbd6e3cb70a1&token=368257571&lang=zh_CN#rd) - - -#### 10月 -- [【2020-10-07】时间太快,溜了溜了,杭州见](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484943&idx=1&sn=ad37db87dc40f381fd18cc828e492384&chksm=fcdfbf83cba8369598fc2773b63df235a9719b43749e7daab753c621fef5af4fba054dbb46ea&token=368257571&lang=zh_CN#rd) - -- [【2020-10-14】写不了代码就不写嘛](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484951&idx=1&sn=edddf3d6c8f3fc6dd1d14063b536c732&chksm=fcdfbf9bcba8368d81ddffcbd258f7e4b7fb573d2a8963859e1b156e8a5f5d81f5629c49be6e&token=368257571&lang=zh_CN#rd) - -- [【2020-10-18】我不行了,这号关注量男女7:3 还怎么相亲嘛?](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484968&idx=1&sn=d37960ed81044fbf314440af85049d65&chksm=fcdfbfa4cba836b25082535910f7137d1513d834d54fbfadf48a433b29511ccf4d532f19b88a&token=368257571&lang=zh_CN#rd) - -- [【2020-10-26】悄悄接你下班,陪你回家](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247484988&idx=1&sn=947c487946fa3574d33e9c6861a1ee28&chksm=fcdfbfb0cba836a626d2efa904a5177c2e0916c381b26c89b6dcfc610a380b906d4480f7cc9b&token=368257571&lang=zh_CN#rd) - - -#### 11月 - -- [【2020-11-01】11月,你好](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485002&idx=1&sn=3760eba58f7ded433b71bec48b89a681&chksm=fcdfbfc6cba836d0b7db1f2aa5a4a884f68f8ce20a59aa44b4ac46c59eb4dd1c233079241a4a&token=368257571&lang=zh_CN#rd) - -- [【2020-11-15】她来了她来了,她带着剪了三遍的视频来了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485042&idx=1&sn=181ae5062c31ee7931390607b6f10358&chksm=fcdfbffecba836e8275c849007470db6964f7cd675af59fe73c94369334d17d4840e8c0413d5&token=898438314&lang=zh_CN#rd) - - -- [【2020-11-18】陪我一路的小姐姐,谢谢啦~ 我大意了呀,没有闪](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485053&idx=1&sn=ed2fe0de87b70781cdb7755ef4726340&chksm=fcdfbff1cba836e7165dc53722aaf96ef38d8f43cfadadcb4695d8ff430ea64619caada81cfa&token=1939941957&lang=zh_CN#rd) - -- [【2020-11-30】11月的尾巴,12月你好](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485066&idx=1&sn=1d357917f548a6d977af96c6582db527&chksm=fcdfbf06cba836103152f7a3fdfbf97c1be2472a84f824cbddd532c15aefe14c71b3b076233f&token=831506871&lang=zh_CN#rd) - -#### 12月 - -- [【2020-12-06】周末小记——忆旧友、吃火锅,也会感慨](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485080&idx=2&sn=bdc551f2e9bf54dc01881979339af8ad&chksm=fcdfbf14cba836022a05854547cbca03b5a08b912a0e0f195d4856d6b53ecd78aee2f167b515&token=1581389686&lang=zh_CN#rd) - - -- [【2020-12-10】上火、牙疼,也要砍程序媛一刀](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485100&idx=1&sn=e7c0c41229d51ebfab2939deb1751672&chksm=fcdfbf20cba836364da35ab5acfed076876aae486126bc1c41cdd2502cc89a41cbde7c645610&token=1054397108&lang=zh_CN#rd) - - -- [【2020-12-17】今晚不蹦迪,来聊一聊个人项目的接口返回](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485136&idx=1&sn=4619fb835e6d57e106ab01116012662a&chksm=fcdfbf5ccba8364aecddf14d11ed8ba36f38050b83b30b8d46e10f86b164aab05322b8455b36&token=755050934&lang=zh_CN#rd) - -- [【2020-12-20】事情,从英吉利海岸的那杯卡布奇诺美式咖啡说起](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485180&idx=1&sn=15ab9be3e15130103f26c919cbe0b605&chksm=fcdfbf70cba83666d287acc35485d02ddf67bacad6ea46d9ef04521f9f429fcb015d371c918e&token=1356818265&lang=zh_CN#rd) - - -### 2021年 - - -#### 1月 - - -- [【2021-01-06】谁在看小王子呀~](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485228&idx=1&sn=1c30866a209af2a5eb927fd7bd63cc8b&chksm=fcdfbea0cba837b6d4cf9865b72a6a1553c4d9b6a6cce369bb09f66730ab37ec649071e7ab7c&token=1356818265&lang=zh_CN#rd) - - -- [【2021-01-15】2020小结,没事就点点看看呗,反正小目标都没完成](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485249&idx=1&sn=dadf2a6dbed1879bbd98c62491436a9c&chksm=fcdfbecdcba837db5c11b8023ffa7ad6cf5a47c03027a0029604a50d0a77c75908efc05af39a&token=1356818265&lang=zh_CN#rd) - -- [【2021-01-17】搞波大的,浅谈深拷贝——文末有彩蛋](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485258&idx=1&sn=fb71007a5feed8e18674be27b1c749ab&chksm=fcdfbec6cba837d099e90a5f45781ee8cac474388e25ad9383a4fbc05fdb16a8e1377265c018&token=1356818265&lang=zh_CN#rd) - - -- [【2021-01-18】到底该如何发布Npm插件,常用指令在这里](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485277&idx=1&sn=9eb7c3cef21ace2cc5853e382f2bb03f&chksm=fcdfbed1cba837c7839f3b57836f43b3425c8b5a7888f543bf4a1dd8b39cd82ed7d51a24a685&token=1356818265&lang=zh_CN#rd) - - -- [【2021-01-20】好用的AntDocs,也来学着用一下,基本过程整理](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485291&idx=1&sn=19f13df8131a9f662973f2d9240c1eab&chksm=fcdfbee7cba837f180d8ad30735cd61e6c73fe195e63d46046bb24f80e1536aa0a585c3e1015&token=1356818265&lang=zh_CN#rd) - - -- [【2021-01-27】【持续更新】从查找算法开始数据结构入门,大家都在掘金等你](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485318&idx=1&sn=6ae5fc9f1cf994818ff89d53a926761e&chksm=fcdfbe0acba8371c9d0025008084857cf14c52b01dfb1b9460d3388ba543c36da2abcbf90216&token=1356818265&lang=zh_CN#rd) - - -- [【2021-01-30】ORM框架入门之Sequelize,我快翻译不动了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485341&idx=1&sn=fc493c28ab138056567e916b769ddbf2&chksm=fcdfbe11cba8370793e8e0d71e7766f4e1e7f3e8672921d6b98757f7d7b271b290f3edc65d6f&token=1356818265&lang=zh_CN#rd) - -#### 2月 - -- [【2021-02-07】被妹妹支配的一周,晚上差点连家都回不去..](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485376&idx=1&sn=049a5df5cb97786e80aded38a1bf3732&chksm=fcdfbe4ccba8375a52cb8d7077836216e5f5f41ee9453aebf524eb0a5d8a5db48cbabc11f3e4&token=1356818265&lang=zh_CN#rd) - - -- [【2021-02-11】【新年快乐】程序员的2020,就这样悄咪咪地溜走了](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485404&idx=1&sn=276100858df23daf987dbc68997477df&chksm=fcdfbe50cba837460079fc9ab414754a49668f82dc0f6a5a41ec320d3e5dd77c1a8c271e061b&token=1356818265&lang=zh_CN#rd) - - -- [【2021-02-13】抢红包、拼手气来啦,之前答应的抽奖变成新年红包啦~](https://mp.weixin.qq.com/s?__biz=MzU3MTUxOTIwMw==&mid=2247485420&idx=1&sn=26c0e3690363af5dddd805ae417eeee9&chksm=fcdfbe60cba8377645e44333ccbe35147b9844578008e5699aba62b82c12fc03634e2d68781c&token=1356818265&lang=zh_CN#rd) - -## 赞赏支持 - - -> 相逢不用忙归去,明日黄花蝶也愁;若系列文章对你有帮助,不如请作者喝一杯伏见桃山... -> -> **赞赏过的一定要扫下方右侧微信跟我说呀!!!!!!** - -<a name="wechat"></a> -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/weChatDonate.jpg" width="300" height="300" style="border-radius:10px;" /> - - -</div> - - -## 联系我 - - -> 对仓库有任何问题或建议,欢迎微信“骚扰”,商务合作请备注! -<div align="left"> -<img src="https://cdn.142vip.cn/article-notes/img/wechat.jpg" width="300" height="300" style="border-radius:10px;"/> -</div> - - -## 鸣谢 - - -以下排名不分先后!([详细统计]()) - - -<div> - <a href="https://github.com/ChiefPing" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/34122068?s=460&v=4" width="50px" style="brder-radius:5px;"/> - </a> <a href="https://github.com/xiaoliuxin" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/60652527?s=460&v=4" style="border-radius:5px;" width="50px"/> - </a> -</div> - - -## 赞助列表 - -以下排名不分先后! - - - - - - -## 公众号 - - -如果大家想要实时关注我更新的文章以及我的日常的话,可以关注我的公众号,基本每天都会更新技术和各种吹水文章,就当做是记录心情、成长的地方吧 - -<a name="gzh"></a> - -<div> - <img src="https://cdn.142vip.cn/gzh.png" style="border-radius:10px;"> -</div> \ No newline at end of file diff --git a/docs/DS/Readme.md b/docs/DS/Readme.md deleted file mode 100644 index d48b1e5..0000000 --- a/docs/DS/Readme.md +++ /dev/null @@ -1,106 +0,0 @@ -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-08 23:10:00 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:26:09 ---> - -## 写在最前面 - - - - - -这份《薛定谔的Egg.js》文档,是我考虑很久之后,才决定要整理出来的,在这上面倾注了很多时间 - - -- 也不知道有没有用 -- 也不知道能不能整理完 -- 更不知道对你会不会有所帮助 - - -但愿我们都能在此有所收获,放手开始吧!! - - -最后,仅以“**祷以恒切, 盼以喜乐,苦以坚忍,必有所得**”,共勉~ - - ---- - - -## 阅读须知 - - -- 该部分为框架基础,是基于[Egg.js官网](https://eggjs.org/zh-cn/)和自己使用体验进行整理汇总,难免会存在重复部分。 -- 若在阅读、学习过程中发现与官网描述有所差异,可以立即与我联系进行确认与更改。 -- **文档用于个人整理和技术学习,禁止无授权转载、商用。** - - - - - -## 技术支持 - -- [Egg.js官网](https://eggjs.org/zh-cn/) -- [VuePress](https://www.vuepress.cn/guide) -- [AntDocs](https://antdocs.seeyoz.cn/guide/) - - - -## 适用群体 - - -- 默认已了解过[ES6](https://es6.ruanyifeng.com/)语法和部分Node后端框架([Express](https://www.expressjs.com.cn/)、[Koa](https://koa.bootcss.com/))。 -- 具有一定JavaScript开发基础,对JavaScript开发有浓烈兴趣。 -- **已有Egg.js开发经验,但细节用法不胜了解的,非常适合用来查缺补漏。** - - -## 资料共享 - -> 链接失效可以关注公众号或私信获取"链接" - -## 参考资料 - -- 大话数据结构 - 程杰 -- 数据结构复习全书 - 王道论坛 -- 视频教程 - 王道论坛 - ---- - -### 联系我 - -- 有任何问题或建议,欢迎微信“骚扰”,商务合作请备注! - -<div align="left"> -<img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/wechat_code.jpg" width="300" height="300" style="border-radius:4px;"/> -</div> - - - -# - -### 公众号 - - -- 相逢不用忙归去,明日黄花蝶也愁.... - -- **若系列文章对你有所帮助,不如来公众号交个朋友吧.** - -<template> - <div> - <a-row> - <a-col :xs="20" :sm="16" :md="12" :lg="10" :xl="10"><img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/gongzhonghao.jpg"/> - </a-col> - </a-row> - </div> -</template> - - - - - - - - diff --git a/docs/DS/basic_introduction.md b/docs/DS/basic_introduction.md deleted file mode 100644 index 514947f..0000000 --- a/docs/DS/basic_introduction.md +++ /dev/null @@ -1,328 +0,0 @@ ---- -title: 基础入门 ---- - -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:54:07 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-09 00:25:07 ---> - - - -## 基础概念 - -### 数据 - -**信息的载体**,是客观事物属性的数、字符以及所有能够输入到计算机包中并且被计算机程序识别和处理的**集合** - -### 数据元素 - -**数据的基本单位**,通常按照一个整数来进行考虑和处理。 - - -特别注意:一个数据元素由若干个**数据项**组成,数据项是构成数组元素的最小单位,且不可分割。 - - - -### 数据对象 - -具有**相同性质**的数据元素的**集合**,**是数据的子集** - - -### 数据类型 - -值的集合和定义在此集合上一组操作的总称 - -- 原子类型:不可再分的数据类型; -- 结构类型:可以分解成若干分量(成分)的数据类型; -- **抽象数据类型**:抽象出具组织和其相关的操作; - - - -### 抽象数据类型(ADT) - -> Tips: 可以结合高级语言中类对象封装来理解; - -```bash -ADT抽象数据类型名{ - 数据对象:<数据对象的定义> - 数据关系:<数据关系的定义> - 基本操作:<基本操作的定义> -} ADT抽象数据类型名 -``` - - - -一个数学模型以及定义在该模型上的一组操作。定义仅仅取决于它的一组逻辑操作。与计算机内部如何表示和实现是没有关系; - -**不论内部结构如何变化,只要其数学特性不变,就不会影响到外部的使用,实现了数据封装和信息隐藏** - - -通常由(数据对象、数据关系、数据操作集)三元组来表示抽象数据类型; - -抽象数据类型的主要作用是**数据封装和信息隐藏,让实现与使用相分离**。数据及其相关操作的结合称为数据封装。对象可以对其他对象隐藏某些操作细节,从而使这些操作不会受到其他对象的影响。 - -抽象数据类型独立于运算的具体实现,使用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据,实现了信息隐藏。 - - -### 数据结构 - - -首先明确:数据元素都不是孤立存在的。元素与元素之间存在着某种关系,这种相互之间的关系就是**结构**。 - -**数据结构是相互之间存在一种或者多种特定关系的数据元素的集合** - -- 逻辑结构 -- 存储结构(物理结构) -- 数据运算 - -数据的逻辑结构和存储结构是密不可分的。 - -**算法的设计取决于所选定的逻辑结构;算法的实现依赖于所采用的存储结构;** - - ---- - -## 数据结构三要素 - -- 数据的逻辑结构 -- 数据的存储结构 -- 数据的运算 - - -### 数据的逻辑结构 - -数据元素之间的逻辑关系,从逻辑关系上描述数据,叫做数据的逻辑结构。 - -与数据的存储(物理)结构无关,是独立于计算机的。 - -可以分为: - -- 线性结构 -- 非线性结构 - - -线性表是典型的线性结构,衍生出的栈、队列、串、数组、广义表也都是线性结构; - -非线性结构主要有:集合、树(一般树、二叉树)、图(有向图、无向图) - - -特别注意: - -- `集合`:结构中的数据元素之间**除了“同属于一个集合”的关系外,别无其他关系。** -- `线性结构`:结构中的数据元素之间**只存在一对一的关系**。 -- `树形结构`:结构中的数据元素之间**存在一对多的关系。** -- `图状结构和网状结构`:结构中的数据元素之间**存在多对多的关系。** - - - -### 数据的存储(物理)结构 - -数据结构在计算机中的表示(映像)。包括数据`元素的表示`和`关系的表示`。 - -存储结构是逻辑结构用计算机语言实现的,依赖于计算机语言。 - - -可以分为: - -- 顺序存储 -- 链式存储 -- 索引存储 -- 散列(Hash)存储 - -**注意:存储和存取的概念不一样** - -#### 顺序存储 - -**逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。** - -优点: - -- 可以实现随机存取 -- 元素占用最少的存储空间 - -缺点: - -- 只能使用相邻的一整块存储单元,依赖于物理结构相邻; -- 容易产生`外部碎片` - -什么是内外部碎片? - -> 参考资料:https://blog.csdn.net/qq_22238021/article/details/80209062 - -- 外部碎片:`还没有分配出去`(不属于任何进程),但是**由于大小而无法分配给申请内存空间的新进程的内存空闲块。** -- 内部碎片:`已经被分配出去`(能明确指出属于哪个进程)的**内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片。** - - -#### 链式存储 - -与顺序存储不同,**链式存储不要求逻辑上相邻的元素在物理位置上也相邻。** - -借助指示元素存储地址的`指针`表示元素之间的逻辑关系。 - - -优点: - -- 不会出现碎片现象 -- 充分利用所有存储单元 - -缺点: - -- 除了存储元素外,还需要额外存储指针,会占用额外的存储空间(结合数据库索引学习)。 -- 链式存储,**只能实现`顺序存取`,不能实现`随机存取`(指针的遍历)** - - -#### 索引存储 - -存放数据元素和元素间关系的存储方式,在存储元素信息的同时,还需要建立附加的`索引表`。 - -**索引表的每一项称为索引项,索引项的一般形式是:<关键字,地址>** - -优点: - -- 检索快(就好比字典有了目录,查询就很快了) - - -缺点: - -- 增加了索引表,占用较多的存储空间(典型的空间换时间策略) -- 增加、删除数据时,需要对应修改索引表,花费更多时间。 - -#### 散列(Hash)存储 - -根据元素的关键字直接通过散列(Hash)函数计算出元素的存储地址。 - - -优点: - -- 检索快,添加、删除元素结点操作快(获取元素地址直接,整体时间就少了) - - -缺点: - -- 非常依赖于`散列函数` -- 会出现`散列冲突`(主要依赖与散列函数,散列函数不好就很容易出现散列冲突) -- 出现`散列冲突`时,解决冲突就会增加时间和空间上的开销 - - -### 数据的运算 - -数据上的运算包括:`运算的定义` 、`运算的实现` - -- `运算的定义`:针对逻辑结构,指出运算的功能 -- `原酸的实现`:针对存储结构,指出运算的具体操作步骤 - - - - -线性表既可以用顺序存储方式实现,也可以用链式存储方式实现。 - - ---- - -## 算法和算法评价 - - -### 算法 - -`算法` : 对特定问题求解步骤的一种描述,**是指令的有序集合**,每一条指令表示一个或多个操作。 - - -#### 重要特性 - -- `有穷性`:必须总是(对任何合法的输入值)在**执行有穷步后结束**,并且每一步都可**在有穷时间内完成** -- `确定性`:每条指令的含义明确,不会产生二义性(歧义),**对相同的输入只能得出相同的结果** -- `可行性`:算法是可行的。**算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的** -- `输入`:有零个或者多个输入,**输入取决于某个特定的对象的集合。** -- `输出`:有一个或者多个输出,**输出是和输入有着某种特定关系的量(强调输出与输入的关系)** - - -> **算法是有穷的,但是程序不一定满足有穷性**,程序只是算法在计算机上的特定的实现, 例如:死循环 - -#### 算法的目标 - -由于设计思路、解决问题方案等方面不同,不同算法之间也是有好坏的,就像人与人之间存在着差异。为设计出更好的算算法,往往需要追求更高的目标,而好的算法需要考虑到的目标就有: - -- 正确性:首先算法肯定是**需要正确的解决求解问题** -- 可读性:**算法应该具有良好的可读性**,就像项目代码一样,好的业务代码、逻辑清楚,**便于理解**。 -- 健壮性:**在输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名奇妙的输出结果**(在高级语言编程中,类似于强调封装方法的参数校验) -- 效率与低存储量需求:**效率即算法执行的时间**,**存储量需求即算法那执行过程中所有要的最大存储空间**,这些与算法所解决问题的规模有关; - - -> Tips: 效率可以结合时间复杂度来理解,存储量需求可以结合空间复杂度理解; - - -### 效率的度量 - -算法效率的度量是通过`时间复杂度`和`空间复杂度`来描述的; - -#### 时间复杂度 - -语句的频度:语句在算法中被重复执行的次数 - -算法中所有语句的`频度之和`记作T(n),即:对应算法问题规模n的函数,时间复杂度主要是来分析T(n)的数量级; - -**算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)** - -上面这句话是不是不能理解??? 哈哈哈,我第一次看,也是!! - -```c - -int test(n) { - if(n< 1){ - return 0; - } - // 循环叠加 输出 - ..... -} - - - -``` -在这个简单的函数里 - -- 当n<1的时候,例如:-2,就不需要循环,此时时间复杂度可以理解为T(1) -- 当n>1的时候,例如:5 此时时间复杂度可以理解为T(n) - -当然,这里只是简单举例子便于理解: - -> **算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)** - - - -- `最坏时间复杂度`:**最坏情况下**,算法的时间复杂度 -- `平均时间复杂度`:**所有可能输入实例在同等概率出现的情况下**,算法的期望运行时间 -- `最好时间复杂度`:**最好的情况下**,算法的时间复杂度 - - -一般情况下,考虑最坏情况的时间复杂度(即:最坏时间复杂度),保证算法的运行时间不会更长(最糟糕我都能预料,难道还有更糟糕?????噗呲) - -#### 空间复杂度 - -算法的空间复杂度可以用函数记作:S(n),**用来定义算法运行过程中需要耗费的存储空间**,是问题规模n的函数; - -> 渐进空间复杂度也被称为空间复杂度,记作:S(n)=O(g(n)) - - -**一个程序除了需要存储空间来存放本身所用的指令、常数、变量和输入数据外,也需要对数据进行操作的工作单元和存储一些实现计算所需要信息的辅助空间。** - -当输入数据所占用的空间只取决于问题本身,和算法无关时,只需要去分析除了输入和程序之外的额外空间 - - - -算法原地工作:算法所需要辅助空间是常量,记作S(1),例如: - -```c -int switchValue(a,b){ - // 定义临时变量 - int temp=a; - b=temp; - a=b; -} -``` - -在上面的函数中,只是通过临时变量temp来实现a和b的值交换,没有需要更多变量,因此可以简单理解函数的在`原地工作`,辅助空间是常量,记作S(1) diff --git a/docs/DS/basic_introduction/1.basic_concepts.md b/docs/DS/basic_introduction/1.basic_concepts.md deleted file mode 100644 index 3c06257..0000000 --- a/docs/DS/basic_introduction/1.basic_concepts.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: test -date: 2021-03-07 21:54:07 -permalink: /pages/53976b/ -categories: - - DataStructure - - basic_introduction -tags: - - ---- - -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:54:07 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:59:29 ---> - - - -## 基础概念 - -### 数据 - -**信息的载体**,是客观事物属性的数、字符以及所有能够输入到计算机包中并且被计算机程序识别和处理的**集合** - -### 数据元素 - -**数据的基本单位**,通常按照一个整数来进行考虑和处理。 - - -特别注意:一个数据元素由若干个**数据项**组成,数据项是构成数组元素的最小单位,且不可分割。 - - - -### 数据对象 - -具有**相同性质**的数据元素的**集合**,**是数据的子集** - - -### 数据类型 - -值的集合和定义在此集合上一组操作的总称 - -- 原子类型:不可再分的数据类型; -- 结构类型:可以分解成若干分量(成分)的数据类型; -- **抽象数据类型**:抽象出具组织和其相关的操作; - - - -### 抽象数据类型(ADT) - -> Tips: 可以结合高级语言中类对象封装来理解; - -```bash -ADT抽象数据类型名{ - 数据对象:<数据对象的定义> - 数据关系:<数据关系的定义> - 基本操作:<基本操作的定义> -} ADT抽象数据类型名 -``` - - - -一个数学模型以及定义在该模型上的一组操作。定义仅仅取决于它的一组逻辑操作。与计算机内部如何表示和实现是没有关系; - -**不论内部结构如何变化,只要其数学特性不变,就不会影响到外部的使用,实现了数据封装和信息隐藏** - - -通常由(数据对象、数据关系、数据操作集)三元组来表示抽象数据类型; - -抽象数据类型的主要作用是**数据封装和信息隐藏,让实现与使用相分离**。数据及其相关操作的结合称为数据封装。对象可以对其他对象隐藏某些操作细节,从而使这些操作不会受到其他对象的影响。 - -抽象数据类型独立于运算的具体实现,使用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据,实现了信息隐藏。 - - -### 数据结构 - - -首先明确:数据元素都不是孤立存在的。元素与元素之间存在着某种关系,这种相互之间的关系就是**结构**。 - -**数据结构是相互之间存在一种或者多种特定关系的数据元素的集合** - -- 逻辑结构 -- 存储结构(物理结构) -- 数据运算 - -数据的逻辑结构和存储结构是密不可分的。 - -**算法的设计取决于所选定的逻辑结构;算法的实现依赖于所采用的存储结构;** - diff --git a/docs/DS/basic_introduction/2.three_elements_of_data_structure.md b/docs/DS/basic_introduction/2.three_elements_of_data_structure.md deleted file mode 100644 index 41d70c0..0000000 --- a/docs/DS/basic_introduction/2.three_elements_of_data_structure.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: three_elements_of_data_structure -date: 2021-03-07 21:55:06 -permalink: /pages/3f923d/ -categories: - - DataStructure - - basic_introduction -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:55:06 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:55:14 ---> - - - - -## 数据结构三要素 - -- 数据的逻辑结构 -- 数据的存储结构 -- 数据的运算 - - -### 数据的逻辑结构 - -数据元素之间的逻辑关系,从逻辑关系上描述数据,叫做数据的逻辑结构。 - -与数据的存储(物理)结构无关,是独立于计算机的。 - -可以分为: - -- 线性结构 -- 非线性结构 - - -线性表是典型的线性结构,衍生出的栈、队列、串、数组、广义表也都是线性结构; - -非线性结构主要有:集合、树(一般树、二叉树)、图(有向图、无向图) - - -特别注意: - -- `集合`:结构中的数据元素之间**除了“同属于一个集合”的关系外,别无其他关系。** -- `线性结构`:结构中的数据元素之间**只存在一对一的关系**。 -- `树形结构`:结构中的数据元素之间**存在一对多的关系。** -- `图状结构和网状结构`:结构中的数据元素之间**存在多对多的关系。** - - - -### 数据的存储(物理)结构 - -数据结构在计算机中的表示(映像)。包括数据`元素的表示`和`关系的表示`。 - -存储结构是逻辑结构用计算机语言实现的,依赖于计算机语言。 - - -可以分为: - -- 顺序存储 -- 链式存储 -- 索引存储 -- 散列(Hash)存储 - -**注意:存储和存取的概念不一样** - -#### 顺序存储 - -**逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。** - -优点: - -- 可以实现随机存取 -- 元素占用最少的存储空间 - -缺点: - -- 只能使用相邻的一整块存储单元,依赖于物理结构相邻; -- 容易产生`外部碎片` - -什么是内外部碎片? - -> 参考资料:https://blog.csdn.net/qq_22238021/article/details/80209062 - -- 外部碎片:`还没有分配出去`(不属于任何进程),但是**由于大小而无法分配给申请内存空间的新进程的内存空闲块。** -- 内部碎片:`已经被分配出去`(能明确指出属于哪个进程)的**内存空间大于请求所需的内存空间,不能被利用的内存空间就是内部碎片。** - - -#### 链式存储 - -与顺序存储不同,**链式存储不要求逻辑上相邻的元素在物理位置上也相邻。** - -借助指示元素存储地址的`指针`表示元素之间的逻辑关系。 - - -优点: - -- 不会出现碎片现象 -- 充分利用所有存储单元 - -缺点: - -- 除了存储元素外,还需要额外存储指针,会占用额外的存储空间(结合数据库索引学习)。 -- 链式存储,**只能实现`顺序存取`,不能实现`随机存取`(指针的遍历)** - - -#### 索引存储 - -存放数据元素和元素间关系的存储方式,在存储元素信息的同时,还需要建立附加的`索引表`。 - -**索引表的每一项称为索引项,索引项的一般形式是:<关键字,地址>** - -优点: - -- 检索快(就好比字典有了目录,查询就很快了) - - -缺点: - -- 增加了索引表,占用较多的存储空间(典型的空间换时间策略) -- 增加、删除数据时,需要对应修改索引表,花费更多时间。 - -#### 散列(Hash)存储 - -根据元素的关键字直接通过散列(Hash)函数计算出元素的存储地址。 - - -优点: - -- 检索快,添加、删除元素结点操作快(获取元素地址直接,整体时间就少了) - - -缺点: - -- 非常依赖于`散列函数` -- 会出现`散列冲突`(主要依赖与散列函数,散列函数不好就很容易出现散列冲突) -- 出现`散列冲突`时,解决冲突就会增加时间和空间上的开销 - - -### 数据的运算 - -数据上的运算包括:`运算的定义` 、`运算的实现` - -- `运算的定义`:针对逻辑结构,指出运算的功能 -- `原酸的实现`:针对存储结构,指出运算的具体操作步骤 - - - - -线性表既可以用顺序存储方式实现,也可以用链式存储方式实现。 \ No newline at end of file diff --git a/docs/DS/basic_introduction/3.algorithm_and_algorithm_evaluation.md b/docs/DS/basic_introduction/3.algorithm_and_algorithm_evaluation.md deleted file mode 100644 index bc6743d..0000000 --- a/docs/DS/basic_introduction/3.algorithm_and_algorithm_evaluation.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: algorithm_and_algorithm_evaluation -date: 2021-03-07 21:55:28 -permalink: /pages/18d025/ -categories: - - DataStructure - - basic_introduction -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:55:28 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:55:36 ---> - - - -## 算法和算法评价 - - -### 算法 - -`算法` : 对特定问题求解步骤的一种描述,**是指令的有序集合**,每一条指令表示一个或多个操作。 - - -#### 重要特性 - -- `有穷性`:必须总是(对任何合法的输入值)在**执行有穷步后结束**,并且每一步都可**在有穷时间内完成** -- `确定性`:每条指令的含义明确,不会产生二义性(歧义),**对相同的输入只能得出相同的结果** -- `可行性`:算法是可行的。**算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的** -- `输入`:有零个或者多个输入,**输入取决于某个特定的对象的集合。** -- `输出`:有一个或者多个输出,**输出是和输入有着某种特定关系的量(强调输出与输入的关系)** - - -> **算法是有穷的,但是程序不一定满足有穷性**,程序只是算法在计算机上的特定的实现, 例如:死循环 - -#### 算法的目标 - -由于设计思路、解决问题方案等方面不同,不同算法之间也是有好坏的,就像人与人之间存在着差异。为设计出更好的算算法,往往需要追求更高的目标,而好的算法需要考虑到的目标就有: - -- 正确性:首先算法肯定是**需要正确的解决求解问题** -- 可读性:**算法应该具有良好的可读性**,就像项目代码一样,好的业务代码、逻辑清楚,**便于理解**。 -- 健壮性:**在输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名奇妙的输出结果**(在高级语言编程中,类似于强调封装方法的参数校验) -- 效率与低存储量需求:**效率即算法执行的时间**,**存储量需求即算法那执行过程中所有要的最大存储空间**,这些与算法所解决问题的规模有关; - - -> Tips: 效率可以结合时间复杂度来理解,存储量需求可以结合空间复杂度理解; - - -### 效率的度量 - -算法效率的度量是通过`时间复杂度`和`空间复杂度`来描述的; - -#### 时间复杂度 - -语句的频度:语句在算法中被重复执行的次数 - -算法中所有语句的`频度之和`记作T(n),即:对应算法问题规模n的函数,时间复杂度主要是来分析T(n)的数量级; - -**算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)** - -上面这句话是不是不能理解??? 哈哈哈,我第一次看,也是!! - -```c - -int test(n) { - if(n< 1){ - return 0; - } - // 循环叠加 输出 - ..... -} - - - -``` -在这个简单的函数里 - -- 当n<1的时候,例如:-2,就不需要循环,此时时间复杂度可以理解为T(1) -- 当n>1的时候,例如:5 此时时间复杂度可以理解为T(n) - -当然,这里只是简单举例子便于理解: - -> **算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入的数据的性质(例如:输入元素的初始状态)** - - - -- `最坏时间复杂度`:**最坏情况下**,算法的时间复杂度 -- `平均时间复杂度`:**所有可能输入实例在同等概率出现的情况下**,算法的期望运行时间 -- `最好时间复杂度`:**最好的情况下**,算法的时间复杂度 - - -一般情况下,考虑最坏情况的时间复杂度(即:最坏时间复杂度),保证算法的运行时间不会更长(最糟糕我都能预料,难道还有更糟糕?????噗呲) - -#### 空间复杂度 - -算法的空间复杂度可以用函数记作:S(n),**用来定义算法运行过程中需要耗费的存储空间**,是问题规模n的函数; - -> 渐进空间复杂度也被称为空间复杂度,记作:S(n)=O(g(n)) - - -**一个程序除了需要存储空间来存放本身所用的指令、常数、变量和输入数据外,也需要对数据进行操作的工作单元和存储一些实现计算所需要信息的辅助空间。** - -当输入数据所占用的空间只取决于问题本身,和算法无关时,只需要去分析除了输入和程序之外的额外空间 - - - -算法原地工作:算法所需要辅助空间是常量,记作S(1),例如: - -```c -int switchValue(a,b){ - // 定义临时变量 - int temp=a; - b=temp; - a=b; -} -``` - -在上面的函数中,只是通过临时变量temp来实现a和b的值交换,没有需要更多变量,因此可以简单理解函数的在`原地工作`,辅助空间是常量,记作S(1) \ No newline at end of file diff --git a/docs/DS/basic_introduction/basic_introduction.png b/docs/DS/basic_introduction/basic_introduction.png deleted file mode 100644 index d1c2919..0000000 Binary files a/docs/DS/basic_introduction/basic_introduction.png and /dev/null differ diff --git a/docs/DS/basic_introduction/basic_introduction.xmind b/docs/DS/basic_introduction/basic_introduction.xmind deleted file mode 100644 index 8676310..0000000 Binary files a/docs/DS/basic_introduction/basic_introduction.xmind and /dev/null differ diff --git a/docs/DS/coding/algorithm.md b/docs/DS/coding/algorithm.md deleted file mode 100644 index 3ec8d7e..0000000 --- a/docs/DS/coding/algorithm.md +++ /dev/null @@ -1,13 +0,0 @@ -<!-- - * @Description: 恶补算法 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-19 08:56:55 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-19 08:56:56 ---> - - -## 恶补算法 - ->todo \ No newline at end of file diff --git a/docs/DS/linear_table.md b/docs/DS/linear_table.md deleted file mode 100644 index 7831534..0000000 --- a/docs/DS/linear_table.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: 线性表 ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:57:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-09 01:06:17 ---> - - - -<!-- ## 线性表的基础概念和基本操作 --> - -## 基础概念和基本操作 - -> 强调线性表是一种逻辑结构,不是存储结构 - - -### 定义 - -线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。一般表示: - -L=(a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>......a<sub>n</sub>) 其中n可以理解为表长(线性表的长度),n=0时候,即表空 - - -- `表头元素`:线性表中唯一的“第一个”数据元素,例如a<sub>1</sub> -- `表尾元素`:线性表中唯一的“最后一个”数据元素,例如a<sub>n</sub> - - -重要逻辑特性: - -- 除表头元素外,线性表中每个元素有且仅有一个`直接前驱` -- 除表尾元素外,线性表中每个元素有且仅有一个`直接后继` - -基于此,这种**线性有序的逻辑结构**,使得线性表的特点如下: - -- 元素的**个数有限**(强调有限序列) -- 元素在逻辑上具有**顺序性**,在序列中每个元素都是都有先后次序的 -- 元素都数据元素,**每个元素都是单个元素** -- 元素的**数据类型都相同**(强调相同数据类型),每个数据元素占用相同大小的存储空间 -- 元素具有**抽象性**,仅仅讨论元素之间的逻辑关系,不需要去考虑元素究竟表示的什么内容 - - -> Tips: **线性表是一种逻辑结构**,表示元素之间一对一的相邻关系。**顺序表和链表则指的是存储结构** - - - -### 基本操作 - -- `InitList(&L)`: **初始化表**。构造空的线性表 -- `Length(L)`:**获取表的长度**。返回线性表L的长度,即表中的数据元素个数 -- `LocateElem(L,e)`:**按值查找操作**。在表L中国查找具有给定关键字的元素 -- `GetElem(L,i)`:**按位查找操作**。获取表中第i个位置的元素的值 -- `ListInsert(&L,i,e)`:**插入操作**。在表的第i个位置上插入指定元素e -- `ListDelete(&L,i,&e)`:**删除操作**。删除表中第i个位置的元素,并用e返回删除元素的值 -- `PrintList(L)`:**输出操作**。按照前后顺序(如:1、2....n)输出线性表的所有元素值 -- `Empty(L)`:**判空操作**。当表L为空,则返回true,否则返回false -- `DestoryList(&L)`:**销毁操作**。将线性表销毁,释放线性表L所占用的内存空间(类似:释放内存) - - -线性表是具有相同的数据类型的有限个数据元素组成的,**数据元素是由数据项组成的** - - diff --git a/docs/DS/linear_table/1.basic_concept_and_operation.md b/docs/DS/linear_table/1.basic_concept_and_operation.md deleted file mode 100644 index 3df2dfb..0000000 --- a/docs/DS/linear_table/1.basic_concept_and_operation.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: basic_concept_and_operation -date: 2021-03-07 21:57:27 -permalink: /pages/924aed/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:57:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:57:35 ---> - - - -## 线性表的基础概念和基本操作 - -> 强调线性表是一种逻辑结构,不是存储结构 - - -### 定义 - -线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。一般表示: - -L=(a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>......a<sub>n</sub>) 其中n可以理解为表长(线性表的长度),n=0时候,即表空 - - -- `表头元素`:线性表中唯一的“第一个”数据元素,例如a<sub>1</sub> -- `表尾元素`:线性表中唯一的“最后一个”数据元素,例如a<sub>n</sub> - - -重要逻辑特性: - -- 除表头元素外,线性表中每个元素有且仅有一个`直接前驱` -- 除表尾元素外,线性表中每个元素有且仅有一个`直接后继` - -基于此,这种**线性有序的逻辑结构**,使得线性表的特点如下: - -- 元素的**个数有限**(强调有限序列) -- 元素在逻辑上具有**顺序性**,在序列中每个元素都是都有先后次序的 -- 元素都数据元素,**每个元素都是单个元素** -- 元素的**数据类型都相同**(强调相同数据类型),每个数据元素占用相同大小的存储空间 -- 元素具有**抽象性**,仅仅讨论元素之间的逻辑关系,不需要去考虑元素究竟表示的什么内容 - - -> Tips: **线性表是一种逻辑结构**,表示元素之间一对一的相邻关系。**顺序表和链表则指的是存储结构** - - - -### 基本操作 - -- `InitList(&L)`: **初始化表**。构造空的线性表 -- `Length(L)`:**获取表的长度**。返回线性表L的长度,即表中的数据元素个数 -- `LocateElem(L,e)`:**按值查找操作**。在表L中国查找具有给定关键字的元素 -- `GetElem(L,i)`:**按位查找操作**。获取表中第i个位置的元素的值 -- `ListInsert(&L,i,e)`:**插入操作**。在表的第i个位置上插入指定元素e -- `ListDelete(&L,i,&e)`:**删除操作**。删除表中第i个位置的元素,并用e返回删除元素的值 -- `PrintList(L)`:**输出操作**。按照前后顺序(如:1、2....n)输出线性表的所有元素值 -- `Empty(L)`:**判空操作**。当表L为空,则返回true,否则返回false -- `DestoryList(&L)`:**销毁操作**。将线性表销毁,释放线性表L所占用的内存空间(类似:释放内存) - - -线性表是具有相同的数据类型的有限个数据元素组成的,**数据元素是由数据项组成的** - - diff --git a/docs/DS/linear_table/2.sequential_representation.md b/docs/DS/linear_table/2.sequential_representation.md deleted file mode 100644 index 9778d28..0000000 --- a/docs/DS/linear_table/2.sequential_representation.md +++ /dev/null @@ -1,284 +0,0 @@ ---- -title: sequential_representation -date: 2021-03-07 21:57:52 -permalink: /pages/ff395c/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:57:52 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:58:00 ---> - - -## 线性表的顺序表示 - - -### 定义 - -`顺序表`:顺序存储的线性表,**是用一组地址连续的存储单元,依次存储线性表中的数据元素,使得在逻辑上相邻的两个元素在物理位置上也相邻。** - - - - - - -顺序表中的元素的逻辑顺序与实际的物理位置相同 - - - -注意: - -- 线性表中的元素的位序是从1开始的,例如1、2、3... -- 数组中的元素的下标是从0开始的,例如0、1、2... - -```c -# define MaxSize 20 // 定义常量MaxSize 用来声明顺序表的最大长度 - -// 线性表结构体定义【ElemType用来代指顺序表中元素的类型,例如高级语言中的int、string....】 -typedef struct{ - ElemType data[MaxSize]; // 顺序表的元素 - int length; // 顺序表的长度 -}SqList - -``` - -#### 存储分配 - -`静态分配`:数组的大小和空间都是实现确定好的,一旦存储空间占满就会产生溢出,直接导致程序崩溃。(有点内存不够,宕机重启的意思....) - -`动态分配`:存储数据的空间在程序执行过程中通过`动态存储分配语句`分配的,即便是数据空间占满,也可以另外开辟一块更大的空间,来替换原来的存储空间,满足扩充数据空间的目的。(有点动态规划的意思....)最重要的是:**不需要像静态分配那样,一次性地固定线性表的空间和大小** - - - -```c -#define InitSize 100 // 表长度初始化 - - -// 动态分配数组顺序表的结构体定义 -typedef struct{ - ElemType *data; // 动态分配数组的指针 - int MaxSize,length; // 数组的最大容量和当前元素个数 -}SqList; - -``` - -动态分配语句 - -```C -// C语言中 - -L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize); - - -// C++ 中 - -L.data=new ElemType[InitSize]; - -``` - -`malloc()函数`: 指针型函数,返回的指针指向该分配域的开头的位置。作用是在内存的动态存储区中分配一个长度为size的连续空间。[百度百科](https://baike.baidu.com/item/malloc%E5%87%BD%E6%95%B0/8582146?fr=aladdin) - -**动态分配不是链式存储,而是属于顺序存储结构**,动态分配的物理结构没有改变,依然是随机存取的方式。只是分配的空间大小可以在运行时决定; - - -#### 顺序表的特点 - - -- 随机访问【这是最主要的特点】,通过存储起始地址和元素序号O(1)时间内访问指定元素。 -- 存储密度高,没有结点只存储数据元素,不像索引存储那样,还需要索引表什么的.. -- 逻辑上相邻的元素物理上也相邻,插入和删除需要移动大量元素 - - - - - -### 基本操作 - - -#### 插入 - -在顺序表L的第i(1≤i≤L.length+1)个位置插入新的元素e - -- 第一步:如果i非法,则直接返回false,插入失败,结束插入过程 -- 第二步:i正常,将表的第i个元素以及后面的所有元素都像有移动一个位置,在腾出来的空位置插入元素e -- 第三步:顺序表插入成功,返回true - -注意:先判空和临界值,提高算法健壮性 - -```C++ - -/* - * @Description: 顺序表的插入操作 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-02-23 07:48:26 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-02-23 07:48:26 - */ -bool ListInsert(SqList &L, int i, ElemType e){ - - // i非法 i=1 表头 i=L.length+1 表尾巴 - if(i<1||i>L.length+1){ - return false; - } - - // 存储空间满,无法插入 - if(L.length >= MaxSize){ - return false; - } - - // 遍历,将位置元素往后移动,注意从后往前循环,避免值被覆盖 - for(int j=L.length; j>=i;j--){ - L.data[j]=L.data[j-1]; - } - - // 此时,表L中的第i个元素和第i+1元素素值一样,将新元素存入i位置即可 - - // 第i个元素,对应的位置角标为i-1 - L.data[i-1]=e; - - // 表长度加1 - L.length++; - - // 返回插入成功 - return true; -} - -``` - -注意:区别顺序表中的位序和角标; - -**时间复杂度** - -- 最好情况:在表尾插入,元素向后移动循环没有执行,时间复杂度O(1); -- 最坏情况:在表头插入,元素后移循环执行n次,时间复杂度为O(n); -- 平均情况:随机插入,平均次数为:n/2,对应的平均复杂度为O(n); - - -**线性表插入算法的平均时间复杂度为:O(n)** - -> Tips: 需要根据实现代码理解循环为什么是从后往前来实现元素后移,通过for循环可以很明显的看出表尾插入快,表头插入慢 - -#### 删除 - -删除顺序表L中第i(1≤i≤L.length+1)个位置的元素 - -- 成功,返回true,将被删除的元素用引用变量返回; -- 失败,返回false - -```C++ - -/* - * @Description: 顺序表的删除操作 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-02-23 07:48:26 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-02-23 07:48:26 - */ -bool ListDelete(SqList &L, int i, ElemType &e){ - - // i非法 i=1 表头 i=L.length+1 表尾巴 - if(i<1||i>L.length+1){ - return false; - } - - // 存储空间满,无法插入 - if(L.length >= MaxSize){ - return false; - } - - // 引用变量e赋值 - e=L.data[i-1] - - // 遍历,第i个元素后面的往前移动 - for(int j=i; j<=L.length;j++){ - // 从第i个元素开始,角标从i-1开始 - L.data[j-1]=L.data[j]; - } - - // 此时,表L中的表尾元素和倒数第二个元素值一样,将表的长度-1 - - // 表长度减1 - L.length--; - - // 返回删除成功 - return true; -} - -``` - -从这里来看,删除、插入元素都会涉及到大量的元素的移动(最好情况例外),总结而言: -- 元素从后往前移,循环从前往后遍历 -- 元素从前往后移,循环从后往前遍历 - - -**时间复杂度:** - - -- 最好情况:删除表尾元素,不需要移动任何元素,时间复杂度为O(1); -- 最坏情况:删除表头元素,需要移动除第一个元素外的所有元素,时间复杂度为O(n); -- 平均情况:随机删除,平均需要(n-1)/2,对应的时间复杂度为O(n); - - - -**线性表删除算法的平均时间复杂度为O(n);** - - -#### 按值查找(顺序查找) - -在顺序表L中查找第一个元素值等于e的元素,并返回位序 - - -```C++ -/* - * @Description: 顺序表的按值查找(顺序查找) - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-02-23 07:48:26 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-02-23 07:48:26 - */ -int LocateElem(SqList L,ElemType e){ - int i; - // 循环判断 - for(i=0;i<L.length;i++){ - if(L.data[i]===e){ - // i是元素的角标,i+1是具体元素的位序号 - return i+1; - } - } - - // 未命中,返回0,即:没有 - return 0; - -} - -``` - -注意理解`位序`的含义,即元素在线性表中的位置序号,角标为`i`(角标从0开始),对应的位序为`i+1`(位序从1开始)。当返回为0时,则直接代表没有`命中`; - - -**时间复杂度:** - -- 最好情况:查找的元素在表头,只需要比较一次,循环成本最小,时间复杂度为O(1); -- 最坏情况:查找的元素在表尾或者不存在,需要完整遍历,比较n次,时间复杂度为O(n); -- 平均情况:随机查找表上的第i个(1≤i≤L.length)元素,平均次数为(n+1)/2,对应时间复杂度为O(n) - - - -**线性表按值查找(顺序查找)的平均时间复杂度为O(n);** - - - - - -**顺序存取是读写方式,不是存储结构;顺序存储是存储结构,包括有:顺序存储、链式存储、索引存储、散列存储** \ No newline at end of file diff --git a/docs/DS/linear_table/3.chain_representation.md b/docs/DS/linear_table/3.chain_representation.md deleted file mode 100644 index 1a941b9..0000000 --- a/docs/DS/linear_table/3.chain_representation.md +++ /dev/null @@ -1,450 +0,0 @@ ---- -title: chain_representation -date: 2021-03-07 21:58:40 -permalink: /pages/0a7dde/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:58:40 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:58:40 ---> - - - - -## 线性表的链式表示 - -顺序表的插入、删除操作需要移动大量元素,影响了运行效率(虽然时间复杂度为O(1)的情况也存在)。 - - -**链式存储线性表时,不需要使用连续的存储单元,不要求逻辑上相邻的两个元素在物理位置上也相邻** - - -理解“链”的含义,链条--->捆绑、指向------>指针 - - -**链式存储线性表时,对线性表的插入、删除元素是不需要移动元素的,只是需要修改指针** - - -- 单链表 -- 双链表 -- 循环链表 -- 静态链表 - - - -### 单链表 - -线性表的链式存储称作`单链表`,通过**一组任意的存储单元**来存储线性表中的数据元素。 - - -每个链表结点(node)除了存放元素自身的信息外,还需要存放一个指向其后继结点的指针。目的是:**通过指针建立起链表元素之间的线性关系** - - -单链表中结点类型的描述: -```C++ - -// 单链表结点类型定义 -typeof struct LNode{ - ElemType data; // 数据域 - struct LNode *next; // 指针域 -}LNode , *LinkList; - -``` - - -单链表可以解决顺序表需要大量连续存储空间的缺点,但是单链表在数据域的基础上附加了指针域,存在浪费存储空间的缺点; - - -单链表的元素是**离散地分布**在存储空间中的,因此**单链表是非随机存取的存储结构**,不能直接找到表中特定的结点,需要从头开始遍历、一次查找; - - -通常,**头指针用来标识一个单链表**。头指针指向`NULL`时,标识单链表为空。 - - - -#### 头结点 - -为了操作上的方便,在单链表第一个结点之前附加一个结点,叫做**头结点**。 - -- 头结点的数据域可以不存任何信息、也可以记录表长等基础信息 -- 头结点的指针域指向线性表的第一个元素结点; - - - - -**不论单链表是否带头结点(可选),头指针始终指向链表的第一个结点。** - -头结点是带头结点的链表中的第一个结点【重要】 - -- 头结点的数据域可以不存任何信息、也可以记录表长等基础信息 -- 头结点的指针域指向线性表的第一个元素结点; - - -头结点的优点: - -- 因为开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作和在表的其他位置上的操作一致,不需要进行特殊处理; -- 无论链表是否为空,头指针始终是指向头结点的头结点的非空指针【空表中,往往就只有头结点,此时头结点的指针域为空,可以有效避免头指针空指针异常问题】-----> **头结点的引入,很好的统一了空表和非空表的操作;** - - - -#### 头插法 - -> 从空表开始,生成新的结点,将读取的数据存放在新结点的数据域中,将新结点插入到当前链表的表头【头结点之后】 - - -```C++ -/* - * @Description: 单链表头插法创建 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LinkList CreateListWithStartNode(LinkList &L){ - - LNode *s; - int x; - L=(LinkList)malloc(sizeof(LNode)); // 创建头结点L - L->next=NULL; // 初始化空链表 - - // 控制台输入值 - scanf("%d",&x); - - // 输入9999 表示结束 - while(x!==9999){ - // 开辟新结点存储空间 - s=(LNode*)malloc(sizeof(LNode)); - // 结点数据域赋值 - s->data=x; - // 修改指针,新结点插入表中【注意:L->next为头结点的指针域】 - s->next=L->next; - L->next=s; - scanf("%d",&x); - } - - // 返回单链表 - return L; -} - - -``` - -特点: - -- 读入数据的顺序与生成的链表中的元素顺序是相反的【结合队列先进先出思考】 -- 每个结点插入的时间复杂度为O(1),单链表长度为n时,头插法的时间复杂度为O(n)【结合算法中的while循环,可以很明确看出时间复杂度】 - - -#### 尾插法 - -头插法建立的单链表,链表中结点的次序和输入数据的顺序不一致【相反】,尾插法则很好的避免了这个问题; - ->新结点插入到当前链表的表尾上,必须增加一个尾指针r,始终指向当前链表的尾结点; - - -```C++ - -/* - * @Description: 单链表尾插法创建 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LinkList CreateListWithEndNode(LinkList &L){ - - - int x; // 输入结点值 - L=(LinkList)malloc(sizeof(LNode)); - LNode *s; // 新结点s - LNode *r=L; // r为尾指针 - - // 控制台输入值 - scanf("%d",&x); - - while(x!==9999){ - // 开辟新结点存储空间 - s=(LNode *)malloc(sizeof(LNode)); - - // 新结点s的数据域赋值为x - s->data=x; - // 单链表L的尾指针指向新的结点s - r->next=s; - - // 指针r指向新的表尾结点 - r=s; - - scanf("%d",&x); - } - - // 表尾指针置空【重要】 - r->next=NULL; - - // 返回单链表 - return L; - -} - -``` - -特点: - -- 读入数据的顺序与生成的链表中的元素顺序完全一致 -- 每个结点插入的时间复杂度为O(1),单链表长度为n时,尾巴插法的时间复杂度为O(n)【结合算法中的while循环,可以很明确看出时间复杂度】 -- 相比头插法附设了一个指向表尾结点的指针,但时间复杂度与头插法相同 - - - -#### 按序号查找 - -> 在单链表中从第一个结点出发,顺指针next域逐个往下搜索、遍历,直到找出第i个结点为止,否则返回最后一个结点指针域NULL - - -```C++ - -/* - * @Description: 单链表按序号查找 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LNode *GetElem(LinkList L,int i){ - int j=1; // 查询计数,初始为1 - LNode *p=L->next; // 单链表头结点指针赋值给指针p - - - // 第0个元素,则指向头结点,返回头结点 - if(i==0){ - // 头结点包含数据域和指针域 - return L; - } - - // 不等于0,却小于1,则i为负数无效,直接返回NULL,查询结果空; - if(i<1){ - return NULL; - } - - // p存在且计数没有走到初始i的位置 - while(p&&j<i){ - - // 指针后移 - p=p->next; - - // 计数标记+1 - j++; - } - - // 注意: 当p不存在时, 跳出循环,p=NULL; 当p存在但是j大于等于i,跳出循环,返回查找的结果,返回p - // 从跳出循环上来分析,p要么存在即:找到的结点元素,要么为空即NULL - - // 跳出循环,返回第i个结点的指针 - return p; - -} -``` - -需要遍历(扫描)单链表,时间复杂度为:O(n) - - - -#### 按值查找 - -> 从单链表的第一个结点开始,从前往后依次比较表中个结点数据域的值,等于给定值e,则返回该结点的指针;若整个单链表【遍历完】中没有数据域值为e的结点,则返回NULL; - - -```C++ - -/* - * @Description: 单链表按值查找 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2020-03-04 23:38:04 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2020-03-04 23:39:16 - */ -LNode *LocateElem(LinkList L,ElemType e){ - - // 指针【哨兵】 - LNode *p=L->next; - // 从第1个结点开始查找数据域(data)为e的结点 - while(p!=NULL&&p->data!=e){ - // 无法匹配,指针后移 - p=p->next; - } - - // 注意:p为NULL的时候,说明单链表已经遍历的尾结点了,跳出循环,没有找到目标结点; - - // 查找到第1个匹配的结点,跳出循环,返回结点指针 - return p; - // -} - -``` -链表遍历无法匹配,会返回NULL,因为在尾结点无法匹配的时候,直接返回尾结点指针域 - -需要遍历(扫描)单链表,时间复杂度为:O(n) - - -#### 结点插入 - -> 单链表中,将值为x的新结点插入到单链表的第i个位置上 - -- 第一步: 检查插入位置的合法性; -- 第二步: 找到待插入位置的前驱结点,即第(i-1)个结点; -- 第三部: 在前驱结点后插入新结点; - -```C++ - // 循环遍历,时间复杂度O(n) - p=GetElem(L,i-1); - - // 移动指针,时间复杂度O(1) - s->next=p->next; - p->next=s; -``` - -结合上面的代码可以看出,将元素x插入到单链表L的第i个元素上,必须先找到单链表L的i个结点的前驱结点,即(i-1)的位置,需要采用`GetElem()`函数,按照序号查找; - -如果返回的前驱结点不为空,则说明插入的位置i合法,否则位置非法,插入失败; - -找到前驱结点p后,最重要的是移动指针,将新的结点s的指针域指向结点p的指针域,也就是s的指针域指向元素p的后继结点,第i个结点元素 - -原来的(i-1)位置上的元素,也就是前驱结点p的指针域则必须指向新的结点元素; - -**上面的过程不能更换,避免后继指针不存在的问题** - - -最后的最后,一定要注意将s的数据域赋值x - - -插入结点的时间复杂度集中在查找第(i-1)个元素,时间复杂度为O(n);如果在给定结点的后面插入新结点,只需要执行`p->next=s`操作,时间复杂度为O(1) - - - -##### 前插操作 - -> 在某结点的前面插入一个新的结点 - -**对结点的前插操作都可以转化为后插操作,前提:需要从单链表的头结点开始顺序查找到其前驱结点;时间复杂度为O(n)。** - -##### 后插操作 - -> 在某结点的后面插入一个新的结点,单链表插入算法中,通常采用后插操作的 - - -```C++ - -// 结点s插入到结点p的前面,修改指针域,顺序不能改变 -s->next=p->next; -p->next=s; - - -// 经典的借助变量,进行值交换 -temp=p->data; -p->data=s->data; -s->data=temp; - -``` - -上述借助临时变量`temp`来将结点s和结点p的数据域进行交换,需要开辟O(1)的空间复杂度,但是时间复杂度却从O(n)改变为O(1),典型的空间换时间策略 - - -#### 删除结点 - -> 将单链表L的第i个结点元素删除; - - -- 第一步: 先检查删除位置的合法性; -- 第二步: 查找表中的第(i-1)个结点,即被删结点的前驱结点; -- 第三步: 移动指针,删除结点元素; - - -```C++ - -// 获取删除位置结点元素的前驱结点 -p=GetElem(L,i-1); - -// 删除位置结点元素指针 -q=p->next; - -// 修改指针,将删除位置结点元素前驱结点的指针域指向其后继结点 -p->next=q->next; - -// 释放结点元素的内存控件 -free(q) - -``` - -和插入算法一样,时间都消耗在查询前驱结点上,时间复杂度为:O(n) - - - - -> 删除单链表L中给点结点元素*p,通常是按值查找获取到p结点的前驱元素,再执行删除操作,这样很明显会导致时间复杂度为:O(n),主要都消耗在`按值查找`上 - -这里可以利用p结点的后继结点将p结点删除 - -- 第一步:申请结点q,使其只想p结点的后继结点; -- 第二步:将p结点的数据域值换成其后继结点的数据域;【注意,交换没什么意义,最终p的后继结点会删除、释放】 -- 第三步:p的指针域指向q的指针域,q结点从链中“断开” -- 第四步:释放q的内存空间 - - -```C++ - // 存放p的后继结点指针 - q=p->next; - - // 结点p的后继结点元素赋值给结点p,避免后继结点的数据域丢失 - p->data=p->next->data; - p->next=q->next; - - // 此时q指向更换数据域后的p,即原来p的后继结点 - free(q) - -``` - -相比按值查找前驱结点来删除给定的结点p,利用后继结点来删除的时间复杂度更小,为:O(1) - - - -#### 计算表长 - -> 计算单链表中数据结点(不含头结点)的个数 - - -算法思路:从第一个结点开始顺序依次访问表中的每一个结点,为此需要设置一个`计数器变量`,每访问一个结点,计算器加1,直到访问到空结点为止。 - -算法时间复杂度:O(n) - - -**单链表的长度是不包括头结点的,不带头结点和带头结点的单链表在求表长操作上会略有不同。** - -不带头结点的单链表,当表为空时候,需要单独处理; - -```C++ -// 不带头结点的单链表L为空,判定条件是L=NULL。 -if(L===NULL){ -// 链表为空,表长为0 - return 0; -} - -// 带头结点的单链表L为空,判空条件:L->next=NULL; - -if(L->next===NULL){ - // 链表为空,不包含头结点,表长为0 - return 0; -} - -``` \ No newline at end of file diff --git a/docs/DS/linear_table/4.double_linked_list.md b/docs/DS/linear_table/4.double_linked_list.md deleted file mode 100644 index 038fd17..0000000 --- a/docs/DS/linear_table/4.double_linked_list.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: double_linked_list -date: 2021-03-07 21:59:05 -permalink: /pages/e577f8/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:59:05 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:59:13 ---> - - - - -## 双链表 - - -从单链表的结构上来看 -- 访问特定结点的前驱结点需要遍历整个单链表,移动指针,时间复杂度为:O(n) -- 访问特定结点的后继结点只需要移动一次指针,时间复杂度为:O(1) - - -双链表的引入,很好的解决单链表访问前驱结点时间消耗大的问题。 - - -双链表结点由三部分组成: - -- `数据域` 存放数据信息 -- `prior指针域` 指向结点的前驱结点 -- `next指针域` 指向结点的后继结点 - - -```C++ - -// 双链表结点类型 -typedef struct DNode{ - ElemType data; // 结点的数据域 - struct DNode *prior; // 结点的前驱指针 - struct DNode *next; // 结点的后继指针 -}DNode, *DlinkList; - -``` - - -### 基本特点 - -- 双链表仅仅在单链表的结点中增加了一个指向结点前驱的`prior`指针; -- `按值查找`、`按序号查找`在单链表和双链表上的操作是相同的。 -- 和单链表不同,`插入`、`删除`操作除了修改`next`指针域,双链表还需要修改`prior`指针域,确保不断`链`,时间复杂度都为:O(1) - - - - -### 插入结点 - -> 在双链表中p所指的结点之后插入结点s - - -```C++ - -// 第一步 -s->next=p->next; - -// 第二步 -p->next->prior=s; - -// 第三步 -s->prior=p; - -// 第四步 -p->next=s - -``` - -**第一步和第二步必须再第四步之前**,整体时间复杂度为:O(1) - -### 删除结点 - -> 删除双链表中结点p的后继结点q - -```C++ - -// 第一步 -p->next=q->next; - -// 第二步 -q->next->prior=p; - -// 第三步 -free(q); - -``` - -**第一步和第二步顺序可换**,整体时间复杂度为:O(1) \ No newline at end of file diff --git a/docs/DS/linear_table/5.circular_list.md b/docs/DS/linear_table/5.circular_list.md deleted file mode 100644 index 62cbaa1..0000000 --- a/docs/DS/linear_table/5.circular_list.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: circular_list -date: 2021-03-07 21:59:27 -permalink: /pages/a7b602/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:59:27 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:59:27 ---> - - - - -## 循环链表 - -- 循环单链表 -- 循环双链表 - - -### 循环单链表 - -`循环单链表`是在单链表的基础上,将最后一个结点(尾结点)的指针由`NULL`改为指向`头结点`,形成`环`。【单链表----->循环单链表】 - - -```C++ -// 双链表结点类型 -typedef struct DNode{ - ElemType data; // 结点的数据域 - struct DNode *prior; // 结点的前驱指针 - struct DNode *next; // 结点的后继指针 -}DNode, *DlinkList; - -``` - -#### 判空条件 - -**不是判断头结点的指针是否为空,而是需要判断是否等于头指针**,表为空时,头结点的next指针域其实是指向自己; - - - -#### 特点 - -- 在循环单链表中,尾结点*p的next指针域指向链表L(即:头结点),形成了`闭环`,不存在指针域为`NULL`的结点。 -- **由于循环单链表是个`环`,在任何位置上的插入、删除操作都是等价的,不需要去判断是否是表尾**。当其中的结点的next指针指向自己,也就能判断表为空 -- 单链表只能从头结点(表头结点)开始往后顺序遍历整个表,循环单链表可以从表中任意位置开始遍历整个链表,结点是等价的; -- **循环单链表可以抽象为时钟,形成的`环`是有顺序的;** -- 频繁的`表头`和`表尾`操作,可以对循环单链表设置`尾指针`,而不设置`头指针`,明确尾指针r后,头指针即为:`r->next` ,减少头指针到尾指针间的遍历,时间复杂度:O(n)---->O(1) - - - - -### 循环双链表 - -`循环双链表`是在双链表的基础上,将`尾结点`的`next`指针指向`头结点`,将`头结点`的`prior`指针指向`尾结点`。【双链表----->循环双链表】 - - -```C++ -// 双链表结点类型 -typedef struct DNode{ - ElemType data; // 结点的数据域 - struct DNode *prior; // 结点的前驱指针 - struct DNode *next; // 结点的后继指针 -}DNode, *DlinkList; - -``` - -#### 判空条件 - -循环双链表为空时,头结点*p的prior指针和next指针都指向L,即同时满足: - -- p->next=L -- p->prior=L - - -#### 基本特点 - -- 从双向链表中的任意一个结点开始,都可以很方便地访问它的`前驱结点`和`后继结点`。 \ No newline at end of file diff --git a/docs/DS/linear_table/6.static_linked_list.md b/docs/DS/linear_table/6.static_linked_list.md deleted file mode 100644 index 0f8c01c..0000000 --- a/docs/DS/linear_table/6.static_linked_list.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: static_linked_list -date: 2021-03-07 21:59:47 -permalink: /pages/5de3a5/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 21:59:47 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 21:59:47 ---> - - - - -## 静态链表 - -> 借助数组来描述线性表的链式存储结构,结点元素同样存在数据域`data`和指针域`next` - - -注意: 和普通的链表的指针域不同的是,静态链表的指针是结点元素的相对地址(数组下标),也称为`游标`,建议结合高级语言中数组的概念来理解; - - -**与顺序表一样,虽然静态链表属于链表,但是存储时需要预先分配一块连续的内存空间** - - -静态链表结构类型: - - -```C++ - -// 定义静态链表的最大长度 -# define MaxSize 50 - -typedef struct{ - ElemType data; // 存储数据元素,数据域 - int next; // 下个元素的相对地址,数组下标 -}SLinkList[MaxSize]; - -``` - -很显然,静态链表是通过`数组游标`来访问下一个结点元素,可以和`指针域`的相关概念结合理解; - - -- 静态链表以`next=-1`作为结束的标志【尾结点】 -- 和动态链表相同,**插入、删除操作不需要移动元素,只需要修改指针**; -- 总体来说,静态链表没有单链表使用方便,需要将整个链表存储在一块连续的内存空间中,内部的存储可以分散,通过指针构成`链`的关系 \ No newline at end of file diff --git a/docs/DS/linear_table/7.comparison_of_sequential_list_and_linked_list.md b/docs/DS/linear_table/7.comparison_of_sequential_list_and_linked_list.md deleted file mode 100644 index 486c039..0000000 --- a/docs/DS/linear_table/7.comparison_of_sequential_list_and_linked_list.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: comparison_of_sequential_list_and_linked_list -date: 2021-03-07 22:00:10 -permalink: /pages/7088fd/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 22:00:10 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:00:10 ---> - - - -## 顺序表和链表的比较 - - -### 存取方式 - -- 顺序表支持顺序存取和随机存取; -- 链表只能从表头顺序存取元素,支持顺序存取; - - -### 逻辑结构与物理结构 - - -- 顺序存储时,逻辑上相邻的元素,对应的物理存储位置也相邻【一定性】。 -- 链式存储时,逻辑上相邻的元素,对应的物理存储位置不一定相邻【可以相邻,也可以不相邻】。 -- 链式存储的逻辑关系通过指针链接表示; - - - -### 时间复杂度 - -#### 按值查找 - -- 顺序表无序的情况下,顺序表和链表的时间复杂度均为O(n) -- 顺序表有序的情况下,顺序表的时间复杂度为O(log<sub>2</sub>n),链表的时间复杂度为O(n); - - -**注意:O(log<sub>2</sub>n) < O(n)** - -#### 按序号查找 - -- 顺序表支持随机访问,时间复杂度为O(1); -- 顺序表不支持随机访问,时间复杂度为O(n); - -#### 插入、删除 - -- 顺序表平均需要移动半个表长的元素; -- 链表只需要修改相应结点的指针域,不需要移动元素; -- 链表结点除了数据域,还有指针域,在存储空间上比顺序存储需要更大的存储空间,付出更大的存储代价,存储密度不够大 - -### 空间分配 - -#### 顺序存储 - - -##### 静态分配 - -- 需要预先分配足够大的存储空间; -- 空间装满后不能扩充,存储新元素将出现`内存溢出`; -- 存储空间过大,顺序表后部闲置空间过多,造成`内部碎片` -- 存储空间过小,会造成`内存溢出` - -##### 动态分配 - -- 动态分配能够扩充存储空间,但需要移动大量元素,操作效率降低 -- 内存中没有更大块的连续存储空间,将会导致空间分配失败; - - -#### 链式存储 - -- 链式存储的结点空间只在需要的时候申请分配 -- 只要内存由空间就可以分配,操作灵活、高效 \ No newline at end of file diff --git a/docs/DS/linear_table/8.selection_of_storage_structure.md b/docs/DS/linear_table/8.selection_of_storage_structure.md deleted file mode 100644 index 2f4a9c1..0000000 --- a/docs/DS/linear_table/8.selection_of_storage_structure.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: selection_of_storage_structure -date: 2021-03-07 22:00:36 -permalink: /pages/56b8ef/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 22:00:36 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:00:43 ---> - - - - -## 存储结构的选取 - - - -### 基于存储的考虑 - -- 对线性表的长度和存储规模难以估计时,不宜采用顺序表存储 -- 链表不用事先估计存储规模,但存储密度较低 -- 链式存储结构的存储密度小于1,不要求连续的存储空间 - - - -### 基于运算的考虑 - -- 顺序表支持随机存取,按序号查找顺序表的时间复杂度为O(1); -- 链表不支持随机存取,按序号查找链表的时间复杂度为O(n); -- 顺序表的插入、删除操作,平均需要移动表中一半的元素,当表的数据量较大时,这种情况需要重点考虑的。 -- 链表的插入、删除操作,也是需要找插入位置(前驱结点、后继结点),主要的操作还是比较操作,相对较好; - - - - -### 基于环境的考虑 - -- 顺序表容易实现,任何高级语言中都有数组类型; -- 链表操作是基于指针的,指针移动,相对复杂; - - - -综上比较 - -- 通常比较稳定的线性表选择顺序存储; -- 频繁进行插入、删除操作的线性表,应该选择链式存储,动态性较强 \ No newline at end of file diff --git a/docs/DS/linear_table/9.piecemeal_knowledge_supplement.md b/docs/DS/linear_table/9.piecemeal_knowledge_supplement.md deleted file mode 100644 index adcfe2e..0000000 --- a/docs/DS/linear_table/9.piecemeal_knowledge_supplement.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: piecemeal_knowledge_supplement -date: 2021-03-07 22:00:53 -permalink: /pages/cddc8f/ -categories: - - DataStructure - - linear_table -tags: - - ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-07 22:00:53 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2021-03-07 22:00:53 ---> - - - -## 零碎知识补充 - -- 无论是链表的插入还是删除操作,必须保证不断链【重要】 -- 顺序存储结构可以随机存取也能顺序存取,链式结构只能进行顺序存取 -- 顺序存储方式同样适合图和树的存储,例如:满二叉树的顺序存储 -- 队列需要在表头删除元素,在表尾插入元素【先进先出】,采用带尾指针的循环单链表比较方便 -- 数组排序最少时间复杂度为O(nlog<sub>2</sub>n)【重要】 -- 静态链表中的指针称为`游标`,指示下一个元素在数组中的`下标` -- 静态链表用数组表示,需要预先分配较大的连续空间,同时具有一般链表的特点(插入、删除元素不需要移动元素) - - -### 单链表设置头结点 - - -目的 - -> 主要是方便运算。 - -好处 - -- 有头结点后,插入、删除数据元素的算法统一起来了,不需要判断是否在第一个元素之前插入或者删除第一个元素了。 -- 不论链表是否为空,头指针是指向头结点的`非空指针`,链表的头指针不变,因此空链表和非空链表的处理也就统一起来了。 diff --git a/docs/DS/sidebar_contents.js b/docs/DS/sidebar_contents.js deleted file mode 100644 index 119830b..0000000 --- a/docs/DS/sidebar_contents.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * @Description: 配置左侧菜单栏 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-01-12 07:37:28 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-09 01:04:35 - */ - - -module.exports=[ - 'basic_introduction', - 'linear_table' -] \ No newline at end of file diff --git a/docs/NoteMap/CN_Map.md b/docs/NoteMap/CN_Map.md deleted file mode 100644 index b5e5064..0000000 --- a/docs/NoteMap/CN_Map.md +++ /dev/null @@ -1,10 +0,0 @@ -<!-- - * @Description: 计算机网络思维导图 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:21:16 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:21:17 ---> - -## 计算机网络思维导图 \ No newline at end of file diff --git a/docs/NoteMap/DS_Map.md b/docs/NoteMap/DS_Map.md deleted file mode 100644 index 001ba27..0000000 --- a/docs/NoteMap/DS_Map.md +++ /dev/null @@ -1,10 +0,0 @@ -<!-- - * @Description: 数据结构思维导图 - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2022-04-21 23:21:49 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:21:49 ---> - -## 数据结构思维导图 \ No newline at end of file diff --git a/docs/OS/Readme.md b/docs/OS/Readme.md deleted file mode 100644 index 1f3ede1..0000000 --- a/docs/OS/Readme.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Readme ---- -<!-- - * @Description: - * @Version: Beta1.0 - * @Author: 【B站&公众号】Rong姐姐好可爱 - * @Date: 2021-03-08 10:10:52 - * @LastEditors: 【B站&公众号】Rong姐姐好可爱 - * @LastEditTime: 2022-04-21 23:13:11 ---> - - -## 操作系统 -doing diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 38dda45..0000000 --- a/docs/README.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -home: true -heroImage: https://static01.imgkr.com/temp/f0108d7c178b4ce196e43ebec14fbf23.png -heroText: 计算机应试全家桶 -externalLinkIcon: false -tagline: 磨刀不误砍柴工、读完硕士再打工,笔记内容持续更新... -actions: - - text: 快速开始→ - link: /guide/ - type: primary - - text: 工作机会 - link: /gangg - type: secondary -features: -- title: 基础概览 - details: 与官网同步的Egg.js框架基础知识整理,有效地降低日常开发和复习巩固的查询、学习时间。 -- title: 整理强化 - details: 官方插件的基础上,抽象、封装出适合自己功能的plus插件,能够快速集成、使用在新的项目中。 -- title: 反复反复 - details: 通过以项目Demo示例的方式,对框架常用的功能进行Code编写和整理,提供有效且易用的代码封装。 - -footerColumn: 3 -footerWrap: -- headline: 相关资料 - items: - - title: 王道论坛 - link: https://github.com/zpfz/vuepress-theme-antdocs - details: 全平台都可以关注 - - title: 研招网 - link: https://github.com/zpfz/vuepress-theme-antdocs - details: 考研最新消息 -- headline: 开源共享 - items: - - title: 408Family - link: https://github.com/zpfz/vuepress-theme-antdocs - details: egg-axios-plus - - title: 408CSFamily - link: https://github.com/zpfz/vuepress-theme-antdocs - details: egg-grpc-plus - - title: mysql - link: https://github.com/zpfz/vuepress-theme-antdocs - details: egg-mysql-plus - - title: sequelize - link: https://github.com/zpfz/vuepress-theme-antdocs - details: egg-sequleize-plus - - title: MQ - link: https://github.com/zpfz/vuepress-theme-antdocs - details: egg-rabbit-plus -- headline: 线上平台 - items: - - title: Oauth2 - link: http://oauth2.142vip.cn - details: 授权管理 - - title: Yapi - link: https://yapi.142vip.cn - details: 高效、易用的api平台 -- headline: 联系方式 - items: - - title: 掘金 - link: https://juejin.cn/user/448256476724807 - details: 不定期更新 - - title: CSDN - link: https://blog.csdn.net/Mmdapls - details: 不定期更新 - - title: Github - link: https://github.com/mmdapl - details: 日常更新 - - title: 哔哩哔哩 - link: https://space.bilibili.com/350937042 - details: 不定期更新 -# <a href="https://tongji.baidu.com/web/welcome/login" target="_blank">百度统计</a> -footer: Copyrights © 2019-2022 妍荣姑娘网络工作室 | <a href="https://github.com/mmdapl" target="_blank">Rong姐姐好可爱</a> -# footer: Copyrights © 2019-2022 妍荣姑娘网络工作室 Rong姐姐好可爱 -footerHtml: true ---- - - ---- - -### 本地浏览【推荐】 - -由于平台、网络等原因,在线浏览容易出现加载面、加载不出来等常见问题,因此非常建议在本地进行浏览、学习;**下面指令默认你已经安装[Git](https://git-scm.com/download)、[NPM](https://www.npmjs.com/)、[PNPM](https://www.pnpm.cn/)、[Yarn](https://yarn.bootcss.com/)、[Node](http://nodejs.cn)等环境,并对此有一定了解!** - -<CodeGroup> - -<CodeGroupItem title="PNPM(推荐)" > - -```bash:no-line-numbers -## 进入cmd命令行,直接克隆仓库 -git clone https://github.com/mmdapl/408CSFamily.git - -## 进入408CSFamily文件夹中 -cd 408CSFamily/ - -## tips: 如果本地已经clone过仓库,建议执行pull指令,获取最新 -git pull - -## 下载依赖包 -pnpm install - -## 执行dev指令,本地启动项目,打开http://localhost:4200即可访问文档 -pnpm dev - -``` -</CodeGroupItem> - -<CodeGroupItem title=" NPM "> - -```bash:no-line-numbers -## 进入cmd命令行,直接克隆仓库 -git clone https://github.com/mmdapl/408CSFamily.git - -## 进入408CSFamily文件夹中 -cd 408CSFamily/ - -## tips: 如果本地已经clone过仓库,建议执行pull指令,获取最新 -git pull - -## 下载依赖包 -npm install - -## 执行dev指令,本地启动项目,打开http://localhost:4200即可访问文档 -npm run dev - -``` - - - -</CodeGroupItem> - - -<CodeGroupItem title=" YARN "> - -```bash:no-line-numbers -## 进入cmd命令行,直接克隆仓库 -git clone https://github.com/mmdapl/408CSFamily.git - -## 进入408CSFamily文件夹中 -cd 408CSFamily/ - -## tips: 如果本地已经clone过仓库,建议执行pull指令,获取最新 -git pull - -## 下载依赖包 -yarn install - -## 执行dev指令,本地启动项目,打开http://localhost:4200即可访问文档 -yarn run dev - -``` -</CodeGroupItem> - - -</CodeGroup> - -查看项目启动日志并访问:[http://127.0.0.1:4200](http://localhost:4200),开启学习之旅吧~ - - - -### 提交记录 - - - - ---- - - -### 赞赏列表 - - -以下排名不分先后! [详细统计]() - - -<div> - <a href="https://github.com/ChiefPing" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/34122068?s=460&v=4" width="50px" style="brder-radius:5px;"/> - </a> - <a name="gzh"></a> - <a href="https://github.com/xiaoliuxin" target="_blank"> - <img src="https://avatars2.githubusercontent.com/u/60652527?s=460&v=4" style="border-radius:5px;" width="50px"/> - </a> -</div> - - - -### 赞助商 - -以下排名不分先后! 哈哈哈,还木有收到赞助,先留坑 - - - - ---- -### 联系作者 - -<div class="open-info-div"> -<!-- <a href="#gzh" target="self_blank"><img src="https://img.shields.io/badge/WeChat-公众号-5wd.svg"></a> -<a href="#wechat" target="_blank"><img src="https://img.shields.io/badge/WeChat-微信-yellow.svg"></a> --> -<a href="https://space.bilibili.com/350937042" target="_blank"><img src="https://img.shields.io/badge/Bilibili-B站-green.svg"></a> -<a href="https://142vip.cn" target="_blank"><img src="https://img.shields.io/badge/142vip-网站-orange.svg"></a> -<a href="https://blog.142vip.cn" target="_blank"><img src="https://img.shields.io/badge/blog-博客-blue.svg"></a> -<a href="https://github.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/Github-Github-9ac.svg"></a> -<a href="https://gitee.com/mmdapl" target="_blank"><img src="https://img.shields.io/badge/Gitee-码云-4ed.svg"></a> -<a href="https://blog.csdn.net/Mmdapl" target="_blank"><img src="https://img.shields.io/badge/csdn-CSDN-8ea.svg"></a> -<a href="https://juejin.im/user/448256476724807" target="_blank"><img src="https://img.shields.io/badge/JueJin-掘金-75c.svg"></a> -</div> - -若系列文章对你有所帮助,欢迎订阅公众号,获取更多内容。也可微信”骚扰“,商务合作请备注来意 - -<!-- <div align="left"> -<img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/wechat_code.jpg" width="300" height="300" style="border-radius:5px;"/> -</div> --> - - -<a name="gzh"></a> - - -<p> - <img src="https://cdn.jsdelivr.net/gh/lir0115/images@main/qr_code/gongzhonghao.jpg" style="border-radius:10px;"> -</p> - -交流/加群/互看朋友圈 -当然:**聊天 /提问 /建议 /提需求** 可以在本公众号直接**私信**,后台可以看到,有时间即会回复,偶尔的延迟和疏漏还请小伙伴们谅解,蟹蟹。 - - - - -### 外链 - -