diff --git a/website/package.json b/website/package.json index 64316c03..b4963005 100644 --- a/website/package.json +++ b/website/package.json @@ -2,11 +2,12 @@ "name": "website", "version": "0.0.0", "private": true, + "type": "module", "scripts": { "dev": "vitepress dev src", "build": "vitepress build src" }, "devDependencies": { - "vitepress": "^0.22.3" + "vitepress": "^1.4.3" } } diff --git a/website/pnpm-lock.yaml b/website/pnpm-lock.yaml index 9c383079..4c09ae13 100644 --- a/website/pnpm-lock.yaml +++ b/website/pnpm-lock.yaml @@ -1,665 +1,1503 @@ -lockfileVersion: 5.4 +lockfileVersion: '9.0' -specifiers: - vitepress: ^0.22.3 +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false -devDependencies: - vitepress: 0.22.3 +importers: + + .: + devDependencies: + vitepress: + specifier: ^1.4.3 + version: 1.4.3(@algolia/client-search@4.24.0)(postcss@8.4.47)(search-insights@2.17.2)(typescript@5.6.3) packages: - /@algolia/autocomplete-core/1.5.2: - resolution: {integrity: sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==} - dependencies: - '@algolia/autocomplete-shared': 1.5.2 - dev: true + '@algolia/autocomplete-core@1.9.3': + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} - /@algolia/autocomplete-preset-algolia/1.5.2_algoliasearch@4.13.0: - resolution: {integrity: sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==} + '@algolia/autocomplete-plugin-algolia-insights@1.9.3': + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} peerDependencies: - '@algolia/client-search': ^4.9.1 - algoliasearch: ^4.9.1 - dependencies: - '@algolia/autocomplete-shared': 1.5.2 - algoliasearch: 4.13.0 - dev: true + search-insights: '>= 1 < 3' - /@algolia/autocomplete-shared/1.5.2: - resolution: {integrity: sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==} - dev: true + '@algolia/autocomplete-preset-algolia@1.9.3': + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' - /@algolia/cache-browser-local-storage/4.13.0: - resolution: {integrity: sha512-nj1vHRZauTqP/bluwkRIgEADEimqojJgoTRCel5f6q8WCa9Y8QeI4bpDQP28FoeKnDRYa3J5CauDlN466jqRhg==} - dependencies: - '@algolia/cache-common': 4.13.0 - dev: true + '@algolia/autocomplete-shared@1.9.3': + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' - /@algolia/cache-common/4.13.0: - resolution: {integrity: sha512-f9mdZjskCui/dA/fA/5a+6hZ7xnHaaZI5tM/Rw9X8rRB39SUlF/+o3P47onZ33n/AwkpSbi5QOyhs16wHd55kA==} - dev: true + '@algolia/cache-browser-local-storage@4.24.0': + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} - /@algolia/cache-in-memory/4.13.0: - resolution: {integrity: sha512-hHdc+ahPiMM92CQMljmObE75laYzNFYLrNOu0Q3/eyvubZZRtY2SUsEEgyUEyzXruNdzrkcDxFYa7YpWBJYHAg==} - dependencies: - '@algolia/cache-common': 4.13.0 - dev: true + '@algolia/cache-common@4.24.0': + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} - /@algolia/client-account/4.13.0: - resolution: {integrity: sha512-FzFqFt9b0g/LKszBDoEsW+dVBuUe1K3scp2Yf7q6pgHWM1WqyqUlARwVpLxqyc+LoyJkTxQftOKjyFUqddnPKA==} - dependencies: - '@algolia/client-common': 4.13.0 - '@algolia/client-search': 4.13.0 - '@algolia/transporter': 4.13.0 - dev: true + '@algolia/cache-in-memory@4.24.0': + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} - /@algolia/client-analytics/4.13.0: - resolution: {integrity: sha512-klmnoq2FIiiMHImkzOm+cGxqRLLu9CMHqFhbgSy9wtXZrqb8BBUIUE2VyBe7azzv1wKcxZV2RUyNOMpFqmnRZA==} - dependencies: - '@algolia/client-common': 4.13.0 - '@algolia/client-search': 4.13.0 - '@algolia/requester-common': 4.13.0 - '@algolia/transporter': 4.13.0 - dev: true + '@algolia/client-account@4.24.0': + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} - /@algolia/client-common/4.13.0: - resolution: {integrity: sha512-GoXfTp0kVcbgfSXOjfrxx+slSipMqGO9WnNWgeMmru5Ra09MDjrcdunsiiuzF0wua6INbIpBQFTC2Mi5lUNqGA==} - dependencies: - '@algolia/requester-common': 4.13.0 - '@algolia/transporter': 4.13.0 - dev: true + '@algolia/client-analytics@4.24.0': + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} - /@algolia/client-personalization/4.13.0: - resolution: {integrity: sha512-KneLz2WaehJmNfdr5yt2HQETpLaCYagRdWwIwkTqRVFCv4DxRQ2ChPVW9jeTj4YfAAhfzE6F8hn7wkQ/Jfj6ZA==} - dependencies: - '@algolia/client-common': 4.13.0 - '@algolia/requester-common': 4.13.0 - '@algolia/transporter': 4.13.0 - dev: true + '@algolia/client-common@4.24.0': + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - /@algolia/client-search/4.13.0: - resolution: {integrity: sha512-blgCKYbZh1NgJWzeGf+caKE32mo3j54NprOf0LZVCubQb3Kx37tk1Hc8SDs9bCAE8hUvf3cazMPIg7wscSxspA==} - dependencies: - '@algolia/client-common': 4.13.0 - '@algolia/requester-common': 4.13.0 - '@algolia/transporter': 4.13.0 - dev: true + '@algolia/client-personalization@4.24.0': + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - /@algolia/logger-common/4.13.0: - resolution: {integrity: sha512-8yqXk7rMtmQJ9wZiHOt/6d4/JDEg5VCk83gJ39I+X/pwUPzIsbKy9QiK4uJ3aJELKyoIiDT1hpYVt+5ia+94IA==} - dev: true + '@algolia/client-search@4.24.0': + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - /@algolia/logger-console/4.13.0: - resolution: {integrity: sha512-YepRg7w2/87L0vSXRfMND6VJ5d6699sFJBRWzZPOlek2p5fLxxK7O0VncYuc/IbVHEgeApvgXx0WgCEa38GVuQ==} - dependencies: - '@algolia/logger-common': 4.13.0 - dev: true + '@algolia/logger-common@4.24.0': + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} - /@algolia/requester-browser-xhr/4.13.0: - resolution: {integrity: sha512-Dj+bnoWR5MotrnjblzGKZ2kCdQi2cK/VzPURPnE616NU/il7Ypy6U6DLGZ/ZYz+tnwPa0yypNf21uqt84fOgrg==} - dependencies: - '@algolia/requester-common': 4.13.0 - dev: true + '@algolia/logger-console@4.24.0': + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} - /@algolia/requester-common/4.13.0: - resolution: {integrity: sha512-BRTDj53ecK+gn7ugukDWOOcBRul59C4NblCHqj4Zm5msd5UnHFjd/sGX+RLOEoFMhetILAnmg6wMrRrQVac9vw==} - dev: true + '@algolia/recommend@4.24.0': + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} - /@algolia/requester-node-http/4.13.0: - resolution: {integrity: sha512-9b+3O4QFU4azLhGMrZAr/uZPydvzOR4aEZfSL8ZrpLZ7fbbqTO0S/5EVko+QIgglRAtVwxvf8UJ1wzTD2jvKxQ==} - dependencies: - '@algolia/requester-common': 4.13.0 - dev: true + '@algolia/requester-browser-xhr@4.24.0': + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - /@algolia/transporter/4.13.0: - resolution: {integrity: sha512-8tSQYE+ykQENAdeZdofvtkOr5uJ9VcQSWgRhQ9h01AehtBIPAczk/b2CLrMsw5yQZziLs5cZ3pJ3478yI+urhA==} - dependencies: - '@algolia/cache-common': 4.13.0 - '@algolia/logger-common': 4.13.0 - '@algolia/requester-common': 4.13.0 - dev: true + '@algolia/requester-common@4.24.0': + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - /@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + '@algolia/requester-node-http@4.24.0': + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} + + '@algolia/transporter@4.24.0': + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier/7.18.6: - resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/parser/7.17.8: - resolution: {integrity: sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.18.13 - dev: true - /@babel/types/7.18.13: - resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.18.10 - '@babel/helper-validator-identifier': 7.18.6 - to-fast-properties: 2.0.0 - dev: true - /@docsearch/css/3.0.0: - resolution: {integrity: sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA==} - dev: true - - /@docsearch/js/3.0.0: - resolution: {integrity: sha512-j3tUJWlgW3slYqzGB8fm7y05kh2qqrIK1dZOXHeMUm/5gdKE85fiz/ltfCPMDFb/MXF+bLZChJXSMzqY0Ck30Q==} - dependencies: - '@docsearch/react': 3.0.0 - preact: 10.7.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - dev: true + '@docsearch/css@3.6.2': + resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==} - /@docsearch/react/3.0.0: - resolution: {integrity: sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg==} - peerDependencies: - '@types/react': '>= 16.8.0 < 18.0.0' - react: '>= 16.8.0 < 18.0.0' - react-dom: '>= 16.8.0 < 18.0.0' - dependencies: - '@algolia/autocomplete-core': 1.5.2 - '@algolia/autocomplete-preset-algolia': 1.5.2_algoliasearch@4.13.0 - '@docsearch/css': 3.0.0 - algoliasearch: 4.13.0 - transitivePeerDependencies: - - '@algolia/client-search' - dev: true + '@docsearch/js@3.6.2': + resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==} - /@vitejs/plugin-vue/2.3.1_vite@2.9.0+vue@3.2.31: - resolution: {integrity: sha512-YNzBt8+jt6bSwpt7LP890U1UcTOIZZxfpE5WOJ638PNxSEKOqAi0+FSKS0nVeukfdZ0Ai/H7AFd6k3hayfGZqQ==} - engines: {node: '>=12.0.0'} + '@docsearch/react@3.6.2': + resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} peerDependencies: - vite: ^2.5.10 - vue: ^3.2.25 - dependencies: - vite: 2.9.0 - vue: 3.2.31 - dev: true - - /@vue/compiler-core/3.2.31: - resolution: {integrity: sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==} - dependencies: - '@babel/parser': 7.17.8 - '@vue/shared': 3.2.31 - estree-walker: 2.0.2 - source-map: 0.6.1 - dev: true - - /@vue/compiler-dom/3.2.31: - resolution: {integrity: sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==} - dependencies: - '@vue/compiler-core': 3.2.31 - '@vue/shared': 3.2.31 - dev: true - - /@vue/compiler-sfc/3.2.31: - resolution: {integrity: sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==} - dependencies: - '@babel/parser': 7.17.8 - '@vue/compiler-core': 3.2.31 - '@vue/compiler-dom': 3.2.31 - '@vue/compiler-ssr': 3.2.31 - '@vue/reactivity-transform': 3.2.31 - '@vue/shared': 3.2.31 - estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.12 - source-map: 0.6.1 - dev: true - - /@vue/compiler-ssr/3.2.31: - resolution: {integrity: sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==} - dependencies: - '@vue/compiler-dom': 3.2.31 - '@vue/shared': 3.2.31 - dev: true - - /@vue/reactivity-transform/3.2.31: - resolution: {integrity: sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==} - dependencies: - '@babel/parser': 7.17.8 - '@vue/compiler-core': 3.2.31 - '@vue/shared': 3.2.31 - estree-walker: 2.0.2 - magic-string: 0.25.9 - dev: true + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true - /@vue/reactivity/3.2.31: - resolution: {integrity: sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==} - dependencies: - '@vue/shared': 3.2.31 - dev: true + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] - /@vue/runtime-core/3.2.31: - resolution: {integrity: sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==} - dependencies: - '@vue/reactivity': 3.2.31 - '@vue/shared': 3.2.31 - dev: true + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] - /@vue/runtime-dom/3.2.31: - resolution: {integrity: sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==} - dependencies: - '@vue/runtime-core': 3.2.31 - '@vue/shared': 3.2.31 - csstype: 2.6.20 - dev: true + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] - /@vue/server-renderer/3.2.31_vue@3.2.31: - resolution: {integrity: sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==} - peerDependencies: - vue: 3.2.31 - dependencies: - '@vue/compiler-ssr': 3.2.31 - '@vue/shared': 3.2.31 - vue: 3.2.31 - dev: true - - /@vue/shared/3.2.31: - resolution: {integrity: sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==} - dev: true - - /algoliasearch/4.13.0: - resolution: {integrity: sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw==} - dependencies: - '@algolia/cache-browser-local-storage': 4.13.0 - '@algolia/cache-common': 4.13.0 - '@algolia/cache-in-memory': 4.13.0 - '@algolia/client-account': 4.13.0 - '@algolia/client-analytics': 4.13.0 - '@algolia/client-common': 4.13.0 - '@algolia/client-personalization': 4.13.0 - '@algolia/client-search': 4.13.0 - '@algolia/logger-common': 4.13.0 - '@algolia/logger-console': 4.13.0 - '@algolia/requester-browser-xhr': 4.13.0 - '@algolia/requester-common': 4.13.0 - '@algolia/requester-node-http': 4.13.0 - '@algolia/transporter': 4.13.0 - dev: true - - /csstype/2.6.20: - resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} - dev: true - - /esbuild-android-64/0.14.29: - resolution: {integrity: sha512-tJuaN33SVZyiHxRaVTo1pwW+rn3qetJX/SRuc/83rrKYtyZG0XfsQ1ao1nEudIt9w37ZSNXR236xEfm2C43sbw==} + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /esbuild-android-arm64/0.14.29: - resolution: {integrity: sha512-D74dCv6yYnMTlofVy1JKiLM5JdVSQd60/rQfJSDP9qvRAI0laPXIG/IXY1RG6jobmFMUfL38PbFnCqyI/6fPXg==} + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + os: [darwin] - /esbuild-darwin-64/0.14.29: - resolution: {integrity: sha512-+CJaRvfTkzs9t+CjGa0Oa28WoXa7EeLutQhxus+fFcu0MHhsBhlmeWHac3Cc/Sf/xPi1b2ccDFfzGYJCfV0RrA==} + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /esbuild-darwin-arm64/0.14.29: - resolution: {integrity: sha512-5Wgz/+zK+8X2ZW7vIbwoZ613Vfr4A8HmIs1XdzRmdC1kG0n5EG5fvKk/jUxhNlrYPx1gSY7XadQ3l4xAManPSw==} + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + os: [freebsd] - /esbuild-freebsd-64/0.14.29: - resolution: {integrity: sha512-VTfS7Bm9QA12JK1YXF8+WyYOfvD7WMpbArtDj6bGJ5Sy5xp01c/q70Arkn596aGcGj0TvQRplaaCIrfBG1Wdtg==} + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /esbuild-freebsd-arm64/0.14.29: - resolution: {integrity: sha512-WP5L4ejwLWWvd3Fo2J5mlXvG3zQHaw5N1KxFGnUc4+2ZFZknP0ST63i0IQhpJLgEJwnQpXv2uZlU1iWZjFqEIg==} + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.14.29: - resolution: {integrity: sha512-4myeOvFmQBWdI2U1dEBe2DCSpaZyjdQtmjUY11Zu2eQg4ynqLb8Y5mNjNU9UN063aVsCYYfbs8jbken/PjyidA==} - engines: {node: '>=12'} - cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-64/0.14.29: - resolution: {integrity: sha512-iaEuLhssReAKE7HMwxwFJFn7D/EXEs43fFy5CJeA4DGmU6JHh0qVJD2p/UP46DvUXLRKXsXw0i+kv5TdJ1w5pg==} + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} - cpu: [x64] + cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-arm/0.14.29: - resolution: {integrity: sha512-OXa9D9QL1hwrAnYYAHt/cXAuSCmoSqYfTW/0CEY0LgJNyTxJKtqc5mlwjAZAvgyjmha0auS/sQ0bXfGf2wAokQ==} + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-arm64/0.14.29: - resolution: {integrity: sha512-KYf7s8wDfUy+kjKymW3twyGT14OABjGHRkm9gPJ0z4BuvqljfOOUbq9qT3JYFnZJHOgkr29atT//hcdD0Pi7Mw==} + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-mips64le/0.14.29: - resolution: {integrity: sha512-05jPtWQMsZ1aMGfHOvnR5KrTvigPbU35BtuItSSWLI2sJu5VrM8Pr9Owym4wPvA4153DFcOJ1EPN/2ujcDt54g==} + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-ppc64le/0.14.29: - resolution: {integrity: sha512-FYhBqn4Ir9xG+f6B5VIQVbRuM4S6qwy29dDNYFPoxLRnwTEKToIYIUESN1qHyUmIbfO0YB4phG2JDV2JDN9Kgw==} + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-riscv64/0.14.29: - resolution: {integrity: sha512-eqZMqPehkb4nZcffnuOpXJQdGURGd6GXQ4ZsDHSWyIUaA+V4FpMBe+5zMPtXRD2N4BtyzVvnBko6K8IWWr36ew==} + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-linux-s390x/0.14.29: - resolution: {integrity: sha512-o7EYajF1rC/4ho7kpSG3gENVx0o2SsHm7cJ5fvewWB/TEczWU7teDgusGSujxCYcMottE3zqa423VTglNTYhjg==} + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /esbuild-netbsd-64/0.14.29: - resolution: {integrity: sha512-/esN6tb6OBSot6+JxgeOZeBk6P8V/WdR3GKBFeFpSqhgw4wx7xWUqPrdx4XNpBVO7X4Ipw9SAqgBrWHlXfddww==} + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /esbuild-openbsd-64/0.14.29: - resolution: {integrity: sha512-jUTdDzhEKrD0pLpjmk0UxwlfNJNg/D50vdwhrVcW/D26Vg0hVbthMfb19PJMatzclbK7cmgk1Nu0eNS+abzoHw==} + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /esbuild-sunos-64/0.14.29: - resolution: {integrity: sha512-EfhQN/XO+TBHTbkxwsxwA7EfiTHFe+MNDfxcf0nj97moCppD9JHPq48MLtOaDcuvrTYOcrMdJVeqmmeQ7doTcg==} + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /esbuild-windows-32/0.14.29: - resolution: {integrity: sha512-uoyb0YAJ6uWH4PYuYjfGNjvgLlb5t6b3zIaGmpWPOjgpr1Nb3SJtQiK4YCPGhONgfg2v6DcJgSbOteuKXhwqAw==} + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /esbuild-windows-64/0.14.29: - resolution: {integrity: sha512-X9cW/Wl95QjsH8WUyr3NqbmfdU72jCp71cH3pwPvI4CgBM2IeOUDdbt6oIGljPu2bf5eGDIo8K3Y3vvXCCTd8A==} + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /esbuild-windows-arm64/0.14.29: - resolution: {integrity: sha512-+O/PI+68fbUZPpl3eXhqGHTGK7DjLcexNnyJqtLZXOFwoAjaXlS5UBCvVcR3o2va+AqZTj8o6URaz8D2K+yfQQ==} - engines: {node: '>=12'} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@rollup/rollup-android-arm-eabi@4.24.3': + resolution: {integrity: sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.24.3': + resolution: {integrity: sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.24.3': + resolution: {integrity: sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.24.3': + resolution: {integrity: sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.24.3': + resolution: {integrity: sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.24.3': + resolution: {integrity: sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.24.3': + resolution: {integrity: sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.24.3': + resolution: {integrity: sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.24.3': + resolution: {integrity: sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.24.3': + resolution: {integrity: sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.3': + resolution: {integrity: sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.24.3': + resolution: {integrity: sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.24.3': + resolution: {integrity: sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.24.3': + resolution: {integrity: sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.24.3': + resolution: {integrity: sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.24.3': + resolution: {integrity: sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /esbuild/0.14.29: - resolution: {integrity: sha512-SQS8cO8xFEqevYlrHt6exIhK853Me4nZ4aMW6ieysInLa0FMAL+AKs87HYNRtR2YWRcEIqoXAHh+Ytt5/66qpg==} + '@rollup/rollup-win32-ia32-msvc@4.24.3': + resolution: {integrity: sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.24.3': + resolution: {integrity: sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==} + cpu: [x64] + os: [win32] + + '@shikijs/core@1.22.2': + resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} + + '@shikijs/engine-javascript@1.22.2': + resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} + + '@shikijs/engine-oniguruma@1.22.2': + resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} + + '@shikijs/transformers@1.22.2': + resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==} + + '@shikijs/types@1.22.2': + resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} + + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitejs/plugin-vue@5.1.4': + resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.12': + resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} + + '@vue/compiler-dom@3.5.12': + resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} + + '@vue/compiler-sfc@3.5.12': + resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} + + '@vue/compiler-ssr@3.5.12': + resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} + + '@vue/devtools-api@7.6.1': + resolution: {integrity: sha512-W99uw1nJKWeG4V2Bgp/pR1vnIREfixmnYW71wjtID7Gn/XnHH+nhfJmNy/0DjxcXOM14POVBDkl9JGlsOx1UjQ==} + + '@vue/devtools-kit@7.6.1': + resolution: {integrity: sha512-cCcdskZDLqKwJUHq1+kH9zAfYM+y9OFq8J2NT0xcAUYpu8K5IJd03ydZkvr7ydOd9UKBxrGyZpYe9PpJ0ChrVw==} + + '@vue/devtools-shared@7.6.1': + resolution: {integrity: sha512-SdIif2YoOWo8/s8c1+NU67jcx8qoSjM9caetQnjl3++Kufo0qa5JRZe95iV6vvupQzVGGo3ACY0LTyAsMfGeCg==} + + '@vue/reactivity@3.5.12': + resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} + + '@vue/runtime-core@3.5.12': + resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} + + '@vue/runtime-dom@3.5.12': + resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} + + '@vue/server-renderer@3.5.12': + resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} + peerDependencies: + vue: 3.5.12 + + '@vue/shared@3.5.12': + resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + + '@vueuse/core@11.2.0': + resolution: {integrity: sha512-JIUwRcOqOWzcdu1dGlfW04kaJhW3EXnnjJJfLTtddJanymTL7lF1C0+dVVZ/siLfc73mWn+cGP1PE1PKPruRSA==} + + '@vueuse/integrations@11.2.0': + resolution: {integrity: sha512-zGXz3dsxNHKwiD9jPMvR3DAxQEOV6VWIEYTGVSB9PNpk4pTWR+pXrHz9gvXWcP2sTk3W2oqqS6KwWDdntUvNVA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@11.2.0': + resolution: {integrity: sha512-L0ZmtRmNx+ZW95DmrgD6vn484gSpVeRbgpWevFKXwqqQxW9hnSi2Ppuh2BzMjnbv4aJRiIw8tQatXT9uOB23dQ==} + + '@vueuse/shared@11.2.0': + resolution: {integrity: sha512-VxFjie0EanOudYSgMErxXfq6fo8vhr5ICI+BuE3I9FnX7ePllEsVrRQ7O6Q1TLgApeLuPKcHQxAXpP+KnlrJsg==} + + algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - requiresBuild: true - optionalDependencies: - esbuild-android-64: 0.14.29 - esbuild-android-arm64: 0.14.29 - esbuild-darwin-64: 0.14.29 - esbuild-darwin-arm64: 0.14.29 - esbuild-freebsd-64: 0.14.29 - esbuild-freebsd-arm64: 0.14.29 - esbuild-linux-32: 0.14.29 - esbuild-linux-64: 0.14.29 - esbuild-linux-arm: 0.14.29 - esbuild-linux-arm64: 0.14.29 - esbuild-linux-mips64le: 0.14.29 - esbuild-linux-ppc64le: 0.14.29 - esbuild-linux-riscv64: 0.14.29 - esbuild-linux-s390x: 0.14.29 - esbuild-netbsd-64: 0.14.29 - esbuild-openbsd-64: 0.14.29 - esbuild-sunos-64: 0.14.29 - esbuild-windows-32: 0.14.29 - esbuild-windows-64: 0.14.29 - esbuild-windows-arm64: 0.14.29 - dev: true - - /estree-walker/2.0.2: + + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + focus-trap@7.6.0: + resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: true - optional: true - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} - /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - /is-core-module/2.8.1: - resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} - dependencies: - has: 1.0.3 - dev: true + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - /magic-string/0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: true + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - /nanoid/3.3.2: - resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + + minisearch@7.1.0: + resolution: {integrity: sha512-tv7c/uefWdEhcu6hvrfTihflgeEi2tN6VV7HJnCjK6VxM75QQJh4t9FwJCsA2EsRS8LCnu3W87CuGPWMocOLCA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - /picocolors/1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - /postcss/8.4.12: - resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.2 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /preact/10.7.0: - resolution: {integrity: sha512-9MEURwzNMKpAil/t6+wabDIJI6oG6GnwypYxiJDvQnW+fHDTt51PYuLZ1QUM31hFr7sDaj9qTaShAF9VIxuxGQ==} - dev: true + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} - /prismjs/1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} - dev: true + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - /resolve/1.22.0: - resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} - hasBin: true - dependencies: - is-core-module: 2.8.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true + regex@4.3.3: + resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} - /rollup/2.70.1: - resolution: {integrity: sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==} - engines: {node: '>=10.0.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.24.3: + resolution: {integrity: sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /source-map-js/1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + + shiki@1.22.2: + resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - dev: true - /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} - dev: true - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - dev: true + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - /supports-preserve-symlinks-flag/1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - /to-fast-properties/2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - /vite/2.9.0: - resolution: {integrity: sha512-5NAnNqzPmZzJvrswZGeTS2JHrBGIzIWJA2hBTTMYuoBVEMh0xwE0b5yyIXFxf7F07hrK4ugX2LJ7q6t7iIbd4Q==} - engines: {node: '>=12.2.0'} + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@5.4.10: + resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 less: '*' + lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' + sugarss: '*' + terser: ^5.4.0 peerDependenciesMeta: + '@types/node': + optional: true less: optional: true + lightningcss: + optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true + sugarss: + optional: true + terser: + optional: true + + vitepress@1.4.3: + resolution: {integrity: sha512-956c2K2Mr0ubY9bTc2lCJD3g0mgo0mARB1iJC/BqUt4s0AM8Wl60wSU4zbFnzV7X2miFK1XJDKzGZnuEN90umw==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue@3.5.12: + resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': dependencies: - esbuild: 0.14.29 - postcss: 8.4.12 - resolve: 1.22.0 - rollup: 2.70.1 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + dependencies: + '@algolia/client-search': 4.24.0 + algoliasearch: 4.24.0 + + '@algolia/cache-browser-local-storage@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/cache-common@4.24.0': {} + + '@algolia/cache-in-memory@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + + '@algolia/client-account@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-analytics@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-common@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-personalization@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/client-search@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/logger-common@4.24.0': {} + + '@algolia/logger-console@4.24.0': + dependencies: + '@algolia/logger-common': 4.24.0 + + '@algolia/recommend@4.24.0': + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/requester-browser-xhr@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/requester-common@4.24.0': {} + + '@algolia/requester-node-http@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/transporter@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@docsearch/css@3.6.2': {} + + '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + dependencies: + '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) + preact: 10.24.3 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@docsearch/css': 3.6.2 + algoliasearch: 4.24.0 optionalDependencies: - fsevents: 2.3.2 - dev: true + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' - /vitepress/0.22.3: - resolution: {integrity: sha512-Yfvu/rent2vp/TXIDZMutS6ft2TJPn4xngS48PYFWDEbuFI2ccUAXM481lF1qVVnCKxfh4g8e/KPvevSJdg1Bw==} - engines: {node: '>=14.0.0'} - hasBin: true + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@rollup/rollup-android-arm-eabi@4.24.3': + optional: true + + '@rollup/rollup-android-arm64@4.24.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.24.3': + optional: true + + '@rollup/rollup-darwin-x64@4.24.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.24.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.24.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.24.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.24.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.24.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.24.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.24.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.24.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.24.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.24.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.24.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.24.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.24.3': + optional: true + + '@shikijs/core@1.22.2': + dependencies: + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.3 + + '@shikijs/engine-javascript@1.22.2': + dependencies: + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-js: 0.4.3 + + '@shikijs/engine-oniguruma@1.22.2': + dependencies: + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 + + '@shikijs/transformers@1.22.2': + dependencies: + shiki: 1.22.2 + + '@shikijs/types@1.22.2': dependencies: - '@docsearch/css': 3.0.0 - '@docsearch/js': 3.0.0 - '@vitejs/plugin-vue': 2.3.1_vite@2.9.0+vue@3.2.31 - prismjs: 1.27.0 - vite: 2.9.0 - vue: 3.2.31 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@9.3.0': {} + + '@types/estree@1.0.6': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + + '@types/unist@3.0.3': {} + + '@types/web-bluetooth@0.0.20': {} + + '@ungap/structured-clone@1.2.0': {} + + '@vitejs/plugin-vue@5.1.4(vite@5.4.10)(vue@3.5.12(typescript@5.6.3))': + dependencies: + vite: 5.4.10 + vue: 3.5.12(typescript@5.6.3) + + '@vue/compiler-core@3.5.12': + dependencies: + '@babel/parser': 7.26.2 + '@vue/shared': 3.5.12 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.12': + dependencies: + '@vue/compiler-core': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/compiler-sfc@3.5.12': + dependencies: + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + estree-walker: 2.0.2 + magic-string: 0.30.12 + postcss: 8.4.47 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.12': + dependencies: + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/devtools-api@7.6.1': + dependencies: + '@vue/devtools-kit': 7.6.1 + + '@vue/devtools-kit@7.6.1': + dependencies: + '@vue/devtools-shared': 7.6.1 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + + '@vue/devtools-shared@7.6.1': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.12': + dependencies: + '@vue/shared': 3.5.12 + + '@vue/runtime-core@3.5.12': + dependencies: + '@vue/reactivity': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/runtime-dom@3.5.12': + dependencies: + '@vue/reactivity': 3.5.12 + '@vue/runtime-core': 3.5.12 + '@vue/shared': 3.5.12 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + vue: 3.5.12(typescript@5.6.3) + + '@vue/shared@3.5.12': {} + + '@vueuse/core@11.2.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.2.0 + '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@11.2.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3)) + '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + optionalDependencies: + focus-trap: 7.6.0 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@11.2.0': {} + + '@vueuse/shared@11.2.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + algoliasearch@4.24.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + birpc@0.2.19: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + comma-separated-tokens@2.0.3: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + csstype@3.1.3: {} + + dequal@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + entities@4.5.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + estree-walker@2.0.2: {} + + focus-trap@7.6.0: + dependencies: + tabbable: 6.2.0 + + fsevents@2.3.3: + optional: true + + hast-util-to-html@9.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + + html-void-elements@3.0.0: {} + + is-what@4.1.16: {} + + magic-string@0.30.12: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + mark.js@8.11.1: {} + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + micromark-util-character@2.1.0: + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + micromark-util-encode@2.0.0: {} + + micromark-util-sanitize-uri@2.0.0: + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + + micromark-util-symbol@2.0.0: {} + + micromark-util-types@2.0.0: {} + + minisearch@7.1.0: {} + + mitt@3.0.1: {} + + nanoid@3.3.7: {} + + oniguruma-to-js@0.4.3: + dependencies: + regex: 4.3.3 + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact@10.24.3: {} + + property-information@6.5.0: {} + + regex@4.3.3: {} + + rfdc@1.4.1: {} + + rollup@4.24.3: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.24.3 + '@rollup/rollup-android-arm64': 4.24.3 + '@rollup/rollup-darwin-arm64': 4.24.3 + '@rollup/rollup-darwin-x64': 4.24.3 + '@rollup/rollup-freebsd-arm64': 4.24.3 + '@rollup/rollup-freebsd-x64': 4.24.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.3 + '@rollup/rollup-linux-arm-musleabihf': 4.24.3 + '@rollup/rollup-linux-arm64-gnu': 4.24.3 + '@rollup/rollup-linux-arm64-musl': 4.24.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.3 + '@rollup/rollup-linux-riscv64-gnu': 4.24.3 + '@rollup/rollup-linux-s390x-gnu': 4.24.3 + '@rollup/rollup-linux-x64-gnu': 4.24.3 + '@rollup/rollup-linux-x64-musl': 4.24.3 + '@rollup/rollup-win32-arm64-msvc': 4.24.3 + '@rollup/rollup-win32-ia32-msvc': 4.24.3 + '@rollup/rollup-win32-x64-msvc': 4.24.3 + fsevents: 2.3.3 + + search-insights@2.17.2: {} + + shiki@1.22.2: + dependencies: + '@shikijs/core': 1.22.2 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 + '@shikijs/vscode-textmate': 9.3.0 + '@types/hast': 3.0.4 + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + speakingurl@14.0.1: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + superjson@2.2.1: + dependencies: + copy-anything: 3.0.5 + + tabbable@6.2.0: {} + + trim-lines@3.0.1: {} + + typescript@5.6.3: + optional: true + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vite@5.4.10: + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.3 + optionalDependencies: + fsevents: 2.3.3 + + vitepress@1.4.3(@algolia/client-search@4.24.0)(postcss@8.4.47)(search-insights@2.17.2)(typescript@5.6.3): + dependencies: + '@docsearch/css': 3.6.2 + '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) + '@shikijs/core': 1.22.2 + '@shikijs/transformers': 1.22.2 + '@shikijs/types': 1.22.2 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.1.4(vite@5.4.10)(vue@3.5.12(typescript@5.6.3)) + '@vue/devtools-api': 7.6.1 + '@vue/shared': 3.5.12 + '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3)) + '@vueuse/integrations': 11.2.0(focus-trap@7.6.0)(vue@3.5.12(typescript@5.6.3)) + focus-trap: 7.6.0 + mark.js: 8.11.1 + minisearch: 7.1.0 + shiki: 1.22.2 + vite: 5.4.10 + vue: 3.5.12(typescript@5.6.3) + optionalDependencies: + postcss: 8.4.47 transitivePeerDependencies: - '@algolia/client-search' + - '@types/node' - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode - less + - lightningcss + - nprogress + - qrcode - react - react-dom - sass + - sass-embedded + - search-insights + - sortablejs - stylus - dev: true + - sugarss + - terser + - typescript + - universal-cookie - /vue/3.2.31: - resolution: {integrity: sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==} + vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): dependencies: - '@vue/compiler-dom': 3.2.31 - '@vue/compiler-sfc': 3.2.31 - '@vue/runtime-dom': 3.2.31 - '@vue/server-renderer': 3.2.31_vue@3.2.31 - '@vue/shared': 3.2.31 - dev: true + vue: 3.5.12(typescript@5.6.3) + + vue@3.5.12(typescript@5.6.3): + dependencies: + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-sfc': 3.5.12 + '@vue/runtime-dom': 3.5.12 + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) + '@vue/shared': 3.5.12 + optionalDependencies: + typescript: 5.6.3 + + zwitch@2.0.4: {} diff --git a/website/src/.vitepress/cache/deps/@theme_index.js b/website/src/.vitepress/cache/deps/@theme_index.js new file mode 100644 index 00000000..b0259519 --- /dev/null +++ b/website/src/.vitepress/cache/deps/@theme_index.js @@ -0,0 +1,282 @@ +import { useMediaQuery } from './chunk-PWVUJGW4.js' +import { computed, ref, shallowRef, watch } from './chunk-6J5AW4SK.js' + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/index.js +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/fonts.css' + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/without-fonts.js +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/vars.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/base.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/icons.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/utils.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css' +import '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css' +import VPBadge from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue' +import Layout from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/Layout.vue' +import { default as default2 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue' +import { default as default3 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue' +import { default as default4 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue' +import { default as default5 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPHomeContent.vue' +import { default as default6 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue' +import { default as default7 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue' +import { default as default8 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue' +import { default as default9 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPLink.vue' +import { default as default10 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue' +import { default as default11 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPSocialLink.vue' +import { default as default12 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPSocialLinks.vue' +import { default as default13 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue' +import { default as default14 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue' +import { default as default15 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue' +import { default as default16 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue' +import { default as default17 } from '/Users/jakubjuszczak/Projekte/Privat/vue-chartjs/website/node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue' + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/support/utils.js +import { withBase } from 'vitepress' + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/data.js +import { useData as useData$ } from 'vitepress' +var useData = useData$ + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/support/utils.js +function ensureStartingSlash(path) { + return /^\//.test(path) ? path : `/${path}` +} + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/support/sidebar.js +function getSidebar(_sidebar, path) { + if (Array.isArray(_sidebar)) return addBase(_sidebar) + if (_sidebar == null) return [] + path = ensureStartingSlash(path) + const dir = Object.keys(_sidebar) + .sort((a, b) => { + return b.split('/').length - a.split('/').length + }) + .find(dir2 => { + return path.startsWith(ensureStartingSlash(dir2)) + }) + const sidebar = dir ? _sidebar[dir] : [] + return Array.isArray(sidebar) + ? addBase(sidebar) + : addBase(sidebar.items, sidebar.base) +} +function getSidebarGroups(sidebar) { + const groups = [] + let lastGroupIndex = 0 + for (const index in sidebar) { + const item = sidebar[index] + if (item.items) { + lastGroupIndex = groups.push(item) + continue + } + if (!groups[lastGroupIndex]) { + groups.push({ items: [] }) + } + groups[lastGroupIndex].items.push(item) + } + return groups +} +function addBase(items, _base) { + return [...items].map(_item => { + const item = { ..._item } + const base = item.base || _base + if (base && item.link) item.link = base + item.link + if (item.items) item.items = addBase(item.items, base) + return item + }) +} + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/sidebar.js +function useSidebar() { + const { frontmatter, page, theme: theme2 } = useData() + const is960 = useMediaQuery('(min-width: 960px)') + const isOpen = ref(false) + const _sidebar = computed(() => { + const sidebarConfig = theme2.value.sidebar + const relativePath = page.value.relativePath + return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [] + }) + const sidebar = ref(_sidebar.value) + watch(_sidebar, (next, prev) => { + if (JSON.stringify(next) !== JSON.stringify(prev)) + sidebar.value = _sidebar.value + }) + const hasSidebar = computed(() => { + return ( + frontmatter.value.sidebar !== false && + sidebar.value.length > 0 && + frontmatter.value.layout !== 'home' + ) + }) + const leftAside = computed(() => { + if (hasAside) + return frontmatter.value.aside == null + ? theme2.value.aside === 'left' + : frontmatter.value.aside === 'left' + return false + }) + const hasAside = computed(() => { + if (frontmatter.value.layout === 'home') return false + if (frontmatter.value.aside != null) return !!frontmatter.value.aside + return theme2.value.aside !== false + }) + const isSidebarEnabled = computed(() => hasSidebar.value && is960.value) + const sidebarGroups = computed(() => { + return hasSidebar.value ? getSidebarGroups(sidebar.value) : [] + }) + function open() { + isOpen.value = true + } + function close() { + isOpen.value = false + } + function toggle() { + isOpen.value ? close() : open() + } + return { + isOpen, + sidebar, + sidebarGroups, + hasSidebar, + hasAside, + leftAside, + isSidebarEnabled, + open, + close, + toggle + } +} + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js +import { onContentUpdated } from 'vitepress' + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/outline.js +import { getScrollOffset } from 'vitepress' +var resolvedHeaders = [] +function getHeaders(range) { + const headers = [ + ...document.querySelectorAll('.VPDoc :where(h1,h2,h3,h4,h5,h6)') + ] + .filter(el => el.id && el.hasChildNodes()) + .map(el => { + const level = Number(el.tagName[1]) + return { + element: el, + title: serializeHeader(el), + link: '#' + el.id, + level + } + }) + return resolveHeaders(headers, range) +} +function serializeHeader(h) { + let ret = '' + for (const node of h.childNodes) { + if (node.nodeType === 1) { + if ( + node.classList.contains('VPBadge') || + node.classList.contains('header-anchor') || + node.classList.contains('ignore-header') + ) { + continue + } + ret += node.textContent + } else if (node.nodeType === 3) { + ret += node.textContent + } + } + return ret.trim() +} +function resolveHeaders(headers, range) { + if (range === false) { + return [] + } + const levelsRange = + (typeof range === 'object' && !Array.isArray(range) + ? range.level + : range) || 2 + const [high, low] = + typeof levelsRange === 'number' + ? [levelsRange, levelsRange] + : levelsRange === 'deep' + ? [2, 6] + : levelsRange + return buildTree(headers, high, low) +} +function buildTree(data, min, max) { + resolvedHeaders.length = 0 + const result = [] + const stack = [] + data.forEach(item => { + const node = { ...item, children: [] } + let parent = stack[stack.length - 1] + while (parent && parent.level >= node.level) { + stack.pop() + parent = stack[stack.length - 1] + } + if ( + node.element.classList.contains('ignore-header') || + (parent && 'shouldIgnore' in parent) + ) { + stack.push({ level: node.level, shouldIgnore: true }) + return + } + if (node.level > max || node.level < min) return + resolvedHeaders.push({ element: node.element, link: node.link }) + if (parent) parent.children.push(node) + else result.push(node) + stack.push(node) + }) + return result +} + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js +function useLocalNav() { + const { theme: theme2, frontmatter } = useData() + const headers = shallowRef([]) + const hasLocalNav = computed(() => { + return headers.value.length > 0 + }) + onContentUpdated(() => { + headers.value = getHeaders( + frontmatter.value.outline ?? theme2.value.outline + ) + }) + return { + headers, + hasLocalNav + } +} + +// node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/without-fonts.js +var theme = { + Layout, + enhanceApp: ({ app }) => { + app.component('Badge', VPBadge) + } +} +var without_fonts_default = theme +export { + default2 as VPBadge, + default4 as VPButton, + default10 as VPDocAsideSponsors, + default5 as VPHomeContent, + default7 as VPHomeFeatures, + default6 as VPHomeHero, + default8 as VPHomeSponsors, + default3 as VPImage, + default9 as VPLink, + default11 as VPSocialLink, + default12 as VPSocialLinks, + default13 as VPSponsors, + default17 as VPTeamMembers, + default14 as VPTeamPage, + default16 as VPTeamPageSection, + default15 as VPTeamPageTitle, + without_fonts_default as default, + useLocalNav, + useSidebar +} +//# sourceMappingURL=@theme_index.js.map diff --git a/website/src/.vitepress/cache/deps/@theme_index.js.map b/website/src/.vitepress/cache/deps/@theme_index.js.map new file mode 100644 index 00000000..645f4daa --- /dev/null +++ b/website/src/.vitepress/cache/deps/@theme_index.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/index.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/without-fonts.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/support/utils.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/data.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/support/sidebar.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/sidebar.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/local-nav.js", "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/composables/outline.js"], + "sourcesContent": ["import './styles/fonts.css';\nexport * from './without-fonts';\nexport { default as default } from './without-fonts';\n", "import './styles/vars.css';\nimport './styles/base.css';\nimport './styles/icons.css';\nimport './styles/utils.css';\nimport './styles/components/custom-block.css';\nimport './styles/components/vp-code.css';\nimport './styles/components/vp-code-group.css';\nimport './styles/components/vp-doc.css';\nimport './styles/components/vp-sponsor.css';\nimport VPBadge from './components/VPBadge.vue';\nimport Layout from './Layout.vue';\nexport { default as VPBadge } from './components/VPBadge.vue';\nexport { default as VPImage } from './components/VPImage.vue';\nexport { default as VPButton } from './components/VPButton.vue';\nexport { default as VPHomeContent } from './components/VPHomeContent.vue';\nexport { default as VPHomeHero } from './components/VPHomeHero.vue';\nexport { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';\nexport { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';\nexport { default as VPLink } from './components/VPLink.vue';\nexport { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';\nexport { default as VPSocialLink } from './components/VPSocialLink.vue';\nexport { default as VPSocialLinks } from './components/VPSocialLinks.vue';\nexport { default as VPSponsors } from './components/VPSponsors.vue';\nexport { default as VPTeamPage } from './components/VPTeamPage.vue';\nexport { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';\nexport { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';\nexport { default as VPTeamMembers } from './components/VPTeamMembers.vue';\nexport { useSidebar } from './composables/sidebar';\nexport { useLocalNav } from './composables/local-nav';\nconst theme = {\n Layout,\n enhanceApp: ({ app }) => {\n app.component('Badge', VPBadge);\n }\n};\nexport default theme;\n", "import { withBase } from 'vitepress';\nimport { useData } from '../composables/data';\nimport { isExternal, treatAsHtml } from '../../shared';\nexport function throttleAndDebounce(fn, delay) {\n let timeoutId;\n let called = false;\n return () => {\n if (timeoutId)\n clearTimeout(timeoutId);\n if (!called) {\n fn();\n (called = true) && setTimeout(() => (called = false), delay);\n }\n else\n timeoutId = setTimeout(fn, delay);\n };\n}\nexport function ensureStartingSlash(path) {\n return /^\\//.test(path) ? path : `/${path}`;\n}\nexport function normalizeLink(url) {\n const { pathname, search, hash, protocol } = new URL(url, 'http://a.com');\n if (isExternal(url) ||\n url.startsWith('#') ||\n !protocol.startsWith('http') ||\n !treatAsHtml(pathname))\n return url;\n const { site } = useData();\n const normalizedPath = pathname.endsWith('/') || pathname.endsWith('.html')\n ? url\n : url.replace(/(?:(^\\.+)\\/)?.*$/, `$1${pathname.replace(/(\\.md)?$/, site.value.cleanUrls ? '' : '.html')}${search}${hash}`);\n return withBase(normalizedPath);\n}\n", "import { useData as useData$ } from 'vitepress';\nexport const useData = useData$;\n", "import { ensureStartingSlash } from './utils';\nimport { isActive } from '../../shared';\n/**\n * Get the `Sidebar` from sidebar option. This method will ensure to get correct\n * sidebar config from `MultiSideBarConfig` with various path combinations such\n * as matching `guide/` and `/guide/`. If no matching config was found, it will\n * return empty array.\n */\nexport function getSidebar(_sidebar, path) {\n if (Array.isArray(_sidebar))\n return addBase(_sidebar);\n if (_sidebar == null)\n return [];\n path = ensureStartingSlash(path);\n const dir = Object.keys(_sidebar)\n .sort((a, b) => {\n return b.split('/').length - a.split('/').length;\n })\n .find((dir) => {\n // make sure the multi sidebar key starts with slash too\n return path.startsWith(ensureStartingSlash(dir));\n });\n const sidebar = dir ? _sidebar[dir] : [];\n return Array.isArray(sidebar)\n ? addBase(sidebar)\n : addBase(sidebar.items, sidebar.base);\n}\n/**\n * Get or generate sidebar group from the given sidebar items.\n */\nexport function getSidebarGroups(sidebar) {\n const groups = [];\n let lastGroupIndex = 0;\n for (const index in sidebar) {\n const item = sidebar[index];\n if (item.items) {\n lastGroupIndex = groups.push(item);\n continue;\n }\n if (!groups[lastGroupIndex]) {\n groups.push({ items: [] });\n }\n groups[lastGroupIndex].items.push(item);\n }\n return groups;\n}\nexport function getFlatSideBarLinks(sidebar) {\n const links = [];\n function recursivelyExtractLinks(items) {\n for (const item of items) {\n if (item.text && item.link) {\n links.push({\n text: item.text,\n link: item.link,\n docFooterText: item.docFooterText\n });\n }\n if (item.items) {\n recursivelyExtractLinks(item.items);\n }\n }\n }\n recursivelyExtractLinks(sidebar);\n return links;\n}\n/**\n * Check if the given sidebar item contains any active link.\n */\nexport function hasActiveLink(path, items) {\n if (Array.isArray(items)) {\n return items.some((item) => hasActiveLink(path, item));\n }\n return isActive(path, items.link)\n ? true\n : items.items\n ? hasActiveLink(path, items.items)\n : false;\n}\nfunction addBase(items, _base) {\n return [...items].map((_item) => {\n const item = { ..._item };\n const base = item.base || _base;\n if (base && item.link)\n item.link = base + item.link;\n if (item.items)\n item.items = addBase(item.items, base);\n return item;\n });\n}\n", "import { useMediaQuery } from '@vueuse/core';\nimport { computed, onMounted, onUnmounted, ref, watch, watchEffect, watchPostEffect } from 'vue';\nimport { isActive } from '../../shared';\nimport { hasActiveLink as containsActiveLink, getSidebar, getSidebarGroups } from '../support/sidebar';\nimport { useData } from './data';\nexport function useSidebar() {\n const { frontmatter, page, theme } = useData();\n const is960 = useMediaQuery('(min-width: 960px)');\n const isOpen = ref(false);\n const _sidebar = computed(() => {\n const sidebarConfig = theme.value.sidebar;\n const relativePath = page.value.relativePath;\n return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : [];\n });\n const sidebar = ref(_sidebar.value);\n watch(_sidebar, (next, prev) => {\n if (JSON.stringify(next) !== JSON.stringify(prev))\n sidebar.value = _sidebar.value;\n });\n const hasSidebar = computed(() => {\n return (frontmatter.value.sidebar !== false &&\n sidebar.value.length > 0 &&\n frontmatter.value.layout !== 'home');\n });\n const leftAside = computed(() => {\n if (hasAside)\n return frontmatter.value.aside == null\n ? theme.value.aside === 'left'\n : frontmatter.value.aside === 'left';\n return false;\n });\n const hasAside = computed(() => {\n if (frontmatter.value.layout === 'home')\n return false;\n if (frontmatter.value.aside != null)\n return !!frontmatter.value.aside;\n return theme.value.aside !== false;\n });\n const isSidebarEnabled = computed(() => hasSidebar.value && is960.value);\n const sidebarGroups = computed(() => {\n return hasSidebar.value ? getSidebarGroups(sidebar.value) : [];\n });\n function open() {\n isOpen.value = true;\n }\n function close() {\n isOpen.value = false;\n }\n function toggle() {\n isOpen.value ? close() : open();\n }\n return {\n isOpen,\n sidebar,\n sidebarGroups,\n hasSidebar,\n hasAside,\n leftAside,\n isSidebarEnabled,\n open,\n close,\n toggle\n };\n}\n/**\n * a11y: cache the element that opened the Sidebar (the menu button) then\n * focus that button again when Menu is closed with Escape key.\n */\nexport function useCloseSidebarOnEscape(isOpen, close) {\n let triggerElement;\n watchEffect(() => {\n triggerElement = isOpen.value\n ? document.activeElement\n : undefined;\n });\n onMounted(() => {\n window.addEventListener('keyup', onEscape);\n });\n onUnmounted(() => {\n window.removeEventListener('keyup', onEscape);\n });\n function onEscape(e) {\n if (e.key === 'Escape' && isOpen.value) {\n close();\n triggerElement?.focus();\n }\n }\n}\nexport function useSidebarControl(item) {\n const { page, hash } = useData();\n const collapsed = ref(false);\n const collapsible = computed(() => {\n return item.value.collapsed != null;\n });\n const isLink = computed(() => {\n return !!item.value.link;\n });\n const isActiveLink = ref(false);\n const updateIsActiveLink = () => {\n isActiveLink.value = isActive(page.value.relativePath, item.value.link);\n };\n watch([page, item, hash], updateIsActiveLink);\n onMounted(updateIsActiveLink);\n const hasActiveLink = computed(() => {\n if (isActiveLink.value) {\n return true;\n }\n return item.value.items\n ? containsActiveLink(page.value.relativePath, item.value.items)\n : false;\n });\n const hasChildren = computed(() => {\n return !!(item.value.items && item.value.items.length);\n });\n watchEffect(() => {\n collapsed.value = !!(collapsible.value && item.value.collapsed);\n });\n watchPostEffect(() => {\n ;\n (isActiveLink.value || hasActiveLink.value) && (collapsed.value = false);\n });\n function toggle() {\n if (collapsible.value) {\n collapsed.value = !collapsed.value;\n }\n }\n return {\n collapsed,\n collapsible,\n isLink,\n isActiveLink,\n hasActiveLink,\n hasChildren,\n toggle\n };\n}\n", "import { onContentUpdated } from 'vitepress';\nimport { computed, shallowRef } from 'vue';\nimport { getHeaders } from '../composables/outline';\nimport { useData } from './data';\nexport function useLocalNav() {\n const { theme, frontmatter } = useData();\n const headers = shallowRef([]);\n const hasLocalNav = computed(() => {\n return headers.value.length > 0;\n });\n onContentUpdated(() => {\n headers.value = getHeaders(frontmatter.value.outline ?? theme.value.outline);\n });\n return {\n headers,\n hasLocalNav\n };\n}\n", "import { getScrollOffset } from 'vitepress';\nimport { onMounted, onUnmounted, onUpdated } from 'vue';\nimport { throttleAndDebounce } from '../support/utils';\nimport { useAside } from './aside';\n// cached list of anchor elements from resolveHeaders\nconst resolvedHeaders = [];\nexport function resolveTitle(theme) {\n return ((typeof theme.outline === 'object' &&\n !Array.isArray(theme.outline) &&\n theme.outline.label) ||\n theme.outlineTitle ||\n 'On this page');\n}\nexport function getHeaders(range) {\n const headers = [\n ...document.querySelectorAll('.VPDoc :where(h1,h2,h3,h4,h5,h6)')\n ]\n .filter((el) => el.id && el.hasChildNodes())\n .map((el) => {\n const level = Number(el.tagName[1]);\n return {\n element: el,\n title: serializeHeader(el),\n link: '#' + el.id,\n level\n };\n });\n return resolveHeaders(headers, range);\n}\nfunction serializeHeader(h) {\n let ret = '';\n for (const node of h.childNodes) {\n if (node.nodeType === 1) {\n if (node.classList.contains('VPBadge') ||\n node.classList.contains('header-anchor') ||\n node.classList.contains('ignore-header')) {\n continue;\n }\n ret += node.textContent;\n }\n else if (node.nodeType === 3) {\n ret += node.textContent;\n }\n }\n return ret.trim();\n}\nexport function resolveHeaders(headers, range) {\n if (range === false) {\n return [];\n }\n const levelsRange = (typeof range === 'object' && !Array.isArray(range)\n ? range.level\n : range) || 2;\n const [high, low] = typeof levelsRange === 'number'\n ? [levelsRange, levelsRange]\n : levelsRange === 'deep'\n ? [2, 6]\n : levelsRange;\n return buildTree(headers, high, low);\n}\nexport function useActiveAnchor(container, marker) {\n const { isAsideEnabled } = useAside();\n const onScroll = throttleAndDebounce(setActiveLink, 100);\n let prevActiveLink = null;\n onMounted(() => {\n requestAnimationFrame(setActiveLink);\n window.addEventListener('scroll', onScroll);\n });\n onUpdated(() => {\n // sidebar update means a route change\n activateLink(location.hash);\n });\n onUnmounted(() => {\n window.removeEventListener('scroll', onScroll);\n });\n function setActiveLink() {\n if (!isAsideEnabled.value) {\n return;\n }\n const scrollY = window.scrollY;\n const innerHeight = window.innerHeight;\n const offsetHeight = document.body.offsetHeight;\n const isBottom = Math.abs(scrollY + innerHeight - offsetHeight) < 1;\n // resolvedHeaders may be repositioned, hidden or fix positioned\n const headers = resolvedHeaders\n .map(({ element, link }) => ({\n link,\n top: getAbsoluteTop(element)\n }))\n .filter(({ top }) => !Number.isNaN(top))\n .sort((a, b) => a.top - b.top);\n // no headers available for active link\n if (!headers.length) {\n activateLink(null);\n return;\n }\n // page top\n if (scrollY < 1) {\n activateLink(null);\n return;\n }\n // page bottom - highlight last link\n if (isBottom) {\n activateLink(headers[headers.length - 1].link);\n return;\n }\n // find the last header above the top of viewport\n let activeLink = null;\n for (const { link, top } of headers) {\n if (top > scrollY + getScrollOffset() + 4) {\n break;\n }\n activeLink = link;\n }\n activateLink(activeLink);\n }\n function activateLink(hash) {\n if (prevActiveLink) {\n prevActiveLink.classList.remove('active');\n }\n if (hash == null) {\n prevActiveLink = null;\n }\n else {\n prevActiveLink = container.value.querySelector(`a[href=\"${decodeURIComponent(hash)}\"]`);\n }\n const activeLink = prevActiveLink;\n if (activeLink) {\n activeLink.classList.add('active');\n marker.value.style.top = activeLink.offsetTop + 39 + 'px';\n marker.value.style.opacity = '1';\n }\n else {\n marker.value.style.top = '33px';\n marker.value.style.opacity = '0';\n }\n }\n}\nfunction getAbsoluteTop(element) {\n let offsetTop = 0;\n while (element !== document.body) {\n if (element === null) {\n // child element is:\n // - not attached to the DOM (display: none)\n // - set to fixed position (not scrollable)\n // - body or html element (null offsetParent)\n return NaN;\n }\n offsetTop += element.offsetTop;\n element = element.offsetParent;\n }\n return offsetTop;\n}\nfunction buildTree(data, min, max) {\n resolvedHeaders.length = 0;\n const result = [];\n const stack = [];\n data.forEach((item) => {\n const node = { ...item, children: [] };\n let parent = stack[stack.length - 1];\n while (parent && parent.level >= node.level) {\n stack.pop();\n parent = stack[stack.length - 1];\n }\n if (node.element.classList.contains('ignore-header') ||\n (parent && 'shouldIgnore' in parent)) {\n stack.push({ level: node.level, shouldIgnore: true });\n return;\n }\n if (node.level > max || node.level < min)\n return;\n resolvedHeaders.push({ element: node.element, link: node.link });\n if (parent)\n parent.children.push(node);\n else\n result.push(node);\n stack.push(node);\n });\n return result;\n}\n"], + "mappings": ";;;;;;;;;;;AAAA,OAAO;;;ACAP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO,aAAa;AACpB,OAAO,YAAY;AACnB,SAAoB,WAAXA,gBAA0B;AACnC,SAAoB,WAAXA,gBAA0B;AACnC,SAAoB,WAAXA,gBAA2B;AACpC,SAAoB,WAAXA,gBAAgC;AACzC,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,iBAAqC;AAC9C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAgC;;;AC1BzC,SAAS,gBAAgB;;;ACAzB,SAAS,WAAW,gBAAgB;AAC7B,IAAM,UAAU;;;ADgBhB,SAAS,oBAAoB,MAAM;AACtC,SAAO,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI;AAC7C;;;AEXO,SAAS,WAAW,UAAU,MAAM;AACvC,MAAI,MAAM,QAAQ,QAAQ;AACtB,WAAO,QAAQ,QAAQ;AAC3B,MAAI,YAAY;AACZ,WAAO,CAAC;AACZ,SAAO,oBAAoB,IAAI;AAC/B,QAAM,MAAM,OAAO,KAAK,QAAQ,EAC3B,KAAK,CAAC,GAAG,MAAM;AAChB,WAAO,EAAE,MAAM,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,EAC9C,CAAC,EACI,KAAK,CAACC,SAAQ;AAEf,WAAO,KAAK,WAAW,oBAAoBA,IAAG,CAAC;AAAA,EACnD,CAAC;AACD,QAAM,UAAU,MAAM,SAAS,GAAG,IAAI,CAAC;AACvC,SAAO,MAAM,QAAQ,OAAO,IACtB,QAAQ,OAAO,IACf,QAAQ,QAAQ,OAAO,QAAQ,IAAI;AAC7C;AAIO,SAAS,iBAAiB,SAAS;AACtC,QAAM,SAAS,CAAC;AAChB,MAAI,iBAAiB;AACrB,aAAW,SAAS,SAAS;AACzB,UAAM,OAAO,QAAQ,KAAK;AAC1B,QAAI,KAAK,OAAO;AACZ,uBAAiB,OAAO,KAAK,IAAI;AACjC;AAAA,IACJ;AACA,QAAI,CAAC,OAAO,cAAc,GAAG;AACzB,aAAO,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;AAAA,IAC7B;AACA,WAAO,cAAc,EAAE,MAAM,KAAK,IAAI;AAAA,EAC1C;AACA,SAAO;AACX;AAiCA,SAAS,QAAQ,OAAO,OAAO;AAC3B,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU;AAC7B,UAAM,OAAO,EAAE,GAAG,MAAM;AACxB,UAAM,OAAO,KAAK,QAAQ;AAC1B,QAAI,QAAQ,KAAK;AACb,WAAK,OAAO,OAAO,KAAK;AAC5B,QAAI,KAAK;AACL,WAAK,QAAQ,QAAQ,KAAK,OAAO,IAAI;AACzC,WAAO;AAAA,EACX,CAAC;AACL;;;ACnFO,SAAS,aAAa;AACzB,QAAM,EAAE,aAAa,MAAM,OAAAC,OAAM,IAAI,QAAQ;AAC7C,QAAM,QAAQ,cAAc,oBAAoB;AAChD,QAAM,SAAS,IAAI,KAAK;AACxB,QAAM,WAAW,SAAS,MAAM;AAC5B,UAAM,gBAAgBA,OAAM,MAAM;AAClC,UAAM,eAAe,KAAK,MAAM;AAChC,WAAO,gBAAgB,WAAW,eAAe,YAAY,IAAI,CAAC;AAAA,EACtE,CAAC;AACD,QAAM,UAAU,IAAI,SAAS,KAAK;AAClC,QAAM,UAAU,CAAC,MAAM,SAAS;AAC5B,QAAI,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI;AAC5C,cAAQ,QAAQ,SAAS;AAAA,EACjC,CAAC;AACD,QAAM,aAAa,SAAS,MAAM;AAC9B,WAAQ,YAAY,MAAM,YAAY,SAClC,QAAQ,MAAM,SAAS,KACvB,YAAY,MAAM,WAAW;AAAA,EACrC,CAAC;AACD,QAAM,YAAY,SAAS,MAAM;AAC7B,QAAI;AACA,aAAO,YAAY,MAAM,SAAS,OAC5BA,OAAM,MAAM,UAAU,SACtB,YAAY,MAAM,UAAU;AACtC,WAAO;AAAA,EACX,CAAC;AACD,QAAM,WAAW,SAAS,MAAM;AAC5B,QAAI,YAAY,MAAM,WAAW;AAC7B,aAAO;AACX,QAAI,YAAY,MAAM,SAAS;AAC3B,aAAO,CAAC,CAAC,YAAY,MAAM;AAC/B,WAAOA,OAAM,MAAM,UAAU;AAAA,EACjC,CAAC;AACD,QAAM,mBAAmB,SAAS,MAAM,WAAW,SAAS,MAAM,KAAK;AACvE,QAAM,gBAAgB,SAAS,MAAM;AACjC,WAAO,WAAW,QAAQ,iBAAiB,QAAQ,KAAK,IAAI,CAAC;AAAA,EACjE,CAAC;AACD,WAAS,OAAO;AACZ,WAAO,QAAQ;AAAA,EACnB;AACA,WAAS,QAAQ;AACb,WAAO,QAAQ;AAAA,EACnB;AACA,WAAS,SAAS;AACd,WAAO,QAAQ,MAAM,IAAI,KAAK;AAAA,EAClC;AACA,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;AC/DA,SAAS,wBAAwB;;;ACAjC,SAAS,uBAAuB;AAKhC,IAAM,kBAAkB,CAAC;AAQlB,SAAS,WAAW,OAAO;AAC9B,QAAM,UAAU;AAAA,IACZ,GAAG,SAAS,iBAAiB,kCAAkC;AAAA,EACnE,EACK,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC,EAC1C,IAAI,CAAC,OAAO;AACb,UAAM,QAAQ,OAAO,GAAG,QAAQ,CAAC,CAAC;AAClC,WAAO;AAAA,MACH,SAAS;AAAA,MACT,OAAO,gBAAgB,EAAE;AAAA,MACzB,MAAM,MAAM,GAAG;AAAA,MACf;AAAA,IACJ;AAAA,EACJ,CAAC;AACD,SAAO,eAAe,SAAS,KAAK;AACxC;AACA,SAAS,gBAAgB,GAAG;AACxB,MAAI,MAAM;AACV,aAAW,QAAQ,EAAE,YAAY;AAC7B,QAAI,KAAK,aAAa,GAAG;AACrB,UAAI,KAAK,UAAU,SAAS,SAAS,KACjC,KAAK,UAAU,SAAS,eAAe,KACvC,KAAK,UAAU,SAAS,eAAe,GAAG;AAC1C;AAAA,MACJ;AACA,aAAO,KAAK;AAAA,IAChB,WACS,KAAK,aAAa,GAAG;AAC1B,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AACA,SAAO,IAAI,KAAK;AACpB;AACO,SAAS,eAAe,SAAS,OAAO;AAC3C,MAAI,UAAU,OAAO;AACjB,WAAO,CAAC;AAAA,EACZ;AACA,QAAM,eAAe,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAChE,MAAM,QACN,UAAU;AAChB,QAAM,CAAC,MAAM,GAAG,IAAI,OAAO,gBAAgB,WACrC,CAAC,aAAa,WAAW,IACzB,gBAAgB,SACZ,CAAC,GAAG,CAAC,IACL;AACV,SAAO,UAAU,SAAS,MAAM,GAAG;AACvC;AA8FA,SAAS,UAAU,MAAM,KAAK,KAAK;AAC/B,kBAAgB,SAAS;AACzB,QAAM,SAAS,CAAC;AAChB,QAAM,QAAQ,CAAC;AACf,OAAK,QAAQ,CAAC,SAAS;AACnB,UAAM,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE;AACrC,QAAI,SAAS,MAAM,MAAM,SAAS,CAAC;AACnC,WAAO,UAAU,OAAO,SAAS,KAAK,OAAO;AACzC,YAAM,IAAI;AACV,eAAS,MAAM,MAAM,SAAS,CAAC;AAAA,IACnC;AACA,QAAI,KAAK,QAAQ,UAAU,SAAS,eAAe,KAC9C,UAAU,kBAAkB,QAAS;AACtC,YAAM,KAAK,EAAE,OAAO,KAAK,OAAO,cAAc,KAAK,CAAC;AACpD;AAAA,IACJ;AACA,QAAI,KAAK,QAAQ,OAAO,KAAK,QAAQ;AACjC;AACJ,oBAAgB,KAAK,EAAE,SAAS,KAAK,SAAS,MAAM,KAAK,KAAK,CAAC;AAC/D,QAAI;AACA,aAAO,SAAS,KAAK,IAAI;AAAA;AAEzB,aAAO,KAAK,IAAI;AACpB,UAAM,KAAK,IAAI;AAAA,EACnB,CAAC;AACD,SAAO;AACX;;;AD/KO,SAAS,cAAc;AAC1B,QAAM,EAAE,OAAAC,QAAO,YAAY,IAAI,QAAQ;AACvC,QAAM,UAAU,WAAW,CAAC,CAAC;AAC7B,QAAM,cAAc,SAAS,MAAM;AAC/B,WAAO,QAAQ,MAAM,SAAS;AAAA,EAClC,CAAC;AACD,mBAAiB,MAAM;AACnB,YAAQ,QAAQ,WAAW,YAAY,MAAM,WAAWA,OAAM,MAAM,OAAO;AAAA,EAC/E,CAAC;AACD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;;;ALYA,IAAM,QAAQ;AAAA,EACV;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,MAAM;AACrB,QAAI,UAAU,SAAS,OAAO;AAAA,EAClC;AACJ;AACA,IAAO,wBAAQ;", + "names": ["default", "dir", "theme", "theme"] +} diff --git a/website/src/.vitepress/cache/deps/_metadata.json b/website/src/.vitepress/cache/deps/_metadata.json new file mode 100644 index 00000000..7f2ca382 --- /dev/null +++ b/website/src/.vitepress/cache/deps/_metadata.json @@ -0,0 +1,40 @@ +{ + "hash": "0c87bf3b", + "configHash": "537ebdcd", + "lockfileHash": "17c814b1", + "browserHash": "7f9e4657", + "optimized": { + "vue": { + "src": "../../../../../node_modules/.pnpm/vue@3.2.45/node_modules/vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "81e7f501", + "needsInterop": false + }, + "vitepress > @vue/devtools-api": { + "src": "../../../../node_modules/.pnpm/@vue+devtools-api@7.6.1/node_modules/@vue/devtools-api/dist/index.js", + "file": "vitepress___@vue_devtools-api.js", + "fileHash": "f18838d4", + "needsInterop": false + }, + "vitepress > @vueuse/core": { + "src": "../../../../node_modules/.pnpm/@vueuse+core@11.2.0_vue@3.5.12_typescript@5.6.3_/node_modules/@vueuse/core/index.mjs", + "file": "vitepress___@vueuse_core.js", + "fileHash": "005e74d6", + "needsInterop": false + }, + "@theme/index": { + "src": "../../../../node_modules/.pnpm/vitepress@1.4.3_@algolia+client-search@4.24.0_postcss@8.4.47_search-insights@2.17.2_typescript@5.6.3/node_modules/vitepress/dist/client/theme-default/index.js", + "file": "@theme_index.js", + "fileHash": "a7aaf44d", + "needsInterop": false + } + }, + "chunks": { + "chunk-PWVUJGW4": { + "file": "chunk-PWVUJGW4.js" + }, + "chunk-6J5AW4SK": { + "file": "chunk-6J5AW4SK.js" + } + } +} \ No newline at end of file diff --git a/website/src/.vitepress/cache/deps/chunk-6J5AW4SK.js b/website/src/.vitepress/cache/deps/chunk-6J5AW4SK.js new file mode 100644 index 00000000..c1956a24 --- /dev/null +++ b/website/src/.vitepress/cache/deps/chunk-6J5AW4SK.js @@ -0,0 +1,11547 @@ +// ../node_modules/.pnpm/@vue+shared@3.2.45/node_modules/@vue/shared/dist/shared.esm-bundler.js +function makeMap(str, expectsLowerCase) { + const map2 = /* @__PURE__ */ Object.create(null) + const list = str.split(',') + for (let i = 0; i < list.length; i++) { + map2[list[i]] = true + } + return expectsLowerCase + ? val => !!map2[val.toLowerCase()] + : val => !!map2[val] +} +var GLOBALS_WHITE_LISTED = + 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt' +var isGloballyWhitelisted = makeMap(GLOBALS_WHITE_LISTED) +function normalizeStyle(value) { + if (isArray(value)) { + const res = {} + for (let i = 0; i < value.length; i++) { + const item = value[i] + const normalized = isString(item) + ? parseStringStyle(item) + : normalizeStyle(item) + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key] + } + } + } + return res + } else if (isString(value)) { + return value + } else if (isObject(value)) { + return value + } +} +var listDelimiterRE = /;(?![^(]*\))/g +var propertyDelimiterRE = /:([^]+)/ +var styleCommentRE = /\/\*.*?\*\//gs +function parseStringStyle(cssText) { + const ret = {} + cssText + .replace(styleCommentRE, '') + .split(listDelimiterRE) + .forEach(item => { + if (item) { + const tmp = item.split(propertyDelimiterRE) + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()) + } + }) + return ret +} +function normalizeClass(value) { + let res = '' + if (isString(value)) { + res = value + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]) + if (normalized) { + res += normalized + ' ' + } + } + } else if (isObject(value)) { + for (const name in value) { + if (value[name]) { + res += name + ' ' + } + } + } + return res.trim() +} +function normalizeProps(props) { + if (!props) return null + let { class: klass, style } = props + if (klass && !isString(klass)) { + props.class = normalizeClass(klass) + } + if (style) { + props.style = normalizeStyle(style) + } + return props +} +var HTML_TAGS = + 'html,body,base,head,link,meta,style,title,address,article,aside,footer,header,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) +var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly` +var isSpecialBooleanAttr = makeMap(specialBooleanAttrs) +var isBooleanAttr = makeMap( + specialBooleanAttrs + + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` +) +function includeBooleanAttr(value) { + return !!value || value === '' +} +var isKnownHtmlAttr = makeMap( + `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` +) +var isKnownSvgAttr = makeMap( + `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` +) +function looseCompareArrays(a, b) { + if (a.length !== b.length) return false + let equal = true + for (let i = 0; equal && i < a.length; i++) { + equal = looseEqual(a[i], b[i]) + } + return equal +} +function looseEqual(a, b) { + if (a === b) return true + let aValidType = isDate(a) + let bValidType = isDate(b) + if (aValidType || bValidType) { + return aValidType && bValidType ? a.getTime() === b.getTime() : false + } + aValidType = isSymbol(a) + bValidType = isSymbol(b) + if (aValidType || bValidType) { + return a === b + } + aValidType = isArray(a) + bValidType = isArray(b) + if (aValidType || bValidType) { + return aValidType && bValidType ? looseCompareArrays(a, b) : false + } + aValidType = isObject(a) + bValidType = isObject(b) + if (aValidType || bValidType) { + if (!aValidType || !bValidType) { + return false + } + const aKeysCount = Object.keys(a).length + const bKeysCount = Object.keys(b).length + if (aKeysCount !== bKeysCount) { + return false + } + for (const key in a) { + const aHasKey = a.hasOwnProperty(key) + const bHasKey = b.hasOwnProperty(key) + if ( + (aHasKey && !bHasKey) || + (!aHasKey && bHasKey) || + !looseEqual(a[key], b[key]) + ) { + return false + } + } + } + return String(a) === String(b) +} +function looseIndexOf(arr, val) { + return arr.findIndex(item => looseEqual(item, val)) +} +var toDisplayString = val => { + return isString(val) + ? val + : val == null + ? '' + : isArray(val) || + (isObject(val) && + (val.toString === objectToString || !isFunction(val.toString))) + ? JSON.stringify(val, replacer, 2) + : String(val) +} +var replacer = (_key, val) => { + if (val && val.__v_isRef) { + return replacer(_key, val.value) + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2]) => { + entries[`${key} =>`] = val2 + return entries + }, + {} + ) + } + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()] + } + } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + return String(val) + } + return val +} +var EMPTY_OBJ = true ? Object.freeze({}) : {} +var EMPTY_ARR = true ? Object.freeze([]) : [] +var NOOP = () => {} +var NO = () => false +var onRE = /^on[^a-z]/ +var isOn = key => onRE.test(key) +var isModelListener = key => key.startsWith('onUpdate:') +var extend = Object.assign +var remove = (arr, el) => { + const i = arr.indexOf(el) + if (i > -1) { + arr.splice(i, 1) + } +} +var hasOwnProperty = Object.prototype.hasOwnProperty +var hasOwn = (val, key) => hasOwnProperty.call(val, key) +var isArray = Array.isArray +var isMap = val => toTypeString(val) === '[object Map]' +var isSet = val => toTypeString(val) === '[object Set]' +var isDate = val => toTypeString(val) === '[object Date]' +var isFunction = val => typeof val === 'function' +var isString = val => typeof val === 'string' +var isSymbol = val => typeof val === 'symbol' +var isObject = val => val !== null && typeof val === 'object' +var isPromise = val => { + return isObject(val) && isFunction(val.then) && isFunction(val.catch) +} +var objectToString = Object.prototype.toString +var toTypeString = value => objectToString.call(value) +var toRawType = value => { + return toTypeString(value).slice(8, -1) +} +var isPlainObject = val => toTypeString(val) === '[object Object]' +var isIntegerKey = key => + isString(key) && + key !== 'NaN' && + key[0] !== '-' && + '' + parseInt(key, 10) === key +var isReservedProp = makeMap( + // the leading comma is intentional so empty string "" is also included + ',key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted' +) +var isBuiltInDirective = makeMap( + 'bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo' +) +var cacheStringFunction = fn => { + const cache = /* @__PURE__ */ Object.create(null) + return str => { + const hit = cache[str] + return hit || (cache[str] = fn(str)) + } +} +var camelizeRE = /-(\w)/g +var camelize = cacheStringFunction(str => { + return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : '')) +}) +var hyphenateRE = /\B([A-Z])/g +var hyphenate = cacheStringFunction(str => + str.replace(hyphenateRE, '-$1').toLowerCase() +) +var capitalize = cacheStringFunction( + str => str.charAt(0).toUpperCase() + str.slice(1) +) +var toHandlerKey = cacheStringFunction(str => + str ? `on${capitalize(str)}` : `` +) +var hasChanged = (value, oldValue) => !Object.is(value, oldValue) +var invokeArrayFns = (fns, arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](arg) + } +} +var def = (obj, key, value) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + value + }) +} +var 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 + : {}) + ) +} + +// ../node_modules/.pnpm/@vue+reactivity@3.2.45/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js +function warn(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args) +} +var activeEffectScope +var EffectScope = class { + constructor(detached = false) { + this.detached = detached + this.active = true + this.effects = [] + this.cleanups = [] + this.parent = activeEffectScope + if (!detached && activeEffectScope) { + this.index = + (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1 + } + } + run(fn) { + if (this.active) { + const currentEffectScope = activeEffectScope + try { + activeEffectScope = this + return fn() + } finally { + activeEffectScope = currentEffectScope + } + } else if (true) { + warn(`cannot run an inactive effect scope.`) + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent + } + stop(fromParent) { + if (this.active) { + let i, l + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop() + } + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i]() + } + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true) + } + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop() + if (last && last !== this) { + this.parent.scopes[this.index] = last + last.index = this.index + } + } + this.parent = void 0 + this.active = false + } + } +} +function effectScope(detached) { + return new EffectScope(detached) +} +function recordEffectScope(effect2, scope = activeEffectScope) { + if (scope && scope.active) { + scope.effects.push(effect2) + } +} +function getCurrentScope() { + return activeEffectScope +} +function onScopeDispose(fn) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn) + } else if (true) { + warn( + `onScopeDispose() is called when there is no active effect scope to be associated with.` + ) + } +} +var createDep = effects => { + const dep = new Set(effects) + dep.w = 0 + dep.n = 0 + return dep +} +var wasTracked = dep => (dep.w & trackOpBit) > 0 +var newTracked = dep => (dep.n & trackOpBit) > 0 +var initDepMarkers = ({ deps }) => { + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].w |= trackOpBit + } + } +} +var finalizeDepMarkers = effect2 => { + const { deps } = effect2 + if (deps.length) { + let ptr = 0 + for (let i = 0; i < deps.length; i++) { + const dep = deps[i] + if (wasTracked(dep) && !newTracked(dep)) { + dep.delete(effect2) + } else { + deps[ptr++] = dep + } + dep.w &= ~trackOpBit + dep.n &= ~trackOpBit + } + deps.length = ptr + } +} +var targetMap = /* @__PURE__ */ new WeakMap() +var effectTrackDepth = 0 +var trackOpBit = 1 +var maxMarkerBits = 30 +var activeEffect +var ITERATE_KEY = Symbol(true ? 'iterate' : '') +var MAP_KEY_ITERATE_KEY = Symbol(true ? 'Map key iterate' : '') +var ReactiveEffect = class { + constructor(fn, scheduler = null, scope) { + this.fn = fn + this.scheduler = scheduler + this.active = true + this.deps = [] + this.parent = void 0 + recordEffectScope(this, scope) + } + run() { + if (!this.active) { + return this.fn() + } + let parent = activeEffect + let lastShouldTrack = shouldTrack + while (parent) { + if (parent === this) { + return + } + parent = parent.parent + } + try { + this.parent = activeEffect + activeEffect = this + shouldTrack = true + trackOpBit = 1 << ++effectTrackDepth + if (effectTrackDepth <= maxMarkerBits) { + initDepMarkers(this) + } else { + cleanupEffect(this) + } + return this.fn() + } finally { + if (effectTrackDepth <= maxMarkerBits) { + finalizeDepMarkers(this) + } + trackOpBit = 1 << --effectTrackDepth + activeEffect = this.parent + shouldTrack = lastShouldTrack + this.parent = void 0 + if (this.deferStop) { + this.stop() + } + } + } + stop() { + if (activeEffect === this) { + this.deferStop = true + } else if (this.active) { + cleanupEffect(this) + if (this.onStop) { + this.onStop() + } + this.active = false + } + } +} +function cleanupEffect(effect2) { + const { deps } = effect2 + if (deps.length) { + for (let i = 0; i < deps.length; i++) { + deps[i].delete(effect2) + } + deps.length = 0 + } +} +function effect(fn, options) { + if (fn.effect) { + fn = fn.effect.fn + } + const _effect = new ReactiveEffect(fn) + if (options) { + extend(_effect, options) + if (options.scope) recordEffectScope(_effect, options.scope) + } + if (!options || !options.lazy) { + _effect.run() + } + const runner = _effect.run.bind(_effect) + runner.effect = _effect + return runner +} +function stop(runner) { + runner.effect.stop() +} +var shouldTrack = true +var trackStack = [] +function pauseTracking() { + trackStack.push(shouldTrack) + shouldTrack = false +} +function resetTracking() { + const last = trackStack.pop() + shouldTrack = last === void 0 ? true : last +} +function track(target, type, key) { + if (shouldTrack && activeEffect) { + let depsMap = targetMap.get(target) + if (!depsMap) { + targetMap.set(target, (depsMap = /* @__PURE__ */ new Map())) + } + let dep = depsMap.get(key) + if (!dep) { + depsMap.set(key, (dep = createDep())) + } + const eventInfo = true + ? { effect: activeEffect, target, type, key } + : void 0 + trackEffects(dep, eventInfo) + } +} +function trackEffects(dep, debuggerEventExtraInfo) { + let shouldTrack2 = false + if (effectTrackDepth <= maxMarkerBits) { + if (!newTracked(dep)) { + dep.n |= trackOpBit + shouldTrack2 = !wasTracked(dep) + } + } else { + shouldTrack2 = !dep.has(activeEffect) + } + if (shouldTrack2) { + dep.add(activeEffect) + activeEffect.deps.push(dep) + if (activeEffect.onTrack) { + activeEffect.onTrack( + Object.assign({ effect: activeEffect }, debuggerEventExtraInfo) + ) + } + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target) + if (!depsMap) { + return + } + let deps = [] + if (type === 'clear') { + deps = [...depsMap.values()] + } else if (key === 'length' && isArray(target)) { + const newLength = toNumber(newValue) + depsMap.forEach((dep, key2) => { + if (key2 === 'length' || key2 >= newLength) { + deps.push(dep) + } + }) + } else { + if (key !== void 0) { + deps.push(depsMap.get(key)) + } + switch (type) { + case 'add': + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)) + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)) + } + } else if (isIntegerKey(key)) { + deps.push(depsMap.get('length')) + } + break + case 'delete': + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)) + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)) + } + } + break + case 'set': + if (isMap(target)) { + deps.push(depsMap.get(ITERATE_KEY)) + } + break + } + } + const eventInfo = true + ? { target, type, key, newValue, oldValue, oldTarget } + : void 0 + if (deps.length === 1) { + if (deps[0]) { + if (true) { + triggerEffects(deps[0], eventInfo) + } else { + triggerEffects(deps[0]) + } + } + } else { + const effects = [] + for (const dep of deps) { + if (dep) { + effects.push(...dep) + } + } + if (true) { + triggerEffects(createDep(effects), eventInfo) + } else { + triggerEffects(createDep(effects)) + } + } +} +function triggerEffects(dep, debuggerEventExtraInfo) { + const effects = isArray(dep) ? dep : [...dep] + for (const effect2 of effects) { + if (effect2.computed) { + triggerEffect(effect2, debuggerEventExtraInfo) + } + } + for (const effect2 of effects) { + if (!effect2.computed) { + triggerEffect(effect2, debuggerEventExtraInfo) + } + } +} +function triggerEffect(effect2, debuggerEventExtraInfo) { + if (effect2 !== activeEffect || effect2.allowRecurse) { + if (effect2.onTrigger) { + effect2.onTrigger(extend({ effect: effect2 }, debuggerEventExtraInfo)) + } + if (effect2.scheduler) { + effect2.scheduler() + } else { + effect2.run() + } + } +} +var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`) +var builtInSymbols = new Set( + Object.getOwnPropertyNames(Symbol) + .filter(key => key !== 'arguments' && key !== 'caller') + .map(key => Symbol[key]) + .filter(isSymbol) +) +var get = 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)) { + return targetIsArray && isIntegerKey(key) ? res : res.value + } + 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) { + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue) + value = toRaw(value) + } + if (!isArray(target) && isRef(oldValue) && !isRef(value)) { + oldValue.value = value + return true + } + } + const hadKey = + isArray(target) && isIntegerKey(key) + ? Number(key) < target.length + : hasOwn(target, key) + const result = Reflect.set(target, key, value, receiver) + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, 'add', key, value) + } else if (hasChanged(value, oldValue)) { + trigger(target, 'set', key, value, oldValue) + } + } + return result + } +} +function deleteProperty(target, key) { + const hadKey = hasOwn(target, key) + const oldValue = target[key] + const result = Reflect.deleteProperty(target, key) + if (result && hadKey) { + trigger(target, 'delete', key, void 0, oldValue) + } + return result +} +function has(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' + /* ReactiveFlags.RAW */ + ] + const rawTarget = toRaw(target) + const rawKey = toRaw(key) + if (!isReadonly2) { + if (key !== rawKey) { + track(rawTarget, 'get', key) + } + track(rawTarget, 'get', rawKey) + } + const { has: has2 } = getProto(rawTarget) + const wrap = isShallow3 ? toShallow : isReadonly2 ? toReadonly : toReactive + if (has2.call(rawTarget, key)) { + return wrap(target.get(key)) + } else if (has2.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)) + } else if (target !== rawTarget) { + target.get(key) + } +} +function has$1(key, isReadonly2 = false) { + const target = + this[ + '__v_raw' + /* ReactiveFlags.RAW */ + ] + const rawTarget = toRaw(target) + const rawKey = toRaw(key) + if (!isReadonly2) { + if (key !== rawKey) { + track(rawTarget, 'has', key) + } + track(rawTarget, 'has', rawKey) + } + return key === rawKey + ? target.has(key) + : target.has(key) || target.has(rawKey) +} +function size(target, isReadonly2 = false) { + target = + target[ + '__v_raw' + /* ReactiveFlags.RAW */ + ] + !isReadonly2 && track(toRaw(target), 'iterate', ITERATE_KEY) + return Reflect.get(target, 'size', target) +} +function add(value) { + value = toRaw(value) + const target = toRaw(this) + const proto = getProto(target) + const hadKey = proto.has.call(target, value) + if (!hadKey) { + target.add(value) + trigger(target, 'add', value, value) + } + return this +} +function set$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' + /* ReactiveFlags.RAW */ + ] + const rawTarget = toRaw(target) + const wrap = isShallow3 ? toShallow : isReadonly2 ? toReadonly : toReactive + !isReadonly2 && track(rawTarget, 'iterate', ITERATE_KEY) + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed) + }) + } +} +function createIterableMethod(method, isReadonly2, isShallow3) { + return function (...args) { + const target = + this[ + '__v_raw' + /* ReactiveFlags.RAW */ + ] + const rawTarget = toRaw(target) + const targetIsMap = isMap(rawTarget) + const isPair = + method === 'entries' || (method === Symbol.iterator && targetIsMap) + const isKeyOnly = method === 'keys' && targetIsMap + const innerIterator = target[method](...args) + const wrap = isShallow3 ? toShallow : isReadonly2 ? toReadonly : toReactive + !isReadonly2 && + track(rawTarget, 'iterate', isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY) + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next() + return done + ? { value, done } + : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + } + }, + // iterable protocol + [Symbol.iterator]() { + return this + } + } + } +} +function createReadonlyMethod(type) { + return function (...args) { + if (true) { + const key = args[0] ? `on key "${args[0]}" ` : `` + console.warn( + `${capitalize(type)} operation ${key}failed: target is readonly.`, + toRaw(this) + ) + } + return type === 'delete' ? false : this + } +} +function createInstrumentations() { + const mutableInstrumentations2 = { + get(key) { + return get$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' + /* TriggerOpTypes.ADD */ + ), + set: createReadonlyMethod( + 'set' + /* TriggerOpTypes.SET */ + ), + delete: createReadonlyMethod( + 'delete' + /* TriggerOpTypes.DELETE */ + ), + clear: createReadonlyMethod( + 'clear' + /* TriggerOpTypes.CLEAR */ + ), + forEach: createForEach(true, false) + } + const shallowReadonlyInstrumentations2 = { + get(key) { + return get$1(this, key, true, true) + }, + get size() { + return size(this, true) + }, + has(key) { + return has$1.call(this, key, true) + }, + add: createReadonlyMethod( + 'add' + /* TriggerOpTypes.ADD */ + ), + set: createReadonlyMethod( + 'set' + /* TriggerOpTypes.SET */ + ), + delete: createReadonlyMethod( + 'delete' + /* TriggerOpTypes.DELETE */ + ), + clear: createReadonlyMethod( + 'clear' + /* TriggerOpTypes.CLEAR */ + ), + forEach: createForEach(true, true) + } + const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator] + iteratorMethods.forEach(method => { + mutableInstrumentations2[method] = createIterableMethod( + method, + false, + false + ) + readonlyInstrumentations2[method] = createIterableMethod( + method, + true, + false + ) + shallowInstrumentations2[method] = createIterableMethod(method, false, true) + shallowReadonlyInstrumentations2[method] = createIterableMethod( + method, + true, + true + ) + }) + return [ + mutableInstrumentations2, + readonlyInstrumentations2, + shallowInstrumentations2, + shallowReadonlyInstrumentations2 + ] +} +var [ + mutableInstrumentations, + readonlyInstrumentations, + shallowInstrumentations, + shallowReadonlyInstrumentations +] = createInstrumentations() +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = shallow + ? isReadonly2 + ? shallowReadonlyInstrumentations + : shallowInstrumentations + : isReadonly2 + ? readonlyInstrumentations + : mutableInstrumentations + return (target, key, receiver) => { + if (key === '__v_isReactive') { + return !isReadonly2 + } else if (key === '__v_isReadonly') { + return isReadonly2 + } else if (key === '__v_raw') { + return target + } + return Reflect.get( + hasOwn(instrumentations, key) && key in target + ? instrumentations + : target, + key, + receiver + ) + } +} +var mutableCollectionHandlers = { + get: createInstrumentationGetter(false, false) +} +var shallowCollectionHandlers = { + get: createInstrumentationGetter(false, true) +} +var readonlyCollectionHandlers = { + get: createInstrumentationGetter(true, false) +} +var shallowReadonlyCollectionHandlers = { + get: createInstrumentationGetter(true, true) +} +function checkIdentityKeys(target, has2, key) { + const rawKey = toRaw(key) + if (rawKey !== key && has2.call(target, rawKey)) { + const type = toRawType(target) + console.warn( + `Reactive ${type} contains both the raw and reactive versions of the same object${ + type === `Map` ? ` as keys` : `` + }, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ) + } +} +var reactiveMap = /* @__PURE__ */ new WeakMap() +var shallowReactiveMap = /* @__PURE__ */ new WeakMap() +var readonlyMap = /* @__PURE__ */ new WeakMap() +var shallowReadonlyMap = /* @__PURE__ */ new WeakMap() +function targetTypeMap(rawType) { + switch (rawType) { + case 'Object': + case 'Array': + return 1 + case 'Map': + case 'Set': + case 'WeakMap': + case 'WeakSet': + return 2 + default: + return 0 + } +} +function getTargetType(value) { + return value[ + '__v_skip' + /* ReactiveFlags.SKIP */ + ] || !Object.isExtensible(value) + ? 0 + : targetTypeMap(toRawType(value)) +} +function reactive(target) { + if (isReadonly(target)) { + return target + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ) +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ) +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ) +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ) +} +function createReactiveObject( + target, + isReadonly2, + baseHandlers, + collectionHandlers, + proxyMap +) { + if (!isObject(target)) { + if (true) { + console.warn(`value cannot be made reactive: ${String(target)}`) + } + return target + } + if ( + target[ + '__v_raw' + /* ReactiveFlags.RAW */ + ] && + !( + isReadonly2 && + target[ + '__v_isReactive' + /* ReactiveFlags.IS_REACTIVE */ + ] + ) + ) { + return target + } + const existingProxy = proxyMap.get(target) + if (existingProxy) { + return existingProxy + } + const targetType = getTargetType(target) + if (targetType === 0) { + return target + } + const proxy = new Proxy( + target, + targetType === 2 ? collectionHandlers : baseHandlers + ) + proxyMap.set(target, proxy) + return proxy +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive( + value[ + '__v_raw' + /* ReactiveFlags.RAW */ + ] + ) + } + return !!( + value && + value[ + '__v_isReactive' + /* ReactiveFlags.IS_REACTIVE */ + ] + ) +} +function isReadonly(value) { + return !!( + value && + value[ + '__v_isReadonly' + /* ReactiveFlags.IS_READONLY */ + ] + ) +} +function isShallow(value) { + return !!( + value && + value[ + '__v_isShallow' + /* ReactiveFlags.IS_SHALLOW */ + ] + ) +} +function isProxy(value) { + return isReactive(value) || isReadonly(value) +} +function toRaw(observed) { + const raw = + observed && + observed[ + '__v_raw' + /* ReactiveFlags.RAW */ + ] + return raw ? toRaw(raw) : observed +} +function markRaw(value) { + def(value, '__v_skip', true) + return value +} +var toReactive = value => (isObject(value) ? reactive(value) : value) +var toReadonly = value => (isObject(value) ? readonly(value) : value) +function trackRefValue(ref2) { + if (shouldTrack && activeEffect) { + ref2 = toRaw(ref2) + if (true) { + trackEffects(ref2.dep || (ref2.dep = createDep()), { + target: ref2, + type: 'get', + key: 'value' + }) + } else { + trackEffects(ref2.dep || (ref2.dep = createDep())) + } + } +} +function triggerRefValue(ref2, newVal) { + ref2 = toRaw(ref2) + 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) { + const useDirectValue = + this.__v_isShallow || isShallow(newVal) || isReadonly(newVal) + newVal = useDirectValue ? newVal : toRaw(newVal) + if (hasChanged(newVal, this._rawValue)) { + this._rawValue = newVal + this._value = useDirectValue ? newVal : toReactive(newVal) + triggerRefValue(this, newVal) + } + } +} +function triggerRef(ref2) { + triggerRefValue(ref2, true ? ref2.value : void 0) +} +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2 +} +var shallowUnwrapHandlers = { + get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key] + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value + return true + } else { + return Reflect.set(target, key, value, receiver) + } + } +} +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) + ? objectWithRefs + : new Proxy(objectWithRefs, shallowUnwrapHandlers) +} +var CustomRefImpl = class { + constructor(factory) { + this.dep = void 0 + this.__v_isRef = true + const { get: get2, set: set2 } = factory( + () => trackRefValue(this), + () => triggerRefValue(this) + ) + this._get = get2 + this._set = set2 + } + get value() { + return this._get() + } + set value(newVal) { + this._set(newVal) + } +} +function customRef(factory) { + return new CustomRefImpl(factory) +} +function toRefs(object) { + if (!isProxy(object)) { + console.warn(`toRefs() expects a reactive object but received a plain one.`) + } + const ret = isArray(object) ? new Array(object.length) : {} + for (const key in object) { + ret[key] = toRef(object, key) + } + return ret +} +var ObjectRefImpl = class { + constructor(_object, _key, _defaultValue) { + this._object = _object + this._key = _key + this._defaultValue = _defaultValue + this.__v_isRef = true + } + get value() { + const val = this._object[this._key] + return val === void 0 ? this._defaultValue : val + } + set value(newVal) { + this._object[this._key] = newVal + } +} +function toRef(object, key, defaultValue) { + const val = object[key] + return isRef(val) ? val : new ObjectRefImpl(object, key, defaultValue) +} +var _a +var ComputedRefImpl = class { + constructor(getter, _setter, isReadonly2, isSSR) { + this._setter = _setter + this.dep = void 0 + this.__v_isRef = true + this[_a] = false + this._dirty = true + this.effect = new ReactiveEffect(getter, () => { + if (!this._dirty) { + this._dirty = true + triggerRefValue(this) + } + }) + this.effect.computed = this + this.effect.active = this._cacheable = !isSSR + this[ + '__v_isReadonly' + /* ReactiveFlags.IS_READONLY */ + ] = isReadonly2 + } + get value() { + const self2 = toRaw(this) + trackRefValue(self2) + if (self2._dirty || !self2._cacheable) { + self2._dirty = false + self2._value = self2.effect.run() + } + return self2._value + } + set value(newValue) { + this._setter(newValue) + } +} +_a = '__v_isReadonly' +function computed(getterOrOptions, debugOptions, isSSR = false) { + let getter + let setter + const onlyGetter = isFunction(getterOrOptions) + if (onlyGetter) { + getter = getterOrOptions + setter = true + ? () => { + console.warn('Write operation failed: computed value is readonly') + } + : NOOP + } else { + getter = getterOrOptions.get + setter = getterOrOptions.set + } + const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR) + if (debugOptions && !isSSR) { + cRef.effect.onTrack = debugOptions.onTrack + cRef.effect.onTrigger = debugOptions.onTrigger + } + return cRef +} +var _a$1 +var tick = Promise.resolve() +_a$1 = '__v_isReadonly' + +// ../node_modules/.pnpm/@vue+runtime-core@3.2.45/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +var stack = [] +function pushWarningContext(vnode) { + stack.push(vnode) +} +function popWarningContext() { + stack.pop() +} +function warn2(msg, ...args) { + if (false) return + pauseTracking() + const instance = stack.length ? stack[stack.length - 1].component : null + const appWarnHandler = instance && instance.appContext.config.warnHandler + const trace = getComponentTrace() + if (appWarnHandler) { + callWithErrorHandling(appWarnHandler, instance, 11, [ + msg + args.join(''), + instance && instance.proxy, + trace + .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`) + .join('\n'), + trace + ]) + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args] + if ( + trace.length && // avoid spamming console during tests + true + ) { + warnArgs.push( + ` +`, + ...formatTrace(trace) + ) + } + console.warn(...warnArgs) + } + resetTracking() +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1] + if (!currentVNode) { + return [] + } + const normalizedStack = [] + while (currentVNode) { + const last = normalizedStack[0] + if (last && last.vnode === currentVNode) { + last.recurseCount++ + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }) + } + const parentInstance = + currentVNode.component && currentVNode.component.parent + currentVNode = parentInstance && parentInstance.vnode + } + return normalizedStack +} +function formatTrace(trace) { + const logs = [] + trace.forEach((entry, i) => { + logs.push( + ...(i === 0 + ? [] + : [ + ` +` + ]), + ...formatTraceEntry(entry) + ) + }) + return logs +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = + recurseCount > 0 ? `... (${recurseCount} recursive calls)` : `` + const isRoot = vnode.component ? vnode.component.parent == null : false + const open = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}` + const close = `>` + postfix + return vnode.props + ? [open, ...formatProps(vnode.props), close] + : [open + close] +} +function formatProps(props) { + const res = [] + const keys = Object.keys(props) + keys.slice(0, 3).forEach(key => { + res.push(...formatProp(key, props[key])) + }) + if (keys.length > 3) { + res.push(` ...`) + } + return res +} +function formatProp(key, value, raw) { + if (isString(value)) { + value = JSON.stringify(value) + return raw ? value : [`${key}=${value}`] + } else if ( + typeof value === 'number' || + typeof value === 'boolean' || + value == null + ) { + return raw ? value : [`${key}=${value}`] + } else if (isRef(value)) { + value = formatProp(key, toRaw(value.value), true) + return raw ? value : [`${key}=Ref<`, value, `>`] + } else if (isFunction(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`] + } else { + value = toRaw(value) + return raw ? value : [`${key}=`, value] + } +} +var ErrorTypeStrings = { + ['sp']: + /* LifecycleHooks.SERVER_PREFETCH */ + 'serverPrefetch hook', + ['bc']: + /* LifecycleHooks.BEFORE_CREATE */ + 'beforeCreate hook', + ['c']: + /* LifecycleHooks.CREATED */ + 'created hook', + ['bm']: + /* LifecycleHooks.BEFORE_MOUNT */ + 'beforeMount hook', + ['m']: + /* LifecycleHooks.MOUNTED */ + 'mounted hook', + ['bu']: + /* LifecycleHooks.BEFORE_UPDATE */ + 'beforeUpdate hook', + ['u']: + /* LifecycleHooks.UPDATED */ + 'updated', + ['bum']: + /* LifecycleHooks.BEFORE_UNMOUNT */ + 'beforeUnmount hook', + ['um']: + /* LifecycleHooks.UNMOUNTED */ + 'unmounted hook', + ['a']: + /* LifecycleHooks.ACTIVATED */ + 'activated hook', + ['da']: + /* LifecycleHooks.DEACTIVATED */ + 'deactivated hook', + ['ec']: + /* LifecycleHooks.ERROR_CAPTURED */ + 'errorCaptured hook', + ['rtc']: + /* LifecycleHooks.RENDER_TRACKED */ + 'renderTracked hook', + ['rtg']: + /* LifecycleHooks.RENDER_TRIGGERED */ + 'renderTriggered hook', + [0]: + /* ErrorCodes.SETUP_FUNCTION */ + 'setup function', + [1]: + /* ErrorCodes.RENDER_FUNCTION */ + 'render function', + [2]: + /* ErrorCodes.WATCH_GETTER */ + 'watcher getter', + [3]: + /* ErrorCodes.WATCH_CALLBACK */ + 'watcher callback', + [4]: + /* ErrorCodes.WATCH_CLEANUP */ + 'watcher cleanup function', + [5]: + /* ErrorCodes.NATIVE_EVENT_HANDLER */ + 'native event handler', + [6]: + /* ErrorCodes.COMPONENT_EVENT_HANDLER */ + 'component event handler', + [7]: + /* ErrorCodes.VNODE_HOOK */ + 'vnode hook', + [8]: + /* ErrorCodes.DIRECTIVE_HOOK */ + 'directive hook', + [9]: + /* ErrorCodes.TRANSITION_HOOK */ + 'transition hook', + [10]: + /* ErrorCodes.APP_ERROR_HANDLER */ + 'app errorHandler', + [11]: + /* ErrorCodes.APP_WARN_HANDLER */ + 'app warnHandler', + [12]: + /* ErrorCodes.FUNCTION_REF */ + 'ref function', + [13]: + /* ErrorCodes.ASYNC_COMPONENT_LOADER */ + 'async component loader', + [14]: + /* ErrorCodes.SCHEDULER */ + 'scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core' +} +function callWithErrorHandling(fn, instance, type, args) { + let res + try { + res = args ? fn(...args) : fn() + } catch (err) { + handleError(err, instance, type) + } + return res +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction(fn)) { + const res = callWithErrorHandling(fn, instance, type, args) + if (res && isPromise(res)) { + res.catch(err => { + handleError(err, instance, type) + }) + } + return res + } + const values = [] + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)) + } + return values +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null + if (instance) { + let cur = instance.parent + const exposedInstance = instance.proxy + const errorInfo = true ? ErrorTypeStrings[type] : type + while (cur) { + const errorCapturedHooks = cur.ec + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if ( + errorCapturedHooks[i](err, exposedInstance, errorInfo) === false + ) { + return + } + } + } + cur = cur.parent + } + const appErrorHandler = instance.appContext.config.errorHandler + if (appErrorHandler) { + callWithErrorHandling(appErrorHandler, null, 10, [ + err, + exposedInstance, + errorInfo + ]) + return + } + } + logError(err, type, contextVNode, throwInDev) +} +function logError(err, type, contextVNode, throwInDev = true) { + if (true) { + const info = ErrorTypeStrings[type] + if (contextVNode) { + pushWarningContext(contextVNode) + } + warn2(`Unhandled error${info ? ` during execution of ${info}` : ``}`) + if (contextVNode) { + popWarningContext() + } + if (throwInDev) { + throw err + } else { + console.error(err) + } + } else { + console.error(err) + } +} +var isFlushing = false +var isFlushPending = false +var queue = [] +var flushIndex = 0 +var pendingPostFlushCbs = [] +var activePostFlushCbs = null +var postFlushIndex = 0 +var resolvedPromise = Promise.resolve() +var currentFlushPromise = null +var RECURSION_LIMIT = 100 +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise + return fn ? p2.then(this ? fn.bind(this) : fn) : p2 +} +function findInsertionIndex(id) { + let start = flushIndex + 1 + let end = queue.length + while (start < end) { + const middle = (start + end) >>> 1 + const middleJobId = getId(queue[middle]) + middleJobId < id ? (start = middle + 1) : (end = middle) + } + return start +} +function queueJob(job) { + if ( + !queue.length || + !queue.includes( + job, + isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex + ) + ) { + if (job.id == null) { + queue.push(job) + } else { + queue.splice(findInsertionIndex(job.id), 0, job) + } + queueFlush() + } +} +function queueFlush() { + if (!isFlushing && !isFlushPending) { + isFlushPending = true + currentFlushPromise = resolvedPromise.then(flushJobs) + } +} +function invalidateJob(job) { + const i = queue.indexOf(job) + if (i > flushIndex) { + queue.splice(i, 1) + } +} +function queuePostFlushCb(cb) { + if (!isArray(cb)) { + if ( + !activePostFlushCbs || + !activePostFlushCbs.includes( + cb, + cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex + ) + ) { + pendingPostFlushCbs.push(cb) + } + } else { + pendingPostFlushCbs.push(...cb) + } + queueFlush() +} +function flushPreFlushCbs(seen, i = isFlushing ? flushIndex + 1 : 0) { + if (true) { + seen = seen || /* @__PURE__ */ new Map() + } + for (; i < queue.length; i++) { + const cb = queue[i] + if (cb && cb.pre) { + if (checkRecursiveUpdates(seen, cb)) { + continue + } + queue.splice(i, 1) + i-- + cb() + } + } +} +function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)] + pendingPostFlushCbs.length = 0 + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped) + return + } + activePostFlushCbs = deduped + if (true) { + seen = seen || /* @__PURE__ */ new Map() + } + activePostFlushCbs.sort((a, b) => getId(a) - getId(b)) + for ( + postFlushIndex = 0; + postFlushIndex < activePostFlushCbs.length; + postFlushIndex++ + ) { + if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) { + continue + } + activePostFlushCbs[postFlushIndex]() + } + activePostFlushCbs = null + postFlushIndex = 0 + } +} +var getId = job => (job.id == null ? Infinity : job.id) +var comparator = (a, b) => { + const diff = getId(a) - getId(b) + if (diff === 0) { + if (a.pre && !b.pre) return -1 + if (b.pre && !a.pre) return 1 + } + return diff +} +function flushJobs(seen) { + isFlushPending = false + isFlushing = true + if (true) { + seen = seen || /* @__PURE__ */ new Map() + } + queue.sort(comparator) + const check = true ? job => checkRecursiveUpdates(seen, job) : NOOP + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex] + if (job && job.active !== false) { + if (check(job)) { + continue + } + callWithErrorHandling( + job, + null, + 14 + /* ErrorCodes.SCHEDULER */ + ) + } + } + } finally { + flushIndex = 0 + queue.length = 0 + flushPostFlushCbs(seen) + isFlushing = false + currentFlushPromise = null + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen) + } + } +} +function checkRecursiveUpdates(seen, fn) { + if (!seen.has(fn)) { + seen.set(fn, 1) + } else { + const count = seen.get(fn) + if (count > RECURSION_LIMIT) { + const instance = fn.ownerInstance + const componentName = instance && getComponentName(instance.type) + warn2( + `Maximum recursive updates exceeded${ + componentName ? ` in component <${componentName}>` : `` + }. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.` + ) + return true + } else { + seen.set(fn, count + 1) + } + } +} +var isHmrUpdating = false +var hmrDirtyComponents = /* @__PURE__ */ new Set() +if (true) { + getGlobalThis().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + } +} +var map = /* @__PURE__ */ new Map() +function registerHMR(instance) { + const id = instance.type.__hmrId + let record = map.get(id) + if (!record) { + createRecord(id, instance.type) + record = map.get(id) + } + record.instances.add(instance) +} +function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance) +} +function createRecord(id, initialDef) { + if (map.has(id)) { + return false + } + map.set(id, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }) + return true +} +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component +} +function rerender(id, newRender) { + const record = map.get(id) + if (!record) { + return + } + record.initialDef.render = newRender + ;[...record.instances].forEach(instance => { + if (newRender) { + instance.render = newRender + normalizeClassComponent(instance.type).render = newRender + } + instance.renderCache = [] + isHmrUpdating = true + instance.update() + isHmrUpdating = false + }) +} +function reload(id, newComp) { + const record = map.get(id) + if (!record) return + newComp = normalizeClassComponent(newComp) + updateComponentDef(record.initialDef, newComp) + const instances = [...record.instances] + for (const instance of instances) { + const oldComp = normalizeClassComponent(instance.type) + if (!hmrDirtyComponents.has(oldComp)) { + if (oldComp !== record.initialDef) { + updateComponentDef(oldComp, newComp) + } + hmrDirtyComponents.add(oldComp) + } + instance.appContext.optionsCache.delete(instance.type) + if (instance.ceReload) { + hmrDirtyComponents.add(oldComp) + instance.ceReload(newComp.styles) + hmrDirtyComponents.delete(oldComp) + } else if (instance.parent) { + queueJob(instance.parent.update) + } else if (instance.appContext.reload) { + instance.appContext.reload() + } else if (typeof window !== 'undefined') { + window.location.reload() + } else { + console.warn( + '[HMR] Root or manually mounted instance modified. Full reload required.' + ) + } + } + queuePostFlushCb(() => { + for (const instance of instances) { + hmrDirtyComponents.delete(normalizeClassComponent(instance.type)) + } + }) +} +function updateComponentDef(oldComp, newComp) { + extend(oldComp, newComp) + for (const key in oldComp) { + if (key !== '__file' && !(key in newComp)) { + delete oldComp[key] + } + } +} +function tryWrap(fn) { + return (id, arg) => { + try { + return fn(id, arg) + } catch (e) { + console.error(e) + console.warn( + `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` + ) + } + } +} +var devtools +var buffer = [] +var devtoolsNotInstalled = false +function emit(event, ...args) { + if (devtools) { + devtools.emit(event, ...args) + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }) + } +} +function setDevtoolsHook(hook, target) { + var _a2, _b + devtools = hook + if (devtools) { + devtools.enabled = true + buffer.forEach(({ event, args }) => devtools.emit(event, ...args)) + buffer = [] + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== 'undefined' && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + !((_b = + (_a2 = window.navigator) === null || _a2 === void 0 + ? void 0 + : _a2.userAgent) === null || _b === void 0 + ? void 0 + : _b.includes('jsdom')) + ) { + const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ = + target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []) + replay.push(newHook => { + setDevtoolsHook(newHook, target) + }) + setTimeout(() => { + if (!devtools) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null + devtoolsNotInstalled = true + buffer = [] + } + }, 3e3) + } else { + devtoolsNotInstalled = true + buffer = [] + } +} +function devtoolsInitApp(app, version2) { + emit('app:init', app, version2, { + Fragment, + Text, + Comment, + Static + }) +} +function devtoolsUnmountApp(app) { + emit('app:unmount', app) +} +var devtoolsComponentAdded = createDevtoolsComponentHook( + 'component:added' + /* DevtoolsHooks.COMPONENT_ADDED */ +) +var devtoolsComponentUpdated = createDevtoolsComponentHook( + 'component:updated' + /* DevtoolsHooks.COMPONENT_UPDATED */ +) +var _devtoolsComponentRemoved = createDevtoolsComponentHook( + 'component:removed' + /* DevtoolsHooks.COMPONENT_REMOVED */ +) +var devtoolsComponentRemoved = component => { + if ( + devtools && + typeof devtools.cleanupBuffer === 'function' && // remove the component if it wasn't buffered + !devtools.cleanupBuffer(component) + ) { + _devtoolsComponentRemoved(component) + } +} +function createDevtoolsComponentHook(hook) { + return component => { + emit( + hook, + component.appContext.app, + component.uid, + component.parent ? component.parent.uid : void 0, + component + ) + } +} +var devtoolsPerfStart = createDevtoolsPerformanceHook( + 'perf:start' + /* DevtoolsHooks.PERFORMANCE_START */ +) +var devtoolsPerfEnd = createDevtoolsPerformanceHook( + 'perf:end' + /* DevtoolsHooks.PERFORMANCE_END */ +) +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit(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 => (isString(a) ? a.trim() : a)) + } + 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))] || // also try camelCase event handler (#2249) + props[(handlerName = toHandlerKey(camelize(event)))] + if (!handler && isModelListener2) { + handler = props[(handlerName = toHandlerKey(hyphenate(event)))] + } + if (handler) { + callWithAsyncErrorHandling(handler, instance, 6, args) + } + const onceHandler = props[handlerName + `Once`] + if (onceHandler) { + if (!instance.emitted) { + instance.emitted = {} + } else if (instance.emitted[handlerName]) { + return + } + instance.emitted[handlerName] = true + callWithAsyncErrorHandling(onceHandler, instance, 6, args) + } +} +function normalizeEmitsOptions(comp, appContext, asMixin = false) { + const cache = appContext.emitsCache + const cached = cache.get(comp) + if (cached !== void 0) { + return cached + } + const raw = comp.emits + let normalized = {} + let hasExtends = false + if (__VUE_OPTIONS_API__ && !isFunction(comp)) { + const extendEmits = raw2 => { + const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true) + if (normalizedFromExtend) { + hasExtends = true + extend(normalized, normalizedFromExtend) + } + } + if (!asMixin && appContext.mixins.length) { + appContext.mixins.forEach(extendEmits) + } + if (comp.extends) { + extendEmits(comp.extends) + } + if (comp.mixins) { + comp.mixins.forEach(extendEmits) + } + } + if (!raw && !hasExtends) { + if (isObject(comp)) { + cache.set(comp, null) + } + return null + } + if (isArray(raw)) { + raw.forEach(key => (normalized[key] = null)) + } else { + extend(normalized, raw) + } + if (isObject(comp)) { + cache.set(comp, normalized) + } + return normalized +} +function isEmitListener(options, key) { + if (!options || !isOn(key)) { + return false + } + key = key.slice(2).replace(/Once$/, '') + return ( + hasOwn(options, key[0].toLowerCase() + key.slice(1)) || + hasOwn(options, hyphenate(key)) || + hasOwn(options, key) + ) +} +var currentRenderingInstance = null +var currentScopeId = null +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance + currentRenderingInstance = instance + currentScopeId = (instance && instance.type.__scopeId) || null + return prev +} +function pushScopeId(id) { + currentScopeId = id +} +function popScopeId() { + currentScopeId = null +} +var withScopeId = _id => withCtx +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) return fn + if (fn._n) { + return fn + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1) + } + const prevInstance = setCurrentRenderingInstance(ctx) + let res + try { + res = fn(...args) + } finally { + setCurrentRenderingInstance(prevInstance) + if (renderFnWithContext._d) { + setBlockTracking(1) + } + } + if (true) { + devtoolsComponentUpdated(ctx) + } + return res + } + renderFnWithContext._n = true + renderFnWithContext._c = true + renderFnWithContext._d = true + return renderFnWithContext +} +var accessedAttrs = false +function markAttrsAccessed() { + accessedAttrs = true +} +function renderComponentRoot(instance) { + const { + type: Component, + vnode, + proxy, + withProxy, + props, + propsOptions: [propsOptions], + slots, + attrs, + emit: emit2, + render: render2, + renderCache, + data, + setupState, + ctx, + inheritAttrs + } = instance + let result + let fallthroughAttrs + const prev = setCurrentRenderingInstance(instance) + if (true) { + accessedAttrs = false + } + try { + if (vnode.shapeFlag & 4) { + const proxyToUse = withProxy || proxy + result = normalizeVNode( + render2.call( + proxyToUse, + proxyToUse, + renderCache, + props, + setupState, + data, + ctx + ) + ) + fallthroughAttrs = attrs + } else { + const render3 = Component + if (attrs === props) { + markAttrsAccessed() + } + result = normalizeVNode( + render3.length > 1 + ? render3( + props, + true + ? { + get attrs() { + markAttrsAccessed() + return attrs + }, + slots, + emit: emit2 + } + : { attrs, slots, emit: emit2 } + ) + : render3( + props, + null + /* we know it doesn't need it */ + ) + ) + fallthroughAttrs = Component.props + ? attrs + : getFunctionalFallthrough(attrs) + } + } catch (err) { + blockStack.length = 0 + handleError( + err, + instance, + 1 + /* ErrorCodes.RENDER_FUNCTION */ + ) + result = createVNode(Comment) + } + let root = result + let setRoot = void 0 + if (result.patchFlag > 0 && result.patchFlag & 2048) { + ;[root, setRoot] = getChildRoot(result) + } + if (fallthroughAttrs && inheritAttrs !== false) { + const keys = Object.keys(fallthroughAttrs) + const { shapeFlag } = root + if (keys.length) { + if (shapeFlag & (1 | 6)) { + if (propsOptions && keys.some(isModelListener)) { + fallthroughAttrs = filterModelListeners( + fallthroughAttrs, + propsOptions + ) + } + root = cloneVNode(root, fallthroughAttrs) + } else if (!accessedAttrs && root.type !== Comment) { + const allAttrs = Object.keys(attrs) + const eventAttrs = [] + const extraAttrs = [] + for (let i = 0, l = allAttrs.length; i < l; i++) { + const key = allAttrs[i] + if (isOn(key)) { + if (!isModelListener(key)) { + eventAttrs.push(key[2].toLowerCase() + key.slice(3)) + } + } else { + extraAttrs.push(key) + } + } + if (extraAttrs.length) { + warn2( + `Extraneous non-props attributes (${extraAttrs.join( + ', ' + )}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.` + ) + } + if (eventAttrs.length) { + warn2( + `Extraneous non-emits event listeners (${eventAttrs.join( + ', ' + )}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.` + ) + } + } + } + } + if (vnode.dirs) { + if (!isElementRoot(root)) { + warn2( + `Runtime directive used on component with non-element root node. The directives will not function as intended.` + ) + } + root = cloneVNode(root) + root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs + } + if (vnode.transition) { + if (!isElementRoot(root)) { + warn2( + `Component inside renders non-element root node that cannot be animated.` + ) + } + root.transition = vnode.transition + } + if (setRoot) { + setRoot(root) + } else { + result = root + } + setCurrentRenderingInstance(prev) + return result +} +var getChildRoot = vnode => { + const rawChildren = vnode.children + const dynamicChildren = vnode.dynamicChildren + const childRoot = filterSingleRoot(rawChildren) + if (!childRoot) { + return [vnode, void 0] + } + const index = rawChildren.indexOf(childRoot) + const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1 + const setRoot = updatedRoot => { + rawChildren[index] = updatedRoot + if (dynamicChildren) { + if (dynamicIndex > -1) { + dynamicChildren[dynamicIndex] = updatedRoot + } else if (updatedRoot.patchFlag > 0) { + vnode.dynamicChildren = [...dynamicChildren, updatedRoot] + } + } + } + return [normalizeVNode(childRoot), setRoot] +} +function filterSingleRoot(children) { + let singleRoot + for (let i = 0; i < children.length; i++) { + const child = children[i] + if (isVNode(child)) { + if (child.type !== Comment || child.children === 'v-if') { + if (singleRoot) { + return + } else { + singleRoot = child + } + } + } else { + return + } + } + return singleRoot +} +var getFunctionalFallthrough = attrs => { + let res + for (const key in attrs) { + if (key === 'class' || key === 'style' || isOn(key)) { + ;(res || (res = {}))[key] = attrs[key] + } + } + return res +} +var filterModelListeners = (attrs, props) => { + const res = {} + for (const key in attrs) { + if (!isModelListener(key) || !(key.slice(9) in props)) { + res[key] = attrs[key] + } + } + return res +} +var isElementRoot = vnode => { + return vnode.shapeFlag & (6 | 1) || vnode.type === Comment +} +function shouldUpdateComponent(prevVNode, nextVNode, optimized) { + const { props: prevProps, children: prevChildren, component } = prevVNode + const { props: nextProps, children: nextChildren, patchFlag } = nextVNode + const emits = component.emitsOptions + if ((prevChildren || nextChildren) && isHmrUpdating) { + return true + } + if (nextVNode.dirs || nextVNode.transition) { + return true + } + if (optimized && patchFlag >= 0) { + if (patchFlag & 1024) { + return true + } + if (patchFlag & 16) { + if (!prevProps) { + return !!nextProps + } + return hasPropsChanged(prevProps, nextProps, emits) + } else if (patchFlag & 8) { + const dynamicProps = nextVNode.dynamicProps + for (let i = 0; i < dynamicProps.length; i++) { + const key = dynamicProps[i] + if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { + return true + } + } + } + } else { + if (prevChildren || nextChildren) { + if (!nextChildren || !nextChildren.$stable) { + return true + } + } + if (prevProps === nextProps) { + return false + } + if (!prevProps) { + return !!nextProps + } + if (!nextProps) { + return true + } + return hasPropsChanged(prevProps, nextProps, emits) + } + return false +} +function hasPropsChanged(prevProps, nextProps, emitsOptions) { + const nextKeys = Object.keys(nextProps) + if (nextKeys.length !== Object.keys(prevProps).length) { + return true + } + for (let i = 0; i < nextKeys.length; i++) { + const key = nextKeys[i] + if ( + nextProps[key] !== prevProps[key] && + !isEmitListener(emitsOptions, key) + ) { + return true + } + } + return false +} +function updateHOCHostEl({ vnode, parent }, el) { + while (parent && parent.subTree === vnode) { + ;(vnode = parent.vnode).el = el + parent = parent.parent + } +} +var isSuspense = type => type.__isSuspense +var SuspenseImpl = { + name: 'Suspense', + // In order to make Suspense tree-shakable, we need to avoid importing it + // directly in the renderer. The renderer checks for the __isSuspense flag + // on a vnode's type and calls the `process` method, passing in renderer + // internals. + __isSuspense: true, + process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + isSVG, + slotScopeIds, + optimized, + rendererInternals + ) { + if (n1 == null) { + mountSuspense( + n2, + container, + anchor, + parentComponent, + parentSuspense, + isSVG, + slotScopeIds, + optimized, + rendererInternals + ) + } else { + patchSuspense( + n1, + n2, + container, + anchor, + parentComponent, + isSVG, + slotScopeIds, + optimized, + rendererInternals + ) + } + }, + hydrate: hydrateSuspense, + create: createSuspenseBoundary, + normalize: normalizeSuspenseChildren +} +var Suspense = SuspenseImpl +function triggerEvent(vnode, name) { + const eventListener = vnode.props && vnode.props[name] + if (isFunction(eventListener)) { + eventListener() + } +} +function mountSuspense( + vnode, + container, + anchor, + parentComponent, + parentSuspense, + isSVG, + slotScopeIds, + optimized, + rendererInternals +) { + const { + p: patch, + o: { createElement } + } = rendererInternals + const hiddenContainer = createElement('div') + const suspense = (vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + container, + hiddenContainer, + anchor, + isSVG, + slotScopeIds, + optimized, + rendererInternals + )) + patch( + null, + (suspense.pendingBranch = vnode.ssContent), + hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds + ) + if (suspense.deps > 0) { + triggerEvent(vnode, 'onPending') + triggerEvent(vnode, 'onFallback') + patch( + null, + vnode.ssFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds + ) + setActiveBranch(suspense, vnode.ssFallback) + } else { + suspense.resolve() + } +} +function patchSuspense( + n1, + n2, + container, + anchor, + parentComponent, + isSVG, + slotScopeIds, + optimized, + { p: patch, um: unmount, o: { createElement } } +) { + const suspense = (n2.suspense = n1.suspense) + suspense.vnode = n2 + n2.el = n1.el + const newBranch = n2.ssContent + const newFallback = n2.ssFallback + const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense + if (pendingBranch) { + suspense.pendingBranch = newBranch + if (isSameVNodeType(newBranch, pendingBranch)) { + patch( + pendingBranch, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ) + if (suspense.deps <= 0) { + suspense.resolve() + } else if (isInFallback) { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds, + optimized + ) + setActiveBranch(suspense, newFallback) + } + } else { + suspense.pendingId++ + if (isHydrating) { + suspense.isHydrating = false + suspense.activeBranch = pendingBranch + } else { + unmount(pendingBranch, parentComponent, suspense) + } + suspense.deps = 0 + suspense.effects.length = 0 + suspense.hiddenContainer = createElement('div') + if (isInFallback) { + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ) + if (suspense.deps <= 0) { + suspense.resolve() + } else { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + isSVG, + slotScopeIds, + optimized + ) + setActiveBranch(suspense, newFallback) + } + } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch( + activeBranch, + newBranch, + container, + anchor, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ) + suspense.resolve(true) + } else { + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ) + if (suspense.deps <= 0) { + suspense.resolve() + } + } + } + } else { + if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch( + activeBranch, + newBranch, + container, + anchor, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ) + setActiveBranch(suspense, newBranch) + } else { + triggerEvent(n2, 'onPending') + suspense.pendingBranch = newBranch + suspense.pendingId++ + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + isSVG, + slotScopeIds, + optimized + ) + if (suspense.deps <= 0) { + suspense.resolve() + } else { + const { timeout, pendingId } = suspense + if (timeout > 0) { + setTimeout(() => { + if (suspense.pendingId === pendingId) { + suspense.fallback(newFallback) + } + }, timeout) + } else if (timeout === 0) { + suspense.fallback(newFallback) + } + } + } + } +} +var hasWarned = false +function createSuspenseBoundary( + vnode, + parent, + parentComponent, + container, + hiddenContainer, + anchor, + isSVG, + slotScopeIds, + optimized, + rendererInternals, + isHydrating = false +) { + if (!hasWarned) { + hasWarned = true + console[console.info ? 'info' : 'log']( + ` is an experimental feature and its API will likely change.` + ) + } + const { + p: patch, + m: move, + um: unmount, + n: next, + o: { parentNode, remove: remove2 } + } = rendererInternals + const timeout = 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 + /* MoveType.ENTER */ + ) + } + } + } + let { anchor: anchor2 } = suspense + if (activeBranch) { + anchor2 = next(activeBranch) + unmount(activeBranch, parentComponent2, suspense, true) + } + if (!delayEnter) { + move( + pendingBranch, + container2, + anchor2, + 0 + /* MoveType.ENTER */ + ) + } + } + setActiveBranch(suspense, pendingBranch) + suspense.pendingBranch = null + suspense.isInFallback = false + let parent2 = suspense.parent + let hasUnresolvedAncestor = false + while (parent2) { + if (parent2.pendingBranch) { + parent2.effects.push(...effects) + hasUnresolvedAncestor = true + break + } + parent2 = parent2.parent + } + if (!hasUnresolvedAncestor) { + queuePostFlushCb(effects) + } + suspense.effects = [] + triggerEvent(vnode2, 'onResolve') + }, + fallback(fallbackVNode) { + if (!suspense.pendingBranch) { + return + } + const { + vnode: vnode2, + activeBranch, + parentComponent: parentComponent2, + container: container2, + isSVG: isSVG2 + } = suspense + triggerEvent(vnode2, 'onFallback') + const anchor2 = next(activeBranch) + const mountFallback = () => { + if (!suspense.isInFallback) { + return + } + patch( + null, + fallbackVNode, + container2, + anchor2, + parentComponent2, + null, + // fallback tree will not have suspense context + isSVG2, + slotScopeIds, + optimized + ) + setActiveBranch(suspense, fallbackVNode) + } + const delayEnter = + fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in' + if (delayEnter) { + activeBranch.transition.afterLeave = mountFallback + } + suspense.isInFallback = true + unmount( + activeBranch, + parentComponent2, + null, + // no suspense so unmount hooks fire now + true + // shouldRemove + ) + if (!delayEnter) { + mountFallback() + } + }, + move(container2, anchor2, type) { + suspense.activeBranch && + move(suspense.activeBranch, container2, anchor2, type) + suspense.container = container2 + }, + next() { + return suspense.activeBranch && next(suspense.activeBranch) + }, + registerDep(instance, setupRenderEffect) { + const isInPendingSuspense = !!suspense.pendingBranch + if (isInPendingSuspense) { + suspense.deps++ + } + const hydratedEl = instance.vnode.el + instance.asyncDep + .catch(err => { + handleError( + err, + instance, + 0 + /* ErrorCodes.SETUP_FUNCTION */ + ) + }) + .then(asyncSetupResult => { + if ( + instance.isUnmounted || + suspense.isUnmounted || + suspense.pendingId !== instance.suspenseId + ) { + return + } + instance.asyncResolved = true + const { vnode: vnode2 } = instance + if (true) { + pushWarningContext(vnode2) + } + handleSetupResult(instance, asyncSetupResult, false) + if (hydratedEl) { + vnode2.el = hydratedEl + } + const placeholder = !hydratedEl && instance.subTree.el + setupRenderEffect( + instance, + vnode2, + // component may have been moved before resolve. + // if this is not a hydration, instance.subTree will be the comment + // placeholder. + parentNode(hydratedEl || instance.subTree.el), + // anchor will not be used if this is hydration, so only need to + // consider the comment placeholder case. + hydratedEl ? null : next(instance.subTree), + suspense, + isSVG, + optimized + ) + if (placeholder) { + remove2(placeholder) + } + updateHOCHostEl(instance, vnode2.el) + if (true) { + popWarningContext() + } + if (isInPendingSuspense && --suspense.deps === 0) { + suspense.resolve() + } + }) + }, + unmount(parentSuspense, doRemove) { + suspense.isUnmounted = true + if (suspense.activeBranch) { + unmount( + suspense.activeBranch, + parentComponent, + parentSuspense, + doRemove + ) + } + if (suspense.pendingBranch) { + unmount( + suspense.pendingBranch, + parentComponent, + parentSuspense, + doRemove + ) + } + } + } + return suspense +} +function hydrateSuspense( + node, + vnode, + parentComponent, + parentSuspense, + isSVG, + slotScopeIds, + optimized, + rendererInternals, + hydrateNode +) { + const suspense = (vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + node.parentNode, + document.createElement('div'), + null, + isSVG, + slotScopeIds, + optimized, + rendererInternals, + true + /* hydrating */ + )) + const result = hydrateNode( + node, + (suspense.pendingBranch = vnode.ssContent), + parentComponent, + suspense, + slotScopeIds, + optimized + ) + if (suspense.deps === 0) { + suspense.resolve() + } + return result +} +function normalizeSuspenseChildren(vnode) { + const { shapeFlag, children } = vnode + const isSlotChildren = shapeFlag & 32 + vnode.ssContent = normalizeSuspenseSlot( + isSlotChildren ? children.default : children + ) + vnode.ssFallback = isSlotChildren + ? normalizeSuspenseSlot(children.fallback) + : createVNode(Comment) +} +function normalizeSuspenseSlot(s) { + let block + if (isFunction(s)) { + const trackBlock = isBlockTreeEnabled && s._c + if (trackBlock) { + s._d = false + openBlock() + } + s = s() + if (trackBlock) { + s._d = true + block = currentBlock + closeBlock() + } + } + if (isArray(s)) { + const singleChild = filterSingleRoot(s) + if (!singleChild) { + warn2(` slots expect a single root node.`) + } + s = singleChild + } + s = normalizeVNode(s) + if (block && !s.dynamicChildren) { + s.dynamicChildren = block.filter(c => c !== s) + } + return s +} +function queueEffectWithSuspense(fn, suspense) { + if (suspense && suspense.pendingBranch) { + if (isArray(fn)) { + suspense.effects.push(...fn) + } else { + suspense.effects.push(fn) + } + } else { + queuePostFlushCb(fn) + } +} +function setActiveBranch(suspense, branch) { + suspense.activeBranch = branch + const { vnode, parentComponent } = suspense + const el = (vnode.el = branch.el) + if (parentComponent && parentComponent.subTree === vnode) { + parentComponent.vnode.el = el + updateHOCHostEl(parentComponent, el) + } +} +function provide(key, value) { + if (!currentInstance) { + if (true) { + warn2(`provide() can only be used inside setup().`) + } + } else { + let provides = currentInstance.provides + const parentProvides = + currentInstance.parent && currentInstance.parent.provides + if (parentProvides === provides) { + provides = currentInstance.provides = Object.create(parentProvides) + } + provides[key] = value + } +} +function inject(key, defaultValue, treatDefaultAsFactory = false) { + const instance = currentInstance || currentRenderingInstance + if (instance) { + const provides = + instance.parent == null + ? instance.vnode.appContext && instance.vnode.appContext.provides + : instance.parent.provides + if (provides && key in provides) { + return provides[key] + } else if (arguments.length > 1) { + return treatDefaultAsFactory && isFunction(defaultValue) + ? defaultValue.call(instance.proxy) + : defaultValue + } else if (true) { + warn2(`injection "${String(key)}" not found.`) + } + } else if (true) { + warn2(`inject() can only be used inside setup() or functional components.`) + } +} +function watchEffect(effect2, options) { + return doWatch(effect2, null, options) +} +function watchPostEffect(effect2, options) { + return doWatch( + effect2, + null, + true + ? Object.assign(Object.assign({}, options), { flush: 'post' }) + : { flush: 'post' } + ) +} +function watchSyncEffect(effect2, options) { + return doWatch( + effect2, + null, + true + ? Object.assign(Object.assign({}, options), { flush: 'sync' }) + : { flush: 'sync' } + ) +} +var INITIAL_WATCHER_VALUE = {} +function watch(source, cb, options) { + if (!isFunction(cb)) { + warn2( + `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.` + ) + } + return doWatch(source, cb, options) +} +function doWatch( + source, + cb, + { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ +) { + if (!cb) { + if (immediate !== void 0) { + warn2( + `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.` + ) + } + if (deep !== void 0) { + warn2( + `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.` + ) + } + } + const warnInvalidSource = s => { + warn2( + `Invalid watch source: `, + s, + `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` + ) + } + const instance = 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(s => isReactive(s) || isShallow(s)) + getter = () => + source.map(s => { + if (isRef(s)) { + return s.value + } else if (isReactive(s)) { + return traverse(s) + } else if (isFunction(s)) { + return callWithErrorHandling( + s, + instance, + 2 + /* ErrorCodes.WATCH_GETTER */ + ) + } else { + warnInvalidSource(s) + } + }) + } else if (isFunction(source)) { + if (cb) { + getter = () => + callWithErrorHandling( + source, + instance, + 2 + /* ErrorCodes.WATCH_GETTER */ + ) + } else { + getter = () => { + if (instance && instance.isUnmounted) { + return + } + if (cleanup) { + cleanup() + } + return callWithAsyncErrorHandling(source, instance, 3, [onCleanup]) + } + } + } else { + getter = NOOP + warnInvalidSource(source) + } + if (cb && deep) { + const baseGetter = getter + getter = () => traverse(baseGetter()) + } + let cleanup + let onCleanup = fn => { + cleanup = effect2.onStop = () => { + callWithErrorHandling( + fn, + instance, + 4 + /* ErrorCodes.WATCH_CLEANUP */ + ) + } + } + let ssrCleanup + if (isInSSRComponentSetup) { + onCleanup = NOOP + if (!cb) { + getter() + } else if (immediate) { + callWithAsyncErrorHandling(cb, instance, 3, [ + getter(), + isMultiSource ? [] : void 0, + onCleanup + ]) + } + if (flush === 'sync') { + const ctx = useSSRContext() + ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []) + } else { + return NOOP + } + } + let oldValue = isMultiSource + ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) + : INITIAL_WATCHER_VALUE + const job = () => { + if (!effect2.active) { + return + } + if (cb) { + const newValue = effect2.run() + if ( + deep || + forceTrigger || + (isMultiSource + ? newValue.some((v, i) => hasChanged(v, oldValue[i])) + : hasChanged(newValue, oldValue)) || + false + ) { + if (cleanup) { + cleanup() + } + callWithAsyncErrorHandling(cb, instance, 3, [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE + ? void 0 + : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE + ? [] + : oldValue, + onCleanup + ]) + oldValue = newValue + } + } else { + effect2.run() + } + } + job.allowRecurse = !!cb + let scheduler + if (flush === 'sync') { + scheduler = job + } else if (flush === 'post') { + scheduler = () => queuePostRenderEffect(job, instance && instance.suspense) + } else { + job.pre = true + if (instance) job.id = instance.uid + scheduler = () => queueJob(job) + } + const effect2 = new ReactiveEffect(getter, scheduler) + if (true) { + effect2.onTrack = onTrack + effect2.onTrigger = onTrigger + } + if (cb) { + if (immediate) { + job() + } else { + oldValue = effect2.run() + } + } else if (flush === 'post') { + queuePostRenderEffect( + effect2.run.bind(effect2), + instance && instance.suspense + ) + } else { + effect2.run() + } + const unwatch = () => { + effect2.stop() + if (instance && instance.scope) { + remove(instance.scope.effects, effect2) + } + } + if (ssrCleanup) ssrCleanup.push(unwatch) + return unwatch +} +function instanceWatch(source, value, options) { + const publicThis = this.proxy + const getter = isString(source) + ? source.includes('.') + ? createPathGetter(publicThis, source) + : () => publicThis[source] + : source.bind(publicThis, publicThis) + let cb + if (isFunction(value)) { + cb = value + } else { + cb = value.handler + options = value + } + const cur = currentInstance + setCurrentInstance(this) + const res = doWatch(getter, cb.bind(publicThis), options) + if (cur) { + setCurrentInstance(cur) + } else { + unsetCurrentInstance() + } + return res +} +function createPathGetter(ctx, path) { + const segments = path.split('.') + return () => { + let cur = ctx + for (let i = 0; i < segments.length && cur; i++) { + cur = cur[segments[i]] + } + return cur + } +} +function traverse(value, seen) { + if ( + !isObject(value) || + value[ + '__v_skip' + /* ReactiveFlags.SKIP */ + ] + ) { + return value + } + seen = seen || /* @__PURE__ */ new Set() + if (seen.has(value)) { + return value + } + seen.add(value) + if (isRef(value)) { + traverse(value.value, seen) + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], seen) + } + } else if (isSet(value) || isMap(value)) { + value.forEach(v => { + traverse(v, seen) + }) + } else if (isPlainObject(value)) { + for (const key in value) { + traverse(value[key], seen) + } + } + return value +} +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + } + onMounted(() => { + state.isMounted = true + }) + onBeforeUnmount(() => { + state.isUnmounting = true + }) + return state +} +var TransitionHookValidator = [Function, Array] +var BaseTransitionImpl = { + name: `BaseTransition`, + props: { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator + }, + setup(props, { slots }) { + const instance = getCurrentInstance() + const state = useTransitionState() + let prevTransitionKey + return () => { + const children = + slots.default && getTransitionRawChildren(slots.default(), true) + if (!children || !children.length) { + return + } + let child = children[0] + if (children.length > 1) { + let hasFound = false + for (const c of children) { + if (c.type !== Comment) { + if (hasFound) { + warn2( + ' can only be used on a single element or component. Use for lists.' + ) + break + } + child = c + hasFound = true + if (false) break + } + } + } + const rawProps = toRaw(props) + const { mode } = rawProps + if ( + mode && + mode !== 'in-out' && + mode !== 'out-in' && + mode !== 'default' + ) { + warn2(`invalid mode: ${mode}`) + } + if (state.isLeaving) { + return emptyPlaceholder(child) + } + const innerChild = getKeepAliveChild(child) + if (!innerChild) { + return emptyPlaceholder(child) + } + const enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state, + instance + ) + setTransitionHooks(innerChild, enterHooks) + const oldChild = instance.subTree + const oldInnerChild = oldChild && getKeepAliveChild(oldChild) + let transitionKeyChanged = false + const { getTransitionKey } = innerChild.type + if (getTransitionKey) { + const key = getTransitionKey() + if (prevTransitionKey === void 0) { + prevTransitionKey = key + } else if (key !== prevTransitionKey) { + prevTransitionKey = key + transitionKeyChanged = true + } + } + if ( + oldInnerChild && + oldInnerChild.type !== Comment && + (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged) + ) { + const leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state, + instance + ) + setTransitionHooks(oldInnerChild, leavingHooks) + if (mode === 'out-in') { + state.isLeaving = true + leavingHooks.afterLeave = () => { + state.isLeaving = false + if (instance.update.active !== false) { + instance.update() + } + } + return emptyPlaceholder(child) + } else if (mode === 'in-out' && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state, + oldInnerChild + ) + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild + el._leaveCb = () => { + earlyRemove() + el._leaveCb = void 0 + delete enterHooks.delayedLeave + } + enterHooks.delayedLeave = delayedLeave + } + } + } + return child + } + } +} +var BaseTransition = BaseTransitionImpl +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state + let leavingVNodesCache = leavingVNodes.get(vnode.type) + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null) + leavingVNodes.set(vnode.type, leavingVNodesCache) + } + return leavingVNodesCache +} +function resolveTransitionHooks(vnode, props, state, instance) { + const { + appear, + mode, + persisted = false, + onBeforeEnter, + onEnter, + onAfterEnter, + onEnterCancelled, + onBeforeLeave, + onLeave, + onAfterLeave, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props + const key = String(vnode.key) + const leavingVNodesCache = getLeavingNodesForType(state, vnode) + const callHook3 = (hook, args) => { + hook && callWithAsyncErrorHandling(hook, instance, 9, args) + } + const callAsyncHook = (hook, args) => { + const done = args[1] + callHook3(hook, args) + if (isArray(hook)) { + if (hook.every(hook2 => hook2.length <= 1)) done() + } else if (hook.length <= 1) { + done() + } + } + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter + } else { + return + } + } + if (el._leaveCb) { + el._leaveCb( + true + /* cancelled */ + ) + } + const leavingVNode = leavingVNodesCache[key] + if ( + leavingVNode && + isSameVNodeType(vnode, leavingVNode) && + leavingVNode.el._leaveCb + ) { + leavingVNode.el._leaveCb() + } + callHook3(hook, [el]) + }, + enter(el) { + let hook = onEnter + let afterHook = onAfterEnter + let cancelHook = onEnterCancelled + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter + afterHook = onAfterAppear || onAfterEnter + cancelHook = onAppearCancelled || onEnterCancelled + } else { + return + } + } + let called = false + const done = (el._enterCb = cancelled => { + if (called) return + called = true + if (cancelled) { + callHook3(cancelHook, [el]) + } else { + callHook3(afterHook, [el]) + } + if (hooks.delayedLeave) { + hooks.delayedLeave() + } + el._enterCb = void 0 + }) + if (hook) { + callAsyncHook(hook, [el, done]) + } else { + done() + } + }, + leave(el, remove2) { + const key2 = String(vnode.key) + if (el._enterCb) { + el._enterCb( + true + /* cancelled */ + ) + } + if (state.isUnmounting) { + return remove2() + } + callHook3(onBeforeLeave, [el]) + let called = false + const done = (el._leaveCb = cancelled => { + if (called) return + called = true + remove2() + if (cancelled) { + callHook3(onLeaveCancelled, [el]) + } else { + callHook3(onAfterLeave, [el]) + } + el._leaveCb = void 0 + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2] + } + }) + leavingVNodesCache[key2] = vnode + if (onLeave) { + callAsyncHook(onLeave, [el, done]) + } else { + done() + } + }, + clone(vnode2) { + return resolveTransitionHooks(vnode2, props, state, instance) + } + } + return hooks +} +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode) + vnode.children = null + return vnode + } +} +function getKeepAliveChild(vnode) { + return isKeepAlive(vnode) + ? vnode.children + ? vnode.children[0] + : void 0 + : vnode +} +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + setTransitionHooks(vnode.component.subTree, hooks) + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent) + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback) + } else { + vnode.transition = hooks + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = [] + let keyedFragmentCount = 0 + for (let i = 0; i < children.length; i++) { + let child = children[i] + const key = + parentKey == null + ? child.key + : String(parentKey) + String(child.key != null ? child.key : i) + if (child.type === Fragment) { + if (child.patchFlag & 128) keyedFragmentCount++ + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ) + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child) + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2 + } + } + return ret +} +function defineComponent(options) { + return isFunction(options) ? { setup: options, name: options.name } : options +} +var isAsyncWrapper = i => !!i.type.__asyncLoader +function defineAsyncComponent(source) { + if (isFunction(source)) { + source = { loader: source } + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source + let pendingRequest = null + let resolvedComp + let retries = 0 + const retry = () => { + retries++ + pendingRequest = null + return load() + } + const load = () => { + let thisRequest + return ( + pendingRequest || + (thisRequest = pendingRequest = + loader() + .catch(err => { + err = err instanceof Error ? err : new Error(String(err)) + if (userOnError) { + return new Promise((resolve2, reject) => { + const userRetry = () => resolve2(retry()) + const userFail = () => reject(err) + userOnError(err, userRetry, userFail, retries + 1) + }) + } else { + throw err + } + }) + .then(comp => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest + } + if (!comp) { + warn2( + `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` + ) + } + if ( + comp && + (comp.__esModule || comp[Symbol.toStringTag] === 'Module') + ) { + comp = comp.default + } + if (comp && !isObject(comp) && !isFunction(comp)) { + throw new Error(`Invalid async component load result: ${comp}`) + } + resolvedComp = comp + return comp + })) + ) + } + return defineComponent({ + name: 'AsyncComponentWrapper', + __asyncLoader: load, + get __asyncResolved() { + return resolvedComp + }, + setup() { + const instance = currentInstance + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance) + } + const onError = err => { + pendingRequest = null + handleError( + err, + instance, + 13, + !errorComponent + /* do not throw in dev if user provided error component */ + ) + } + if ((suspensible && instance.suspense) || isInSSRComponentSetup) { + return load() + .then(comp => { + return () => createInnerComp(comp, instance) + }) + .catch(err => { + onError(err) + return () => + errorComponent + ? createVNode(errorComponent, { + error: err + }) + : null + }) + } + const loaded = ref(false) + const error = ref() + const delayed = ref(!!delay) + if (delay) { + setTimeout(() => { + delayed.value = false + }, delay) + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ) + onError(err) + error.value = err + } + }, timeout) + } + load() + .then(() => { + loaded.value = true + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + queueJob(instance.parent.update) + } + }) + .catch(err => { + onError(err) + error.value = err + }) + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance) + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }) + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent) + } + } + } + }) +} +function createInnerComp(comp, parent) { + const { ref: ref2, props, children, ce } = parent.vnode + const vnode = createVNode(comp, props, children) + vnode.ref = ref2 + vnode.ce = ce + delete parent.vnode.ce + return vnode +} +var isKeepAlive = vnode => vnode.type.__isKeepAlive +var KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance() + const sharedContext = instance.ctx + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default() + return children && children.length === 1 ? children[0] : children + } + } + const cache = /* @__PURE__ */ new Map() + const keys = /* @__PURE__ */ new Set() + let current = null + if (true) { + instance.__v_cache = cache + } + const parentSuspense = instance.suspense + const { + renderer: { + p: patch, + m: move, + um: _unmount, + o: { createElement } + } + } = sharedContext + const storageContainer = createElement('div') + sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => { + const instance2 = vnode.component + move(vnode, container, anchor, 0, parentSuspense) + patch( + instance2.vnode, + vnode, + container, + anchor, + instance2, + parentSuspense, + isSVG, + vnode.slotScopeIds, + optimized + ) + queuePostRenderEffect(() => { + instance2.isDeactivated = false + if (instance2.a) { + invokeArrayFns(instance2.a) + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode) + } + }, parentSuspense) + if (true) { + devtoolsComponentAdded(instance2) + } + } + sharedContext.deactivate = vnode => { + const instance2 = vnode.component + move(vnode, storageContainer, null, 1, parentSuspense) + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da) + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode) + } + instance2.isDeactivated = true + }, parentSuspense) + if (true) { + devtoolsComponentAdded(instance2) + } + } + function unmount(vnode) { + resetShapeFlag(vnode) + _unmount(vnode, instance, parentSuspense, true) + } + function pruneCache(filter) { + cache.forEach((vnode, key) => { + const name = getComponentName(vnode.type) + if (name && (!filter || !filter(name))) { + pruneCacheEntry(key) + } + }) + } + function pruneCacheEntry(key) { + const cached = cache.get(key) + if (!current || 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)) + }, + // prune post-render after `current` has been updated + { flush: 'post', deep: true } + ) + let pendingCacheKey = null + const cacheSubtree = () => { + if (pendingCacheKey != null) { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)) + } + } + onMounted(cacheSubtree) + onUpdated(cacheSubtree) + onBeforeUnmount(() => { + cache.forEach(cached => { + const { subTree, suspense } = instance + const vnode = getInnerChild(subTree) + if (cached.type === vnode.type) { + resetShapeFlag(vnode) + const da = vnode.component.da + da && queuePostRenderEffect(da, suspense) + return + } + unmount(cached) + }) + }) + return () => { + pendingCacheKey = null + if (!slots.default) { + return null + } + const children = slots.default() + const rawVNode = children[0] + if (children.length > 1) { + if (true) { + warn2(`KeepAlive should contain exactly one component child.`) + } + current = null + return children + } else if ( + !isVNode(rawVNode) || + (!(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) + ) { + current = null + return rawVNode + } + let vnode = getInnerChild(rawVNode) + const comp = vnode.type + const name = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp + ) + const { include, exclude, max } = props + if ( + (include && (!name || !matches(include, name))) || + (exclude && name && matches(exclude, name)) + ) { + current = vnode + return rawVNode + } + const key = vnode.key == null ? comp : vnode.key + const cachedVNode = cache.get(key) + if (vnode.el) { + vnode = cloneVNode(vnode) + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode + } + } + pendingCacheKey = key + if (cachedVNode) { + vnode.el = cachedVNode.el + vnode.component = cachedVNode.component + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition) + } + vnode.shapeFlag |= 512 + keys.delete(key) + keys.add(key) + } else { + keys.add(key) + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value) + } + } + vnode.shapeFlag |= 256 + current = vnode + return isSuspense(rawVNode.type) ? rawVNode : vnode + } + } +} +var KeepAlive = KeepAliveImpl +function matches(pattern, name) { + if (isArray(pattern)) { + return pattern.some(p2 => matches(p2, name)) + } else if (isString(pattern)) { + return pattern.split(',').includes(name) + } else if (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 + /* prepend */ + ) + onUnmounted(() => { + remove(keepAliveRoot[type], injected) + }, target) +} +function resetShapeFlag(vnode) { + vnode.shapeFlag &= ~256 + vnode.shapeFlag &= ~512 +} +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []) + const wrappedHook = + hook.__weh || + (hook.__weh = (...args) => { + if (target.isUnmounted) { + return + } + pauseTracking() + setCurrentInstance(target) + const res = callWithAsyncErrorHandling(hook, target, type, args) + unsetCurrentInstance() + resetTracking() + return res + }) + if (prepend) { + hooks.unshift(wrappedHook) + } else { + hooks.push(wrappedHook) + } + return wrappedHook + } else if (true) { + const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, '')) + warn2( + `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` + ) + } +} +var createHook = + lifecycle => + (hook, target = currentInstance) => + // post-create lifecycle registrations are noops during SSR (except for serverPrefetch) + (!isInSSRComponentSetup || lifecycle === 'sp') && + injectHook(lifecycle, (...args) => hook(...args), target) +var onBeforeMount = createHook( + 'bm' + /* LifecycleHooks.BEFORE_MOUNT */ +) +var onMounted = createHook( + 'm' + /* LifecycleHooks.MOUNTED */ +) +var onBeforeUpdate = createHook( + 'bu' + /* LifecycleHooks.BEFORE_UPDATE */ +) +var onUpdated = createHook( + 'u' + /* LifecycleHooks.UPDATED */ +) +var onBeforeUnmount = createHook( + 'bum' + /* LifecycleHooks.BEFORE_UNMOUNT */ +) +var onUnmounted = createHook( + 'um' + /* LifecycleHooks.UNMOUNTED */ +) +var onServerPrefetch = createHook( + 'sp' + /* LifecycleHooks.SERVER_PREFETCH */ +) +var onRenderTriggered = createHook( + 'rtg' + /* LifecycleHooks.RENDER_TRIGGERED */ +) +var onRenderTracked = createHook( + 'rtc' + /* LifecycleHooks.RENDER_TRACKED */ +) +function onErrorCaptured(hook, target = currentInstance) { + injectHook('ec', hook, target) +} +function validateDirectiveName(name) { + if (isBuiltInDirective(name)) { + warn2('Do not use built-in directive ids as custom directive id: ' + name) + } +} +function withDirectives(vnode, directives) { + const internalInstance = currentRenderingInstance + if (internalInstance === null) { + warn2(`withDirectives can only be used inside render functions.`) + return vnode + } + const instance = getExposeProxy(internalInstance) || internalInstance.proxy + const bindings = vnode.dirs || (vnode.dirs = []) + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i] + if (dir) { + if (isFunction(dir)) { + dir = { + mounted: dir, + updated: dir + } + } + if (dir.deep) { + traverse(value) + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }) + } + } + return vnode +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs + const oldBindings = prevVNode && prevVNode.dirs + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i] + if (oldBindings) { + binding.oldValue = oldBindings[i].value + } + let hook = binding.dir[name] + if (hook) { + pauseTracking() + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]) + resetTracking() + } + } +} +var COMPONENTS = 'components' +var DIRECTIVES = 'directives' +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name +} +var NULL_DYNAMIC_COMPONENT = Symbol() +function resolveDynamicComponent(component) { + if (isString(component)) { + return resolveAsset(COMPONENTS, component, false) || component + } else { + return component || NULL_DYNAMIC_COMPONENT + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name) +} +function resolveAsset( + type, + name, + warnMissing = true, + maybeSelfReference = false +) { + const instance = currentRenderingInstance || currentInstance + if (instance) { + const Component = instance.type + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + /* do not include inferred name to avoid breaking existing code */ + ) + if ( + selfName && + (selfName === name || + selfName === camelize(name) || + selfName === capitalize(camelize(name))) + ) { + return Component + } + } + const res = + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + if (!res && maybeSelfReference) { + return Component + } + if (warnMissing && !res) { + const extra = + type === COMPONENTS + ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` + : `` + warn2(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) + } + return res + } else if (true) { + warn2( + `resolve${capitalize( + type.slice(0, -1) + )} can only be used in render() or setup().` + ) + } +} +function resolve(registry, name) { + return ( + registry && + (registry[name] || + registry[camelize(name)] || + registry[capitalize(camelize(name))]) + ) +} +function renderList(source, renderItem, cache, index) { + let ret + const cached = cache && cache[index] + if (isArray(source) || isString(source)) { + ret = new Array(source.length) + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem(source[i], i, void 0, cached && cached[i]) + } + } else if (typeof source === 'number') { + if (!Number.isInteger(source)) { + warn2(`The v-for range expect an integer value but got ${source}.`) + } + ret = new Array(source) + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]) + } + } else if (isObject(source)) { + if (source[Symbol.iterator]) { + ret = Array.from(source, (item, i) => + renderItem(item, i, void 0, cached && cached[i]) + ) + } else { + const keys = Object.keys(source) + ret = new Array(keys.length) + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i] + ret[i] = renderItem(source[key], key, i, cached && cached[i]) + } + } + } else { + ret = [] + } + if (cache) { + cache[index] = ret + } + return ret +} +function createSlots(slots, dynamicSlots) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i] + if (isArray(slot)) { + for (let j = 0; j < slot.length; j++) { + slots[slot[j].name] = slot[j].fn + } + } else if (slot) { + slots[slot.name] = slot.key + ? (...args) => { + const res = slot.fn(...args) + if (res) res.key = slot.key + return res + } + : slot.fn + } + } + return slots +} +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if ( + currentRenderingInstance.isCE || + (currentRenderingInstance.parent && + isAsyncWrapper(currentRenderingInstance.parent) && + currentRenderingInstance.parent.isCE) + ) { + if (name !== 'default') props.name = name + return createVNode('slot', props, fallback && fallback()) + } + let slot = slots[name] + if (slot && slot.length > 1) { + warn2( + `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` + ) + slot = () => [] + } + if (slot && slot._c) { + slot._d = false + } + openBlock() + const validSlotContent = slot && ensureValidVNode(slot(props)) + const rendered = createBlock( + Fragment, + { + key: + props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + (validSlotContent && validSlotContent.key) || + `_${name}` + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + /* PatchFlags.BAIL */ + ) + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + '-s'] + } + if (slot && slot._c) { + slot._d = true + } + return rendered +} +function ensureValidVNode(vnodes) { + return vnodes.some(child => { + if (!isVNode(child)) return true + if (child.type === Comment) return false + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false + return true + }) + ? vnodes + : null +} +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {} + if (!isObject(obj)) { + warn2(`v-on with no argument expects an object value.`) + return ret + } + for (const key in obj) { + ret[ + preserveCaseIfNecessary && /[A-Z]/.test(key) + ? `on:${key}` + : toHandlerKey(key) + ] = obj[key] + } + return ret +} +var getPublicInstance = i => { + if (!i) return null + if (isStatefulComponent(i)) return getExposeProxy(i) || i.proxy + return getPublicInstance(i.parent) +} +var publicPropertiesMap = + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + extend(/* @__PURE__ */ Object.create(null), { + $: i => i, + $el: i => i.vnode.el, + $data: i => i.data, + $props: i => (true ? shallowReadonly(i.props) : i.props), + $attrs: i => (true ? shallowReadonly(i.attrs) : i.attrs), + $slots: i => (true ? shallowReadonly(i.slots) : i.slots), + $refs: i => (true ? shallowReadonly(i.refs) : i.refs), + $parent: i => getPublicInstance(i.parent), + $root: i => getPublicInstance(i.root), + $emit: i => i.emit, + $options: i => (__VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type), + $forceUpdate: i => i.f || (i.f = () => queueJob(i.update)), + $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: i => (__VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP) + }) +var isReservedPrefix = key => key === '_' || key === '$' +var hasSetupBinding = (state, key) => + state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key) +var PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + const { ctx, setupState, data, props, accessCache, type, appContext } = + instance + if (key === '__isVue') { + return true + } + let normalizedProps + if (key[0] !== '$') { + const n = accessCache[key] + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key] + case 2: + return data[key] + case 4: + return ctx[key] + case 3: + return props[key] + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1 + return setupState[key] + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2 + return data[key] + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && + hasOwn(normalizedProps, key) + ) { + accessCache[key] = 3 + return props[key] + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4 + return ctx[key] + } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { + accessCache[key] = 0 + } + } + const publicGetter = publicPropertiesMap[key] + let cssModule, globalProperties + if (publicGetter) { + if (key === '$attrs') { + track(instance, 'get', key) + markAttrsAccessed() + } + return publicGetter(instance) + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && + (cssModule = cssModule[key]) + ) { + return cssModule + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4 + return ctx[key] + } else if ( + // global properties + ((globalProperties = appContext.config.globalProperties), + hasOwn(globalProperties, key)) + ) { + { + return globalProperties[key] + } + } else if ( + currentRenderingInstance && + (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + key.indexOf('__v') !== 0) + ) { + if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { + warn2( + `Property ${JSON.stringify( + key + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ) + } else if (instance === currentRenderingInstance) { + warn2( + `Property ${JSON.stringify( + key + )} was accessed during render but is not defined on instance.` + ) + } + } + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance + if (hasSetupBinding(setupState, key)) { + setupState[key] = value + return true + } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { + warn2(`Cannot mutate +``` + +## Chart with local data + +You can handle your chart data directly in your parent component. + +```vue + + + +``` + +## Chart with API data + +A common pattern is to use an API to retrieve your data. However, there are some things to keep in mind. The most common problem is that you mount your chart component directly and pass in data from an asynchronous API call. The problem with this approach is that Chart.js tries to render your chart and access the chart data synchronously, so your chart mounts before the API data arrives. + +To prevent this, a simple `v-if` is the best solution. + +Create your chart component with a data prop and options prop, so we can pass in our data and options from a container component. + +```vue + + + +``` + +## Chart with dynamic styles + +You can set `responsive: true` and pass in a styles object which gets applied as inline styles to the outer `
`. This way, you can change the height and width of the outer container dynamically, which is not the default behaviour of Chart.js. It is best to use computed properties for this. + +::: warning + You need to set `position: relative` +::: + +```vue + + + +``` + +## Custom / New Charts + +Sometimes you need to extend the default Chart.js charts. There are a lot of [examples](http://www.chartjs.org/docs/latest/developers/charts.html) on how to extend and modify the default charts. Or, you can create your own chart type. + +In `vue-chartjs`, you can do this pretty much the same way: + +```js +// 1. Import Chart.js so you can use the global Chart object +import { Chart } from 'chart.js' +// 2. Import the `createTypedChart()` method to create the vue component. +import { createTypedChart } from 'vue-chartjs' +// 3. Import needed controller from Chart.js +import { LineController } from 'chart.js' + +// 3. Extend one of the default charts +// http://www.chartjs.org/docs/latest/developers/charts.html +class LineWithLineController extends LineController { /* custom magic here */} + +// 4. Generate the vue-chartjs component +// The first argument is the chart-id, the second the chart type, third is the custom controller +const CustomLine = createTypedChart('line', LineWithLineController) + +// 5. Extend the CustomLine Component just like you do with the default vue-chartjs charts. + +export default { + components: { CustomLine } +} +``` + +## Resources + +Here are some resources, such as tutorials, on how to use `vue-chartjs`: + +- [Using vue-chartjs with WordPress](https://medium.com/@apertureless/wordpress-vue-and-chart-js-6b61493e289f) +- [Create stunning Charts with Vue and Chart.js](https://hackernoon.com/creating-stunning-charts-with-vue-js-and-chart-js-28af584adc0a) +- [Let’s Build a Web App with Vue, Chart.js and an API Part I](https://hackernoon.com/lets-build-a-web-app-with-vue-chart-js-and-an-api-544eb81c4b44) +- [Let’s Build a Web App with Vue, Chart.js and an API Part II](https://hackernoon.com/lets-build-a-web-app-with-vue-chart-js-and-an-api-part-ii-39781b1d5acf) +- [Build a realtime chart with VueJS and Pusher](https://blog.pusher.com/build-realtime-chart-with-vuejs-pusher/) diff --git a/website/src/de/guide/index.md b/website/src/de/guide/index.md new file mode 100644 index 00000000..337d0b06 --- /dev/null +++ b/website/src/de/guide/index.md @@ -0,0 +1,210 @@ +# Getting Started + +**vue-chartjs** is a wrapper for [Chart.js](https://github.com/chartjs/Chart.js) in Vue. You can easily create reuseable chart components. + +Supports Chart.js v4. + +## Introduction + +`vue-chartjs` lets you use Chart.js without much hassle inside Vue. It's perfect for people who need simple charts up and running as fast as possible. + +It abstracts the basic logic but exposes the Chart.js object to give you maximal flexibility. + +:::tip Need an API to fetch data? +Please consider [Cube](https://cube.dev/?ref=eco-vue-chartjs), an open-source API for data apps. +::: + +## Installation + +You can install `vue-chartjs` over `yarn` or `npm` or `pnpm`. However, you also need to add `chart.js` as a dependency to your project because `Chart.js` is a peerDependency. This way you can have full control over the versioning of `Chart.js`. + +```bash +pnpm add vue-chartjs chart.js +# or +yarn add vue-chartjs chart.js +# or +npm i vue-chartjs chart.js +``` + +## Integration + +Every chart type that is available in Chart.js is exported as a named component and can be imported as such. These components are normal Vue components. + +The idea behind vue-chartjs is to provide easy-to-use components, with maximal flexibility and extensibility. + +## Creating your first Chart + +First, you need to import the base chart. + +```javascript +import { Bar } from 'vue-chartjs' +``` + +Check out the official [Chart.js docs](http://www.chartjs.org/docs/latest/#creating-a-chart) to see the object structure you need to provide. + +Just create your own component. + +**BarChart.vue** + +```vue + + + +``` + +Use it in your vue app: + +**App.vue** + +```vue + + + +``` + +## Updating Charts + +Since v4 charts have data change watcher and options change watcher by default. Wrapper will update or re-render the chart if new data or new options is passed. Mixins have been removed. + +```vue + + + +``` + +You may get Vue's `Target is readonly` warnings when you are updating your `chartData`. + +If your `chartData` is a `read-only` reactive value, you can override this warning by using a clone: + +```vue + +``` + +Unless you have a writable computed `chartData`, you won't be able to use the newer `structuredClone`, as you'll likely hit the `Write operation failed: computed value is readonly` error. + +You don't need to use a clone if your `chartData` is a [writable computed value](https://vuejs.org/guide/essentials/computed#writable-computed). + + + +## Access to Chart instance + +You can get access to chart instance via template refs. + +```vue + +``` + +In Vue3 projects: + +```javascript +const chartInstance = this.$refs.bar.chart +``` + +## Accessibility + +To make your charts accessible to all users, you should label your charts. +Please refer also to the official [Chart.js Accessibility notes](https://www.chartjs.org/docs/latest/general/accessibility.html). + +### `aria-label` + +You can directly label a chart by passing an `aria-label` prop. + +```vue + +``` + +### `aria-describedby` + +You can reference to a describing element such as a table which describes the data by using the `aria-describedby` property. + +```vue + +``` + +### Fallback-Content + +In case the Browser is not able to render the `canvas` element, you should consider providing fallback content by using the Slot of each component. + +```vue + +``` diff --git a/website/src/de/index.md b/website/src/de/index.md new file mode 100644 index 00000000..ffa84273 --- /dev/null +++ b/website/src/de/index.md @@ -0,0 +1,20 @@ +--- +layout: home +hero: + name: 📈 vue-chartjs + tagline: ⚡ Einfache und schöne Diagramme mit Chart.js und Vue.js + actions: + - theme: brand + text: Get Started → + link: /guide/ +features: +- icon: 🙌 + title: Einfach + details: Einfach für beginner sowie fortgeschrittene +- icon: 💪 + title: Erweiterbar + details: Simple to use, easy to extend +- icon: 💯 + title: Mächtig + details: With the full power of chart.js 💯 +--- diff --git a/website/src/de/migration-guides/index.md b/website/src/de/migration-guides/index.md new file mode 100644 index 00000000..fe30b3d5 --- /dev/null +++ b/website/src/de/migration-guides/index.md @@ -0,0 +1,13 @@ +--- +layout: doc +--- + +# Migration + +Over the time `vue-chartjs` has changed a lot. As the web and frontend technology has changed. +To keep up with the speed of evolution we have iterated and changed a lot. For a smooth transition between version please check the migration guides. + + +- [v4 -> v5](/migration-guides/v5) +- [v3 -> v4](/migration-guides/v4) +- [vue-chart-3](/migration-guides/vue-chart-3) diff --git a/website/src/de/migration-guides/v4.md b/website/src/de/migration-guides/v4.md new file mode 100644 index 00000000..b2488b52 --- /dev/null +++ b/website/src/de/migration-guides/v4.md @@ -0,0 +1,170 @@ +--- +layout: doc +--- +# Migration from v3 to v4 + +With v4, this library introduces a number of breaking changes. In order to improve performance, offer new features, and improve maintainability, it was necessary to break backwards compatibility, but we aimed to do so only when worth the benefit. + +v4 is fully compatible with Chart.js v3. + +## Tree-shaking + +v4 of this library, [just like Chart.js v3](https://www.chartjs.org/docs/latest/getting-started/v3-migration.html#setup-and-installation), is tree-shakable. It means that you need to import and register the controllers, elements, scales, and plugins you want to use. + +For a list of all the available items to import, see [Chart.js docs](https://www.chartjs.org/docs/latest/getting-started/integration.html#bundlers-webpack-rollup-etc). + +v3: + +```javascript +import { Bar } from 'vue-chartjs' +``` + +v4 — lazy way: + +```javascript +import 'chart.js/auto'; +import { Bar } from 'vue-chartjs' +``` + +v4 — tree-shakable way: + +```javascript +import { Bar } from 'vue-chartjs' +import { Chart as ChartJS, Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale } from 'chart.js' + +ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale) +``` + +Using the "lazy way" is okay to simplify the migration, but please consider using the tree-shakable way to decrease the bundle size. + +Please note that typed chart components register their controllers by default, so you don't need to register them by yourself. For example, when using the Pie component, you don't need to register PieController explicitly. + +```javascript +import { Pie } from 'vue-chartjs' +import { Chart as ChartJS, Title, Tooltip, Legend, ArcElement, CategoryScale } from 'chart.js' + +ChartJS.register(Title, Tooltip, Legend, ArcElement, CategoryScale) +``` + +## Changing the creation of Charts + +In v3, you needed to import the component, and then either use extends or mixins and add it. + +v3: + +```javascript +// BarChart.js +import { Bar } from 'vue-chartjs' + +export default { + extends: Bar, + mounted () { + // Overwriting base render method with actual data. + this.renderChart({ + labels: ['January', 'February', 'March'], + datasets: [ + { + label: 'GitHub Commits', + backgroundColor: '#f87979', + data: [40, 20, 12] + } + ] + }) + } +} +``` + +```vue + + + +``` + +In v4, you need to import the component, pass props to it, and use Chart component as a standard Vue component. + +```vue + + + +``` + +## New reactivity system + +v3 does not update or re-render the chart if new data is passed. You needed to use `reactiveProp` and `reactiveData` mixins for that. + +v3: + +```javascript +import { Line, mixins } from 'vue-chartjs' + +export default { + extends: Line, + mixins: [mixins.reactiveProp], + props: ['chartData', 'options'], + mounted () { + this.renderChart(this.chartData, this.options) + } +} +``` + +v4 charts have data change watcher by default. v4 will update or re-render the chart if new data is passed. Mixins have been removed. + +v4: + +```vue + + + +``` diff --git a/website/src/de/migration-guides/v5.md b/website/src/de/migration-guides/v5.md new file mode 100644 index 00000000..eb2ab838 --- /dev/null +++ b/website/src/de/migration-guides/v5.md @@ -0,0 +1,31 @@ +# Migration from v4 to v5 + +With v5, this library introduces a number of breaking changes + +## ESM + +### v5.0 + +Chart.js v4 and vue-chartjs v5 are [ESM-only packages](https://nodejs.org/api/esm.html). To use them in your project, it also should be ESM: + +```json +// package.json +{ + "type": "module" +} +``` + +If you are experiencing this problem with Jest, you should follow [this doc](https://jestjs.io/docs/ecmascript-modules) to enable ESM support. Or, we can recommend you migrate to [Vitest](https://vitest.dev/). Vitest has ESM support out of the box and [has almost the same API as Jest](https://vitest.dev/guide/migration.html#migrating-from-jest). [Here is our example of migration](https://github.com/reactchartjs/react-chartjs-2/commit/7f3ec96101d21e43cae8cbfe5e09a46a17cff1ef). + + +### v5.1 + +Chart.js v4.1 and vue-chartjs v5.1 have restored the CommonJS support. + +## API changes + +- `chartData` props were renamed to `data` +- `chartOptions` props were renamed to `options` +- unknown props will fall through to the canvas element. +- `generateChart` were refactored and renamed to `createTypedChart` +- Vue.js < 2.7 is no longer supported. If you want to use vue-chartjs with Vue < 2.7 you have to lock your version to 4.x. diff --git a/website/src/de/migration-guides/vue-chart-3.md b/website/src/de/migration-guides/vue-chart-3.md new file mode 100644 index 00000000..0a25c56c --- /dev/null +++ b/website/src/de/migration-guides/vue-chart-3.md @@ -0,0 +1,51 @@ + +# Migration from vue-chart-3 + +## Uninstall vue-chart-3 + +```bash +pnpm rm vue-chart-3 +# or +yarn remove vue-chart-3 +# or +npm uninstall vue-chart-3 +``` + +## Install vue-chartjs + +```bash +pnpm add vue-chartjs +# or +yarn add vue-chartjs +# or +npm i vue-chartjs +``` + +## Change component import path + +For Vue 2.7 and Vue 3 projects: + +```javascript +import { /* component */ } from 'vue-chartjs' +``` + +For Vue 2 (<2.7) projects: + +```javascript +import { /* component */ } from 'vue-chartjs/legacy' +``` + +## Rename components + +- BarChart to Bar +- DoughnutChart to Doughnut +- LineChart to Line +- PieChart to Pie +- PolarAreaChart to PolarArea +- RadarChart to Radar +- BubbleChart to Bubble +- ScatterChart to Scatter + +## Rename props + +- options to chartOptions diff --git a/website/src/guide/examples.md b/website/src/guide/examples.md new file mode 100644 index 00000000..0d436c7f --- /dev/null +++ b/website/src/guide/examples.md @@ -0,0 +1,189 @@ + +# Examples + +## Chart with props + +Your goal should be to create reusable chart components. For this purpose, you should utilize Vue.js props to pass in chart options and chart data. This way, the parent component itself does not hold an opinion about fetching data and is only for presentation. + +```vue + + + +``` + +## Chart with local data + +You can handle your chart data directly in your parent component. + +```vue + + + +``` + +## Chart with API data + +A common pattern is to use an API to retrieve your data. However, there are some things to keep in mind. The most common problem is that you mount your chart component directly and pass in data from an asynchronous API call. The problem with this approach is that Chart.js tries to render your chart and access the chart data synchronously, so your chart mounts before the API data arrives. + +To prevent this, a simple `v-if` is the best solution. + +Create your chart component with a data prop and options prop, so we can pass in our data and options from a container component. + +```vue + + + +``` + +## Chart with dynamic styles + +You can set `responsive: true` and pass in a styles object which gets applied as inline styles to the outer `
`. This way, you can change the height and width of the outer container dynamically, which is not the default behaviour of Chart.js. It is best to use computed properties for this. + +::: warning + You need to set `position: relative` +::: + +```vue + + + +``` + +## Custom / New Charts + +Sometimes you need to extend the default Chart.js charts. There are a lot of [examples](http://www.chartjs.org/docs/latest/developers/charts.html) on how to extend and modify the default charts. Or, you can create your own chart type. + +In `vue-chartjs`, you can do this pretty much the same way: + +```js +// 1. Import Chart.js so you can use the global Chart object +import { Chart } from 'chart.js' +// 2. Import the `createTypedChart()` method to create the vue component. +import { createTypedChart } from 'vue-chartjs' +// 3. Import needed controller from Chart.js +import { LineController } from 'chart.js' + +// 3. Extend one of the default charts +// http://www.chartjs.org/docs/latest/developers/charts.html +class LineWithLineController extends LineController { /* custom magic here */} + +// 4. Generate the vue-chartjs component +// The first argument is the chart-id, the second the chart type, third is the custom controller +const CustomLine = createTypedChart('line', LineWithLineController) + +// 5. Extend the CustomLine Component just like you do with the default vue-chartjs charts. + +export default { + components: { CustomLine } +} +``` + +## Resources + +Here are some resources, such as tutorials, on how to use `vue-chartjs`: + +- [Using vue-chartjs with WordPress](https://medium.com/@apertureless/wordpress-vue-and-chart-js-6b61493e289f) +- [Create stunning Charts with Vue and Chart.js](https://hackernoon.com/creating-stunning-charts-with-vue-js-and-chart-js-28af584adc0a) +- [Let’s Build a Web App with Vue, Chart.js and an API Part I](https://hackernoon.com/lets-build-a-web-app-with-vue-chart-js-and-an-api-544eb81c4b44) +- [Let’s Build a Web App with Vue, Chart.js and an API Part II](https://hackernoon.com/lets-build-a-web-app-with-vue-chart-js-and-an-api-part-ii-39781b1d5acf) +- [Build a realtime chart with VueJS and Pusher](https://blog.pusher.com/build-realtime-chart-with-vuejs-pusher/) diff --git a/website/src/guide/index.md b/website/src/guide/index.md index 3c499013..337d0b06 100644 --- a/website/src/guide/index.md +++ b/website/src/guide/index.md @@ -208,192 +208,3 @@ In case the Browser is not able to render the `canvas` element, you should consi Chart couldn't be loaded. ``` - -## Examples - -### Chart with props - -Your goal should be to create reusable chart components. For this purpose, you should utilize Vue.js props to pass in chart options and chart data. This way, the parent component itself does not hold an opinion about fetching data and is only for presentation. - -```vue - - - -``` - -### Chart with local data - -You can handle your chart data directly in your parent component. - -```vue - - - -``` - -### Chart with API data - -A common pattern is to use an API to retrieve your data. However, there are some things to keep in mind. The most common problem is that you mount your chart component directly and pass in data from an asynchronous API call. The problem with this approach is that Chart.js tries to render your chart and access the chart data synchronously, so your chart mounts before the API data arrives. - -To prevent this, a simple `v-if` is the best solution. - -Create your chart component with a data prop and options prop, so we can pass in our data and options from a container component. - -```vue - - - -``` - -### Chart with dynamic styles - -You can set `responsive: true` and pass in a styles object which gets applied as inline styles to the outer `
`. This way, you can change the height and width of the outer container dynamically, which is not the default behaviour of Chart.js. It is best to use computed properties for this. - -::: warning - You need to set `position: relative` -::: - -```vue - - - -``` - -### Custom / New Charts - -Sometimes you need to extend the default Chart.js charts. There are a lot of [examples](http://www.chartjs.org/docs/latest/developers/charts.html) on how to extend and modify the default charts. Or, you can create your own chart type. - -In `vue-chartjs`, you can do this pretty much the same way: - -```js -// 1. Import Chart.js so you can use the global Chart object -import { Chart } from 'chart.js' -// 2. Import the `createTypedChart()` method to create the vue component. -import { createTypedChart } from 'vue-chartjs' -// 3. Import needed controller from Chart.js -import { LineController } from 'chart.js' - -// 3. Extend one of the default charts -// http://www.chartjs.org/docs/latest/developers/charts.html -class LineWithLineController extends LineController { /* custom magic here */} - -// 4. Generate the vue-chartjs component -// The first argument is the chart-id, the second the chart type, third is the custom controller -const CustomLine = createTypedChart('line', LineWithLineController) - -// 5. Extend the CustomLine Component just like you do with the default vue-chartjs charts. - -export default { - components: { CustomLine } -} -``` - -## Resources - -Here are some resources, such as tutorials, on how to use `vue-chartjs`: - -- [Using vue-chartjs with WordPress](https://medium.com/@apertureless/wordpress-vue-and-chart-js-6b61493e289f) -- [Create stunning Charts with Vue and Chart.js](https://hackernoon.com/creating-stunning-charts-with-vue-js-and-chart-js-28af584adc0a) -- [Let’s Build a Web App with Vue, Chart.js and an API Part I](https://hackernoon.com/lets-build-a-web-app-with-vue-chart-js-and-an-api-544eb81c4b44) -- [Let’s Build a Web App with Vue, Chart.js and an API Part II](https://hackernoon.com/lets-build-a-web-app-with-vue-chart-js-and-an-api-part-ii-39781b1d5acf) -- [Build a realtime chart with VueJS and Pusher](https://blog.pusher.com/build-realtime-chart-with-vuejs-pusher/) diff --git a/website/src/index.md b/website/src/index.md index e1cd5237..4ccf9561 100644 --- a/website/src/index.md +++ b/website/src/index.md @@ -1,14 +1,20 @@ --- -home: true -heroImage: https://raw.githubusercontent.com/apertureless/vue-chartjs/main/website/src/images/vue-chartjs.png -actionText: Get Started → -actionLink: /guide/ +layout: home +hero: + name: 📈 vue-chartjs + tagline: ⚡ Easy and beautiful charts with Chart.js and Vue.js + actions: + - theme: brand + text: Get Started → + link: /guide/ features: -- title: Easy - details: Easy for both beginners and pros 🙌 -- title: Extendable - details: Simple to use, easy to extend 💪 -- title: Powerful +- icon: 🙌 + title: Easy + details: Easy for both beginners and pros +- icon: 💪 + title: Extendable + details: Simple to use, easy to extend +- icon: 💯 + title: Powerful details: With the full power of chart.js 💯 -footer: MIT Licensed | Copyright © 2018-present Jakub Juszczak --- diff --git a/website/src/ja/api/index.md b/website/src/ja/api/index.md deleted file mode 100644 index e5289368..00000000 --- a/website/src/ja/api/index.md +++ /dev/null @@ -1,130 +0,0 @@ -# コーディング レファレンス - -## Props - -`vue-chartjs`によって提供されるコンポーネントにはいくつかの基本的なプロパティが定義されています。 `拡張`しているので、それらは *見えない* ですが、それらの値は上書きすることができます: - -| Prop名 | 説明 | -|---|---| -| width | チャート幅 | -| height | チャート高さ | -| chart-id | canvas要素のid | -| css-classes | 囲んでいる div の css クラス (文字列) | -| styles | 囲んでいる div の css クラス (オブジェクト) | -| plugins | chartjs プラグイン (配列) | - -## Events - -`reactData`または` reactProp`ミックスインが使用されている場合、以下のイベントが発行されます。 - -| Event名 | 説明| -|---|---| -| `chart:render` | ミックスインが完全にレンダリングしたとき | -| `chart:destroy` | ミックスインがチャートオブジェクトインスタンスを削除したとき | -| `chart:update` | ミックスインが再レンダリングの代わりに更新をしたとき | -| `labels:update` | labelsがセットされたとき | -| `xlabels:update` | xlabelsがセットされたとき | -| `ylabels:update` | ylabelsがセットされたとき | - -## Global Methods -グローバルメソッドはインポートして使用します。 - -### generateChart - -- **Type:** `Function` -- **Arguments**: `chart-id`, `chart-type` -- **Usage:** - -```js -import { generateChart } from 'vue-chartjs' -// First argument is the chart-id, second the chart type. -const CustomLine = generateChart('custom-line', 'LineWithLine') -``` - -## Instance Methods - -インスタンスメソッドは独自のチャートコンポーネント内で使用することができます。 - - -### generateLegend() - -HTMLの凡例を作成するヘルパー関数 - -- **Type:** `Function` -- **Arguments**: `none` -- **Usage:** - -```js {11} -import { Line } from 'vue-chartjs' - -export default { - extends: Line, - props: ['datasets', 'options'] - data: () => ({ - htmlLegend: null - }) - mounted () { - this.renderChart(this.datasets, this.options) - this.htmlLegend = this.generateLegend() - } -} - -``` - -### プラグインの追加 - -Chart.jsでは、グローバルプラグインとインラインプラグインを定義できます。 グローバルプラグインは、[Chart.js docs](http://www.chartjs.org/docs/latest/developers/plugins.html)で説明されているように`vue-chartjs`でも問題なく動作します。 - - -インラインプラグインを追加したい場合に備えて、`vue-chartjs`は`addPlugin()`と呼ばれるヘルパーメソッドを公開します。 - -`renderChart()`メソッドの前に `addPlugin()`を呼び出すべきです。 - -- **Type:** `Function` -- **Arguments**: `Array` of Plugins -- **Usage:** - -```js -mounted () { - this.addPlugin({ - id: 'my-plugin', - beforeInit: function (chart) { - .... - } - }) -} -``` - -### renderChart() - -Chart.js のインスタンスを作成して描画します。 - -- **Type:** `Function` -- **Arguments**: `Chart Data`, `Chart Options` -- **Usage:** - -```js -mounted () { - this.renderChart({ - labels: ['January', 'February'], - datasets: [ - { - label: 'Data One', - backgroundColor: '#f87979', - data: [40, 20] - } - ]}, - { - responsive: true - } - ) -} -``` - -## Chart.js オブジェクト - -独自のチャートコンポーネント内からChart.jsのオブジェクトには `this.$data._chart` でアクセスできます。 - -## Canvas - -Canvas要素には `this.$refs.canvas` でアクセスできます。 diff --git a/website/src/ja/guide/index.md b/website/src/ja/guide/index.md deleted file mode 100644 index 484983f3..00000000 --- a/website/src/ja/guide/index.md +++ /dev/null @@ -1,476 +0,0 @@ -# 最初に - -**vue-chartjs** は [Chart.js](https://github.com/chartjs/Chart.js) をvueで使用するためのラッパーです。 再利用可能なチャートコンポーネントを簡単に作成できます。 - -## 初めに - -`vue-chartjs` あまり手間をかけずにvueの中でchart.jsを使うことができます。 シンプルなチャートをできるだけ早く起動して実行したいという人に最適です。 - -chart.jsの基本ロジックを抽象化していますが、公開されたchart.jsのオブジェクトを使用して柔軟にカスタマイズできます。 - -## インストール - -### NPM - -`npm`を使って` vue-chartjs`をインストールすることができます。 ただしプロジェクトへの依存関係として `chart.js`を追加する必要があります。 なぜなら `Chart.js`はpeerDependencyだからです。 このため、Chart.jsのバージョンを完全に制御できます。 - -`yarn add vue-chartjs chart.js@2.9.4` or `npm install vue-chartjs chart.js@2.9.4 --save` - -::: tip -Vue.jsの Version 1.xを使用している場合は`legacy`タグを使用してください。しかし、vueのバージョン1はもうメンテナンスされません。 - -`yarn add vue-chartjs@legacy` -::: - -### ブラウザ - -ブラウザから直接 `vue-chartjs` を使用することができます。 -先に`Chart.js`スクリプトを追加してから`vue-chartjs`スクリプトを追加してください - -```html - - -``` - -## 統合 - -`Chart.js`で利用可能なすべてのチャートタイプは名前付きコンポーネントとしてエクスポートされ、そのままインポートすることができます。 これらのコンポーネントは通常のVueコンポーネントですが、それを`拡張`する必要があります。 - -`vue-chartjs`の背後にある考え方は、最大限の柔軟性と拡張性を持ち、使いやすいコンポーネントを提供することです。 これを実現するには、独自の *Chart Component* を作成し、それを`vue-chartjs`コンポーネントして提供するように拡張する必要があります。 - -拡張することで、チャートコンポーネントのメソッドとロジックは、独自のチャートコンポーネントにマージされます。 - -## 最初のチャートの作成 - -BaseChartをインポートしてextendします。この方法で異なるデータのチャートを表示するときに柔軟性が大幅に向上します。 -コンポーネントをカプセル化し、プロパティを使用してコンポーネント内のデータに渡したり、コンポーネント内に直接データを記述することができます。ただし直接コンポーネント内にデータを記述した場合は再利用ができません。 - -パッケージ全体または各モジュールを個別にインポートできます。 インポートしたものを `extends:`か `mixins:[]`を使って指定します。 また `mounted()`フックで、 `this.renderChart()`を呼び出します。 これでチャートインスタンスが作成されます。 - -```js{1,4,6} -import { Bar } from 'vue-chartjs' - -export default { - extends: Bar, - mounted () { - this.renderChart(data, options) - } -} -``` - -:::tip -`extends: Bar` または `mixins: [Bar]` どちらの記述方法でも使用できます。 -::: - -メソッドthis.renderChart()は、Barコンポーネントによって提供され、2つのパラメータを受け付けています。 どちらも`Object`です。 最初のものは表示するデータで、二番目のものはオプションを格納するオブジェクトです。 - -チャート毎に必要なオブジェクト構造は公式 [Chart.js docs](http://www.chartjs.org/docs/latest/#creating-a-chart)をチェックしてください。 - -### Vue シングルファイルコンポーネント - -本ドキュメントのほとんどの例はjavascriptファイルを基に記述されていて、 `.vue`ファイルの例はありません。 これはあなたが、たいてい必要なのは ` - - -``` - -::: danger Template タグはマージできません -`.vue`ファイルに`