diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..4d6e65a3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cSpell.words": ["onclear", "prefloat"] +} diff --git a/README.md b/README.md index a439a4ca..1f674b6d 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,7 @@ export let createGroupHeaderItem = groupValue => { export function handleClear() { value = undefined; listOpen = false; - dispatch("clear", value); + onClear(value); handleFocus(); } ``` diff --git a/package.json b/package.json index c4622d04..81ecee31 100644 --- a/package.json +++ b/package.json @@ -1,75 +1,79 @@ { - "name": "svelte-select", - "version": "5.8.3", - "repository": "https://rob-balfre@github.com/rob-balfre/svelte-select.git", - "description": "A component for Svelte 5 apps", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "test": "npm run test:dev & npm run test:browser", + "test:dev": "rollup -cw", + "test:browser": "sirv test/public -p 3000 --dev --open", + "gen:docs": "node docs/generate_theming_variables_md.cjs", + "preprepare": "node src/remove-styles.cjs", + "prepare": "svelte-package", + "postprepare": "node src/post-prepare.cjs && npm run gen:docs", + "release": "release-it" }, - "github": { - "release": false + "devDependencies": { + "@rollup/plugin-alias": "^5.1.1", + "@sveltejs/adapter-auto": "3.3.1", + "@sveltejs/adapter-static": "3.0.6", + "@sveltejs/kit": "2.8.1", + "@sveltejs/package": "^2.3.7", + "@sveltejs/vite-plugin-svelte": "4.0.0", + "autoprefixer": "^10.4.20", + "cross-env": "^7.0.3", + "find-in-files": "^0.5.0", + "fuse.js": "^7.0.0", + "prettier": "~3.3.3", + "prettier-plugin-svelte": "^3.2.8", + "release-it": "^17.10.0", + "rollup": "^4.26.0", + "rollup-plugin-cleaner": "^1.0.0", + "rollup-plugin-css-only": "^4.5.2", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-replace": "^2.2.0", + "rollup-plugin-svelte": "^7.2.2", + "sirv-cli": "^3.0.0", + "svelte": "^5.1.16", + "svelte-highlight": "^7.7.0", + "svelte-preprocess": "^6.0.3", + "svelte-tiny-virtual-list": "^2.1.2", + "svelte2tsx": "^0.7.24", + "tape-modern": "^1.1.2", + "typescript": "^5.6.3", + "vite": "^5.4.11" }, - "npm": { - "publishPath": "./package" - } - }, - "type": "module", - "exports": { - ".": { - "svelte": "./index.js", - "types": "./index.d.ts" - } - }, - "dependencies": { - "svelte-floating-ui": "1.5.8" - } + "author": "Robert Balfré (https://github.com/rob-balfre)", + "license": "ISC", + "keywords": [ + "svelte" + ], + "release-it": { + "hooks": { + "after:bump": "npm run prepare" + }, + "github": { + "release": false + }, + "npm": { + "publishPath": "./package" + } + }, + "type": "module", + "exports": { + ".": { + "svelte": "./index.js", + "types": "./index.d.ts" + } + }, + "dependencies": { + "svelte": "^5.1.16", + "svelte-floating-ui": "1.5.9", + "@sveltejs/vite-plugin-svelte": "4.0.0" + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..bc6ef804 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4340 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@sveltejs/vite-plugin-svelte': + specifier: 4.0.0 + version: 4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + svelte: + specifier: ^5.1.16 + version: 5.1.16 + svelte-floating-ui: + specifier: 1.5.9 + version: 1.5.9 + devDependencies: + '@rollup/plugin-alias': + specifier: ^5.1.1 + version: 5.1.1(rollup@4.26.0) + '@sveltejs/adapter-auto': + specifier: 3.3.1 + version: 3.3.1(@sveltejs/kit@2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0))) + '@sveltejs/adapter-static': + specifier: 3.0.6 + version: 3.0.6(@sveltejs/kit@2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0))) + '@sveltejs/kit': + specifier: 2.8.1 + version: 2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + '@sveltejs/package': + specifier: ^2.3.7 + version: 2.3.7(svelte@5.1.16)(typescript@5.6.3) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + find-in-files: + specifier: ^0.5.0 + version: 0.5.0 + fuse.js: + specifier: ^7.0.0 + version: 7.0.0 + prettier: + specifier: ~3.3.3 + version: 3.3.3 + prettier-plugin-svelte: + specifier: ^3.2.8 + version: 3.2.8(prettier@3.3.3)(svelte@5.1.16) + release-it: + specifier: ^17.10.0 + version: 17.10.0(typescript@5.6.3) + rollup: + specifier: ^4.26.0 + version: 4.26.0 + rollup-plugin-cleaner: + specifier: ^1.0.0 + version: 1.0.0(rollup@4.26.0) + rollup-plugin-css-only: + specifier: ^4.5.2 + version: 4.5.2(rollup@4.26.0) + rollup-plugin-node-resolve: + specifier: ^5.2.0 + version: 5.2.0(rollup@4.26.0) + rollup-plugin-postcss: + specifier: ^4.0.2 + version: 4.0.2(postcss@8.4.49) + rollup-plugin-replace: + specifier: ^2.2.0 + version: 2.2.0 + rollup-plugin-svelte: + specifier: ^7.2.2 + version: 7.2.2(rollup@4.26.0)(svelte@5.1.16) + sirv-cli: + specifier: ^3.0.0 + version: 3.0.0 + svelte-highlight: + specifier: ^7.7.0 + version: 7.7.0 + svelte-preprocess: + specifier: ^6.0.3 + version: 6.0.3(postcss-load-config@3.1.4(postcss@8.4.49))(postcss@8.4.49)(svelte@5.1.16)(typescript@5.6.3) + svelte-tiny-virtual-list: + specifier: ^2.1.2 + version: 2.1.2 + svelte2tsx: + specifier: ^0.7.24 + version: 0.7.24(svelte@5.1.16)(typescript@5.6.3) + tape-modern: + specifier: ^1.1.2 + version: 1.1.2 + typescript: + specifier: ^5.6.3 + version: 5.6.3 + vite: + specifier: ^5.4.11 + version: 5.4.11(@types/node@22.9.0) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@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] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@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] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + + '@inquirer/figures@1.0.8': + resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} + engines: {node: '>=18'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@octokit/auth-token@4.0.0': + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + + '@octokit/core@5.2.0': + resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} + engines: {node: '>= 18'} + + '@octokit/endpoint@9.0.5': + resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} + engines: {node: '>= 18'} + + '@octokit/graphql@7.1.0': + resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + + '@octokit/plugin-paginate-rest@11.3.1': + resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-request-log@4.0.1': + resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-rest-endpoint-methods@13.2.2': + resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': ^5 + + '@octokit/request-error@5.1.0': + resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} + engines: {node: '>= 18'} + + '@octokit/request@8.4.0': + resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} + engines: {node: '>= 18'} + + '@octokit/rest@20.1.1': + resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} + engines: {node: '>= 18'} + + '@octokit/types@13.6.1': + resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/plugin-alias@5.1.1': + resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.26.0': + resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.26.0': + resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.26.0': + resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.26.0': + resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.26.0': + resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.26.0': + resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.26.0': + resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.26.0': + resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.26.0': + resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.26.0': + resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.26.0': + resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.26.0': + resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.26.0': + resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.26.0': + resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.26.0': + resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.26.0': + resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==} + cpu: [x64] + os: [win32] + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sveltejs/adapter-auto@3.3.1': + resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + + '@sveltejs/adapter-static@3.0.6': + resolution: {integrity: sha512-MGJcesnJWj7FxDcB/GbrdYD3q24Uk0PIL4QIX149ku+hlJuj//nxUbb0HxUTpjkecWfHjVveSUnUaQWnPRXlpg==} + peerDependencies: + '@sveltejs/kit': ^2.0.0 + + '@sveltejs/kit@2.8.1': + resolution: {integrity: sha512-uuOfFwZ4xvnfPsiTB6a4H1ljjTUksGhWnYq5X/Y9z4x5+3uM2Md8q/YVeHL+7w+mygAwoEFdgKZ8YkUuk+VKww==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 + + '@sveltejs/package@2.3.7': + resolution: {integrity: sha512-LYgUkde5GUYqOpXbcoCGUpEH4Ctl3Wj4u4CVZBl56dEeLW5fGHE037ZL1qlK0Ky+QD5uUfwONSeGwIOIighFMQ==} + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + + '@sveltejs/vite-plugin-svelte-inspector@3.0.1': + resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 + svelte: ^5.0.0-next.96 || ^5.0.0 + vite: ^5.0.0 + + '@sveltejs/vite-plugin-svelte@4.0.0': + resolution: {integrity: sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} + peerDependencies: + svelte: ^5.0.0-next.96 || ^5.0.0 + vite: ^5.0.0 + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + + '@types/resolve@0.0.8': + resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==} + + acorn-typescript@1.4.13: + resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} + peerDependencies: + acorn: '>=8.9.0' + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} + + console-clear@1.1.1: + resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==} + engines: {node: '>=4'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + engines: {node: '>= 8'} + + css-declaration-sorter@6.4.1: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + cssnano@5.1.15: + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + electron-to-chromium@1.5.57: + resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + esm-env@1.1.4: + resolution: {integrity: sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrap@1.2.2: + resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.0: + resolution: {integrity: sha512-CTNS0BcKBcoOsawKBlpcKNmK4Kjuyz5jVLhf+PUsHGMqiKMVTa4cN3U7r7bRY8KTpfOGpXMo27fdy0dYVg2pqA==} + engines: {node: '>=16.17'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-in-files@0.5.0: + resolution: {integrity: sha512-VraTc6HdtdSHmAp0yJpAy20yPttGKzyBWc7b7FPnnsX9TOgmKx0g9xajizpF/iuu4IvNK4TP0SpyBT9zAlwG+g==} + + find@0.1.7: + resolution: {integrity: sha512-jPrupTOe/pO//3a9Ty2o4NqQCp0L46UG+swUnfFtdmtQVN8pEltKpAqR7Nuf6vWn0GBXx5w+R1MyZzqwjEIqdA==} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + fuse.js@7.0.0: + resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} + engines: {node: '>=10'} + + generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + + git-up@7.0.0: + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + + git-url-parse@14.0.0: + resolution: {integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + highlight.js@11.10.0: + resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==} + engines: {node: '>=12.0.0'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@9.3.2: + resolution: {integrity: sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==} + engines: {node: '>=18'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-ssh@1.4.0: + resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + issue-parser@7.0.1: + resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} + engines: {node: ^18.17 || >=20.6.1} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + ky@1.7.2: + resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} + engines: {node: '>=18'} + + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + local-access@1.1.0: + resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} + engines: {node: '>=6'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} + + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + macos-release@3.3.0: + resolution: {integrity: sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + new-github-release-url@2.0.0: + resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ora@8.1.0: + resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} + engines: {node: '>=18'} + + os-name@5.1.0: + resolution: {integrity: sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-path@7.0.0: + resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} + + parse-url@8.1.0: + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + + postcss-calc@8.2.4: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@5.3.1: + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@5.1.3: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-comments@5.1.2: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@5.1.1: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@5.1.0: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-merge-longhand@5.1.7: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@5.1.4: + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@5.1.0: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@5.1.1: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@5.1.4: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@5.2.1: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.1.0: + resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@4.3.1: + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + + postcss-normalize-charset@5.1.0: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@5.1.0: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@5.1.1: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@5.1.1: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@5.1.0: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@5.1.0: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@5.1.1: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@5.1.0: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@5.1.1: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-ordered-values@5.1.3: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-initial@5.1.2: + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@5.1.0: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + engines: {node: '>=4'} + + postcss-svgo@5.1.0: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@5.1.1: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prettier-plugin-svelte@3.2.8: + resolution: {integrity: sha512-PAHmmU5cGZdnhW4mWhmvxuG2PVbbHIxUuPOdUKvfE+d4Qt2d29iU5VWrPdsaW5YqVEE0nqhlvN4eoKmVMpIF3Q==} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + protocols@2.0.1: + resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + release-it@17.10.0: + resolution: {integrity: sha512-00cXYEl7RFD5NnjXpwaH9JFjpwe8w3NcfUd4XPxrKQkszp1xppPo42zK9eSbxStKyPA5CVk2KmKPDPDiAKVJTA==} + engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0} + hasBin: true + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-cleaner@1.0.0: + resolution: {integrity: sha512-q+Zf9estkFwGede9QzmbkhKeuXzlliOvcICVNzBHAs5xYPPs1XLtfin5TMU2tC2EYjmfaF97saY9MnQM6Og4eA==} + engines: {node: '>= 8.0'} + peerDependencies: + rollup: '> 1.0' + + rollup-plugin-css-only@4.5.2: + resolution: {integrity: sha512-7rj9+jB17Pz8LNcPgtMUb16JcgD8lxQMK9HcGfAVhMK3na/WXes3oGIo5QsrQQVqtgAU6q6KnQNXJrYunaUIQQ==} + engines: {node: '>=14'} + peerDependencies: + rollup: <5 + + rollup-plugin-node-resolve@5.2.0: + resolution: {integrity: sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve. + peerDependencies: + rollup: '>=1.11.0' + + rollup-plugin-postcss@4.0.2: + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + + rollup-plugin-replace@2.2.0: + resolution: {integrity: sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==} + deprecated: This module has moved and is now available at @rollup/plugin-replace. Please update your dependencies. This version is no longer maintained. + + rollup-plugin-svelte@7.2.2: + resolution: {integrity: sha512-hgnIblTRewaBEVQD6N0Q43o+y6q1TmDRhBjaEzQCi50bs8TXqjc+d1zFZyE8tsfgcfNHZQzclh4RxlFUB85H8Q==} + engines: {node: '>=10'} + peerDependencies: + rollup: '>=2.0.0' + svelte: '>=3.5.0' + + rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + + rollup@4.26.0: + resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semiver@1.1.0: + resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} + engines: {node: '>=6'} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv-cli@3.0.0: + resolution: {integrity: sha512-p88yHl8DmTOUJroRiW2o9ezJc/YRLxphBydX2NGQc3naKBA09B3EM4Q/yaN8FYF0e50fRSZP7dyatr72b1u5Jw==} + engines: {node: '>=18'} + hasBin: true + + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + + stylehacks@5.1.1: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte-floating-ui@1.5.9: + resolution: {integrity: sha512-X5690AOuPlox+C2C4RvL6JAl/hDHEvwXXrUqWXYLN4L9ClMEZfZIfXYl8IMw6Mf7Hv9z8VjUKGsfN4IwxjDqSA==} + + svelte-highlight@7.7.0: + resolution: {integrity: sha512-umBiTz3fLbbNCA+wGlRhJOb54iC6ap8S/dxjauQ+g6a8oFGTOGQeOP2rJVoh/K1ssF7IjP4P0T3Yuiu+vtaG5Q==} + + svelte-preprocess@6.0.3: + resolution: {integrity: sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==} + engines: {node: '>= 18.0.0'} + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + postcss: ^7 || ^8 + postcss-load-config: '>=3' + pug: ^3.0.0 + sass: ^1.26.8 + stylus: '>=0.55' + sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 + svelte: ^4.0.0 || ^5.0.0-next.100 || ^5.0.0 + typescript: ^5.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + + svelte-tiny-virtual-list@2.1.2: + resolution: {integrity: sha512-jeP/WMvgFUR4mYXHGPiCexjX5DuzSO+3xzHNhxfcsFyy+uYPtnqI5UGb383swpzQAyXB0OBqYfzpYihD/5gxnA==} + + svelte2tsx@0.7.24: + resolution: {integrity: sha512-KbKD+5aqTYdRPfAroA72xc3kEz3Dj0Vq7X3IjHLWbwfco7pwioEx4x/V9lOpKmkHlYh9YNPkqXWlbrH7Cc580A==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + + svelte@5.1.16: + resolution: {integrity: sha512-QcY+om9r8+uTcSfeFuv8++ExdfwVCKeT+Y7GPSZ6rQPczvy62BMtvMoi0rScabgv+upGE5jxKjd7M4u23+AjGA==} + engines: {node: '>=18'} + + svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + + tape-modern@1.1.2: + resolution: {integrity: sha512-0EWihNQ0t1bMR3fxw2ulmei+YMcyXQucg1mRvsz7cB986IorREwpNm/4+CtLtv4pUP7Z9LDywGKThRfngy/Puw==} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + tinydate@1.3.0: + resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} + engines: {node: '>=4'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + traverse-chain@0.1.0: + resolution: {integrity: sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + 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 + + vitefu@1.0.3: + resolution: {integrity: sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + when-exit@2.1.3: + resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wildcard-match@5.1.3: + resolution: {integrity: sha512-a95hPUk+BNzSGLntNXYxsjz2Hooi5oL7xOfJR6CKwSsSALh7vUNuTlzsrZowtYy38JNduYFRVhFv19ocqNOZlg==} + + windows-release@5.1.1: + resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.25.9': {} + + '@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 + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.12': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/utils@0.2.8': {} + + '@iarna/toml@2.2.5': {} + + '@inquirer/figures@1.0.8': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@octokit/auth-token@4.0.0': {} + + '@octokit/core@5.2.0': + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.1.0 + '@octokit/request': 8.4.0 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.6.1 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + + '@octokit/endpoint@9.0.5': + dependencies: + '@octokit/types': 13.6.1 + universal-user-agent: 6.0.1 + + '@octokit/graphql@7.1.0': + dependencies: + '@octokit/request': 8.4.0 + '@octokit/types': 13.6.1 + universal-user-agent: 6.0.1 + + '@octokit/openapi-types@22.2.0': {} + + '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 13.6.1 + + '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + + '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 13.6.1 + + '@octokit/request-error@5.1.0': + dependencies: + '@octokit/types': 13.6.1 + deprecation: 2.3.1 + once: 1.4.0 + + '@octokit/request@8.4.0': + dependencies: + '@octokit/endpoint': 9.0.5 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.6.1 + universal-user-agent: 6.0.1 + + '@octokit/rest@20.1.1': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) + '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) + '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) + + '@octokit/types@13.6.1': + dependencies: + '@octokit/openapi-types': 22.2.0 + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@polka/url@1.0.0-next.28': {} + + '@rollup/plugin-alias@5.1.1(rollup@4.26.0)': + optionalDependencies: + rollup: 4.26.0 + + '@rollup/pluginutils@4.2.1': + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + '@rollup/pluginutils@5.1.3(rollup@4.26.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.26.0 + + '@rollup/rollup-android-arm-eabi@4.26.0': + optional: true + + '@rollup/rollup-android-arm64@4.26.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.26.0': + optional: true + + '@rollup/rollup-darwin-x64@4.26.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.26.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.26.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.26.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.26.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.26.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.26.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.26.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.26.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.26.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.26.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.26.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.26.0': + optional: true + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))': + dependencies: + '@sveltejs/kit': 2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + import-meta-resolve: 4.1.0 + + '@sveltejs/adapter-static@3.0.6(@sveltejs/kit@2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))': + dependencies: + '@sveltejs/kit': 2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + + '@sveltejs/kit@2.8.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0))': + dependencies: + '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + '@types/cookie': 0.6.0 + cookie: 0.6.0 + devalue: 5.1.1 + esm-env: 1.1.4 + import-meta-resolve: 4.1.0 + kleur: 4.1.5 + magic-string: 0.30.12 + mrmime: 2.0.0 + sade: 1.8.1 + set-cookie-parser: 2.7.1 + sirv: 3.0.0 + svelte: 5.1.16 + tiny-glob: 0.2.9 + vite: 5.4.11(@types/node@22.9.0) + + '@sveltejs/package@2.3.7(svelte@5.1.16)(typescript@5.6.3)': + dependencies: + chokidar: 4.0.1 + kleur: 4.1.5 + sade: 1.8.1 + semver: 7.6.3 + svelte: 5.1.16 + svelte2tsx: 0.7.24(svelte@5.1.16)(typescript@5.6.3) + transitivePeerDependencies: + - typescript + + '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0))': + dependencies: + '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + debug: 4.3.7 + svelte: 5.1.16 + vite: 5.4.11(@types/node@22.9.0) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)))(svelte@5.1.16)(vite@5.4.11(@types/node@22.9.0)) + debug: 4.3.7 + deepmerge: 4.3.1 + kleur: 4.1.5 + magic-string: 0.30.12 + svelte: 5.1.16 + vite: 5.4.11(@types/node@22.9.0) + vitefu: 1.0.3(vite@5.4.11(@types/node@22.9.0)) + transitivePeerDependencies: + - supports-color + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@trysound/sax@0.2.0': {} + + '@types/cookie@0.6.0': {} + + '@types/estree@1.0.6': {} + + '@types/node@22.9.0': + dependencies: + undici-types: 6.19.8 + + '@types/resolve@0.0.8': + dependencies: + '@types/node': 22.9.0 + + acorn-typescript@1.4.13(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + agent-base@7.1.1: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.3 + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001680 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + before-after-hook@2.2.3: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + boolbase@1.0.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.3.0 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.26.1 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.57 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtin-modules@3.3.0: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + callsites@3.1.0: {} + + camelcase@8.0.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001680 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001680: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chardet@0.7.0: {} + + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + + ci-info@4.1.0: {} + + cli-boxes@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-width@4.1.0: {} + + clone@1.0.4: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + commander@7.2.0: {} + + concat-map@0.0.1: {} + + concat-with-sourcemaps@1.1.0: + dependencies: + source-map: 0.6.1 + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@7.0.0: + dependencies: + atomically: 2.0.3 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + + console-clear@1.1.1: {} + + cookie@0.6.0: {} + + cosmiconfig@9.0.0(typescript@5.6.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.3 + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.5 + + cross-spawn@7.0.5: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-declaration-sorter@6.4.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.4.49): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.49) + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 8.2.4(postcss@8.4.49) + postcss-colormin: 5.3.1(postcss@8.4.49) + postcss-convert-values: 5.1.3(postcss@8.4.49) + postcss-discard-comments: 5.1.2(postcss@8.4.49) + postcss-discard-duplicates: 5.1.0(postcss@8.4.49) + postcss-discard-empty: 5.1.1(postcss@8.4.49) + postcss-discard-overridden: 5.1.0(postcss@8.4.49) + postcss-merge-longhand: 5.1.7(postcss@8.4.49) + postcss-merge-rules: 5.1.4(postcss@8.4.49) + postcss-minify-font-values: 5.1.0(postcss@8.4.49) + postcss-minify-gradients: 5.1.1(postcss@8.4.49) + postcss-minify-params: 5.1.4(postcss@8.4.49) + postcss-minify-selectors: 5.2.1(postcss@8.4.49) + postcss-normalize-charset: 5.1.0(postcss@8.4.49) + postcss-normalize-display-values: 5.1.0(postcss@8.4.49) + postcss-normalize-positions: 5.1.1(postcss@8.4.49) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.49) + postcss-normalize-string: 5.1.0(postcss@8.4.49) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.49) + postcss-normalize-unicode: 5.1.1(postcss@8.4.49) + postcss-normalize-url: 5.1.0(postcss@8.4.49) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.49) + postcss-ordered-values: 5.1.3(postcss@8.4.49) + postcss-reduce-initial: 5.1.2(postcss@8.4.49) + postcss-reduce-transforms: 5.1.0(postcss@8.4.49) + postcss-svgo: 5.1.0(postcss@8.4.49) + postcss-unique-selectors: 5.1.1(postcss@8.4.49) + + cssnano-utils@3.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + cssnano@5.1.15(postcss@8.4.49): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.49) + lilconfig: 2.1.0 + postcss: 8.4.49 + yaml: 1.10.2 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + data-uri-to-buffer@6.0.2: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + dedent-js@1.0.1: {} + + deep-extend@0.6.0: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-lazy-prop@3.0.0: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + deprecation@2.3.1: {} + + devalue@5.1.1: {} + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dot-prop@9.0.0: + dependencies: + type-fest: 4.26.1 + + electron-to-chromium@1.5.57: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + entities@2.2.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + 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 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esm-env@1.1.4: {} + + esprima@4.0.1: {} + + esrap@1.2.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.6 + + estraverse@5.3.0: {} + + estree-walker@0.6.1: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + eventemitter3@4.0.7: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.5 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.0: + dependencies: + cross-spawn: 7.0.5 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-in-files@0.5.0: + dependencies: + find: 0.1.7 + q: 1.5.1 + + find@0.1.7: + dependencies: + traverse-chain: 0.1.0 + + fraction.js@4.3.7: {} + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + fuse.js@7.0.0: {} + + generic-names@4.0.0: + dependencies: + loader-utils: 3.3.1 + + get-east-asian-width@1.3.0: {} + + get-port@5.1.1: {} + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-uri@6.0.3: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.7 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + + git-up@7.0.0: + dependencies: + is-ssh: 1.4.0 + parse-url: 8.1.0 + + git-url-parse@14.0.0: + dependencies: + git-up: 7.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + globalyzer@0.1.0: {} + + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.2 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + + globrex@0.1.2: {} + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + highlight.js@11.10.0: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + icss-replace-symbols@1.1.0: {} + + icss-utils@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + import-cwd@3.0.0: + dependencies: + import-from: 3.0.0 + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from@3.0.0: + dependencies: + resolve-from: 5.0.0 + + import-meta-resolve@4.1.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + inquirer@9.3.2: + dependencies: + '@inquirer/figures': 1.0.8 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + external-editor: 3.1.0 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + + interpret@1.4.0: {} + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + is-arrayish@0.2.1: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-in-ci@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + + is-interactive@1.0.0: {} + + is-interactive@2.0.0: {} + + is-module@1.0.0: {} + + is-npm@6.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@4.0.0: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + is-ssh@1.4.0: + dependencies: + protocols: 2.0.1 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + issue-parser@7.0.1: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@1.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kleur@4.1.5: {} + + ky@1.7.2: {} + + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + + lilconfig@2.1.0: {} + + lines-and-columns@1.2.4: {} + + loader-utils@3.3.1: {} + + local-access@1.1.0: {} + + locate-character@3.0.0: {} + + lodash.camelcase@4.3.0: {} + + lodash.capitalize@4.2.1: {} + + lodash.escaperegexp@4.1.2: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.memoize@4.1.2: {} + + lodash.uniq@4.5.0: {} + + lodash.uniqby@4.7.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lru-cache@7.18.3: {} + + macos-release@3.3.0: {} + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.12: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + mdn-data@2.0.14: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mri@1.2.0: {} + + mrmime@2.0.0: {} + + ms@2.1.3: {} + + mute-stream@1.0.0: {} + + nanoid@3.3.7: {} + + netmask@2.0.2: {} + + new-github-release-url@2.0.0: + dependencies: + type-fest: 2.19.0 + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-releases@2.0.18: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ora@8.1.0: + dependencies: + chalk: 5.3.0 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-name@5.1.0: + dependencies: + macos-release: 3.3.0 + windows-release: 5.1.1 + + os-tmpdir@1.0.2: {} + + p-finally@1.0.0: {} + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + pac-proxy-agent@7.0.2: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.7 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + package-json@10.0.1: + dependencies: + ky: 1.7.2 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.6.3 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-path@7.0.0: + dependencies: + protocols: 2.0.1 + + parse-url@8.1.0: + dependencies: + parse-path: 7.0.0 + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-type@5.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@5.0.0: {} + + postcss-calc@8.2.4(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-colormin@5.3.1(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-convert-values@5.1.3(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@5.1.2(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-discard-duplicates@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-discard-empty@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-discard-overridden@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-load-config@3.1.4(postcss@8.4.49): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.4.49 + + postcss-merge-longhand@5.1.7(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.49) + + postcss-merge-rules@5.1.4(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@5.1.1(postcss@8.4.49): + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-minify-params@5.1.4(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@5.2.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-modules-local-by-default@4.1.0(postcss@8.4.49): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 + + postcss-modules-values@4.0.0(postcss@8.4.49): + dependencies: + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + + postcss-modules@4.3.1(postcss@8.4.49): + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.1.0(postcss@8.4.49) + postcss-modules-scope: 3.2.1(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) + string-hash: 1.1.3 + + postcss-normalize-charset@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + postcss-normalize-display-values@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@5.1.1(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@5.1.0(postcss@8.4.49): + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@5.1.3(postcss@8.4.49): + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@5.1.2(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-api: 3.0.0 + postcss: 8.4.49 + + postcss-reduce-transforms@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.0.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-unique-selectors@5.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier-plugin-svelte@3.2.8(prettier@3.3.3)(svelte@5.1.16): + dependencies: + prettier: 3.3.3 + svelte: 5.1.16 + + prettier@3.3.3: {} + + promise.series@0.2.0: {} + + proto-list@1.2.4: {} + + protocols@2.0.1: {} + + proxy-agent@6.4.0: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.2 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pupa@3.1.0: + dependencies: + escape-goat: 4.0.0 + + q@1.5.1: {} + + queue-microtask@1.2.3: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@4.0.2: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.8 + + registry-auth-token@5.0.2: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + release-it@17.10.0(typescript@5.6.3): + dependencies: + '@iarna/toml': 2.2.5 + '@octokit/rest': 20.1.1 + async-retry: 1.3.3 + chalk: 5.3.0 + ci-info: 4.1.0 + cosmiconfig: 9.0.0(typescript@5.6.3) + execa: 8.0.0 + git-url-parse: 14.0.0 + globby: 14.0.2 + inquirer: 9.3.2 + issue-parser: 7.0.1 + lodash: 4.17.21 + mime-types: 2.1.35 + new-github-release-url: 2.0.0 + open: 10.1.0 + ora: 8.1.0 + os-name: 5.1.0 + proxy-agent: 6.4.0 + semver: 7.6.3 + shelljs: 0.8.5 + update-notifier: 7.3.1 + url-join: 5.0.0 + wildcard-match: 5.1.3 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - supports-color + - typescript + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve.exports@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + retry@0.13.1: {} + + reusify@1.0.4: {} + + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + + rollup-plugin-cleaner@1.0.0(rollup@4.26.0): + dependencies: + rimraf: 2.7.1 + rollup: 4.26.0 + + rollup-plugin-css-only@4.5.2(rollup@4.26.0): + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.26.0) + rollup: 4.26.0 + + rollup-plugin-node-resolve@5.2.0(rollup@4.26.0): + dependencies: + '@types/resolve': 0.0.8 + builtin-modules: 3.3.0 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 4.26.0 + rollup-pluginutils: 2.8.2 + + rollup-plugin-postcss@4.0.2(postcss@8.4.49): + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.4.49) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.4.49 + postcss-load-config: 3.1.4(postcss@8.4.49) + postcss-modules: 4.3.1(postcss@8.4.49) + promise.series: 0.2.0 + resolve: 1.22.8 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + + rollup-plugin-replace@2.2.0: + dependencies: + magic-string: 0.25.9 + rollup-pluginutils: 2.8.2 + + rollup-plugin-svelte@7.2.2(rollup@4.26.0)(svelte@5.1.16): + dependencies: + '@rollup/pluginutils': 4.2.1 + resolve.exports: 2.0.2 + rollup: 4.26.0 + svelte: 5.1.16 + + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 + + rollup@4.26.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.26.0 + '@rollup/rollup-android-arm64': 4.26.0 + '@rollup/rollup-darwin-arm64': 4.26.0 + '@rollup/rollup-darwin-x64': 4.26.0 + '@rollup/rollup-freebsd-arm64': 4.26.0 + '@rollup/rollup-freebsd-x64': 4.26.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 + '@rollup/rollup-linux-arm-musleabihf': 4.26.0 + '@rollup/rollup-linux-arm64-gnu': 4.26.0 + '@rollup/rollup-linux-arm64-musl': 4.26.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 + '@rollup/rollup-linux-riscv64-gnu': 4.26.0 + '@rollup/rollup-linux-s390x-gnu': 4.26.0 + '@rollup/rollup-linux-x64-gnu': 4.26.0 + '@rollup/rollup-linux-x64-musl': 4.26.0 + '@rollup/rollup-win32-arm64-msvc': 4.26.0 + '@rollup/rollup-win32-ia32-msvc': 4.26.0 + '@rollup/rollup-win32-x64-msvc': 4.26.0 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-buffer@5.2.1: {} + + safe-identifier@0.4.2: {} + + safer-buffer@2.1.2: {} + + semiver@1.1.0: {} + + semver@7.6.3: {} + + set-cookie-parser@2.7.1: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sirv-cli@3.0.0: + dependencies: + console-clear: 1.1.1 + get-port: 5.1.1 + kleur: 4.1.5 + local-access: 1.1.0 + sade: 1.8.1 + semiver: 1.1.0 + sirv: 3.0.0 + tinydate: 1.3.0 + + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + slash@5.1.0: {} + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.4: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + sourcemap-codec@1.4.8: {} + + sprintf-js@1.1.3: {} + + stable@0.1.8: {} + + stdin-discarder@0.2.2: {} + + string-hash@1.1.3: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@2.0.1: {} + + stubborn-fs@1.2.5: {} + + style-inject@0.3.0: {} + + stylehacks@5.1.1(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svelte-floating-ui@1.5.9: + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/dom': 1.6.12 + + svelte-highlight@7.7.0: + dependencies: + highlight.js: 11.10.0 + + svelte-preprocess@6.0.3(postcss-load-config@3.1.4(postcss@8.4.49))(postcss@8.4.49)(svelte@5.1.16)(typescript@5.6.3): + dependencies: + svelte: 5.1.16 + optionalDependencies: + postcss: 8.4.49 + postcss-load-config: 3.1.4(postcss@8.4.49) + typescript: 5.6.3 + + svelte-tiny-virtual-list@2.1.2: {} + + svelte2tsx@0.7.24(svelte@5.1.16)(typescript@5.6.3): + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 5.1.16 + typescript: 5.6.3 + + svelte@5.1.16: + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.6 + acorn: 8.14.0 + acorn-typescript: 1.4.13(acorn@8.14.0) + aria-query: 5.3.2 + axobject-query: 4.1.0 + esm-env: 1.1.4 + esrap: 1.2.2 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.12 + zimmerframe: 1.1.2 + + svgo@2.8.0: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + tape-modern@1.1.2: {} + + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + + tinydate@1.3.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + traverse-chain@0.1.0: {} + + tslib@2.8.1: {} + + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@4.26.1: {} + + typescript@5.6.3: {} + + undici-types@6.19.8: {} + + unicorn-magic@0.1.0: {} + + universal-user-agent@6.0.1: {} + + universalify@2.0.1: {} + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.3.0 + configstore: 7.0.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.0.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.6.3 + xdg-basedir: 5.1.0 + + url-join@5.0.0: {} + + util-deprecate@1.0.2: {} + + vite@5.4.11(@types/node@22.9.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.26.0 + optionalDependencies: + '@types/node': 22.9.0 + fsevents: 2.3.3 + + vitefu@1.0.3(vite@5.4.11(@types/node@22.9.0)): + optionalDependencies: + vite: 5.4.11(@types/node@22.9.0) + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + when-exit@2.1.3: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wildcard-match@5.1.3: {} + + windows-release@5.1.1: + dependencies: + execa: 5.1.1 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xdg-basedir@5.1.0: {} + + yaml@1.10.2: {} + + yargs-parser@21.1.1: {} + + yoctocolors-cjs@2.1.2: {} + + zimmerframe@1.1.2: {} diff --git a/src/lib/Select.svelte b/src/lib/Select.svelte index 88f875a3..d7bb7192 100644 --- a/src/lib/Select.svelte +++ b/src/lib/Select.svelte @@ -1,10 +1,8 @@ - +
@@ -689,25 +815,41 @@ bind:this={list} class="svelte-select-list" class:prefloat - on:scroll={handleListScroll} - on:pointerup|preventDefault|stopPropagation - on:mousedown|preventDefault|stopPropagation - role="none"> - {#if $$slots['list-prepend']}{/if} - {#if $$slots.list} - {:else if filteredItems.length > 0} + style={listStyle} + onscroll={handleListScroll} + onpointerup={(ev) => { + ev.preventDefault(); + ev.stopPropagation(); + }} + onmousedown={(ev) => { + ev.preventDefault(); + ev.stopPropagation(); + }} + role="none"> + {#if listPrependSnippet} + {@render listPrependSnippet()} + {/if} + {#if listSnippet} + {@render listSnippet(filteredItems)} + {:else if filteredItems?.length > 0} {#each filteredItems as item, i}
handleHover(i)} - on:focus={() => handleHover(i)} - on:click|stopPropagation={() => handleItemClick({ item, i })} - on:keydown|preventDefault|stopPropagation + onmouseover={() => handleHover(i)} + onfocus={() => handleHover(i)} + onclick={(ev) => { + ev.stopPropagation(); + handleItemClick({ item, i }); + }} + onkeydown={(ev) => { + ev.preventDefault(); + ev.stopPropagation(); + }} class="list-item" tabindex="-1" role="none"> +
- + {#if itemSnippet} + {@render itemSnippet(item, i)} + {:else} {item?.[label]} - + {/if}
{/each} {:else if !hideEmptyState} - + {#if emptySnippet} + {@render emptySnippet()} + {:else if !loading}
No options
-
+ {:else} +
Loading Data
+ {/if} + {/if} + {#if listAppendSnippet} + {@render listAppendSnippet()} {/if} - {#if $$slots['list-append']}{/if}
{/if} @@ -740,7 +890,9 @@
- + {#if prependSnippet} + {@render prependSnippet()} + {/if}
@@ -751,43 +903,60 @@ class="multi-item" class:active={activeValue === i} class:disabled - on:click|preventDefault={() => (multiFullItemClearable ? handleMultiItemClear(i) : {})} - on:keydown|preventDefault|stopPropagation + onclick={(ev) => { + ev.preventDefault(); + return multiFullItemClearable ? handleMultiItemClear(i) : {}; + }} + onkeydown={(ev) => { + ev.preventDefault(); + ev.stopPropagation(); + }} role="none"> - + {#if selectionSnippet} + {@render selectionSnippet(value, i)} + {:else} {item[label]} - + {/if} {#if !disabled && !multiFullItemClearable && ClearIcon}
handleMultiItemClear(i)}> - + onpointerup={(ev) => { + ev.preventDefault(); + ev.stopPropagation(); + handleMultiItemClear(i); + }}> + {#if multiClearIconSnippet} + {@render multiClearIconSnippet()} + {:else} - + {/if}
{/if}
{/each} {:else}
- - {value[label]} - + {#if selectionSnippet} + {@render selectionSnippet(value)} + {:else} + {value?.[label]} + {/if}
{/if} {/if} @@ -796,37 +965,54 @@
{#if loading} {/if} {#if showClear} - {/if} {#if showChevron} {/if}
- - - - + {#if inputHiddenSnippet} + {@render inputHiddenSnippet(value)} + {:else} + + + + {/if} {#if required && (!value || value.length === 0)} - - + {/if} {/if} @@ -1142,7 +1328,7 @@ } .list-group-title { - color: var(--group-title-color, #8f8f8f); + color: var(--group-title-color, #000000); cursor: default; font-size: var(--group-title-font-size, 16px); font-weight: var(--group-title-font-weight, 600); diff --git a/src/lib/filter.js b/src/lib/filter.js index d3bdb86a..891db58e 100644 --- a/src/lib/filter.js +++ b/src/lib/filter.js @@ -1,6 +1,6 @@ export default function filter({ loadOptions, - filterText, + filterText = '', items, multiple, value, @@ -12,9 +12,11 @@ export default function filter({ filterGroupedItems, label, }) { + if (items && loadOptions) return items; if (!items) return []; + if (items && items.length > 0 && typeof items[0] !== 'object') { items = convertStringItemsToObjects(items); } @@ -26,7 +28,6 @@ export default function filter({ return filterSelectedItems ? x[itemId] === item[itemId] : false; }); } - return matchesFilter; }); diff --git a/src/lib/get-items.js b/src/lib/get-items.js index b746516b..19340e70 100644 --- a/src/lib/get-items.js +++ b/src/lib/get-items.js @@ -1,16 +1,15 @@ -export default async function getItems({ dispatch, loadOptions, convertStringItemsToObjects, filterText }) { +export default async function getItems({ loadOptions, convertStringItemsToObjects, filterText, onerror, onloaded }) { let res = await loadOptions(filterText).catch((err) => { - console.warn('svelte-select loadOptions error :>> ', err); - dispatch('error', { type: 'loadOptions', details: err }); + console.warn('svelte-5-select loadOptions error :>> ', err); + onerror(err); }); - if (res && !res.cancelled) { + if (res && !res.cancelled) { if (res) { if (res && res.length > 0 && typeof res[0] !== 'object') { res = convertStringItemsToObjects(res); } - - dispatch('loaded', { items: res }); + onloaded(res); } else { res = []; } diff --git a/src/lib/tailwind.css b/src/lib/tailwind.css index 637b4902..411771bf 100644 --- a/src/lib/tailwind.css +++ b/src/lib/tailwind.css @@ -74,7 +74,7 @@ } .list .list-group-title { - @apply text-gray-400 cursor-default text-sm font-medium h-10 leading-10 px-5 overflow-ellipsis whitespace-nowrap uppercase; + @apply text-slate-800 cursor-default text-sm font-medium h-10 leading-10 px-5 overflow-ellipsis whitespace-nowrap uppercase; } .list .empty { @@ -127,4 +127,4 @@ .list-item { @apply list-none; -} \ No newline at end of file +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index f39b9455..deb97571 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,14 +3,21 @@ import { HighlightSvelte } from 'svelte-highlight'; import highlightStyles from 'svelte-highlight/styles/atom-one-dark'; + /** + * @typedef {Object} Props + * @property {import('svelte').Snippet} [children] + */ + + /** @type {Props} */ + let { children } = $props(); const _props = import.meta.glob('./examples/props/*/*.svelte', { as: 'raw' }); - const _slots = import.meta.glob('./examples/slots/*/*.svelte', { as: 'raw' }); + const _snippets = import.meta.glob('./examples/snippets/*/*.svelte', { as: 'raw' }); const _events = import.meta.glob('./examples/events/*/*.svelte', { as: 'raw' }); const _advanced = import.meta.glob('./examples/advanced/*/*.svelte', { as: 'raw' }); - let source; - let showNav = false; + let source = $state(); + let showNav = $state(false); function buildLinks(obj) { return Object.keys(obj).map((key) => { @@ -45,15 +52,19 @@ showNav = !showNav; } - $: setup = { + let setup = $derived({ props: buildLinks(_props), - slots: buildLinks(_slots), + snippets: buildLinks(_snippets), events: buildLinks(_events), advanced: buildLinks(_advanced), - }; - $: if ($navigating) showNav = false; - $: route = $page.route.id.substring(1); - $: handleExampleCode($page); + }); + $effect(() => { + if ($navigating) showNav = false; + }); + let route = $derived($page.route.id.substring(1)); + $effect(() => { + handleExampleCode($page); + }); @@ -61,7 +72,7 @@
-
\ No newline at end of file + diff --git a/src/routes/examples/advanced/form-action/+page.svelte b/src/routes/examples/advanced/form-action/+page.svelte index 700e5329..924dd6a6 100644 --- a/src/routes/examples/advanced/form-action/+page.svelte +++ b/src/routes/examples/advanced/form-action/+page.svelte @@ -1,11 +1,11 @@ diff --git a/src/routes/examples/advanced/limit-multi-value/+page.svelte b/src/routes/examples/advanced/limit-multi-value/+page.svelte index c9a092ee..babda9f5 100644 --- a/src/routes/examples/advanced/limit-multi-value/+page.svelte +++ b/src/routes/examples/advanced/limit-multi-value/+page.svelte @@ -10,20 +10,21 @@ { value: 'six', label: 'Six' }, ]; - let value; - - $: maxItems = value?.length === 4; - $: items = maxItems ? [] : [..._items]; + let value = $state(); + + let maxItems = $derived(value?.length === 4); + let items = $derived(maxItems ? [] : [..._items]); - \ No newline at end of file + diff --git a/src/routes/examples/advanced/long-item/+page.svelte b/src/routes/examples/advanced/long-item/+page.svelte index eebf672e..c222e779 100644 --- a/src/routes/examples/advanced/long-item/+page.svelte +++ b/src/routes/examples/advanced/long-item/+page.svelte @@ -13,9 +13,11 @@
diff --git a/src/routes/examples/advanced/multi-item-checkboxes/+page.svelte b/src/routes/examples/advanced/multi-item-checkboxes/+page.svelte index b27d40ef..ccd914d1 100644 --- a/src/routes/examples/advanced/multi-item-checkboxes/+page.svelte +++ b/src/routes/examples/advanced/multi-item-checkboxes/+page.svelte @@ -7,12 +7,16 @@ { value: 'three', label: 'Three' }, ]; - let value = []; - let checked = []; - let isChecked = {}; + let value = $state([]); + let checked = $state([]); + let isChecked = $state({}); - $: computeValue(checked); - $: computeIsChecked(checked); + $effect(() => { + computeValue(checked); + }); + $effect(() => { + computeIsChecked(checked); + }); function computeIsChecked() { isChecked = {}; @@ -23,29 +27,33 @@ value = checked.map((c) => items.find((i) => i.value === c)); } - function handleChange(e) { - if (e.type === 'clear' && Array.isArray(e.detail)) checked = []; - else - checked.includes(e.detail.value) - ? (checked = checked.filter((i) => i != e.detail.value)) - : (checked = [...checked, e.detail.value]); + function handleChange(selectedItem) { + if (Array.isArray(selectedItem)) checked = []; + checked.includes(selectedItem.value) + ? (checked = checked.filter((i) => i != selectedItem.value)) + : (checked = [...checked, selectedItem.value]); } + + $inspect('PARENT VALUE', value); + $inspect('PARENT CHECKED', checked); - {item.label} - - + closeListOnChange={false}> + {#snippet itemSnippet(item, index)} +
+ +
+ {/snippet} diff --git a/src/routes/examples/props/clearFilterTextOnBlur/+page.svelte b/src/routes/examples/props/clearFilterTextOnBlur/+page.svelte index ab57fbd8..ff7f1846 100644 --- a/src/routes/examples/props/clearFilterTextOnBlur/+page.svelte +++ b/src/routes/examples/props/clearFilterTextOnBlur/+page.svelte @@ -6,8 +6,8 @@ { value: 'two', label: 'Two' }, { value: 'three', label: 'Three' }, ]; - diff --git a/src/routes/examples/props/container-styles/+page.svelte b/src/routes/examples/props/container-styles/+page.svelte index 02ac7f89..663ca8e7 100644 --- a/src/routes/examples/props/container-styles/+page.svelte +++ b/src/routes/examples/props/container-styles/+page.svelte @@ -8,4 +8,4 @@ ]; - diff --git a/src/routes/examples/props/debounce-wait/+page.svelte b/src/routes/examples/props/debounce-wait/+page.svelte index fc7a2449..78579999 100644 --- a/src/routes/examples/props/debounce-wait/+page.svelte +++ b/src/routes/examples/props/debounce-wait/+page.svelte @@ -7,7 +7,7 @@ { value: 'three', label: 'Three' }, ]; - let loadOptionsCalled = false; + let loadOptionsCalled = $state(false); function loadOptions() { loadOptionsCalled = true; diff --git a/src/routes/examples/props/disabled/+page.svelte b/src/routes/examples/props/disabled/+page.svelte index 5599f4e3..130d22a6 100644 --- a/src/routes/examples/props/disabled/+page.svelte +++ b/src/routes/examples/props/disabled/+page.svelte @@ -7,10 +7,10 @@ { value: 'three', label: 'Three' }, ]; - let disabled = false; + let disabled = $state(false); - + item.group} bind:value /> +

{value?.label}

diff --git a/src/routes/examples/props/item-id/+page.svelte b/src/routes/examples/props/item-id/+page.svelte index 5df77f82..98ed7c12 100644 --- a/src/routes/examples/props/item-id/+page.svelte +++ b/src/routes/examples/props/item-id/+page.svelte @@ -1,15 +1,16 @@ - + +

justValueMultiple: {justValueMultiple}

diff --git a/src/routes/examples/props/label/+page.svelte b/src/routes/examples/props/label/+page.svelte index 0b150399..2fb2470c 100644 --- a/src/routes/examples/props/label/+page.svelte +++ b/src/routes/examples/props/label/+page.svelte @@ -2,14 +2,14 @@ import Select from '$lib/Select.svelte'; let collection = [ - { value: 'one', foo: 'One' }, - { value: 'two', foo: 'Two' }, - { value: 'three', foo: 'Three' }, + { value: 'one', foo: 'label of One with label key foo' }, + { value: 'two', foo: 'label of Two with label key foo' }, + { value: 'three', foo: 'label of Three with label key foo' }, ]; - let value; + let value = $state(); - - + diff --git a/src/routes/examples/props/use-just-value/+page.svelte b/src/routes/examples/props/use-just-value/+page.svelte new file mode 100644 index 00000000..9c4a3156 --- /dev/null +++ b/src/routes/examples/props/use-just-value/+page.svelte @@ -0,0 +1,20 @@ + + + + +

justValueMultiple: {justValueMultiple}

diff --git a/src/routes/examples/props/value/+page.svelte b/src/routes/examples/props/value/+page.svelte index ddf6fc3d..ab79ebfd 100644 --- a/src/routes/examples/props/value/+page.svelte +++ b/src/routes/examples/props/value/+page.svelte @@ -9,11 +9,22 @@ { value: 'three', label: 'Three' }, ]; - let value; + let collectionData = $state(collection[1]); + let collectionMultipleData = $state([collection[0], collection[2]]); + + $inspect('collectionMultipleData', collectionMultipleData); +

Single

+ +

+ {#each collectionMultipleData as item, index} + {item.label}{collectionMultipleData.length - 1 !== index ? ', ' : ''} + {/each} +

diff --git a/src/routes/examples/slots/list/+page.svelte b/src/routes/examples/slots/list/+page.svelte deleted file mode 100644 index 8bd133ab..00000000 --- a/src/routes/examples/slots/list/+page.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/routes/examples/slots/selection/+page.svelte b/src/routes/examples/slots/selection/+page.svelte deleted file mode 100644 index 8928bcc7..00000000 --- a/src/routes/examples/slots/selection/+page.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -
-
- - \ No newline at end of file diff --git a/src/routes/examples/slots/chevron-icon/+page.svelte b/src/routes/examples/snippets/chevron-icon/+page.svelte similarity index 62% rename from src/routes/examples/slots/chevron-icon/+page.svelte rename to src/routes/examples/snippets/chevron-icon/+page.svelte index 7b8d096e..6f2757fb 100644 --- a/src/routes/examples/slots/chevron-icon/+page.svelte +++ b/src/routes/examples/snippets/chevron-icon/+page.svelte @@ -8,7 +8,10 @@ ]; - +

using chevronIconSnippet

+

parameter -

diff --git a/src/routes/examples/slots/clear-icon/+page.svelte b/src/routes/examples/snippets/clear-icon/+page.svelte similarity index 67% rename from src/routes/examples/slots/clear-icon/+page.svelte rename to src/routes/examples/snippets/clear-icon/+page.svelte index eef4481d..63b10fe2 100644 --- a/src/routes/examples/slots/clear-icon/+page.svelte +++ b/src/routes/examples/snippets/clear-icon/+page.svelte @@ -8,8 +8,12 @@ ]; +

using clearIconSnippet

+

parameter -

diff --git a/src/routes/examples/slots/loading-icon/+page.svelte b/src/routes/examples/snippets/loading-icon/+page.svelte similarity index 76% rename from src/routes/examples/slots/loading-icon/+page.svelte rename to src/routes/examples/snippets/loading-icon/+page.svelte index 6fabe137..ac8aa272 100644 --- a/src/routes/examples/slots/loading-icon/+page.svelte +++ b/src/routes/examples/snippets/loading-icon/+page.svelte @@ -8,8 +8,12 @@ ]; +

using loadingIconSnippet

+

parameter -

\ No newline at end of file + diff --git a/src/routes/examples/slots/required/+page.svelte b/src/routes/examples/snippets/required/+page.svelte similarity index 72% rename from src/routes/examples/slots/required/+page.svelte rename to src/routes/examples/snippets/required/+page.svelte index cb42d4a1..822f8717 100644 --- a/src/routes/examples/slots/required/+page.svelte +++ b/src/routes/examples/snippets/required/+page.svelte @@ -8,11 +8,12 @@ ]; - +

using requiredSnippet

+

parameter -

\ No newline at end of file + diff --git a/src/routes/examples/snippets/selection/+page.svelte b/src/routes/examples/snippets/selection/+page.svelte new file mode 100644 index 00000000..667a9a30 --- /dev/null +++ b/src/routes/examples/snippets/selection/+page.svelte @@ -0,0 +1,29 @@ + + +

using selectionSnippet

+

parameter -

+ + +
+ + diff --git a/test/src/ChevronSlotTest.svelte b/test/src/ChevronSlotTest.svelte index 8863d3a9..cff22788 100644 --- a/test/src/ChevronSlotTest.svelte +++ b/test/src/ChevronSlotTest.svelte @@ -1,17 +1,17 @@ diff --git a/test/src/ClearIconSlotTest.svelte b/test/src/ClearIconSlotTest.svelte index 23168341..bbbd1421 100644 --- a/test/src/ClearIconSlotTest.svelte +++ b/test/src/ClearIconSlotTest.svelte @@ -1,12 +1,14 @@ diff --git a/test/src/CustomItem.svelte b/test/src/CustomItem.svelte index e4104975..fafa18a5 100644 --- a/test/src/CustomItem.svelte +++ b/test/src/CustomItem.svelte @@ -1,12 +1,18 @@
diff --git a/test/src/GroupHeaderNotSelectable.svelte b/test/src/GroupHeaderNotSelectable.svelte index d760f496..53ebda72 100644 --- a/test/src/GroupHeaderNotSelectable.svelte +++ b/test/src/GroupHeaderNotSelectable.svelte @@ -1,7 +1,13 @@ i.group} bind:hoverItemIndex /> diff --git a/test/src/InputHiddenSlotTest.svelte b/test/src/InputHiddenSlotTest.svelte index 153ac102..b9333af8 100644 --- a/test/src/InputHiddenSlotTest.svelte +++ b/test/src/InputHiddenSlotTest.svelte @@ -1,12 +1,12 @@ - + {/snippet} diff --git a/test/src/ItemHeightTest.svelte b/test/src/ItemHeightTest.svelte index eb6ceb8b..70e1bf5e 100644 --- a/test/src/ItemHeightTest.svelte +++ b/test/src/ItemHeightTest.svelte @@ -1,7 +1,7 @@ - + {#snippet itemSnippet({ item })} * {item.label} * - + {/snippet} diff --git a/test/src/ListSlotTest.svelte b/test/src/ListSlotTest.svelte index 69ea2ba4..6c19f7c6 100644 --- a/test/src/ListSlotTest.svelte +++ b/test/src/ListSlotTest.svelte @@ -1,14 +1,14 @@ diff --git a/test/src/LoadOptionsGroup.svelte b/test/src/LoadOptionsGroup.svelte index a7ba8e90..5a69c0d6 100644 --- a/test/src/LoadOptionsGroup.svelte +++ b/test/src/LoadOptionsGroup.svelte @@ -9,8 +9,7 @@ { value: 'ice-cream', label: 'Ice Cream', group: 'Sweet' }, ]; - export let filterText; - export let value = undefined; + let { filterText = $bindable(), value = undefined } = $props(); async function loadOptions() { return items.filter((i) => i.label.toLowerCase().includes(filterText.toLowerCase())); diff --git a/test/src/MultiItemColor.svelte b/test/src/MultiItemColor.svelte index aa694390..c254edf7 100644 --- a/test/src/MultiItemColor.svelte +++ b/test/src/MultiItemColor.svelte @@ -1,7 +1,7 @@ - + {#snippet listPrependSnippet()} prepend - + {/snippet} - + {#snippet listAppendSnippet()} append - + {/snippet} diff --git a/test/src/PrependSlotTest.svelte b/test/src/PrependSlotTest.svelte index 5708792f..df2c6b4f 100644 --- a/test/src/PrependSlotTest.svelte +++ b/test/src/PrependSlotTest.svelte @@ -1,12 +1,12 @@ diff --git a/test/src/Select/ParentContainer.svelte b/test/src/Select/ParentContainer.svelte index b6883fcb..703a1ec7 100644 --- a/test/src/Select/ParentContainer.svelte +++ b/test/src/Select/ParentContainer.svelte @@ -1,8 +1,7 @@
diff --git a/test/src/SelectionSlotMultipleTest.svelte b/test/src/SelectionSlotMultipleTest.svelte index 56695ed4..def5e7c5 100644 --- a/test/src/SelectionSlotMultipleTest.svelte +++ b/test/src/SelectionSlotMultipleTest.svelte @@ -1,12 +1,12 @@ diff --git a/test/src/SelectionSlotTest.svelte b/test/src/SelectionSlotTest.svelte index 04036277..0b382d76 100644 --- a/test/src/SelectionSlotTest.svelte +++ b/test/src/SelectionSlotTest.svelte @@ -1,12 +1,12 @@ diff --git a/test/src/tests.js b/test/src/tests.js index 1e85cb4d..6fda1f65 100644 --- a/test/src/tests.js +++ b/test/src/tests.js @@ -15,6 +15,7 @@ import MultiItemColor from './MultiItemColor.svelte'; import GroupHeaderNotSelectable from './GroupHeaderNotSelectable.svelte'; import HoverItemIndexTest from './HoverItemIndexTest.svelte'; import LoadOptionsGroup from './LoadOptionsGroup.svelte'; +import { mount, unmount } from "svelte"; function querySelectorClick(selector) { if (selector === '.svelte-select') { @@ -149,71 +150,71 @@ assert.arrayEqual = (a, b) => { }; test('when focused true container adds focused class', async (t) => { - const select = new Select({ - target, - props: { - focused: true - } - }); + const select = mount(Select, { + target, + props: { + focused: true + } + }); t.ok(target.querySelector('.focused')); - select.$destroy(); + unmount(select); }); test('when focused changes to true input should focus', async (t) => { - const select = new Select({ - target, - }); + const select = mount(Select, { + target, + }); select.$set({focused: true}); const hasFocused = target.querySelector('.svelte-select input'); t.ok(hasFocused); - select.$destroy(); + unmount(select); }); test('default empty list', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true + } + }); t.ok(document.querySelector('.empty')); - select.$destroy(); + unmount(select); }); test('default list with five items', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithIndex - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithIndex + } + }); t.ok(document.getElementsByClassName('list-item').length); - select.$destroy(); + unmount(select); }); test('should highlight active list item', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithIndex, - value: {value: 'pizza', label: 'Pizza', index: 1} - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithIndex, + value: {value: 'pizza', label: 'Pizza', index: 1} + } + }); t.ok(document.querySelector('.list-item .active').innerHTML === 'Pizza'); - select.$destroy(); + unmount(select); }); test('list scrolls to active item', async (t) => { @@ -223,14 +224,14 @@ test('list scrolls to active item', async (t) => { {value: 'sunday-roast', label: 'Sunday Roast', index: 7}, ]; - const select = new Select({ - target, - props: { - - items: itemsWithIndex.concat(extras), - value: {value: 'sunday-roast', label: 'Sunday Roast'}, - } - }); + const select = mount(Select, { + target, + props: { + + items: itemsWithIndex.concat(extras), + value: {value: 'sunday-roast', label: 'Sunday Roast'}, + } + }); select.listOpen = true; let offsetBounding; @@ -241,7 +242,7 @@ test('list scrolls to active item', async (t) => { } t.equal(offsetBounding, 0); - select.$destroy(); + unmount(select); }); test('list scrolls to hovered item when navigating with keys', async (t) => { @@ -251,13 +252,13 @@ test('list scrolls to hovered item when navigating with keys', async (t) => { {value: 'sunday-roast', label: 'Sunday Roast', index: 7}, ]; - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithIndex.concat(extras) - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithIndex.concat(extras) + } + }); const container = document.querySelector('.svelte-select-list'); @@ -279,32 +280,32 @@ test('list scrolls to hovered item when navigating with keys', async (t) => { t.ok(selectedItemsAreWithinBounds); - select.$destroy(); + unmount(select); }); test('hover item updates on keyUp or keyDown', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: items - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: items + } + }); await handleKeyboard('ArrowDown', document.querySelector('.svelte-select-list')); const focusedElemBounding = document.querySelector('.list-item .hover'); t.equal(focusedElemBounding.innerHTML.trim(), `Pizza`); - select.$destroy(); + unmount(select); }); test('on enter active item fires a select event', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithIndex - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithIndex + } + }); let value = undefined; @@ -317,17 +318,17 @@ test('on enter active item fires a select event', async (t) => { window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); await wait(0); t.equal(value, JSON.stringify({value: 'cake', label: 'Cake', index: 2})); - select.$destroy(); + unmount(select); }); test('on tab active item fires a select event', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithIndex - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithIndex + } + }); let value = undefined; select.$on('change', event => { @@ -339,18 +340,18 @@ test('on tab active item fires a select event', async (t) => { window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Tab'})); await wait(0); t.equal(value, JSON.stringify({value: 'cake', label: 'Cake', index: 2})); - select.$destroy(); + unmount(select); }); test('on selected of current active item does not fire a select event', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithIndex, - value: { value: 'chocolate', label: 'Chocolate', index: 0 } - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithIndex, + value: { value: 'chocolate', label: 'Chocolate', index: 0 } + } + }); let itemSelectedFired = false; @@ -361,96 +362,96 @@ test('on selected of current active item does not fire a select event', async (t window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.equal(itemSelectedFired, false); - select.$destroy(); + unmount(select); }); test('selected item\'s default view', async (t) => { - const select = new Select({ - target, - props: { - value: {value: 'chips', label: 'Chips'}, - } - }); + const select = mount(Select, { + target, + props: { + value: {value: 'chips', label: 'Chips'}, + } + }); t.ok(target.querySelector('.selected-item').innerHTML === 'Chips'); - select.$destroy(); + unmount(select); }); test('select view updates with value updates', async (t) => { - const select = new Select({ - target - }); + const select = mount(Select, { + target + }); await handleSet(select, {value: {value: 'chips', label: 'Chips'}}); t.ok(target.querySelector('.selected-item').innerHTML === 'Chips'); - select.$destroy(); + unmount(select); }); test('clear wipes value and updates view', async (t) => { - const select = new Select({ - target, - props: { - value: {value: 'chips', label: 'Chips'}, - } - }); + const select = mount(Select, { + target, + props: { + value: {value: 'chips', label: 'Chips'}, + } + }); await wait(0); await handleSet(select, {value: undefined}); t.ok(!target.querySelector('.selected-item')); - select.$destroy(); + unmount(select); }); test('clicking on Select opens list', async (t) => { - const select = new Select({ - target, - props: { - } - }); + const select = mount(Select, { + target, + props: { + } + }); await querySelectorClick('.svelte-select'); const listContainer = document.querySelector('.svelte-select-list'); t.ok(listContainer); - select.$destroy(); + unmount(select); }); test('Select opens list populated with items', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); await querySelectorClick('.svelte-select'); t.ok(document.querySelector('.list-item')); - select.$destroy(); + unmount(select); }); test('list starts with first item in hover state', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); await querySelectorClick('.svelte-select'); t.ok(document.querySelector('.list-item .hover').innerHTML === 'Chocolate'); - select.$destroy(); + unmount(select); }); test('select item from list', async (t) => { - const select = new Select({ - target, - props: { - items, - } - }); + const select = mount(Select, { + target, + props: { + items, + } + }); await querySelectorClick('.svelte-select'); await handleKeyboard('ArrowDown'); @@ -458,18 +459,18 @@ test('select item from list', async (t) => { await handleKeyboard('Enter'); t.ok(document.querySelector('.selected-item').innerHTML === 'Cake'); - select.$destroy(); + unmount(select); }); test('when placement is set to top list should be above the input', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - floatingConfig: { placement: 'top-start' } - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + floatingConfig: { placement: 'top-start' } + } + }); target.style.margin = '300px 0 0 0'; await wait(0); @@ -477,18 +478,18 @@ test('when placement is set to top list should be above the input', async (t) => const distanceOfInputTopFromViewportTop = document.querySelector('.svelte-select').getBoundingClientRect().top; t.ok(distanceOfListBottomFromViewportTop <= distanceOfInputTopFromViewportTop); target.style.margin = '0'; - select.$destroy(); + unmount(select); }); test('when placement is set to bottom the list should be below the input', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - floatingConfig: { placement: 'bottom-start' } - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + floatingConfig: { placement: 'bottom-start' } + } + }); await wait(0); const distanceOfListTopFromViewportTop = document.querySelector('.svelte-select-list').getBoundingClientRect().top; @@ -496,39 +497,39 @@ test('when placement is set to bottom the list should be below the input', async t.ok(distanceOfListTopFromViewportTop >= distanceOfInputBottomFromViewportTop); - select.$destroy(); + unmount(select); }); test('blur should close list and remove focus from select', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); select.$set({focused: true}); div.click(); div.remove(); t.ok(!document.querySelector('.svelte-select-list')); t.ok(document.querySelector('.svelte-select input') !== document.activeElement); - select.$destroy(); + unmount(select); }); test('blur should close list and remove focus from select but preserve filterText value', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items, - clearFilterTextOnBlur: false - } - }); + const select = mount(Select, { + target, + props: { + items, + clearFilterTextOnBlur: false + } + }); const selectInput = document.querySelector('.svelte-select input'); @@ -541,16 +542,16 @@ test('blur should close list and remove focus from select but preserve filterTex await wait(0); t.ok(selectInput.value === 'potato'); - select.$destroy(); + unmount(select); }); test('blur should close list and remove focus from select and clear filterText value', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); const selectInput = document.querySelector('.svelte-select input'); @@ -560,16 +561,16 @@ test('blur should close list and remove focus from select and clear filterText v selectInput.blur(); await wait(0); t.ok(selectInput.value === ''); - select.$destroy(); + unmount(select); }); test('selecting item should close list but keep focus on select', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select') await wait(0); @@ -577,16 +578,16 @@ test('selecting item should close list but keep focus on select', async (t) => { await wait(0); t.ok(!document.querySelector('.svelte-select-list')); t.ok(document.querySelector('.svelte-select.focused')); - select.$destroy(); + unmount(select); }); test('clicking Select with selected item should open list with item listed as active', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); await wait(0); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -596,30 +597,30 @@ test('clicking Select with selected item should open list with item listed as ac querySelectorClick('.svelte-select'); await wait(0); t.ok(document.querySelector('.list-item .active').innerHTML === 'Cake'); - select.$destroy(); + unmount(select); }); test('focus on Select input updates focus state', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); document.querySelector('.svelte-select input').focus(); t.ok(select.focused); - select.$destroy(); + unmount(select); }); test('key up and down when Select focused opens list', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); const input = document.querySelector('.svelte-select input'); input.focus(); @@ -629,17 +630,17 @@ test('key up and down when Select focused opens list', async (t) => { await wait(0); t.ok(document.querySelector('.svelte-select-list')); - select.$destroy(); + unmount(select); }); test('list should keep width of parent Select', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: true - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: true + } + }); const input = document.querySelector('.svelte-select input'); input.focus(); @@ -649,19 +650,19 @@ test('list should keep width of parent Select', async (t) => { const listContainer = document.querySelector('.svelte-select-list'); t.equal(selectContainer.offsetWidth, listContainer.offsetWidth); - select.$destroy(); + unmount(select); }); test('Placeholder text should reappear when list is closed', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); div.click(); @@ -669,16 +670,16 @@ test('Placeholder text should reappear when list is closed', async (t) => { const selectInput = document.querySelector('.svelte-select input'); t.equal(selectInput.attributes.placeholder.value, 'Please select'); - select.$destroy(); + unmount(select); }); test('typing in Select filter will hide selected Item', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -687,16 +688,16 @@ test('typing in Select filter will hide selected Item', async (t) => { select.$set({filterText: 'potato'}); t.ok(!document.querySelector('.svelte-select .value')); - select.$destroy(); + unmount(select); }); test('clearing selected item closes list if open', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); await wait(0); @@ -708,19 +709,19 @@ test('clearing selected item closes list if open', async (t) => { await wait(0); t.ok(!document.querySelector('.svelte-select-list')); - select.$destroy(); + unmount(select); }); test('closing list clears Select filter text', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -730,19 +731,19 @@ test('closing list clears Select filter text', async (t) => { const selectInput = document.querySelector('.svelte-select input'); t.equal(selectInput.attributes.placeholder.value, 'Please select'); - select.$destroy(); + unmount(select); }); test('closing list clears Select filter text', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -752,19 +753,19 @@ test('closing list clears Select filter text', async (t) => { const selectInput = document.querySelector('.svelte-select input'); t.equal(selectInput.attributes.placeholder.value, 'Please select'); - select.$destroy(); + unmount(select); }); test('closing list item clears Select filter text', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -774,16 +775,16 @@ test('closing list item clears Select filter text', async (t) => { const selectInput = document.querySelector('.svelte-select input'); t.equal(selectInput.attributes.placeholder.value, 'Please select'); - select.$destroy(); + unmount(select); }); test('typing while Select is focused populates Select filter text', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); select.$set({focused: true}); document.querySelector('.svelte-select input').blur(); @@ -793,210 +794,210 @@ test('typing while Select is focused populates Select filter text', async (t) => window.dispatchEvent(new KeyboardEvent('keydown', {'key': 't'})); // KeyboardEvent not firing in svelte - not sure why, manual test seems to work - select.$destroy(); + unmount(select); }); test('Select input placeholder wipes while item is selected', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {name: 'Item #2'}, - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {name: 'Item #2'}, + } + }); const selectInput = document.querySelector('.svelte-select input'); t.equal(selectInput.attributes.placeholder.value, ''); - select.$destroy(); + unmount(select); }); test('Select listOpen state controls list', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true + } + }); await wait(0); t.ok(document.querySelector('.svelte-select-list')); await handleSet(select, {listOpen: false}) t.ok(!document.querySelector('.svelte-select-list')); - select.$destroy(); + unmount(select); }); test('clicking Select toggles list open state', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); t.ok(!document.querySelector('.svelte-select-list')); await querySelectorClick('.svelte-select'); t.ok(document.querySelector('.svelte-select-list')); await querySelectorClick('.svelte-select'); t.ok(!document.querySelector('.svelte-select-list')); - select.$destroy(); + unmount(select); }); test('Select filter text filters list', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); t.ok(select.getFilteredItems().length === 5); select.filterText = 'Ice'; t.ok(select.getFilteredItems().length === 1); - select.$destroy(); + unmount(select); }); test('Select filter text filters list with itemFilter', async (t) => { - const select = new Select({ - target, - props: { - items, - itemFilter: (label, filterText, option) => label === 'Ice Cream' - } - }); + const select = mount(Select, { + target, + props: { + items, + itemFilter: (label, filterText, option) => label === 'Ice Cream' + } + }); t.ok(select.getFilteredItems().length === 1); select.filterText = 'cream ice'; t.ok(select.getFilteredItems().length === 1); - select.$destroy(); + unmount(select); }); test('Typing in the Select filter opens list', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: true - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: true + } + }); await handleSet(select, {filterText: '5'}) t.ok(document.querySelector('.svelte-select-list')); - select.$destroy(); + unmount(select); }); test('While filtering, the first item in list should receive hover class', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: true - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: true + } + }); await wait(0); await handleSet(select, {filterText: 'I'}) t.ok(document.querySelector('.list-item .hover')); - select.$destroy(); + unmount(select); }); test('Select container styles can be overridden', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {name: 'Item #2'}, - containerStyles: `padding-left: 40px;` - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {name: 'Item #2'}, + containerStyles: `padding-left: 40px;` + } + }); t.equal(document.querySelector('.svelte-select').style.cssText, `padding-left: 40px;`); - select.$destroy(); + unmount(select); }); test('Select can be disabled', async (t) => { - const select = new Select({ - target, - props: { - items, - disabled: true, - } - }); + const select = mount(Select, { + target, + props: { + items, + disabled: true, + } + }); t.ok(document.querySelector('.svelte-select.disabled')); - select.$destroy(); + unmount(select); }); test('Select list closes when you click enter', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: true - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: true + } + }); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); - select.$destroy(); + unmount(select); }); test('tabbing should move between tabIndexes and others Selects', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: false - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: false + } + }); - const other = new Select({ - target: extraTarget, - props: { - items, - focused: false - } - }); + const other = mount(Select, { + target: extraTarget, + props: { + items, + focused: false + } + }); // window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Tab'})); // TAB not working from Puppeteer - not sure why. - select.$destroy(); - other.$destroy(); + unmount(select); + unmount(other); }); test(`shouldn't be able to clear a disabled Select`, async (t) => { - const select = new Select({ - target, - props: { - items, - disabled: true, - value: {name: 'Item #4'} - } - }); + const select = mount(Select, { + target, + props: { + items, + disabled: true, + value: {name: 'Item #4'} + } + }); t.ok(!document.querySelector('.clear-select')); - select.$destroy(); + unmount(select); }); test(`two way binding between Select and it's parent component`, async (t) => { - const parent = new ParentContainer({ - target, - props: { - items, - value: {value: 'chips', label: 'Chips'}, - } - }); + const parent = mount(ParentContainer, { + target, + props: { + items, + value: {value: 'chips', label: 'Chips'}, + } + }); t.equal(document.querySelector('.selected-item').innerHTML, document.querySelector('.result').innerHTML); @@ -1011,7 +1012,7 @@ test(`two way binding between Select and it's parent component`, async (t) => { window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.equal(document.querySelector('.selected-item').innerHTML, document.querySelector('.result').innerHTML); - parent.$destroy(); + unmount(parent); }); test(`show ellipsis for overflowing text in a list item`, async (t) => { @@ -1020,22 +1021,22 @@ test(`show ellipsis for overflowing text in a list item`, async (t) => { target.style.width = '300px'; target.style.position = 'relative'; - const select = new Select({ - target, - props: { - listOpen: true, - items: [ - { - index: 0, - label: longest - }, - { - index: 1, - label: 'Not so loooooonnnng name' - } - ] - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: [ + { + index: 0, + label: longest + }, + { + index: 1, + label: 'Not so loooooonnnng name' + } + ] + } + }); await wait(0); const first = document.querySelector('.list-item:first-child .item'); @@ -1044,7 +1045,7 @@ test(`show ellipsis for overflowing text in a list item`, async (t) => { t.ok(first.scrollWidth > first.clientWidth); t.ok(last.scrollWidth === last.clientWidth); - select.$destroy(); + unmount(select); target.style.width = ''; }); @@ -1052,45 +1053,45 @@ test('focusing in an external textarea should close and blur it', async (t) => { const textarea = document.createElement('textarea'); document.body.appendChild(textarea); - const select = new Select({ - target, - props: { - listOpen: true, - items, - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items, + } + }); textarea.focus(); await wait(0); t.ok(!select.listOpen); textarea.remove(); - select.$destroy(); + unmount(select); }); test('if only one item in list it should have hover state', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: [{ - index: 0, - name: 'test one' - }] - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: [{ + index: 0, + name: 'test one' + }] + } + }); t.ok(document.querySelector('.list-item .item').classList.contains('hover')); - select.$destroy(); + unmount(select); }); test(`hovered item in a filtered list shows hover state`, async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); select.$set({filterText: 'i'}); @@ -1099,32 +1100,32 @@ test(`hovered item in a filtered list shows hover state`, async (t) => { t.ok(true); - select.$destroy(); + unmount(select); }); test(`data shouldn't be stripped from item - currently only saves name`, async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); await querySelectorClick('.svelte-select'); await querySelectorClick('.list-item'); t.equal(JSON.stringify(select.value), JSON.stringify({value: 'chocolate', label: 'Chocolate'})); - select.$destroy(); + unmount(select); }); test('should not be able to clear when clearing is disabled', async (t) => { - const select = new Select({ - target, - props: { - items, - clearable: false - } - }); + const select = mount(Select, { + target, + props: { + items, + clearable: false + } + }); querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -1132,22 +1133,22 @@ test('should not be able to clear when clearing is disabled', async (t) => { t.ok(!document.querySelector('.clear-select')); - select.$destroy(); + unmount(select); }); test('should not be able to search when searching is disabled', async (t) => { - const select = new Select({ - target, - props: { - items, - searchable: false - } - }); + const select = mount(Select, { + target, + props: { + items, + searchable: false + } + }); const selectInput = document.querySelector('.svelte-select input'); t.ok(selectInput.attributes.readonly); - select.$destroy(); + unmount(select); }); test('placeholder should be prop value', async (t) => { @@ -1156,60 +1157,60 @@ test('placeholder should be prop value', async (t) => { const placeholder = 'Test placeholder value'; - const select = new Select({ - target, - props: { - items: itemsWithGroup, - placeholder - } - }); + const select = mount(Select, { + target, + props: { + items: itemsWithGroup, + placeholder + } + }); const selectInput = document.querySelector('.svelte-select input'); t.equal(selectInput.attributes.placeholder.value, placeholder); - select.$destroy(); + unmount(select); }); test('should display loading icon when loading is enabled', async (t) => { const div = document.createElement('div'); document.body.appendChild(div); - const select = new Select({ - target, - props: { - items, - loading: true - } - }); + const select = mount(Select, { + target, + props: { + items, + loading: true + } + }); t.ok(document.querySelector('.loading')); - select.$destroy(); + unmount(select); }); test('inputStyles prop applies css to select input', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'pizza', label: 'Pizza'}, - inputStyles: `padding-left: 40px;` - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'pizza', label: 'Pizza'}, + inputStyles: `padding-left: 40px;` + } + }); t.equal(document.querySelector('.svelte-select input').style.cssText, `padding-left: 40px;`); - select.$destroy(); + unmount(select); }); test('items should be grouped by groupBy expression', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroup, - groupBy - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroup, + groupBy + } + }); function groupBy(item) { return item.group; @@ -1219,36 +1220,36 @@ test('items should be grouped by groupBy expression', async (t) => { t.ok(title === 'Sweet'); let item = document.querySelector('.list-item .item.group-item').innerHTML; t.ok(item === 'Chocolate'); - select.$destroy(); + unmount(select); }); test('clicking group header should not make a selected', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroup, - groupBy: (item) => item.group - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroup, + groupBy: (item) => item.group + } + }); await wait(0); await querySelectorClick('.list-group-title'); t.ok(!select.value); - select.$destroy(); + unmount(select); }); test('clicking an item with selectable: false should not make a selected', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithSelectable - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithSelectable + } + }); await wait(0); await querySelectorClick('.list-item:nth-child(1)'); @@ -1257,69 +1258,69 @@ test('clicking an item with selectable: false should not make a selected', async await querySelectorClick('.list-item:nth-child(4)') t.ok(!select.value); - select.$destroy(); + unmount(select); }); test('clicking an item with selectable not specified should make a selected', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithSelectable - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithSelectable + } + }); await wait(0); document.querySelector('.list-item:nth-child(2)').click(); t.ok(select.value && select.value.value == 'selectableDefault'); - select.$destroy(); + unmount(select); }); test('clicking an item with selectable: true should make a selected', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithSelectable - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithSelectable + } + }); await wait(0); await querySelectorClick('.list-item:nth-child(3)') t.ok(select.value && select.value.value == 'selectableTrue'); - select.$destroy(); + unmount(select); }); test('when groupBy, no active item and keydown enter is fired then list should close without selecting item', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroup, - groupBy: (item) => item.group - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroup, + groupBy: (item) => item.group + } + }); await wait(0); await querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.ok(!select.value); - select.$destroy(); + unmount(select); }); test('when groupHeaderSelectable clicking group header should select createGroupHeaderItem(groupValue,item)', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroup, - groupHeaderSelectable: true, - groupBy, - createGroupHeaderItem - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroup, + groupHeaderSelectable: true, + groupBy, + createGroupHeaderItem + } + }); function groupBy(item) { return item.group; @@ -1343,91 +1344,91 @@ test('when groupHeaderSelectable clicking group header should select createGroup t.ok(select.value.groupHeader); t.equal(select.value.label, createGroupHeaderItem(groupBy(groupItem), groupItem).label); - select.$destroy(); + unmount(select); }); test('groups should be sorted by expression', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroup, - groupBy: (item) => item.group, - groupFilter: (groups) => groups.reverse() - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroup, + groupBy: (item) => item.group, + groupFilter: (groups) => groups.reverse() + } + }); await wait(); t.ok(document.querySelector('.list-group-title').textContent.trim() === 'Savory'); t.ok(document.querySelector('.list-item .group-item').textContent.trim() === 'Pizza'); - select.$destroy(); + unmount(select); }); test('when multiple is true show each item in value', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [ - {value: 'pizza', label: 'Pizza'}, - {value: 'chips', label: 'Chips'}, - ], - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [ + {value: 'pizza', label: 'Pizza'}, + {value: 'chips', label: 'Chips'}, + ], + } + }); const all = target.querySelectorAll('.multi-item span'); t.ok(all[0].innerHTML.startsWith('Pizza')); t.ok(all[1].innerHTML.startsWith('Chips')); - select.$destroy(); + unmount(select); }); test('when multiple is true and value is undefined show placeholder text', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: undefined - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: undefined + } + }); t.ok(!target.querySelector('.multi-item span')); - select.$destroy(); + unmount(select); }); test('when multiple is true clicking item in list will populate value', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: undefined - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: undefined + } + }); await querySelectorClick('.svelte-select'); await querySelectorClick('.list-item'); t.equal(JSON.stringify(select.value), JSON.stringify([{value: 'chocolate', label: 'Chocolate'}])); - select.$destroy(); + unmount(select); }); test('when multiple is true items in value will not appear in list', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}] + } + }); await wait(0); @@ -1438,19 +1439,19 @@ test('when multiple is true items in value will not appear in list', async (t) = {value: 'ice-cream', label: 'Ice Cream'} ])); - select.$destroy(); + unmount(select); }); test('when multiple is true both value and filterText filters list', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}] - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}] + } + }); select.filterText = 'Pizza', @@ -1458,101 +1459,101 @@ test('when multiple is true both value and filterText filters list', async (t) = {value: 'pizza', label: 'Pizza'} ])); - select.$destroy(); + unmount(select); }); test('when multiple is true clicking X on a selected item will remove it from value', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}] + } + }); const event = new PointerEvent('pointerup') document.querySelector('.multi-item-clear').dispatchEvent(event); t.equal(JSON.stringify(select.value), JSON.stringify([{value: 'pizza', label: 'Pizza'}])); - select.$destroy(); + unmount(select); }); test('when multiple is true and all selected items have been removed then placeholder should show and clear all should hide', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}] + } + }); document.querySelector('.multi-item-clear').click(); - select.$destroy(); + unmount(select); }); test('when multiple is true and items are selected then clear all should wipe all selected items', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}] + } + }); document.querySelector('.clear-select').click(); t.equal(select.value, undefined); - select.$destroy(); + unmount(select); }); test('when multiple and groupBy is active then items should be selectable', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items: itemsWithGroup, - groupBy: (item) => item.group - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: itemsWithGroup, + groupBy: (item) => item.group + } + }); target.style.maxWidth = '400px'; await querySelectorClick('.svelte-select'); await querySelectorClick('.list-item .group-item'); t.equal(JSON.stringify(select.value), JSON.stringify([{"groupItem":true,"value":"chocolate","label":"Chocolate","group":"Sweet"}])); - select.$destroy(); + unmount(select); }); test('when multiple and selected items reach edge of container then Select height should increase and selected items should wrap to new line', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items + } + }); target.style.maxWidth = '200px'; t.ok(document.querySelector('.svelte-select').scrollHeight === 40); await handleSet(select, {value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}]}); t.ok(document.querySelector('.svelte-select').scrollHeight > 42); - select.$destroy(); + unmount(select); }); test('when multiple and value is populated then navigating with LeftArrow updates activeValue', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}, {value: 'chips', label: 'Chips'},], - focused: true - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}, {value: 'chips', label: 'Chips'},], + focused: true + } + }); target.style.maxWidth = '100%'; @@ -1562,19 +1563,19 @@ test('when multiple and value is populated then navigating with LeftArrow update t.ok(select.$capture_state().activeValue === 1); - select.$destroy(); + unmount(select); }); test('when multiple and value is populated then navigating with ArrowRight updates activeValue', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}, {value: 'chips', label: 'Chips'},], - focused: true - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chocolate', label: 'Chocolate'}, {value: 'pizza', label: 'Pizza'}, {value: 'chips', label: 'Chips'},], + focused: true + } + }); const input = document.querySelector('.svelte-select input'); input.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowLeft'})); @@ -1583,85 +1584,85 @@ test('when multiple and value is populated then navigating with ArrowRight updat input.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowRight'})); t.ok(select.$capture_state().activeValue === 1); - select.$destroy(); + unmount(select); }); test('when multiple and value has items and list opens then first item in list should be active', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + } + }); await querySelectorClick('.svelte-select'); await querySelectorClick('.list-item'); await wait(0); await handleKeyboard('ArrowDown'); t.ok(document.querySelector('.list-item .hover')); - select.$destroy(); + unmount(select); }); test('when multiple, disabled, and value has items then items should be locked', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - disabled: true, - value: [{value: 'chocolate', label: 'Chocolate'}], - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + disabled: true, + value: [{value: 'chocolate', label: 'Chocolate'}], + } + }); t.ok(document.querySelector('.multi-item.disabled')); - select.$destroy(); + unmount(select); }); test('when multiple is true show each item in value if simple arrays are used', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items: ['pizza', 'chips', 'chocolate'], - value: ['pizza', 'chocolate'] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: ['pizza', 'chips', 'chocolate'], + value: ['pizza', 'chocolate'] + } + }); const all = target.querySelectorAll('.multi-item span'); t.ok(all[0].innerHTML.startsWith('pizza')); t.ok(all[1].innerHTML.startsWith('chocolate')); - select.$destroy(); + unmount(select); }); test('when label is set you can pass a string and see the right label', async (t) => { - const select = new Select({ - target, - props: { - items: [{id: 0, name: 'ONE'}, {id: 1, name: 'TWO'}], - value: {id: 0, name: 'ONE'}, - label: 'name', - } - }); + const select = mount(Select, { + target, + props: { + items: [{id: 0, name: 'ONE'}, {id: 1, name: 'TWO'}], + value: {id: 0, name: 'ONE'}, + label: 'name', + } + }); t.ok(document.querySelector('.selected-item').innerHTML === 'ONE'); - select.$destroy(); + unmount(select); }); test('when getValue method is set should use that key to update value', async (t) => { - const select = new Select({ - target, - props: { - items: [{id: 0, label: 'ONE'}, {id: 1, label: 'TWO'}], - value: {id: 0, label: 'ONE'}, - itemId: 'id' - } - }); + const select = mount(Select, { + target, + props: { + items: [{id: 0, label: 'ONE'}, {id: 1, label: 'TWO'}], + value: {id: 0, label: 'ONE'}, + itemId: 'id' + } + }); t.ok(select.value.id === 0); await querySelectorClick('.svelte-select'); @@ -1669,18 +1670,18 @@ test('when getValue method is set should use that key to update value', async (t window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.ok(select.value.id === 1); - select.$destroy(); + unmount(select); }); test('when loadOptions method is supplied and filterText has length then items should populate via promise resolve', async (t) => { - const select = new Select({ - target, - props: { - label: 'name', - loadOptions: getPosts, - itemId: 'id', - } - }); + const select = mount(Select, { + target, + props: { + label: 'name', + loadOptions: getPosts, + itemId: 'id', + } + }); await wait(0); select.$set({filterText: 'Juniper'}); @@ -1688,64 +1689,64 @@ test('when loadOptions method is supplied and filterText has length then items s window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); - select.$destroy(); + unmount(select); }); test('when label method is supplied and value are no items then display result of label', async (t) => { - const select = new Select({ - target, - props: { - label: 'notLabel', - value: {notLabel: 'This is not a label', value: 'not important'}, - } - }); + const select = mount(Select, { + target, + props: { + label: 'notLabel', + value: {notLabel: 'This is not a label', value: 'not important'}, + } + }); t.ok(document.querySelector('.selected-item').innerHTML === 'This is not a label'); - select.$destroy(); + unmount(select); }); test('when label and items is supplied then display result of label for each option', async (t) => { - const select = new Select({ - target, - props: { - label: 'notLabel', - listOpen: true, - items: [{notLabel: 'This is not a label', value: 'not important #1'}, {notLabel: 'This is not also not a label', value: 'not important #2'}], - } - }); + const select = mount(Select, { + target, + props: { + label: 'notLabel', + listOpen: true, + items: [{notLabel: 'This is not a label', value: 'not important #1'}, {notLabel: 'This is not also not a label', value: 'not important #2'}], + } + }); t.ok(document.querySelector('.item')?.innerHTML === 'This is not a label'); - select.$destroy(); + unmount(select); }); test('when label method and items is supplied then display result of label for each option', async (t) => { - const select = new Select({ - target, - props: { - label: 'notLabel', - listOpen: true, - items: [{notLabel: 'This is not a label', value: 'not important #1'}, {notLabel: 'This is not also not a label', value: 'not important #2'}], - } - }); + const select = mount(Select, { + target, + props: { + label: 'notLabel', + listOpen: true, + items: [{notLabel: 'This is not a label', value: 'not important #1'}, {notLabel: 'This is not also not a label', value: 'not important #2'}], + } + }); t.ok(document.querySelector('.item').innerHTML === 'This is not a label'); - select.$destroy(); + unmount(select); }); test('when loadOptions method is supplied, multiple is true and filterText has length then items should populate via promise resolve', async (t) => { - const select = new Select({ - target, - props: { - loadOptions: getPosts, - itemId: 'id', - multiple: true - } - }); + const select = mount(Select, { + target, + props: { + loadOptions: getPosts, + itemId: 'id', + multiple: true + } + }); await wait(0); await handleSet(select, {filterText: 'Juniper'}); @@ -1753,58 +1754,58 @@ test('when loadOptions method is supplied, multiple is true and filterText has l await handleKeyboard('ArrowDown'); await handleKeyboard('Enter'); t.ok(document.querySelector('.multi-item span').innerHTML.startsWith('Juniper Wheat Beer')); - select.$destroy(); + unmount(select); }); test('when selection slot render slot content', async (t) => { - const select = new SelectionSlotTest({ - target - }); + const select = mount(SelectionSlotTest, { + target + }); t.ok(document.querySelector('.selected-item').innerHTML === 'Slot: one'); - select.$destroy(); + unmount(select); }); test('when multiple and selection slot render slot content', async (t) => { - const select = new SelectionSlotMultipleTest({ - target - }); + const select = mount(SelectionSlotMultipleTest, { + target + }); const items = document.querySelectorAll('.multi-item span'); t.ok(items[0].innerHTML.startsWith('Index: 0 Slot: one')); t.ok(items[1].innerHTML.startsWith('Index: 1 Slot: two')); - select.$destroy(); + unmount(select); }); test('when hideEmptyState true then do not show "no items" div ', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - filterText: 'x', - hideEmptyState: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + filterText: 'x', + hideEmptyState: true + } + }); await wait(0); t.ok(!document.querySelector('.empty')); - select.$destroy(); + unmount(select); }); test('when value is selected then change event should fire', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items, - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items, + } + }); let selectEvent = undefined; @@ -1817,17 +1818,17 @@ test('when value is selected then change event should fire', async (t) => { t.ok(selectEvent); - select.$destroy(); + unmount(select); }); test('when value is cleared the clear event is fired', async (t) => { - const select = new Select({ - target, - props: { - items, - value: items[0], - } - }); + const select = mount(Select, { + target, + props: { + items, + value: items[0], + } + }); let clearEvent = false; select.$on('clear', () => { @@ -1838,20 +1839,20 @@ test('when value is cleared the clear event is fired', async (t) => { t.ok(clearEvent); - select.$destroy(); + unmount(select); }); test('when multi item is cleared the clear event is fired with removed item', async (t) => { const itemToRemove = items[0]; - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [itemToRemove] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [itemToRemove] + } + }); let removedItem; @@ -1863,19 +1864,19 @@ test('when multi item is cleared the clear event is fired with removed item', as document.querySelector('.multi-item-clear').dispatchEvent(event); t.equal(JSON.stringify(removedItem), JSON.stringify(itemToRemove)); - select.$destroy(); + unmount(select); }); test('when single item is cleared the clear event is fired with removed item', async (t) => { const itemToRemove = items[0]; - const select = new Select({ - target, - props: { - items, - value: itemToRemove - } - }); + const select = mount(Select, { + target, + props: { + items, + value: itemToRemove + } + }); let removedItem; @@ -1886,17 +1887,17 @@ test('when single item is cleared the clear event is fired with removed item', a document.querySelector('.clear-select').click(); t.equal(JSON.stringify(removedItem), JSON.stringify(itemToRemove)); - select.$destroy(); + unmount(select); }); test('when items in list filter or update then first item in list should highlight', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: true - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: true + } + }); await handleKeyboard('ArrowDown'); @@ -1904,17 +1905,17 @@ test('when items in list filter or update then first item in list should highlig await handleSet(select, {filterText: 'chi'}); t.ok(document.querySelector('.hover').innerHTML === 'Chips'); - select.$destroy(); + unmount(select); }); test('when item is selected or state changes then check value[itemId] has changed before firing "input" event', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'cake', label: 'Cake'} - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'cake', label: 'Cake'} + } + }); let item = undefined; select.$on('input', () => { @@ -1923,21 +1924,21 @@ test('when item is selected or state changes then check value[itemId] has change await handleSet(select, {value: {value: 'cake', label: 'Cake'}}); t.ok(!item) - select.$destroy(); + unmount(select); }); test('when multiple and item is selected or state changes then check value[itemId] has changed before firing "input" event', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [ - {value: 'pizza', label: 'Pizza'}, - {value: 'chips', label: 'Chips'}, - ], - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [ + {value: 'pizza', label: 'Pizza'}, + {value: 'chips', label: 'Chips'}, + ], + } + }); let item = undefined; @@ -1951,25 +1952,25 @@ test('when multiple and item is selected or state changes then check value[itemI await handleSet(select, {value: [{value: 'pizza', label: 'Pizza'}]}); t.ok(item); - select.$destroy(); + unmount(select); }); test('when focused turns to false then check Select is no longer in focus', async (t) => { - const select = new Select({ - target, - props: { - focused: true, - items, - } - }); + const select = mount(Select, { + target, + props: { + focused: true, + items, + } + }); - const selectSecond = new Select({ - target: extraTarget, - props: { - focused: false, - items, - } - }); + const selectSecond = mount(Select, { + target: extraTarget, + props: { + focused: false, + items, + } + }); select.$on('input', () => { setTimeout(() => { @@ -1991,126 +1992,126 @@ test('when focused turns to false then check Select is no longer in focus', asyn t.ok(selectSecond.focused); t.ok(!select.focused); - selectSecond.$destroy(); - select.$destroy(); + unmount(selectSecond); + unmount(select); }); test('when items is just an array of strings then render list', async (t) => { const items = ['one', 'two', 'three']; - const select = new Select({ - target, - props: { - items, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true + } + }); await wait(0); t.ok(document.querySelector('.item').innerHTML === 'one'); - select.$destroy(); + unmount(select); }); test('when items are just strings then value should render', async (t) => { const items = ['one', 'two', 'three']; - const select = new Select({ - target, - props: { - items, - value: {value: 'one', label: 'one', index: 0} - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'one', label: 'one', index: 0} + } + }); t.ok(document.querySelector('.selected-item').innerHTML === 'one'); - select.$destroy(); + unmount(select); }); test('when multiple and value has items then check each item is unique', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - value: [ - {value: 'pizza', label: 'Pizza'}, - {value: 'pizza', label: 'Pizza'}, - {value: 'cake', label: 'Cake'}, - ], - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + value: [ + {value: 'pizza', label: 'Pizza'}, + {value: 'pizza', label: 'Pizza'}, + {value: 'cake', label: 'Cake'}, + ], + } + }); t.ok(select.value.length === 2); - select.$destroy(); + unmount(select); }); test('when multiple and textFilter has length then enter should select item', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - focused: true, - filterText: 'p', - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + focused: true, + filterText: 'p', + listOpen: true + } + }); await wait(0); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.ok(select.value[0].value === 'pizza'); - select.$destroy(); + unmount(select); }); test('when multiple and textFilter has length and no items in list then enter should do nothing', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - focused: true, - filterText: 'zc', - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + focused: true, + filterText: 'zc', + listOpen: true + } + }); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.ok(!select.value); - select.$destroy(); + unmount(select); }); test('When multiple and no selected item then delete should do nothing', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items, - focused: true, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items, + focused: true, + listOpen: true + } + }); await wait(0); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Backspace'})); t.ok(select.listOpen === true); - select.$destroy(); + unmount(select); }); test('When list is open, filterText applied and Enter/Tab key pressed should select and show highlighted value', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - focused: true, - filterText: 'A5', - items: ['A5', 'test string', 'something else'] - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + focused: true, + filterText: 'A5', + items: ['A5', 'test string', 'something else'] + } + }); await wait(0); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -2119,57 +2120,57 @@ test('When list is open, filterText applied and Enter/Tab key pressed should sel await wait(0); t.ok(target.querySelector('.selected-item').innerHTML === 'A5'); - select.$destroy(); + unmount(select); }); test('When inputAttributes is supplied each attribute is placed on the Select input field', async (t) => { - const select = new Select({ - target, - props: { - items, - inputAttributes: { - id: 'testId', - autocomplete: 'custom-value' - } - } - }); + const select = mount(Select, { + target, + props: { + items, + inputAttributes: { + id: 'testId', + autocomplete: 'custom-value' + } + } + }); const el = document.getElementById('testId'); t.equal(el.id, 'testId'); t.equal(el.getAttribute('autocomplete'), 'custom-value'); - select.$destroy(); + unmount(select); }); test('when items and value supplied as just strings then value should render correctly', async (t) => { - const select = new Select({ - target, - props: { - items: ['Pizza', 'Chocolate', 'Crisps'], - value: 'Pizza' - } - }); + const select = mount(Select, { + target, + props: { + items: ['Pizza', 'Chocolate', 'Crisps'], + value: 'Pizza' + } + }); t.equal(document.querySelector('.selected-item').innerHTML, 'Pizza'); - select.$destroy(); + unmount(select); }); test('when multiple with items and value supplied as just strings then value should render correctly', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items: ['Pizza', 'Chocolate', 'Crisps'], - value: ['Pizza'] - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: ['Pizza', 'Chocolate', 'Crisps'], + value: ['Pizza'] + } + }); t.ok(document.querySelector('.multi-item span').innerHTML.startsWith('Pizza')); - select.$destroy(); + unmount(select); }); test('when multiple, groupBy and value are supplied then list should be filtered', async (t) => { @@ -2181,167 +2182,167 @@ test('when multiple, groupBy and value are supplied then list should be filtered { id: 5, name: "Bah", group: "first" }, ]; - const select = new Select({ - target, - props: { - multiple: true, - items: _items, - groupBy: (item) => item.group, - itemId: 'id', - label: 'name', - value: [{ id: 2, name: "Bar", group: "second" }], - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: _items, + groupBy: (item) => item.group, + itemId: 'id', + label: 'name', + value: [{ id: 2, name: "Bar", group: "second" }], + listOpen: true + } + }); t.ok(!select.getFilteredItems().find(item => item.name === 'Bar')); - select.$destroy(); + unmount(select); }); test('When items are collection and value a string then lookup item using itemId and update value to match', async (t) => { - const select = new Select({ - target, - props: { - items, - value: 'cake' - } - }); + const select = mount(Select, { + target, + props: { + items, + value: 'cake' + } + }); await wait(0); t.ok(select.value.value === 'cake'); select.$set({ value: 'pizza' }); await wait(0); t.ok(select.value.value === 'pizza'); - select.$destroy(); + unmount(select); }); test('When listAutoWidth is set to false list container should have style of width:auto', async (t) => { - const select = new Select({ - target, - props: { - items, - listAutoWidth: false, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listAutoWidth: false, + listOpen: true + } + }); await wait(0); const listWidth = document.querySelectorAll('.svelte-select-list')[0].style.width; t.ok(listWidth === 'auto'); - select.$destroy(); + unmount(select); }); test('When item is already active and is selected from list then close list', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - value: 'pizza' - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + value: 'pizza' + } + }); await wait(0); await querySelectorClick('.svelte-select-list > .list-item > .item.active'); await wait(0); t.ok(select.value.value === 'pizza'); - select.$destroy(); + unmount(select); }); test('When prepend named slot is supplied then render content', async (t) => { - const select = new PrependSlotTest({ - target, - }); + const select = mount(PrependSlotTest, { + target, + }); t.ok(document.querySelector('.before').innerHTML === 'Before it all'); - select.$destroy(); + unmount(select); }); test('When showChevron prop is true only show chevron when there is no value on Select', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'chocolate', label: 'Chocolate'}, - showChevron: true - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'chocolate', label: 'Chocolate'}, + showChevron: true + } + }); t.ok(document.querySelectorAll('.indicator').length === 0); - select.$destroy(); + unmount(select); }); test('When showChevron prop is true and no value show chevron on Select', async (t) => { - const select = new Select({ - target, - props: { - items, - showChevron: true - } - }); + const select = mount(Select, { + target, + props: { + items, + showChevron: true + } + }); t.ok(document.querySelectorAll('.chevron')[0]); - select.$destroy(); + unmount(select); }); test('When showChevron and clearable is true always show chevron on Select', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'chocolate', label: 'Chocolate'}, - showChevron: true, - clearable: false - } - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'chocolate', label: 'Chocolate'}, + showChevron: true, + clearable: false + } + }); t.ok(document.querySelectorAll('.chevron')[0]); - select.$destroy(); + unmount(select); }); test('When items and loadOptions then listOpen should be false', async (t) => { - const select = new Select({ - target, - props: { - loadOptions: resolvePromise, - } - }); + const select = mount(Select, { + target, + props: { + loadOptions: resolvePromise, + } + }); t.ok(select.listOpen === false); - select.$destroy(); + unmount(select); }); test('Select container classes can be injected', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'cake', label: 'Cake'}, - class: 'svelte-select testclass', - }, - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'cake', label: 'Cake'}, + class: 'svelte-select testclass', + }, + }); t.ok( document.querySelector('.svelte-select').classList.contains('testclass') ); - select.$destroy(); + unmount(select); }); test('When loadOptions promise is resolved then dispatch loaded', async (t) => { - const select = new Select({ - target, - props: { - loadOptions: resolvePromise, - }, - }); + const select = mount(Select, { + target, + props: { + loadOptions: resolvePromise, + }, + }); let loadedEventData = undefined; const loadedOff = select.$on('loaded', event => { @@ -2363,16 +2364,16 @@ test('When loadOptions promise is resolved then dispatch loaded', async (t) => { loadedOff(); errorOff(); - select.$destroy(); + unmount(select); }); test('When loadOptions promise is rejected then dispatch error', async (t) => { - const select = new Select({ - target, - props: { - loadOptions: rejectPromise, - }, - }); + const select = mount(Select, { + target, + props: { + loadOptions: rejectPromise, + }, + }); let loadedEventData = undefined; const loadedOff = select.$on('loaded', event => { @@ -2394,17 +2395,17 @@ test('When loadOptions promise is rejected then dispatch error', async (t) => { loadedOff(); errorOff(); - select.$destroy(); + unmount(select); }); test('When items change then value should also update', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'chips', label: 'Chips'}, - }, - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'chips', label: 'Chips'}, + }, + }); await wait(0); @@ -2421,18 +2422,18 @@ test('When items change then value should also update', async (t) => { t.ok(select.value.label === 'Loaded Fries'); t.ok(target.querySelector('.selected-item').innerHTML === 'Loaded Fries'); - select.$destroy(); + unmount(select); await wait(0); - const multiSelect = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chips', label: 'Chips'}, {value: 'pizza', label: 'Pizza'}], - }, - }); + const multiSelect = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chips', label: 'Chips'}, {value: 'pizza', label: 'Pizza'}], + }, + }); await wait(0); @@ -2449,17 +2450,17 @@ test('When items change then value should also update', async (t) => { t.ok(multiSelect.value[0].label === 'Loaded Fries'); t.ok(multiSelect.value[1].label === 'Cheese Pizza'); - multiSelect.$destroy(); + unmount(multiSelect); }); test('When items change then value should also update but only if found in items', async (t) => { - const select = new Select({ - target, - props: { - items, - value: {value: 'chips', label: 'Chips'}, - }, - }); + const select = mount(Select, { + target, + props: { + items, + value: {value: 'chips', label: 'Chips'}, + }, + }); await wait(0); @@ -2476,41 +2477,41 @@ test('When items change then value should also update but only if found in items t.ok(select.value.label === 'Chips'); t.ok(target.querySelector('.selected-item').innerHTML === 'Chips'); - select.$destroy(); + unmount(select); }); test('When multiple and multiFullItemClearable then clicking anywhere on the item will remove item', async (t) => { - const multiSelect = new Select({ - target, - props: { - multiple: true, - items, - multiFullItemClearable: true, - value: [{value: 'chips', label: 'Chips'}, {value: 'pizza', label: 'Pizza'}], - }, - }); + const multiSelect = mount(Select, { + target, + props: { + multiple: true, + items, + multiFullItemClearable: true, + value: [{value: 'chips', label: 'Chips'}, {value: 'pizza', label: 'Pizza'}], + }, + }); await wait(0); await querySelectorClick('.multi-item span'); await wait(0); t.ok(multiSelect.value[0].label === 'Pizza'); - multiSelect.$destroy(); + unmount(multiSelect); }); test('When multiple and filterText then items should filter out already selected items', async (t) => { - const multiSelect = new Select({ - target, - props: { - multiple: true, - items, - value: [{value: 'chips', label: 'Chips'}, {value: 'pizza', label: 'Pizza'}], - }, - }); + const multiSelect = mount(Select, { + target, + props: { + multiple: true, + items, + value: [{value: 'chips', label: 'Chips'}, {value: 'pizza', label: 'Pizza'}], + }, + }); t.ok(multiSelect.getFilteredItems().length === 3); - multiSelect.$destroy(); + unmount(multiSelect); }); test('when loadOptions and items is supplied then list should close on blur', async (t) => { @@ -2523,13 +2524,13 @@ test('when loadOptions and items is supplied then list should close on blur', as return data.map((beer)=> ({value: beer.id, label: beer.name})); } - const select = new Select({ - target, - props: { - items, - loadOptions, - } - }); + const select = mount(Select, { + target, + props: { + items, + loadOptions, + } + }); select.$set({focused: true}); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'ArrowDown'})); @@ -2539,7 +2540,7 @@ test('when loadOptions and items is supplied then list should close on blur', as div.click(); div.remove(); - select.$destroy(); + unmount(select); }); async function getCancelledRes() { @@ -2547,74 +2548,74 @@ async function getCancelledRes() { } test('when loadOptions response returns cancelled true then dont end loading state', async (t) => { - const select = new Select({ - target, - props: { - loadOptions: getCancelledRes, - } - }); + const select = mount(Select, { + target, + props: { + loadOptions: getCancelledRes, + } + }); select.$set({filterText: 'Juniper'}); await wait(0); - select.$destroy(); + unmount(select); }); test('when ClearIcon replace clear icon', async (t) => { - const select = new ClearIconSlotTest({ - target, - }); + const select = mount(ClearIconSlotTest, { + target, + }); t.ok(target.querySelector('.clear-select div').innerHTML === 'x'); - select.$destroy(); + unmount(select); }); test('losing focus of Select should close list', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true + } + }); t.ok(select.listOpen); document.querySelector('.svelte-select input').blur(); await wait(); t.ok(!select.listOpen); - select.$destroy(); + unmount(select); }); test('clicking on an external textarea should close and blur it', async (t) => { const textarea = document.createElement('textarea'); document.body.appendChild(textarea); - const select = new Select({ - target, - props: { - listOpen: true, - items, - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items, + } + }); t.ok(select.listOpen); document.querySelector('textarea').focus(); t.ok(!select.listOpen); textarea.remove(); - select.$destroy(); + unmount(select); }); test('when switching between multiple true/false ensure Select continues working', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - value: {value: 'chips', label: 'Chips'} - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + value: {value: 'chips', label: 'Chips'} + } + }); select.multiple = true; select.loadOptions = itemsPromise; @@ -2628,61 +2629,61 @@ test('when switching between multiple true/false ensure Select continues working t.ok(!select.value); - select.$destroy(); + unmount(select); }); test('when searchable is false then input should be readonly', async (t) => { - const select = new Select({ - target, - props: { - items, - searchable: false - } - }); + const select = mount(Select, { + target, + props: { + items, + searchable: false + } + }); let elem = target.querySelector('.svelte-select input'); t.ok(elem.hasAttribute('readonly')); - select.$destroy(); + unmount(select); }); test('when esc key pressed should close list', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true + } + }); await wait(0); t.ok(select.listOpen === true); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Escape'})); t.ok(select.listOpen === false); - select.$destroy(); + unmount(select); }); test('when multiple and placeholderAlwaysShow then always show placeholder text', async (t) => { - const select = new Select({ - target, - props: { - items, - value: [{value: 'chocolate', label: 'Chocolate'}, - {value: 'pizza', label: 'Pizza'},], - multiple: true, - placeholderAlwaysShow: true, - placeholder: 'foo bar' - } - }); + const select = mount(Select, { + target, + props: { + items, + value: [{value: 'chocolate', label: 'Chocolate'}, + {value: 'pizza', label: 'Pizza'},], + multiple: true, + placeholderAlwaysShow: true, + placeholder: 'foo bar' + } + }); await wait(0); let elem = target.querySelector('.svelte-select input[type="text"]'); t.ok(elem.placeholder === 'foo bar'); - select.$destroy(); + unmount(select); }); @@ -2695,22 +2696,22 @@ test('when loadOptions and value then items should show on promise resolve',asyn ]); } - const select = new Select({ - target, - props: { - value: { - value: 'chocolate', label: 'Chocolate' - }, - listOpen: true, - filterText: 'a', - loadOptions: loadOptionsFn - } - }); + const select = mount(Select, { + target, + props: { + value: { + value: 'chocolate', label: 'Chocolate' + }, + listOpen: true, + filterText: 'a', + loadOptions: loadOptionsFn + } + }); await wait(300); t.ok(select.getFilteredItems().length === 3); - select.$destroy(); + unmount(select); }); test('when loadOptions, multiple and value then filterText should remain on promise resolve',async (t) => { @@ -2722,49 +2723,49 @@ test('when loadOptions, multiple and value then filterText should remain on prom ]); } - const select = new Select({ - target, - props: { - multiple: true, - value: { - value: 'chocolate', label: 'Chocolate' - }, - listOpen: true, - filterText: 'test', - loadOptions: loadOptionsFn - } - }); + const select = mount(Select, { + target, + props: { + multiple: true, + value: { + value: 'chocolate', label: 'Chocolate' + }, + listOpen: true, + filterText: 'test', + loadOptions: loadOptionsFn + } + }); await wait(300); t.ok(select.filterText === 'test'); - select.$destroy(); + unmount(select); }); test('When listOffset is set list position offset changes', async (t) => { - const select = new Select({ - target, - props: { - items, - listOffset: 0, - listOpen: true - }, - }); + const select = mount(Select, { + target, + props: { + items, + listOffset: 0, + listOpen: true + }, + }); await wait(0); let elem = document.querySelector('.svelte-select-list'); t.ok(elem.style.top === '41px'); - select.$destroy(); + unmount(select); }); test('When items are updated post onMount ensure filtering still works', async (t) => { - const select = new Select({ - target, - props: { - items: null - }, - }); + const select = mount(Select, { + target, + props: { + items: null + }, + }); await wait(0); @@ -2775,16 +2776,16 @@ test('When items are updated post onMount ensure filtering still works', async ( t.ok(select.getFilteredItems().length === 1); t.ok(select.getFilteredItems()[0].value === 'Two'); - select.$destroy(); + unmount(select); }); test('When grouped items are updated post onMount ensure filtering still works', async (t) => { - const select = new Select({ - target, - props: { - groupBy: item => item.group - }, - }); + const select = mount(Select, { + target, + props: { + groupBy: item => item.group + }, + }); await wait(0); @@ -2797,35 +2798,35 @@ test('When grouped items are updated post onMount ensure filtering still works', t.ok(select.getFilteredItems()[1].label === 'Two'); - select.$destroy(); + unmount(select); }); test('When groupBy and value selected ensure filtering still works', async (t) => { - const select = new Select({ - target, - props: { - items: itemsWithGroup, - groupBy: (item) => item.group, - listOpen: true - }, - }); + const select = mount(Select, { + target, + props: { + items: itemsWithGroup, + groupBy: (item) => item.group, + listOpen: true + }, + }); select.filterText = 'Cake'; document.querySelector('.list-item .item.group-item').click(); await wait(0); t.ok(select.getFilteredItems().length === 7); - select.$destroy(); + unmount(select); }); test('When value selected and filterText then ensure selecting the active value still clears filterText', async (t) => { - const select = new Select({ - target, - props: { - items, - }, - }); + const select = mount(Select, { + target, + props: { + items, + }, + }); select.filterText = 'Cake'; document.querySelector('.list-item .item').click(); @@ -2836,18 +2837,18 @@ test('When value selected and filterText then ensure selecting the active value t.ok(select.filterText.length === 0); - select.$destroy(); + unmount(select); }); test('When multiple on:input events should fire on each item removal (including the last item)', async (t) => { - const select = new Select({ - target, - props: { - items, - multiple: true, - value: ['Cake', 'Chips'] - }, - }); + const select = mount(Select, { + target, + props: { + items, + multiple: true, + value: ['Cake', 'Chips'] + }, + }); let events = []; @@ -2862,203 +2863,203 @@ test('When multiple on:input events should fire on each item removal (including await wait(0); t.ok(events.length === 2); - select.$destroy(); + unmount(select); }); test('When inputAttributes.name supplied, add to hidden input', async (t) => { - const select = new Select({ - target, - props: { - name: 'Foods', - items: items, - showChevron: true, - }, - }); + const select = mount(Select, { + target, + props: { + name: 'Foods', + items: items, + showChevron: true, + }, + }); let hidden = document.querySelector('input[type="hidden"]').name; t.equal(hidden, 'Foods'); - select.$destroy(); + unmount(select); }); test('When no value then hidden field should also have no value', async (t) => { - const select = new Select({ - target, - props: { - inputAttributes: { name: 'Foods' }, - items: items, - }, - }); + const select = mount(Select, { + target, + props: { + inputAttributes: { name: 'Foods' }, + items: items, + }, + }); let hidden = document.querySelector('input[type="hidden"]').value; t.ok(!hidden); - select.$destroy(); + unmount(select); }); test('When value then hidden field should have value', async (t) => { - const select = new Select({ - target, - props: { - items: items, - value: {value: 'cake', label: 'Cake'}, - }, - }); + const select = mount(Select, { + target, + props: { + items: items, + value: {value: 'cake', label: 'Cake'}, + }, + }); let hidden = document.querySelector('input[type="hidden"]').value; t.equal(JSON.parse(hidden).value, 'cake'); - select.$destroy(); + unmount(select); }); test('When multiple and no value then hidden field should no value', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items: items, - }, - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: items, + }, + }); let hidden = document.querySelector('input[type="hidden"]').value; t.ok(!hidden); - select.$destroy(); + unmount(select); }); test('When multiple and value then hidden fields should list value items', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items: items, - value: [{value: 'cake', label: 'Cake'}, {value: 'pizza', label: 'Pizza'},] - }, - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: items, + value: [{value: 'cake', label: 'Cake'}, {value: 'pizza', label: 'Pizza'},] + }, + }); let hidden = JSON.parse(document.querySelector('input[type="hidden"]').value); t.equal(hidden[0].value, 'cake'); t.equal(hidden[1].value, 'pizza'); - select.$destroy(); + unmount(select); }); test('When listOpen then aria-context describes highlighted item', async (t) => { - const select = new Select({ - target, - props: { - items: items, - listOpen: true - }, - }); + const select = mount(Select, { + target, + props: { + items: items, + listOpen: true + }, + }); let aria = document.querySelector('#aria-context'); t.ok(aria.innerHTML.includes('Chocolate')); await handleKeyboard('ArrowDown'); t.ok(aria.innerHTML.includes('Pizza')); - select.$destroy(); + unmount(select); }); test('When listOpen and value then aria-selection describes value', async (t) => { - const select = new Select({ - target, - props: { - items: items, - value: {value: 'cake', label: 'Cake'}, - focused: true - }, - }); + const select = mount(Select, { + target, + props: { + items: items, + value: {value: 'cake', label: 'Cake'}, + focused: true + }, + }); let aria = document.querySelector('#aria-selection'); t.ok(aria.innerHTML.includes('Cake')); - select.$destroy(); + unmount(select); }); test('When listOpen, value and multiple then aria-selection describes value', async (t) => { - const select = new Select({ - target, - props: { - multiple: true, - items: items, - value: [{value: 'cake', label: 'Cake'}, {value: 'pizza', label: 'Pizza'},], - focused: true - }, - }); + const select = mount(Select, { + target, + props: { + multiple: true, + items: items, + value: [{value: 'cake', label: 'Cake'}, {value: 'pizza', label: 'Pizza'},], + focused: true + }, + }); let aria = document.querySelector('#aria-selection'); t.ok(aria.innerHTML.includes('Cake')); t.ok(aria.innerHTML.includes('Pizza')); - select.$destroy(); + unmount(select); }); test('When ariaValues and value supplied, then aria-selection uses default updated', async (t) => { - const select = new Select({ - target, - props: { - items: items, - value: {value: 'pizza', label: 'Pizza'}, - focused: true, - ariaValues: (val) => `Yummy ${val} in my tummy!` - }, - }); + const select = mount(Select, { + target, + props: { + items: items, + value: {value: 'pizza', label: 'Pizza'}, + focused: true, + ariaValues: (val) => `Yummy ${val} in my tummy!` + }, + }); let aria = document.querySelector('#aria-selection'); t.equal(aria.innerHTML, 'Yummy Pizza in my tummy!'); - select.$destroy(); + unmount(select); }); test('When ariaListOpen, listOpen, then aria-context uses default updated', async (t) => { - const select = new Select({ - target, - props: { - items: items, - listOpen: true, - ariaListOpen: (label, count) => `label: ${label}, count: ${count}` - }, - }); + const select = mount(Select, { + target, + props: { + items: items, + listOpen: true, + ariaListOpen: (label, count) => `label: ${label}, count: ${count}` + }, + }); await wait(0); let aria = document.querySelector('#aria-context'); t.equal(aria.innerHTML, 'label: Chocolate, count: 5'); - select.$destroy(); + unmount(select); }); test('When ariaFocused, focused value supplied, then aria-context uses default updated', async (t) => { - const select = new Select({ - target, - props: { - items: items, - focused: true, - listOpen: false, - ariaFocused: () => `nothing to see here.` - }, - }); + const select = mount(Select, { + target, + props: { + items: items, + focused: true, + listOpen: false, + ariaFocused: () => `nothing to see here.` + }, + }); let aria = document.querySelector('#aria-context'); t.equal(aria.innerHTML, 'nothing to see here.'); - select.$destroy(); + unmount(select); }); test('When id supplied then add to input', async (t) => { - const select = new Select({ - target, - props: { - id: 'foods', - items: items, - }, - }); + const select = mount(Select, { + target, + props: { + id: 'foods', + items: items, + }, + }); let aria = document.querySelector('input[type="text"]'); t.equal(aria.id, 'foods'); - select.$destroy(); + unmount(select); }); @@ -3067,74 +3068,74 @@ test('allows the user to select an item by clicking with a focusable ancestor', ancestor.setAttribute("tabindex", "-1"); target.appendChild(ancestor); - const select = new Select({ - target: ancestor, - props: { - items, - }, - }); + const select = mount(Select, { + target: ancestor, + props: { + items, + }, + }); await querySelectorClick('.svelte-select'); await querySelectorClick('.list-item'); t.equal(select.value.label, 'Chocolate'); - select.$destroy(); + unmount(select); }); test('when listOpen true on page load then list should show onMount', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - }, - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + }, + }); let list = document.querySelector('.svelte-select-list'); t.ok(list); - select.$destroy(); + unmount(select); }); test('when listOpen true on page load then list should show onMount', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - }, - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + }, + }); let list = document.querySelector('.svelte-select-list'); t.ok(list); - select.$destroy(); + unmount(select); }); test('when value is set check from item and show correct label', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true, - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true, + } + }); select.value = 'cake'; t.equal(select.value.label, 'Cake'); - select.$destroy(); + unmount(select); }); test('when component focuses fire on:focus event', async (t) => { - const select = new Select({ - target, - props: { - items - } - }); + const select = mount(Select, { + target, + props: { + items + } + }); let f = false; select.$on('focus', () => { @@ -3146,18 +3147,18 @@ test('when component focuses fire on:focus event', async (t) => { t.ok(f); - select.$destroy(); + unmount(select); }); test('when component blurs fire on:blur event', async (t) => { - const select = new Select({ - target, - props: { - items, - focused: true - } - }); + const select = mount(Select, { + target, + props: { + items, + focused: true + } + }); let b = false; select.$on('blur', () => { @@ -3169,20 +3170,20 @@ test('when component blurs fire on:blur event', async (t) => { t.ok(b); - select.$destroy(); + unmount(select); }); test('when loadOptions and groupBy then group headers should appear', async (t) => { - const select = new Select({ - target, - props: { - debounceWait: 1, - groupBy, - loadOptions: async function () { - return itemsWithGroup; - } - } - }); + const select = mount(Select, { + target, + props: { + debounceWait: 1, + groupBy, + loadOptions: async function () { + return itemsWithGroup; + } + } + }); function groupBy(item) { return item.group; @@ -3193,17 +3194,17 @@ test('when loadOptions and groupBy then group headers should appear', async (t) const header = document.querySelector('.svelte-select-list .list-group-title'); t.ok(header.innerHTML === 'Sweet'); - select.$destroy(); + unmount(select); }); test('when user selects an item then change event fires', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items + } + }); let value = undefined; @@ -3217,17 +3218,17 @@ test('when user selects an item then change event fires', async (t) => { await wait(0); t.equal(value, JSON.stringify({value: 'cake', label: 'Cake'})); - select.$destroy(); + unmount(select); }); test('when item selected programmatically a change event should NOT fire', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items + } + }); let value = undefined; select.$set({ value: {value: 'cake', label: 'Cake'}}); @@ -3239,36 +3240,36 @@ test('when item selected programmatically a change event should NOT fire', async await wait(0); t.ok(value === undefined); - select.$destroy(); + unmount(select); }); test('when value is cleared then justValue should be null', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items, - value: {value: 'cake', label: 'Cake'} - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items, + value: {value: 'cake', label: 'Cake'} + } + }); select.handleClear(); await wait(0); t.ok(!select.justValue); - select.$destroy(); + unmount(select); }); test('when items are grouped and filter text results in no items then list renders correct message', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroup, - groupBy - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroup, + groupBy + } + }); function groupBy(item) { return item.group; @@ -3281,100 +3282,100 @@ test('when items are grouped and filter text results in no items then list rende select.filterText = 'foo'; let empty = document.querySelector('.svelte-select-list .empty'); t.ok(empty); - select.$destroy(); + unmount(select); }); test('when named slot chevron show content', async (t) => { - const select = new ChevronSlotTest({ - target, - }); + const select = mount(ChevronSlotTest, { + target, + }); t.ok(document.querySelector('.chevron div').innerHTML === '⬆️'); - select.$destroy(); + unmount(select); }); test('when named slot list show content', async (t) => { - const select = new ListSlotTest({ - target, - }); + const select = mount(ListSlotTest, { + target, + }); t.ok(document.querySelector('.svelte-select-list').innerHTML.trim() === 'onetwo'); - select.$destroy(); + unmount(select); }); test('when named slot input-hidden', async (t) => { - const select = new InputHiddenSlotTest({ - target, - }); + const select = mount(InputHiddenSlotTest, { + target, + }); t.ok(document.querySelector('input[type="hidden"][name="test"]').value.trim() === 'one'); - select.$destroy(); + unmount(select); }); test('when named slot item show content', async (t) => { - const select = new ItemSlotTest({ - target, - }); + const select = mount(ItemSlotTest, { + target, + }); t.ok(document.querySelector('.svelte-select-list .item').innerHTML === '* one *'); - select.$destroy(); + unmount(select); }); test('when named slots list-prepend and list-append show content', async (t) => { - const select = new OuterListTest({ - target, - }); + const select = mount(OuterListTest, { + target, + }); t.ok(document.querySelector('.svelte-select-list').innerHTML.startsWith('prepend')); t.ok(document.querySelector('.svelte-select-list').innerHTML.endsWith('append')); - select.$destroy(); + unmount(select); }); test('when itemId and justValue then return correct value', async (t) => { - const select = new Select({ - target, - props: { - items: collection, - value: {_id: 2, label: 'Cake'}, - itemId: '_id' - } - }); + const select = mount(Select, { + target, + props: { + items: collection, + value: {_id: 2, label: 'Cake'}, + itemId: '_id' + } + }); t.ok(select.justValue === 2); - select.$destroy(); + unmount(select); }); test('when --item-height css variable supplied then item height should match new height', async (t) => { - const select = new ItemHeightTest({ - target - }); + const select = mount(ItemHeightTest, { + target + }); t.ok(document.querySelector('.item').offsetHeight === 50); - select.$destroy(); + unmount(select); }); test('when --multi-item-color css variable supplied then CSS should apply', async (t) => { - const select = new MultiItemColor({ - target - }); + const select = mount(MultiItemColor, { + target + }); t.ok(getComputedStyle(document.querySelector('.multi-item')).getPropertyValue('color') === 'rgb(255, 0, 0)'); - select.$destroy(); + unmount(select); }); test('when groupHeaderSelectable false and groupBy true then group headers should never have active/hover states', async (t) => { - const select = new GroupHeaderNotSelectable({ - target - }); + const select = mount(GroupHeaderNotSelectable, { + target + }); await querySelectorClick('.svelte-select'); @@ -3420,35 +3421,35 @@ test('when groupHeaderSelectable false and groupBy true then group headers shoul item = document.querySelector('.item.hover.group-item'); t.ok(item.innerHTML === 'Chocolate'); - select.$destroy(); + unmount(select); }); test('when hasError then show error styles', async (t) => { - const select = new Select({ - target, - props: { - hasError: true - } - }); + const select = mount(Select, { + target, + props: { + hasError: true + } + }); t.ok(document.querySelector('.svelte-select.error')); select.$set({hasError: false}); await wait(0); t.ok(!document.querySelector('.svelte-select.error')); - select.$destroy(); + unmount(select); }); test('when items filter then event on:filter fires', async (t) => { - const select = new Select({ - target, - props: { - items, - listOpen: true - } - }); + const select = mount(Select, { + target, + props: { + items, + listOpen: true + } + }); let event = undefined; @@ -3460,59 +3461,59 @@ test('when items filter then event on:filter fires', async (t) => { await wait(0); t.ok(event && event.length === 2); - select.$destroy(); + unmount(select); }); test('clicking tab on item with selectable false should not select item', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithSelectable, - filterText: '2' - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithSelectable, + filterText: '2' + } + }); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Tab'})); await wait(0); t.ok(!select.value) - select.$destroy(); + unmount(select); }); test('when multiple and clicking enter an item with selectable false should not be selected', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithSelectable, - filterText: '2', - multiple: true - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithSelectable, + filterText: '2', + multiple: true + } + }); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); await wait(0); t.ok(!select.value) - select.$destroy(); + unmount(select); }); test('when list has one item that is not selectable then clicking up/down keys should reset hover index', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: [ - { value: 'chocolate', label: 'Chocolate', group: 'Sweet' }, - { value: 'pizza', label: 'Pizza', group: 'Savory' }, - { value: 'cake', label: 'Cake', group: 'Sweet', selectable: false }, - { value: 'chips', label: 'Chips', group: 'Savory' }, - { value: 'ice-cream', label: 'Ice Cream', group: 'Sweet' }, - ], - filterText: 'Ca', - }, - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: [ + { value: 'chocolate', label: 'Chocolate', group: 'Sweet' }, + { value: 'pizza', label: 'Pizza', group: 'Savory' }, + { value: 'cake', label: 'Cake', group: 'Sweet', selectable: false }, + { value: 'chips', label: 'Chips', group: 'Savory' }, + { value: 'ice-cream', label: 'Ice Cream', group: 'Sweet' }, + ], + filterText: 'Ca', + }, + }); window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); @@ -3522,18 +3523,18 @@ test('when list has one item that is not selectable then clicking up/down keys s window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.ok(select.value.label === 'Pizza'); - select.$destroy(); + unmount(select); }); test('when list has no items that are selectable then clicking up/down keys should reset hover index', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithSelectable, - filterText: 'not' - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithSelectable, + filterText: 'not' + } + }); window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); @@ -3544,33 +3545,33 @@ test('when list has no items that are selectable then clicking up/down keys shou window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); await wait(0); t.ok(select.value.label === 'SelectableDefault') - select.$destroy(); + unmount(select); }); test('when listOpen and value then hoverItemIndex should be the active value', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: items, - value: {value: 'cake', label: 'Cake'}, - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: items, + value: {value: 'cake', label: 'Cake'}, + } + }); t.ok(select.hoverItemIndex === 2); - select.$destroy(); + unmount(select); }); test('when listOpen and multiple then hoverItemIndex should be 0', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: items, - multiple: true - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: items, + multiple: true + } + }); window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); @@ -3581,20 +3582,20 @@ test('when listOpen and multiple then hoverItemIndex should be 0', async (t) => await querySelectorClick('.svelte-select'); t.ok(select.hoverItemIndex === 0); - select.$destroy(); + unmount(select); }); test('when listOpen and value and groupBy then hoverItemIndex should be the active value', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: itemsWithGroupAndSelectable, - value: {value: 'chocolate', label: 'Chocolate', group: 'Sweet'}, - groupBy: (i) => i.group, - groupHeaderSelectable: true - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: itemsWithGroupAndSelectable, + value: {value: 'chocolate', label: 'Chocolate', group: 'Sweet'}, + groupBy: (i) => i.group, + groupHeaderSelectable: true + } + }); t.ok(select.hoverItemIndex === 1); @@ -3603,26 +3604,26 @@ test('when listOpen and value and groupBy then hoverItemIndex should be the acti t.ok(select.hoverItemIndex === 4); - select.$destroy(); + unmount(select); }); test('when groupBy, itemId and label then list should render correctly', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: [ - {id: 1, name: 'name 1', group: 'group 1'}, - {id: 2, name: 'name 2', group: 'group 1'}, - {id: 3, name: 'name 3', group: 'group 2'}, - {id: 4, name: 'name 4', group: 'group 1'}, - {id: 5, name: 'name 5', group: 'group 3'}, - ], - itemId: 'id', - label: 'name', - groupBy: (i) => i.group, - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: [ + {id: 1, name: 'name 1', group: 'group 1'}, + {id: 2, name: 'name 2', group: 'group 1'}, + {id: 3, name: 'name 3', group: 'group 2'}, + {id: 4, name: 'name 4', group: 'group 1'}, + {id: 5, name: 'name 5', group: 'group 3'}, + ], + itemId: 'id', + label: 'name', + groupBy: (i) => i.group, + } + }); let titles = document.querySelectorAll('.list-group-title'); let items = document.querySelectorAll('.item.group-item'); @@ -3630,26 +3631,26 @@ test('when groupBy, itemId and label then list should render correctly', async ( t.ok(titles[1].innerHTML === 'group 2'); t.ok(items[3].innerHTML === 'name 3'); - select.$destroy(); + unmount(select); }); test('when listOpen and value and groupBy then hoverItemIndex should be the active value', async (t) => { - const select = new Select({ - target, - props: { - listOpen: true, - items: [ - {id: 1, name: 'name 1', group: 'group 1'}, - {id: 2, name: 'name 2', group: 'group 1'}, - {id: 3, name: 'name 3', group: 'group 2'}, - {id: 4, name: 'name 4', group: 'group 1'}, - {id: 5, name: 'name 5', group: 'group 3'}, - ], - itemId: 'id', - label: 'name', - groupBy: (i) => i.group, - } - }); + const select = mount(Select, { + target, + props: { + listOpen: true, + items: [ + {id: 1, name: 'name 1', group: 'group 1'}, + {id: 2, name: 'name 2', group: 'group 1'}, + {id: 3, name: 'name 3', group: 'group 2'}, + {id: 4, name: 'name 4', group: 'group 1'}, + {id: 5, name: 'name 5', group: 'group 3'}, + ], + itemId: 'id', + label: 'name', + groupBy: (i) => i.group, + } + }); t.ok(select.hoverItemIndex === 1); window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); @@ -3659,18 +3660,18 @@ test('when listOpen and value and groupBy then hoverItemIndex should be the acti window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); t.ok(select.hoverItemIndex === 2); - select.$destroy(); + unmount(select); }); test('when closeListOnChange is false and item selected then list should remain open', async (t) => { - const select = new Select({ - target, - props: { - items, - closeListOnChange: false - } - }); + const select = mount(Select, { + target, + props: { + items, + closeListOnChange: false + } + }); await querySelectorClick('.svelte-select'); window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); @@ -3687,15 +3688,15 @@ test('when closeListOnChange is false and item selected then list should remain window.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Enter'})); t.ok(!select.listOpen); - select.$destroy(); + unmount(select); }); test('when listOpen and value and groupBy then hoverItemIndex should be the active value', async (t) => { - const select = new HoverItemIndexTest({ - target, - }); + const select = mount(HoverItemIndexTest, { + target, + }); await querySelectorClick('.svelte-select'); t.ok(select.hoverItemIndex === 1); @@ -3704,14 +3705,14 @@ test('when listOpen and value and groupBy then hoverItemIndex should be the acti await wait(0); window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' })); t.ok(select.hoverItemIndex === 2); - select.$destroy(); + unmount(select); }); test('when loadOptions and groupBy then titles should not duplicate after filterText clears', async (t) => { - const select = new LoadOptionsGroup({ - target, - }); + const select = mount(LoadOptionsGroup, { + target, + }); select.$set({filterText: 'cre'}); await wait(500); @@ -3720,20 +3721,20 @@ test('when loadOptions and groupBy then titles should not duplicate after filter await wait(500); t.ok(document.querySelectorAll('.list-group-title').length === 1); - select.$destroy(); + unmount(select); }); test('when loadOptions and value then it should set initial value', async (t) => { - const select = new LoadOptionsGroup({ - target, - props: { - value: 'cake' - } - }); + const select = mount(LoadOptionsGroup, { + target, + props: { + value: 'cake' + } + }); t.ok(document.querySelector('.value-container .selected-item').innerHTML === 'cake'); await wait(500); t.ok(document.querySelector('.value-container .selected-item').innerHTML === 'Cake'); - select.$destroy(); + unmount(select); });