diff --git a/.github/workflows/tagrelease.yml b/.github/workflows/tagrelease.yml new file mode 100644 index 00000000..4dff674c --- /dev/null +++ b/.github/workflows/tagrelease.yml @@ -0,0 +1,25 @@ +name: Create Release on every tag push in `production` + +on: + push: + branches: + - production + tags: + - '*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: production + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm ci && npm run build + - run: cd dist && zip -r ../phanpy-dist.zip . && cd .. + - uses: softprops/action-gh-release@v1 + with: + generate_release_notes: true + files: phanpy-dist.zip diff --git a/.gitignore b/.gitignore index aa759db6..a007290c 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,5 @@ dist-ssr # Custom .env.dev -src/data/instances-full.json \ No newline at end of file +src/data/instances-full.json +phanpy-dist.zip \ No newline at end of file diff --git a/README.md b/README.md index 7922bee8..ffb5f9eb 100644 --- a/README.md +++ b/README.md @@ -138,10 +138,12 @@ Costs involved in running and developing this web app: [Phanpy](https://bulbapedia.bulbagarden.net/wiki/Phanpy_(Pok%C3%A9mon)) is a Ground-type PokΓ©mon. -## Maintainers +## Maintainers + contributors - [Chee Aun](https://github.com/cheeaun) ([Mastodon](https://mastodon.social/@cheeaun)) ([Twitter](https://twitter.com/cheeaun)) +[![Contributors](https://contrib.rocks/image?repo=cheeaun/phanpy)](https://github.com/cheeaun/phanpy/graphs/contributors) + ## Backstory I am one of the earliest users of Twitter. Twitter was launched on [15 July 2006](https://en.wikipedia.org/wiki/Twitter). I joined on December 2006 and my [first tweet](https://twitter.com/cheeaun/status/1298723) was posted on 18 December 2006. diff --git a/package-lock.json b/package-lock.json index bbdb5944..970fe693 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,8 @@ "@github/text-expander-element": "~2.5.0", "@iconify-icons/mingcute": "~1.2.8", "@justinribeiro/lite-youtube": "~1.5.0", - "@szhsin/react-menu": "~4.0.3", - "@uidotdev/usehooks": "~2.3.1", + "@szhsin/react-menu": "~4.1.0", + "@uidotdev/usehooks": "~2.4.0", "dayjs": "~1.11.10", "dayjs-twitter": "~0.5.0", "fast-blurhash": "~1.1.2", @@ -21,8 +21,8 @@ "idb-keyval": "~6.2.1", "just-debounce-it": "~3.2.0", "lz-string": "~1.5.0", - "masto": "~5.11.4", - "mem": "~9.0.2", + "masto": "~6.3.1", + "moize": "~6.1.6", "p-retry": "~6.1.0", "p-throttle": "~5.1.0", "preact": "~10.18.1", @@ -40,11 +40,11 @@ "valtio": "1.9.0" }, "devDependencies": { - "@preact/preset-vite": "~2.5.0", + "@preact/preset-vite": "~2.6.0", "@trivago/prettier-plugin-sort-imports": "~4.2.0", "postcss": "~8.4.31", "postcss-dark-theme-class": "~1.0.0", - "postcss-preset-env": "~9.1.4", + "postcss-preset-env": "~9.2.0", "twitter-text": "~3.1.0", "vite": "~4.4.11", "vite-plugin-generate-file": "~0.0.4", @@ -88,47 +88,48 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -139,12 +140,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -168,12 +169,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -192,22 +193,19 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { @@ -283,34 +281,34 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -329,34 +327,34 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -372,9 +370,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -416,12 +414,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -440,39 +438,39 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -494,27 +492,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -522,9 +520,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -717,12 +715,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1452,16 +1450,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1471,12 +1469,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1784,33 +1782,33 @@ } }, "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1819,13 +1817,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1898,9 +1896,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.2.tgz", - "integrity": "sha512-YLCWI+nm18qr5nj7QhRMGuIi4ddFe0SKEtPQliLf1+pmyHFxoHYd0+Hg+bRnbnVbdyCTTlCqBiUvCeNJfd903g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz", + "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==", "dev": true, "funding": [ { @@ -1966,9 +1964,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", "dev": true, "funding": [ { @@ -1984,8 +1982,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -2015,9 +2013,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.5.tgz", - "integrity": "sha512-q9E7oJwf1Z8nJqQbob9DmFxrte3RQc+pwV+5WlWw6Ei9XaObaNJlPAQ1HfOpcEg/fxrRf/Yf6fgO8Q01r7u17A==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz", + "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==", "dev": true, "funding": [ { @@ -2030,10 +2028,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2043,9 +2041,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.5.tgz", - "integrity": "sha512-0MDBTG0FPDjNlAYMImNjnQ9lrldiFRCmsBx4dZB1ikbFwt6aYJRWDjgXoZY+1CmQ6m1qPeBJO762i6AKwQDlQQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz", + "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==", "dev": true, "funding": [ { @@ -2058,10 +2056,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2071,9 +2069,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz", - "integrity": "sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", "dev": true, "funding": [ { @@ -2086,9 +2084,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2122,10 +2120,10 @@ "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.5.tgz", - "integrity": "sha512-ABDOADpKrTvNb+cUBj9ciocCgFvE832eENKVuONca1u2bkFL4jM9430XFmi/GOgzt0agg5Q8FFJHXgYyKbgOFQ==", + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz", + "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==", "dev": true, "funding": [ { @@ -2138,10 +2136,37 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz", + "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2151,9 +2176,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.3.tgz", - "integrity": "sha512-2TqrRD8JzSwQCRKKNc9BFhSEmsz+mR3RtwSw5mQSGILC+LIYCVWeYwC33cI+saFWv0DGZ0NXLx5VSX2tdJyU6w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz", + "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==", "dev": true, "funding": [ { @@ -2166,9 +2191,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2178,9 +2203,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.1.tgz", - "integrity": "sha512-OkKZV0XZQixChA6r68O9UfGNFv06cPVcuT+MjpzfEuoCfbNWCj+b0dhsmdz776giQ+DymPmFDlTD+QJEFPI7rw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz", + "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==", "dev": true, "funding": [ { @@ -2193,7 +2218,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2226,9 +2251,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.2.tgz", - "integrity": "sha512-LeAJozyZTY3c1SaHMbwF4p8Ego/2HHprYusmmdmUH7wP6lRF1w3s7IO2iNwQ6fHBrSOfkPUFaUtRUGZLBE23Eg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz", + "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==", "dev": true, "funding": [ { @@ -2324,9 +2349,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz", - "integrity": "sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", "dev": true, "funding": [ { @@ -2339,10 +2364,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2352,9 +2377,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz", - "integrity": "sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", "dev": true, "funding": [ { @@ -2367,9 +2392,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2429,9 +2454,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.5.tgz", - "integrity": "sha512-tFjYaBbAvoks5yvE9uA3b3xsqVKkZJ2sXwPMw1bxlv2ydrmdiojuoRAskRfvMbZQkzp47DzBP1V9GhDLOyFVYA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz", + "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==", "dev": true, "funding": [ { @@ -2444,10 +2469,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2457,9 +2482,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.1.tgz", - "integrity": "sha512-yfdEk8o3CWPTusoInmGpOVCcMg1FikcKZyYB5ApULg9mES4FTGNuHK3MESscmm64yladcLNkPlz26O7tk3LMbA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz", + "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==", "dev": true, "funding": [ { @@ -2482,9 +2507,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.5.tgz", - "integrity": "sha512-wK8IX6X2+kLKxTTTq5yd7mH2U+GPcTMTpP2rM8ig0/rgxuid7vgTOxup6heZUk1IUA409eak3bYGOtDDYCpxbQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz", + "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==", "dev": true, "funding": [ { @@ -2497,10 +2522,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2535,9 +2560,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz", - "integrity": "sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", "dev": true, "funding": [ { @@ -2550,9 +2575,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2588,9 +2613,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz", - "integrity": "sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", "dev": true, "funding": [ { @@ -2603,9 +2628,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -3133,18 +3158,6 @@ "node": ">=8" } }, - "node_modules/@mastojs/ponyfills": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@mastojs/ponyfills/-/ponyfills-1.0.4.tgz", - "integrity": "sha512-1NaIGmcU7OmyNzx0fk+cYeGTkdXlOJOSdetaC4pStVWsrhht2cdlYSAfe5NDW3FcUmcEm2vVceB9lcClN1RCxw==", - "dependencies": { - "@types/node": "^18.11.17", - "@types/node-fetch": "^2.6.2", - "abort-controller": "^3.0.0", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3181,19 +3194,19 @@ } }, "node_modules/@preact/preset-vite": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", - "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.6.0.tgz", + "integrity": "sha512-5nztNzXbCpqyVum/K94nB2YQ5PTnvWdz4u7/X0jc8+kLyskSSpkNUxLQJeI90zfGSFIX1Ibj2G2JIS/mySHWYQ==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.9", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@prefresh/vite": "^2.2.8", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@prefresh/vite": "^2.4.1", "@rollup/pluginutils": "^4.1.1", "babel-plugin-transform-hook-names": "^1.0.2", - "debug": "^4.3.1", - "kolorist": "^1.2.10", - "resolve": "^1.20.0" + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "resolve": "^1.22.8" }, "peerDependencies": { "@babel/core": "7.x", @@ -3201,41 +3214,41 @@ } }, "node_modules/@prefresh/babel-plugin": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.4.4.tgz", - "integrity": "sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.0.tgz", + "integrity": "sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==", "dev": true }, "node_modules/@prefresh/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.4.1.tgz", - "integrity": "sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", + "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", "dev": true, "peerDependencies": { "preact": "^10.0.0" } }, "node_modules/@prefresh/utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.1.3.tgz", - "integrity": "sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", "dev": true }, "node_modules/@prefresh/vite": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.2.9.tgz", - "integrity": "sha512-1ERBF85Ja9/lkrfaltmo4Gca7R2ClQPSHHDDysFgfvPzHmLUeyB0x9WHwhwov/AA1DnyPhsfYT54z3yQd8XrgA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.1.tgz", + "integrity": "sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==", "dev": true, "dependencies": { - "@babel/core": "^7.9.6", - "@prefresh/babel-plugin": "0.4.4", - "@prefresh/core": "^1.3.3", - "@prefresh/utils": "^1.1.2", - "@rollup/pluginutils": "^4.1.0" + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "0.5.0", + "@prefresh/core": "^1.5.1", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" }, "peerDependencies": { "preact": "^10.4.0", - "vite": ">=2.0.0-beta.3" + "vite": ">=2.0.0" } }, "node_modules/@remix-run/router": { @@ -3272,9 +3285,9 @@ } }, "node_modules/@szhsin/react-menu": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.0.3.tgz", - "integrity": "sha512-TPsOKLEkesE79802evnLt2Mbv/+zwRJdX8776/vxK5ST9SK8SO0A8kRrus6JuxijLxZxFpmY/3VMdoyeCWQHKA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.1.0.tgz", + "integrity": "sha512-lYYGUxqJxM2b/jD2Cn5a9RVOvHl9VBMX8qOnHZuX1w08cO2jslykpz5P75D7WnqudLnXsJ4k4+tI+q2U8XIFYw==", "dependencies": { "prop-types": "^15.7.2", "react-transition-state": "^2.1.0" @@ -3373,29 +3386,8 @@ "node_modules/@types/node": { "version": "18.11.17", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" - }, - "node_modules/@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", + "dev": true }, "node_modules/@types/resolve": { "version": "1.17.1", @@ -3418,9 +3410,9 @@ "dev": true }, "node_modules/@uidotdev/usehooks": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.3.1.tgz", - "integrity": "sha512-1GL8CatTsTGZdwPNrZ44JhJI5QWip7oyDXEXFBEibJ+P+p+ZBi7mKrpG90ZIdQTSEcvkfiE2Y492Uo3ubPBZ3g==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.0.tgz", + "integrity": "sha512-NrpTsZUGsawYxFbEXrd8+FPpfziC4M01GSQgYWOnGa84UiavqVCzCL5bSRe6rfQc4QsHS2rGAA0h63ya/j+p6A==", "engines": { "node": ">=16" }, @@ -3510,17 +3502,6 @@ "optional": true, "peer": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/acorn": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", @@ -3597,11 +3578,6 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3612,9 +3588,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ { @@ -3632,8 +3608,8 @@ ], "dependencies": { "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -3737,9 +3713,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -3756,10 +3732,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -3790,6 +3766,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -3808,9 +3785,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001532", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", "dev": true, "funding": [ { @@ -3893,17 +3870,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -3936,9 +3902,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/core-js": { @@ -4046,9 +4012,9 @@ } }, "node_modules/cssdb": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.2.tgz", - "integrity": "sha512-pQPYP7/kch4QlkTcLuUNiNL2v/E+O+VIdotT+ug62/+2B2/jkzs5fMM6RHCzGCZ9C82pODEMSIzRRUzJOrl78g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.8.0.tgz", + "integrity": "sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==", "dev": true, "funding": [ { @@ -4128,14 +4094,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -4166,9 +4124,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.490", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", - "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==", + "version": "1.4.553", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.553.tgz", + "integrity": "sha512-HiRdtyKS2+VhiXvjhMvvxiMC33FJJqTA5EB2YHgFZW6v7HkK4Q9Ahv2V7O2ZPgAjw+MyCJVMQvigj13H8t+wvA==", "dev": true }, "node_modules/es-abstract": { @@ -4320,18 +4278,10 @@ "node": ">=0.10.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", - "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==" + "node_modules/events-to-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.0.tgz", + "integrity": "sha512-NiZEr4g51nI4/lz/6NdwMqK/TLIctlnp9TQ3wCJjlRp47VgrthUZE4nrk2UhfZ8VzoQ/Xyth+G6MKioLCt0FVA==" }, "node_modules/fast-blurhash": { "version": "1.1.2", @@ -4343,6 +4293,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-equals": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==" + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -4425,23 +4380,10 @@ "is-callable": "^1.1.3" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fraction.js": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" @@ -4489,7 +4431,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -4531,6 +4474,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4641,6 +4585,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4682,6 +4627,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4693,6 +4639,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4820,9 +4767,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -5256,9 +5203,9 @@ "integrity": "sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==" }, "node_modules/kolorist": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.6.0.tgz", - "integrity": "sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", "dev": true }, "node_modules/leven": { @@ -5307,17 +5254,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -5335,60 +5271,18 @@ "sourcemap-codec": "^1.4.8" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/masto": { - "version": "5.11.4", - "resolved": "https://registry.npmjs.org/masto/-/masto-5.11.4.tgz", - "integrity": "sha512-sLF3SJTNZDAP57Y+8vAdd1KQTuWWxmGUrBF1R2GLPL6zij/1wXxV05+h8GZhnfg+696arkt+w6ZlKvEEfH1yvg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/masto/-/masto-6.3.1.tgz", + "integrity": "sha512-Os3MlbGFNL6KHxlKldYY+d/1exO6oBjtF4vx8d6cmXRmeeeW3mKQeunTZz+yY5qWksPg2eVdk+FOhaEnOeclVw==", "dependencies": { - "@mastojs/ponyfills": "^1.0.4", "change-case": "^4.1.2", - "eventemitter3": "^5.0.0", + "events-to-async": "^2.0.0", "isomorphic-ws": "^5.0.0", - "qs": "^6.11.0", - "semver": "^7.3.7", + "ts-custom-error": "^3.3.1", "ws": "^8.13.0" } }, - "node_modules/masto/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5404,6 +5298,11 @@ "node": ">= 8" } }, + "node_modules/micro-memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5421,6 +5320,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -5429,6 +5329,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5436,17 +5337,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5459,6 +5349,15 @@ "node": "*" } }, + "node_modules/moize": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", + "dependencies": { + "fast-equals": "^3.0.1", + "micro-memoize": "^4.1.2" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5492,44 +5391,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -5557,6 +5418,7 @@ "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5597,14 +5459,6 @@ "wrappy": "1" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "engines": { - "node": ">=4" - } - }, "node_modules/p-retry": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.1.0.tgz", @@ -5755,9 +5609,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.1.tgz", - "integrity": "sha512-IouVx77fASIjOChWxkvOjYGnYNKq286cSiKFJwWNICV9NP2xZWVOS9WOriR/8uIB2zt/44bzQyw4GteCLpP2SA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz", + "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==", "dev": true, "funding": [ { @@ -5770,7 +5624,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -5825,9 +5679,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.1.tgz", - "integrity": "sha512-fil7cosvzlIAYmZJPtNFcTH0Er7a3GveEK4q5Y/L24eWQHmiw8Fv/E5DMkVpdbNjkGzJxrvowOSt/Il9HZ06VQ==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", + "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", "dev": true, "funding": [ { @@ -5840,10 +5694,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.4", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -5881,9 +5735,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.5.tgz", - "integrity": "sha512-0UYtz7GG10bZrRiUdZ/2Flt+hp5p/WP0T7JgAPZ/Xhgb0wFjW/p7QOjE+M58S9Z3x11P9YaNPcrsoOGewWYkcw==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz", + "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==", "dev": true, "funding": [ { @@ -5896,9 +5750,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.4", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -5956,9 +5810,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.1.tgz", - "integrity": "sha512-ogcHzfC5q4nfySyZyNF7crvK3/MRDTh+akzE+l7bgJUjVkhgfahBuI+ZAm/5EeaVSVKnCOgqtC6wTyUFgLVLTw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz", + "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==", "dev": true, "funding": [ { @@ -5971,7 +5825,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -6088,9 +5942,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.5.tgz", - "integrity": "sha512-v1NG08v7tN9n76rA5j5HQ4sRu/kqXBuOFNAYhfHqbyDQ1WbsGKfPNN9VnJSSI3V0KIlShodYQPf3ORjMSo1w9g==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz", + "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==", "dev": true, "funding": [ { @@ -6103,10 +5957,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6248,9 +6102,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.1.4.tgz", - "integrity": "sha512-k2scWtmYBZhjAzMJw8Fgc4hnfkZa4KpPjK0z6+tTAJ4/3ZAmaJJ1VBQ9T7OS0qvper8AyD+kqN2UB2tYFQ4eeA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.2.0.tgz", + "integrity": "sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==", "dev": true, "funding": [ { @@ -6264,52 +6118,53 @@ ], "dependencies": { "@csstools/postcss-cascade-layers": "^4.0.0", - "@csstools/postcss-color-function": "^3.0.4", - "@csstools/postcss-color-mix-function": "^2.0.4", - "@csstools/postcss-exponential-functions": "^1.0.0", + "@csstools/postcss-color-function": "^3.0.7", + "@csstools/postcss-color-mix-function": "^2.0.7", + "@csstools/postcss-exponential-functions": "^1.0.1", "@csstools/postcss-font-format-keywords": "^3.0.0", - "@csstools/postcss-gradients-interpolation-method": "^4.0.4", - "@csstools/postcss-hwb-function": "^3.0.3", - "@csstools/postcss-ic-unit": "^3.0.1", + "@csstools/postcss-gamut-mapping": "^1.0.0", + "@csstools/postcss-gradients-interpolation-method": "^4.0.7", + "@csstools/postcss-hwb-function": "^3.0.6", + "@csstools/postcss-ic-unit": "^3.0.2", "@csstools/postcss-initial": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^4.0.2", + "@csstools/postcss-is-pseudo-class": "^4.0.3", "@csstools/postcss-logical-float-and-clear": "^2.0.0", "@csstools/postcss-logical-resize": "^2.0.0", - "@csstools/postcss-logical-viewport-units": "^2.0.2", - "@csstools/postcss-media-minmax": "^1.0.7", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.2", + "@csstools/postcss-logical-viewport-units": "^2.0.3", + "@csstools/postcss-media-minmax": "^1.1.0", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3", "@csstools/postcss-nested-calc": "^3.0.0", "@csstools/postcss-normalize-display-values": "^3.0.1", - "@csstools/postcss-oklab-function": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^3.0.1", - "@csstools/postcss-relative-color-syntax": "^2.0.4", + "@csstools/postcss-oklab-function": "^3.0.7", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", + "@csstools/postcss-relative-color-syntax": "^2.0.7", "@csstools/postcss-scope-pseudo-class": "^3.0.0", - "@csstools/postcss-stepped-value-functions": "^3.0.1", + "@csstools/postcss-stepped-value-functions": "^3.0.2", "@csstools/postcss-text-decoration-shorthand": "^3.0.3", - "@csstools/postcss-trigonometric-functions": "^3.0.1", + "@csstools/postcss-trigonometric-functions": "^3.0.2", "@csstools/postcss-unset-value": "^3.0.0", - "autoprefixer": "^10.4.15", - "browserslist": "^4.21.10", + "autoprefixer": "^10.4.16", + "browserslist": "^4.22.1", "css-blank-pseudo": "^6.0.0", "css-has-pseudo": "^6.0.0", "css-prefers-color-scheme": "^9.0.0", - "cssdb": "^7.7.2", + "cssdb": "^7.8.0", "postcss-attribute-case-insensitive": "^6.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.1", + "postcss-color-functional-notation": "^6.0.2", "postcss-color-hex-alpha": "^9.0.2", "postcss-color-rebeccapurple": "^9.0.1", - "postcss-custom-media": "^10.0.1", - "postcss-custom-properties": "^13.3.1", - "postcss-custom-selectors": "^7.1.5", + "postcss-custom-media": "^10.0.2", + "postcss-custom-properties": "^13.3.2", + "postcss-custom-selectors": "^7.1.6", "postcss-dir-pseudo-class": "^8.0.0", - "postcss-double-position-gradients": "^5.0.1", + "postcss-double-position-gradients": "^5.0.2", "postcss-focus-visible": "^9.0.0", "postcss-focus-within": "^8.0.0", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.0", "postcss-image-set-function": "^6.0.1", - "postcss-lab-function": "^6.0.4", + "postcss-lab-function": "^6.0.7", "postcss-logical": "^7.0.0", "postcss-nesting": "^12.0.1", "postcss-opacity-percentage": "^2.0.0", @@ -6461,20 +6316,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6712,12 +6553,12 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6829,9 +6670,9 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6860,6 +6701,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -7137,6 +6979,14 @@ "punycode": "^2.1.0" } }, + "node_modules/ts-custom-error": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", @@ -7290,9 +7140,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -7991,11 +7841,6 @@ "optional": true } } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } }, "dependencies": { @@ -8021,50 +7866,51 @@ } }, "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" } }, "@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", "dev": true }, "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" } }, "@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.22.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -8084,12 +7930,12 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -8102,16 +7948,16 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "requires": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "dependencies": { "lru-cache": { @@ -8174,28 +8020,28 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -8208,28 +8054,25 @@ } }, "@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "requires": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/helper-optimise-call-expression": { @@ -8242,9 +8085,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -8274,12 +8117,12 @@ } }, "@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "requires": { - "@babel/types": "^7.21.5" + "@babel/types": "^7.22.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -8292,30 +8135,30 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true }, "@babel/helper-wrap-function": { @@ -8331,31 +8174,31 @@ } }, "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -8482,12 +8325,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -8953,25 +8796,25 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.15" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "@babel/plugin-transform-react-jsx": "^7.22.5" } }, "@babel/plugin-transform-regenerator": { @@ -9195,42 +9038,42 @@ } }, "@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -9255,9 +9098,9 @@ "requires": {} }, "@csstools/css-color-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.2.tgz", - "integrity": "sha512-YLCWI+nm18qr5nj7QhRMGuIi4ddFe0SKEtPQliLf1+pmyHFxoHYd0+Hg+bRnbnVbdyCTTlCqBiUvCeNJfd903g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz", + "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==", "dev": true, "requires": { "@csstools/color-helpers": "^3.0.2", @@ -9278,9 +9121,9 @@ "dev": true }, "@csstools/media-query-list-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", "dev": true, "requires": {} }, @@ -9295,38 +9138,38 @@ } }, "@csstools/postcss-color-function": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.5.tgz", - "integrity": "sha512-q9E7oJwf1Z8nJqQbob9DmFxrte3RQc+pwV+5WlWw6Ei9XaObaNJlPAQ1HfOpcEg/fxrRf/Yf6fgO8Q01r7u17A==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz", + "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "@csstools/postcss-color-mix-function": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.5.tgz", - "integrity": "sha512-0MDBTG0FPDjNlAYMImNjnQ9lrldiFRCmsBx4dZB1ikbFwt6aYJRWDjgXoZY+1CmQ6m1qPeBJO762i6AKwQDlQQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz", + "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "@csstools/postcss-exponential-functions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz", - "integrity": "sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", "dev": true, "requires": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-font-format-keywords": { @@ -9338,36 +9181,47 @@ "postcss-value-parser": "^4.2.0" } }, - "@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.5.tgz", - "integrity": "sha512-ABDOADpKrTvNb+cUBj9ciocCgFvE832eENKVuONca1u2bkFL4jM9430XFmi/GOgzt0agg5Q8FFJHXgYyKbgOFQ==", + "@csstools/postcss-gamut-mapping": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz", + "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "2.3.2", + "@csstools/css-tokenizer": "^2.2.1" + } + }, + "@csstools/postcss-gradients-interpolation-method": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz", + "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==", + "dev": true, + "requires": { + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "@csstools/postcss-hwb-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.3.tgz", - "integrity": "sha512-2TqrRD8JzSwQCRKKNc9BFhSEmsz+mR3RtwSw5mQSGILC+LIYCVWeYwC33cI+saFWv0DGZ0NXLx5VSX2tdJyU6w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz", + "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-color-parser": "^1.4.0", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-ic-unit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.1.tgz", - "integrity": "sha512-OkKZV0XZQixChA6r68O9UfGNFv06cPVcuT+MjpzfEuoCfbNWCj+b0dhsmdz776giQ+DymPmFDlTD+QJEFPI7rw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz", + "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, @@ -9379,9 +9233,9 @@ "requires": {} }, "@csstools/postcss-is-pseudo-class": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.2.tgz", - "integrity": "sha512-LeAJozyZTY3c1SaHMbwF4p8Ego/2HHprYusmmdmUH7wP6lRF1w3s7IO2iNwQ6fHBrSOfkPUFaUtRUGZLBE23Eg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz", + "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==", "dev": true, "requires": { "@csstools/selector-specificity": "^3.0.0", @@ -9414,26 +9268,26 @@ } }, "@csstools/postcss-media-minmax": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz", - "integrity": "sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", "dev": true, "requires": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" } }, "@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz", - "integrity": "sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" } }, "@csstools/postcss-nested-calc": { @@ -9455,36 +9309,36 @@ } }, "@csstools/postcss-oklab-function": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.5.tgz", - "integrity": "sha512-tFjYaBbAvoks5yvE9uA3b3xsqVKkZJ2sXwPMw1bxlv2ydrmdiojuoRAskRfvMbZQkzp47DzBP1V9GhDLOyFVYA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz", + "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "@csstools/postcss-progressive-custom-properties": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.1.tgz", - "integrity": "sha512-yfdEk8o3CWPTusoInmGpOVCcMg1FikcKZyYB5ApULg9mES4FTGNuHK3MESscmm64yladcLNkPlz26O7tk3LMbA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz", + "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-relative-color-syntax": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.5.tgz", - "integrity": "sha512-wK8IX6X2+kLKxTTTq5yd7mH2U+GPcTMTpP2rM8ig0/rgxuid7vgTOxup6heZUk1IUA409eak3bYGOtDDYCpxbQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz", + "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "@csstools/postcss-scope-pseudo-class": { @@ -9497,14 +9351,14 @@ } }, "@csstools/postcss-stepped-value-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz", - "integrity": "sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", "dev": true, "requires": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-text-decoration-shorthand": { @@ -9518,14 +9372,14 @@ } }, "@csstools/postcss-trigonometric-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz", - "integrity": "sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", "dev": true, "requires": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "@csstools/postcss-unset-value": { @@ -9806,18 +9660,6 @@ "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" }, - "@mastojs/ponyfills": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@mastojs/ponyfills/-/ponyfills-1.0.4.tgz", - "integrity": "sha512-1NaIGmcU7OmyNzx0fk+cYeGTkdXlOJOSdetaC4pStVWsrhht2cdlYSAfe5NDW3FcUmcEm2vVceB9lcClN1RCxw==", - "requires": { - "@types/node": "^18.11.17", - "@types/node-fetch": "^2.6.2", - "abort-controller": "^3.0.0", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -9845,51 +9687,51 @@ } }, "@preact/preset-vite": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", - "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.6.0.tgz", + "integrity": "sha512-5nztNzXbCpqyVum/K94nB2YQ5PTnvWdz4u7/X0jc8+kLyskSSpkNUxLQJeI90zfGSFIX1Ibj2G2JIS/mySHWYQ==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.14.9", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@prefresh/vite": "^2.2.8", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@prefresh/vite": "^2.4.1", "@rollup/pluginutils": "^4.1.1", "babel-plugin-transform-hook-names": "^1.0.2", - "debug": "^4.3.1", - "kolorist": "^1.2.10", - "resolve": "^1.20.0" + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "resolve": "^1.22.8" } }, "@prefresh/babel-plugin": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.4.4.tgz", - "integrity": "sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.0.tgz", + "integrity": "sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==", "dev": true }, "@prefresh/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.4.1.tgz", - "integrity": "sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", + "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", "dev": true, "requires": {} }, "@prefresh/utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.1.3.tgz", - "integrity": "sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", "dev": true }, "@prefresh/vite": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.2.9.tgz", - "integrity": "sha512-1ERBF85Ja9/lkrfaltmo4Gca7R2ClQPSHHDDysFgfvPzHmLUeyB0x9WHwhwov/AA1DnyPhsfYT54z3yQd8XrgA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.1.tgz", + "integrity": "sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==", "dev": true, "requires": { - "@babel/core": "^7.9.6", - "@prefresh/babel-plugin": "0.4.4", - "@prefresh/core": "^1.3.3", - "@prefresh/utils": "^1.1.2", - "@rollup/pluginutils": "^4.1.0" + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "0.5.0", + "@prefresh/core": "^1.5.1", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" } }, "@remix-run/router": { @@ -9920,9 +9762,9 @@ } }, "@szhsin/react-menu": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.0.3.tgz", - "integrity": "sha512-TPsOKLEkesE79802evnLt2Mbv/+zwRJdX8776/vxK5ST9SK8SO0A8kRrus6JuxijLxZxFpmY/3VMdoyeCWQHKA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.1.0.tgz", + "integrity": "sha512-lYYGUxqJxM2b/jD2Cn5a9RVOvHl9VBMX8qOnHZuX1w08cO2jslykpz5P75D7WnqudLnXsJ4k4+tI+q2U8XIFYw==", "requires": { "prop-types": "^15.7.2", "react-transition-state": "^2.1.0" @@ -9998,28 +9840,8 @@ "@types/node": { "version": "18.11.17", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" - }, - "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } + "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", + "dev": true }, "@types/resolve": { "version": "1.17.1", @@ -10042,9 +9864,9 @@ "dev": true }, "@uidotdev/usehooks": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.3.1.tgz", - "integrity": "sha512-1GL8CatTsTGZdwPNrZ44JhJI5QWip7oyDXEXFBEibJ+P+p+ZBi7mKrpG90ZIdQTSEcvkfiE2Y492Uo3ubPBZ3g==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.0.tgz", + "integrity": "sha512-NrpTsZUGsawYxFbEXrd8+FPpfziC4M01GSQgYWOnGa84UiavqVCzCL5bSRe6rfQc4QsHS2rGAA0h63ya/j+p6A==", "requires": {} }, "@vue/compiler-core": { @@ -10128,14 +9950,6 @@ "optional": true, "peer": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "acorn": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", @@ -10190,11 +10004,6 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -10202,14 +10011,14 @@ "dev": true }, "autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "requires": { "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -10284,15 +10093,15 @@ } }, "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" } }, "buffer-from": { @@ -10311,6 +10120,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -10326,9 +10136,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001532", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", "dev": true }, "capital-case": { @@ -10391,14 +10201,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -10428,9 +10230,9 @@ } }, "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "core-js": { @@ -10482,9 +10284,9 @@ "requires": {} }, "cssdb": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.2.tgz", - "integrity": "sha512-pQPYP7/kch4QlkTcLuUNiNL2v/E+O+VIdotT+ug62/+2B2/jkzs5fMM6RHCzGCZ9C82pODEMSIzRRUzJOrl78g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.8.0.tgz", + "integrity": "sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==", "dev": true }, "cssesc": { @@ -10531,11 +10333,6 @@ "object-keys": "^1.1.1" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, "dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -10560,9 +10357,9 @@ } }, "electron-to-chromium": { - "version": "1.4.490", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", - "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==", + "version": "1.4.553", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.553.tgz", + "integrity": "sha512-HiRdtyKS2+VhiXvjhMvvxiMC33FJJqTA5EB2YHgFZW6v7HkK4Q9Ahv2V7O2ZPgAjw+MyCJVMQvigj13H8t+wvA==", "dev": true }, "es-abstract": { @@ -10683,15 +10480,10 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter3": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", - "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==" + "events-to-async": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.0.tgz", + "integrity": "sha512-NiZEr4g51nI4/lz/6NdwMqK/TLIctlnp9TQ3wCJjlRp47VgrthUZE4nrk2UhfZ8VzoQ/Xyth+G6MKioLCt0FVA==" }, "fast-blurhash": { "version": "1.1.2", @@ -10703,6 +10495,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-equals": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==" + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -10778,20 +10575,10 @@ "is-callable": "^1.1.3" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "fraction.js": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true }, "fs-extra": { @@ -10822,7 +10609,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "function.prototype.name": { "version": "1.1.5", @@ -10852,6 +10640,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -10932,6 +10721,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -10960,12 +10750,14 @@ "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, "has-tostringtag": { "version": "1.0.0", @@ -11060,9 +10852,9 @@ "dev": true }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -11364,9 +11156,9 @@ "integrity": "sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==" }, "kolorist": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.6.0.tgz", - "integrity": "sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", "dev": true }, "leven": { @@ -11409,14 +11201,6 @@ "tslib": "^2.0.3" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -11431,45 +11215,16 @@ "sourcemap-codec": "^1.4.8" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, "masto": { - "version": "5.11.4", - "resolved": "https://registry.npmjs.org/masto/-/masto-5.11.4.tgz", - "integrity": "sha512-sLF3SJTNZDAP57Y+8vAdd1KQTuWWxmGUrBF1R2GLPL6zij/1wXxV05+h8GZhnfg+696arkt+w6ZlKvEEfH1yvg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/masto/-/masto-6.3.1.tgz", + "integrity": "sha512-Os3MlbGFNL6KHxlKldYY+d/1exO6oBjtF4vx8d6cmXRmeeeW3mKQeunTZz+yY5qWksPg2eVdk+FOhaEnOeclVw==", "requires": { - "@mastojs/ponyfills": "^1.0.4", "change-case": "^4.1.2", - "eventemitter3": "^5.0.0", + "events-to-async": "^2.0.0", "isomorphic-ws": "^5.0.0", - "qs": "^6.11.0", - "semver": "^7.3.7", + "ts-custom-error": "^3.3.1", "ws": "^8.13.0" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" } }, "merge-stream": { @@ -11484,6 +11239,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "micro-memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -11497,21 +11257,18 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "requires": { "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11521,6 +11278,15 @@ "brace-expansion": "^1.1.7" } }, + "moize": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", + "requires": { + "fast-equals": "^3.0.1", + "micro-memoize": "^4.1.2" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -11542,35 +11308,6 @@ "tslib": "^2.0.3" } }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -11591,7 +11328,8 @@ "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true }, "object-keys": { "version": "1.1.1", @@ -11620,11 +11358,6 @@ "wrappy": "1" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" - }, "p-retry": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.1.0.tgz", @@ -11721,12 +11454,12 @@ } }, "postcss-color-functional-notation": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.1.tgz", - "integrity": "sha512-IouVx77fASIjOChWxkvOjYGnYNKq286cSiKFJwWNICV9NP2xZWVOS9WOriR/8uIB2zt/44bzQyw4GteCLpP2SA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz", + "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, @@ -11749,15 +11482,15 @@ } }, "postcss-custom-media": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.1.tgz", - "integrity": "sha512-fil7cosvzlIAYmZJPtNFcTH0Er7a3GveEK4q5Y/L24eWQHmiw8Fv/E5DMkVpdbNjkGzJxrvowOSt/Il9HZ06VQ==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", + "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.4", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" } }, "postcss-custom-properties": { @@ -11773,14 +11506,14 @@ } }, "postcss-custom-selectors": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.5.tgz", - "integrity": "sha512-0UYtz7GG10bZrRiUdZ/2Flt+hp5p/WP0T7JgAPZ/Xhgb0wFjW/p7QOjE+M58S9Z3x11P9YaNPcrsoOGewWYkcw==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz", + "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.4", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "postcss-selector-parser": "^6.0.13" } }, @@ -11801,12 +11534,12 @@ } }, "postcss-double-position-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.1.tgz", - "integrity": "sha512-ogcHzfC5q4nfySyZyNF7crvK3/MRDTh+akzE+l7bgJUjVkhgfahBuI+ZAm/5EeaVSVKnCOgqtC6wTyUFgLVLTw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz", + "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, @@ -11852,15 +11585,15 @@ } }, "postcss-lab-function": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.5.tgz", - "integrity": "sha512-v1NG08v7tN9n76rA5j5HQ4sRu/kqXBuOFNAYhfHqbyDQ1WbsGKfPNN9VnJSSI3V0KIlShodYQPf3ORjMSo1w9g==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz", + "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-color-parser": "^1.4.0", "@csstools/css-parser-algorithms": "^2.3.2", "@csstools/css-tokenizer": "^2.2.1", - "@csstools/postcss-progressive-custom-properties": "^3.0.1" + "@csstools/postcss-progressive-custom-properties": "^3.0.2" } }, "postcss-logical": { @@ -11915,58 +11648,59 @@ } }, "postcss-preset-env": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.1.4.tgz", - "integrity": "sha512-k2scWtmYBZhjAzMJw8Fgc4hnfkZa4KpPjK0z6+tTAJ4/3ZAmaJJ1VBQ9T7OS0qvper8AyD+kqN2UB2tYFQ4eeA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.2.0.tgz", + "integrity": "sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==", "dev": true, "requires": { "@csstools/postcss-cascade-layers": "^4.0.0", - "@csstools/postcss-color-function": "^3.0.4", - "@csstools/postcss-color-mix-function": "^2.0.4", - "@csstools/postcss-exponential-functions": "^1.0.0", + "@csstools/postcss-color-function": "^3.0.7", + "@csstools/postcss-color-mix-function": "^2.0.7", + "@csstools/postcss-exponential-functions": "^1.0.1", "@csstools/postcss-font-format-keywords": "^3.0.0", - "@csstools/postcss-gradients-interpolation-method": "^4.0.4", - "@csstools/postcss-hwb-function": "^3.0.3", - "@csstools/postcss-ic-unit": "^3.0.1", + "@csstools/postcss-gamut-mapping": "^1.0.0", + "@csstools/postcss-gradients-interpolation-method": "^4.0.7", + "@csstools/postcss-hwb-function": "^3.0.6", + "@csstools/postcss-ic-unit": "^3.0.2", "@csstools/postcss-initial": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^4.0.2", + "@csstools/postcss-is-pseudo-class": "^4.0.3", "@csstools/postcss-logical-float-and-clear": "^2.0.0", "@csstools/postcss-logical-resize": "^2.0.0", - "@csstools/postcss-logical-viewport-units": "^2.0.2", - "@csstools/postcss-media-minmax": "^1.0.7", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.2", + "@csstools/postcss-logical-viewport-units": "^2.0.3", + "@csstools/postcss-media-minmax": "^1.1.0", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3", "@csstools/postcss-nested-calc": "^3.0.0", "@csstools/postcss-normalize-display-values": "^3.0.1", - "@csstools/postcss-oklab-function": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^3.0.1", - "@csstools/postcss-relative-color-syntax": "^2.0.4", + "@csstools/postcss-oklab-function": "^3.0.7", + "@csstools/postcss-progressive-custom-properties": "^3.0.2", + "@csstools/postcss-relative-color-syntax": "^2.0.7", "@csstools/postcss-scope-pseudo-class": "^3.0.0", - "@csstools/postcss-stepped-value-functions": "^3.0.1", + "@csstools/postcss-stepped-value-functions": "^3.0.2", "@csstools/postcss-text-decoration-shorthand": "^3.0.3", - "@csstools/postcss-trigonometric-functions": "^3.0.1", + "@csstools/postcss-trigonometric-functions": "^3.0.2", "@csstools/postcss-unset-value": "^3.0.0", - "autoprefixer": "^10.4.15", - "browserslist": "^4.21.10", + "autoprefixer": "^10.4.16", + "browserslist": "^4.22.1", "css-blank-pseudo": "^6.0.0", "css-has-pseudo": "^6.0.0", "css-prefers-color-scheme": "^9.0.0", - "cssdb": "^7.7.2", + "cssdb": "^7.8.0", "postcss-attribute-case-insensitive": "^6.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.1", + "postcss-color-functional-notation": "^6.0.2", "postcss-color-hex-alpha": "^9.0.2", "postcss-color-rebeccapurple": "^9.0.1", - "postcss-custom-media": "^10.0.1", - "postcss-custom-properties": "^13.3.1", - "postcss-custom-selectors": "^7.1.5", + "postcss-custom-media": "^10.0.2", + "postcss-custom-properties": "^13.3.2", + "postcss-custom-selectors": "^7.1.6", "postcss-dir-pseudo-class": "^8.0.0", - "postcss-double-position-gradients": "^5.0.1", + "postcss-double-position-gradients": "^5.0.2", "postcss-focus-visible": "^9.0.0", "postcss-focus-within": "^8.0.0", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.0", "postcss-image-set-function": "^6.0.1", - "postcss-lab-function": "^6.0.4", + "postcss-lab-function": "^6.0.7", "postcss-logical": "^7.0.0", "postcss-nesting": "^12.0.1", "postcss-opacity-percentage": "^2.0.0", @@ -12059,14 +11793,6 @@ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -12228,12 +11954,12 @@ "dev": true }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -12294,9 +12020,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "sentence-case": { @@ -12322,6 +12048,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12527,6 +12254,11 @@ "punycode": "^2.1.0" } }, + "ts-custom-error": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==" + }, "tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", @@ -12645,9 +12377,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -13153,11 +12885,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "requires": {} - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/package.json b/package.json index 971f628e..3d1f2889 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "@github/text-expander-element": "~2.5.0", "@iconify-icons/mingcute": "~1.2.8", "@justinribeiro/lite-youtube": "~1.5.0", - "@szhsin/react-menu": "~4.0.3", - "@uidotdev/usehooks": "~2.3.1", + "@szhsin/react-menu": "~4.1.0", + "@uidotdev/usehooks": "~2.4.0", "dayjs": "~1.11.10", "dayjs-twitter": "~0.5.0", "fast-blurhash": "~1.1.2", @@ -23,8 +23,8 @@ "idb-keyval": "~6.2.1", "just-debounce-it": "~3.2.0", "lz-string": "~1.5.0", - "masto": "~5.11.4", - "mem": "~9.0.2", + "masto": "~6.3.1", + "moize": "~6.1.6", "p-retry": "~6.1.0", "p-throttle": "~5.1.0", "preact": "~10.18.1", @@ -42,11 +42,11 @@ "valtio": "1.9.0" }, "devDependencies": { - "@preact/preset-vite": "~2.5.0", + "@preact/preset-vite": "~2.6.0", "@trivago/prettier-plugin-sort-imports": "~4.2.0", "postcss": "~8.4.31", "postcss-dark-theme-class": "~1.0.0", - "postcss-preset-env": "~9.1.4", + "postcss-preset-env": "~9.2.0", "twitter-text": "~3.1.0", "vite": "~4.4.11", "vite-plugin-generate-file": "~0.0.4", diff --git a/public/sw.js b/public/sw.js index e47c2cdc..2c0e2a03 100644 --- a/public/sw.js +++ b/public/sw.js @@ -165,6 +165,7 @@ self.addEventListener('notificationclick', (event) => { event.waitUntil( (async () => { + await event.notification.close(); const clients = await self.clients.matchAll({ type: 'window', includeUncontrolled: true, @@ -194,7 +195,6 @@ self.addEventListener('notificationclick', (event) => { console.log('NOTIFICATION CLICK openWindow', url); await self.clients.openWindow(url); } - await event.notification.close(); })(), ); }); diff --git a/src/app.css b/src/app.css index 0db147b8..8e48a78e 100644 --- a/src/app.css +++ b/src/app.css @@ -1418,6 +1418,13 @@ body:has(.media-modal-container + .status-deck) .media-post-link { .icon { flex-shrink: 0; + display: inline-block; + overflow: hidden; + line-height: 0; + + svg { + contain: none; + } } /* TAG */ @@ -1754,7 +1761,7 @@ meter.donut[hidden] { font-weight: 500; text-shadow: 0 1px var(--bg-color); background-color: var(--bg-color); - border: 1px solid var(--outline-color); + border: 2px solid var(--link-faded-color); box-shadow: 0 3px 16px var(--drop-shadow-color), 0 6px 16px -3px var(--drop-shadow-color); } @@ -1762,8 +1769,7 @@ meter.donut[hidden] { color: var(--text-color); border-color: var(--link-color); filter: none !important; - box-shadow: 0 0 0 1px var(--link-text-color), - 0 3px 16px var(--drop-shadow-color), + box-shadow: 0 3px 16px var(--drop-shadow-color), 0 6px 16px -3px var(--drop-shadow-color), 0 6px 16px var(--drop-shadow-color); } diff --git a/src/app.jsx b/src/app.jsx index ea7c1cc1..8c087cec 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -114,13 +114,13 @@ function App() { code, }); - const masto = initClient({ instance: instanceURL, accessToken }); + const client = initClient({ instance: instanceURL, accessToken }); await Promise.allSettled([ - initInstance(masto, instanceURL), - initAccount(masto, instanceURL, accessToken, vapidKey), + initInstance(client, instanceURL), + initAccount(client, instanceURL, accessToken, vapidKey), ]); initStates(); - initPreferences(masto); + initPreferences(client); setIsLoggedIn(true); setUIState('default'); @@ -130,14 +130,15 @@ function App() { const account = getCurrentAccount(); if (account) { store.session.set('currentAccount', account.info.id); - const { masto, instance } = api({ account }); - console.log('masto', masto); + const { client } = api({ account }); + const { instance } = client; + // console.log('masto', masto); initStates(); - initPreferences(masto); + initPreferences(client); setUIState('loading'); (async () => { try { - await initInstance(masto, instance); + await initInstance(client, instance); } catch (e) { } finally { setIsLoggedIn(true); @@ -253,9 +254,9 @@ function App() { )} - + {isLoggedIn && } - + {uiState !== 'loading' && } ); diff --git a/src/components/account-info.css b/src/components/account-info.css index 930d1cf2..43b70526 100644 --- a/src/components/account-info.css +++ b/src/components/account-info.css @@ -220,6 +220,7 @@ } .account-container .actions { + margin-block: 8px; display: flex; gap: 8px; justify-content: space-between; @@ -342,23 +343,82 @@ opacity: 1; } } -.account-container .posting-stats { - font-size: 90%; - color: var(--text-insignificant-color); +.account-container .posting-stats-button { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + width: 100%; + color: inherit; background-color: var(--bg-faded-color); padding: 8px 12px; - --size: 8px; - --original-color: var(--link-color); + font-size: 90%; + color: var(--text-insignificant-color); + line-height: 1; + vertical-align: text-top; + border-radius: 4px; &:is(:hover, :focus-within) { + color: var(--text-color); background-color: var(--link-bg-hover-color); + filter: none !important; + } + + .loader-container { + margin: 0; + opacity: 0.5; + transform: scale(0.75); + } +} + +@keyframes wobble { + 0% { + transform: rotate(-4deg); + } + 100% { + transform: rotate(4deg); + } +} +@keyframes loading-spin { + 0% { + transform: rotate(0deg) scale(0.75); + } + 100% { + transform: rotate(360deg) scale(0.75); + } +} +.posting-stats-icon { + display: inline-block; + width: 24px; + height: 8px; + filter: opacity(0.75); + animation: wobble 2s linear both infinite alternate !important; + + &.loading { + animation: loading-spin 0.35s linear both infinite !important; + } +} + +.account-container { + --posting-stats-size: 8px; + --original-color: var(--link-color); + + .posting-stats { + font-size: 90%; + color: var(--text-insignificant-color); + background-color: var(--bg-faded-color); + padding: 8px 12px; + + &:is(:hover, :focus-within) { + background-color: var(--link-bg-hover-color); + } } .posting-stats-bar { --gap: 0.5px; --gap-color: var(--outline-color); - height: var(--size); - border-radius: var(--size); + height: var(--posting-stats-size); + border-radius: var(--posting-stats-size); overflow: hidden; margin: 8px 0; box-shadow: inset 0 0 0 1px var(--outline-color), @@ -388,9 +448,9 @@ .posting-stats-legend-item { display: inline-block; - width: var(--size); - height: var(--size); - border-radius: var(--size); + width: var(--posting-stats-size); + height: var(--posting-stats-size); + border-radius: var(--posting-stats-size); background-color: var(--text-insignificant-color); vertical-align: middle; margin: 0 4px 2px; diff --git a/src/components/account-info.jsx b/src/components/account-info.jsx index bbe4e743..27e53d43 100644 --- a/src/components/account-info.jsx +++ b/src/components/account-info.jsx @@ -15,6 +15,7 @@ import enhanceContent from '../utils/enhance-content'; import getHTMLText from '../utils/getHTMLText'; import handleContentLinks from '../utils/handle-content-links'; import niceDateTime from '../utils/nice-date-time'; +import pmem from '../utils/pmem'; import shortenNumber from '../utils/shorten-number'; import showToast from '../utils/show-toast'; import states, { hideAllModals } from '../utils/states'; @@ -55,6 +56,66 @@ const MUTE_DURATIONS_LABELS = { const LIMIT = 80; +const ACCOUNT_INFO_MAX_AGE = 1000 * 60 * 10; // 10 mins + +function fetchFamiliarFollowers(currentID, masto) { + return masto.v1.accounts.familiarFollowers.fetch({ + id: [currentID], + }); +} +const memFetchFamiliarFollowers = pmem(fetchFamiliarFollowers, { + maxAge: ACCOUNT_INFO_MAX_AGE, +}); + +async function fetchPostingStats(accountID, masto) { + const fetchStatuses = masto.v1.accounts + .$select(accountID) + .statuses.list({ + limit: 20, + }) + .next(); + + const { value: statuses } = await fetchStatuses; + console.log('fetched statuses', statuses); + const stats = { + total: statuses.length, + originals: 0, + replies: 0, + boosts: 0, + }; + // Categories statuses by type + // - Original posts (not replies to others) + // - Threads (self-replies + 1st original post) + // - Boosts (reblogs) + // - Replies (not-self replies) + statuses.forEach((status) => { + if (status.reblog) { + stats.boosts++; + } else if ( + !!status.inReplyToId && + status.inReplyToAccountId !== status.account.id // Not self-reply + ) { + stats.replies++; + } else { + stats.originals++; + } + }); + + // Count days since last post + if (statuses.length) { + stats.daysSinceLastPost = Math.ceil( + (Date.now() - new Date(statuses[statuses.length - 1].createdAt)) / + 86400000, + ); + } + + console.log('posting stats', stats); + return stats; +} +const memFetchPostingStats = pmem(fetchPostingStats, { + maxAge: ACCOUNT_INFO_MAX_AGE, +}); + function AccountInfo({ account, fetchAccount = () => {}, @@ -149,7 +210,7 @@ function AccountInfo({ const familiarFollowersCache = useRef([]); async function fetchFollowers(firstLoad) { if (firstLoad || !followersIterator.current) { - followersIterator.current = masto.v1.accounts.listFollowers(id, { + followersIterator.current = masto.v1.accounts.$select(id).followers.list({ limit: LIMIT, }); } @@ -162,9 +223,9 @@ function AccountInfo({ // On first load, fetch familiar followers, merge to top of results' `value` // Remove dups on every fetch if (firstLoad) { - const familiarFollowers = await masto.v1.accounts.fetchFamiliarFollowers( - id, - ); + const familiarFollowers = await masto.v1.accounts + .familiarFollowers(id) + .fetch(); familiarFollowersCache.current = familiarFollowers[0].accounts; newValue = [ ...familiarFollowersCache.current, @@ -193,7 +254,7 @@ function AccountInfo({ const followingIterator = useRef(); async function fetchFollowing(firstLoad) { if (firstLoad || !followingIterator.current) { - followingIterator.current = masto.v1.accounts.listFollowing(id, { + followingIterator.current = masto.v1.accounts.$select(id).following.list({ limit: LIMIT, }); } @@ -206,71 +267,47 @@ function AccountInfo({ const [familiarFollowers, setFamiliarFollowers] = useState([]); const [postingStats, setPostingStats] = useState(); - const hasPostingStats = postingStats?.total >= 3; + const [postingStatsUIState, setPostingStatsUIState] = useState('default'); + const hasPostingStats = !!postingStats?.total; + + const renderFamiliarFollowers = async (currentID) => { + try { + const followers = await memFetchFamiliarFollowers( + currentID, + currentMasto, + ); + console.log('fetched familiar followers', followers); + setFamiliarFollowers( + followers[0].accounts.slice(0, FAMILIAR_FOLLOWERS_LIMIT), + ); + } catch (e) { + console.error(e); + } + }; + + const renderPostingStats = async () => { + if (!id) return; + setPostingStatsUIState('loading'); + try { + const stats = await memFetchPostingStats(id, masto); + setPostingStats(stats); + setPostingStatsUIState('default'); + } catch (e) { + console.error(e); + setPostingStatsUIState('error'); + } + }; const onRelationshipChange = useCallback( ({ relationship, currentID }) => { if (!relationship.following) { - (async () => { - try { - const fetchFamiliarFollowers = - currentMasto.v1.accounts.fetchFamiliarFollowers(currentID); - const fetchStatuses = currentMasto.v1.accounts - .listStatuses(currentID, { - limit: 20, - }) - .next(); - - const followers = await fetchFamiliarFollowers; - console.log('fetched familiar followers', followers); - setFamiliarFollowers( - followers[0].accounts.slice(0, FAMILIAR_FOLLOWERS_LIMIT), - ); - - if (!standalone) { - const { value: statuses } = await fetchStatuses; - console.log('fetched statuses', statuses); - const stats = { - total: statuses.length, - originals: 0, - replies: 0, - boosts: 0, - }; - // Categories statuses by type - // - Original posts (not replies to others) - // - Threads (self-replies + 1st original post) - // - Boosts (reblogs) - // - Replies (not-self replies) - statuses.forEach((status) => { - if (status.reblog) { - stats.boosts++; - } else if ( - status.inReplyToAccountId !== currentID && - !!status.inReplyToId - ) { - stats.replies++; - } else { - stats.originals++; - } - }); - - // Count days since last post - stats.daysSinceLastPost = Math.ceil( - (Date.now() - - new Date(statuses[statuses.length - 1].createdAt)) / - 86400000, - ); - - console.log('posting stats', stats); - setPostingStats(stats); - } - } catch (e) { - console.error(e); - } - })(); + renderFamiliarFollowers(currentID); + if (!standalone) { + renderPostingStats(); + } } }, - [standalone], + [standalone, id], ); return ( @@ -307,7 +344,7 @@ function AccountInfo({

β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ

β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ

-

+

β–ˆβ–ˆ Followers
@@ -318,7 +355,7 @@ function AccountInfo({ β–ˆβ–ˆ Posts
Joined β–ˆβ–ˆ
-

+ ) : ( @@ -583,8 +620,8 @@ function AccountInfo({ )} - {hasPostingStats && ( - { @@ -593,60 +630,97 @@ function AccountInfo({ >
-
-
- {postingStats.daysSinceLastPost < 365 - ? `Last ${postingStats.total} posts in the past - ${postingStats.daysSinceLastPost} day${ - postingStats.daysSinceLastPost > 1 ? 's' : '' - }` - : ` - Last ${postingStats.total} posts in the past year(s) - `} -
+ {hasPostingStats ? (
-
- - {' '} - Original - {' '} - - {' '} - Replies - {' '} - - {' '} - Boosts - + class="posting-stats" + title={`${Math.round( + (postingStats.originals / postingStats.total) * 100, + )}% original posts, ${Math.round( + (postingStats.replies / postingStats.total) * 100, + )}% replies, ${Math.round( + (postingStats.boosts / postingStats.total) * 100, + )}% boosts`} + > +
+ {postingStats.daysSinceLastPost < 365 + ? `Last ${postingStats.total} posts in the past + ${postingStats.daysSinceLastPost} day${ + postingStats.daysSinceLastPost > 1 ? 's' : '' + }` + : ` + Last ${postingStats.total} posts in the past year(s) + `} +
+
+
+ + {' '} + Original + {' '} + + {' '} + Replies + {' '} + + {' '} + Boosts + +
-
+ ) : ( +
Post stats unavailable.
+ )}
- + )} + -

+

{followedBy ? ( Following you @@ -913,10 +989,9 @@ function RelatedActions({ setRelationshipUIState('loading'); (async () => { try { - const newRelationship = - await currentMasto.v1.accounts.unmute( - currentInfo?.id || id, - ); + const newRelationship = await currentMasto.v1.accounts + .$select(currentInfo?.id || id) + .unmute(); console.log('unmuting', newRelationship); setRelationship(newRelationship); setRelationshipUIState('default'); @@ -962,12 +1037,11 @@ function RelatedActions({ (async () => { try { const newRelationship = - await currentMasto.v1.accounts.mute( - currentInfo?.id || id, - { + await currentMasto.v1.accounts + .$select(currentInfo?.id || id) + .mute({ duration, - }, - ); + }); console.log('muting', newRelationship); setRelationship(newRelationship); setRelationshipUIState('default'); @@ -1008,19 +1082,17 @@ function RelatedActions({ (async () => { try { if (blocking) { - const newRelationship = - await currentMasto.v1.accounts.unblock( - currentInfo?.id || id, - ); + const newRelationship = await currentMasto.v1.accounts + .$select(currentInfo?.id || id) + .unblock(); console.log('unblocking', newRelationship); setRelationship(newRelationship); setRelationshipUIState('default'); showToast(`Unblocked @${username}`); } else { - const newRelationship = - await currentMasto.v1.accounts.block( - currentInfo?.id || id, - ); + const newRelationship = await currentMasto.v1.accounts + .$select(currentInfo?.id || id) + .block(); console.log('blocking', newRelationship); setRelationship(newRelationship); setRelationshipUIState('default'); @@ -1089,14 +1161,14 @@ function RelatedActions({ // ); // if (yes) { - newRelationship = await currentMasto.v1.accounts.unfollow( - accountID.current, - ); + newRelationship = await currentMasto.v1.accounts + .$select(accountID.current) + .unfollow(); // } } else { - newRelationship = await currentMasto.v1.accounts.follow( - accountID.current, - ); + newRelationship = await currentMasto.v1.accounts + .$select(accountID.current) + .follow(); } if (newRelationship) setRelationship(newRelationship); @@ -1135,7 +1207,7 @@ function RelatedActions({ )} -

+
{!!showTranslatedBio && ( { try { const lists = await masto.v1.lists.list(); - const listsContainingAccount = await masto.v1.accounts.listLists( - accountID, - ); + const listsContainingAccount = await masto.v1.accounts + .$select(accountID) + .lists.list(); console.log({ lists, listsContainingAccount }); setLists(lists); setListsContainingAccount(listsContainingAccount); @@ -1285,13 +1357,17 @@ function AddRemoveListsSheet({ accountID, onClose }) { (async () => { try { if (inList) { - await masto.v1.lists.removeAccount(list.id, { - accountIds: [accountID], - }); + await masto.v1.lists + .$select(list.id) + .accounts.remove({ + accountIds: [accountID], + }); } else { - await masto.v1.lists.addAccount(list.id, { - accountIds: [accountID], - }); + await masto.v1.lists + .$select(list.id) + .accounts.create({ + accountIds: [accountID], + }); } // setUIState('default'); reload(); diff --git a/src/components/account-sheet.jsx b/src/components/account-sheet.jsx index 9093dc90..6a0d74f9 100644 --- a/src/components/account-sheet.jsx +++ b/src/components/account-sheet.jsx @@ -46,7 +46,7 @@ function AccountSheet({ account, instance: propInstance, onClose }) { }); return info; } catch (e) { - const result = await masto.v2.search({ + const result = await masto.v2.search.fetch({ q: account, type: 'accounts', limit: 1, @@ -57,7 +57,7 @@ function AccountSheet({ account, instance: propInstance, onClose }) { } else if (/https?:\/\/[^/]+\/@/.test(account)) { const accountURL = new URL(account); const acct = accountURL.pathname.replace(/^\//, ''); - const result = await masto.v2.search({ + const result = await masto.v2.search.fetch({ q: acct, type: 'accounts', limit: 1, diff --git a/src/components/avatar.css b/src/components/avatar.css index aea50bf0..743793b0 100644 --- a/src/components/avatar.css +++ b/src/components/avatar.css @@ -21,6 +21,7 @@ height: 100%; object-fit: cover; background-color: var(--img-bg-color); + contain: none; } .avatar[data-loaded], diff --git a/src/components/background-service.jsx b/src/components/background-service.jsx index 52a514a3..8061b97b 100644 --- a/src/components/background-service.jsx +++ b/src/components/background-service.jsx @@ -11,10 +11,10 @@ export default memo(function BackgroundService({ isLoggedIn }) { // - WebSocket to receive notifications when page is visible const [visible, setVisible] = useState(true); usePageVisibility(setVisible); - const notificationStream = useRef(); useEffect(() => { + let sub; if (isLoggedIn && visible) { - const { masto, instance } = api(); + const { masto, streaming, instance } = api(); (async () => { // 1. Get the latest notification if (states.notificationsLast) { @@ -42,34 +42,26 @@ export default memo(function BackgroundService({ isLoggedIn }) { } // 2. Start streaming - notificationStream.current = await masto.ws.stream( - '/api/v1/streaming', - { - stream: 'user:notification', - }, - ); - console.log('🎏 Streaming notification', notificationStream.current); - - notificationStream.current.on('notification', (notification) => { - console.log('πŸ””πŸ”” Notification', notification); - if (notification.status) { - saveStatus(notification.status, instance, { - skipThreading: true, - }); + if (streaming) { + sub = streaming.user.notification.subscribe(); + console.log('🎏 Streaming notification', sub); + for await (const entry of sub) { + if (!sub) break; + console.log('πŸ””πŸ”” Notification entry', entry); + if (entry.event === 'notification') { + console.log('πŸ””πŸ”” Notification', entry); + saveStatus(entry.payload, instance, { + skipThreading: true, + }); + } + states.notificationsShowNew = true; } - states.notificationsShowNew = true; - }); - - notificationStream.current.ws.onclose = () => { - console.log('πŸ””πŸ”” Notification stream closed'); - }; + } })(); } return () => { - if (notificationStream.current) { - notificationStream.current.ws.close(); - notificationStream.current = null; - } + sub?.unsubscribe?.(); + sub = null; }; }, [visible, isLoggedIn]); diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 2ab29f3e..5a1f47c7 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -185,7 +185,7 @@ function Compose({ : visibility, ); setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG); - setSensitive(sensitive); + setSensitive(sensitive && !!spoilerText); } else if (editStatus) { const { visibility, language, sensitive, poll, mediaAttachments } = editStatus; @@ -197,9 +197,9 @@ function Compose({ setUIState('loading'); (async () => { try { - const statusSource = await masto.v1.statuses.fetchSource( - editStatus.id, - ); + const statusSource = await masto.v1.statuses + .$select(editStatus.id) + .source.fetch(); console.log({ statusSource }); const { text, spoilerText } = statusSource; textareaRef.current.value = text; @@ -749,14 +749,12 @@ function Compose({ file, description, }); - return masto.v2.mediaAttachments - .create(params) - .then((res) => { - if (res.id) { - attachment.id = res.id; - } - return res; - }); + return masto.v2.media.create(params).then((res) => { + if (res.id) { + attachment.id = res.id; + } + return res; + }); } }); const results = await Promise.allSettled(mediaPromises); @@ -784,6 +782,8 @@ function Compose({ /* NOTE: Using snakecase here because masto.js's `isObject` returns false for `params`, ONLY happens when opening in pop-out window. This is maybe due to `window.masto` variable being passed from the parent window. The check that failed is `x.constructor === Object`, so maybe the `Object` in new window is different than parent window's? Code: https://github.com/neet/masto.js/blob/dd0d649067b6a2b6e60fbb0a96597c373a255b00/src/serializers/is-object.ts#L2 + + // TODO: Note above is no longer true in Masto.js v6. Revisit this. */ let params = { status, @@ -818,10 +818,9 @@ function Compose({ let newStatus; if (editStatus) { - newStatus = await masto.v1.statuses.update( - editStatus.id, - params, - ); + newStatus = await masto.v1.statuses + .$select(editStatus.id) + .update(params); saveStatus(newStatus, instance, { skipThreading: true, }); @@ -935,13 +934,13 @@ function Compose({ performSearch={(params) => { const { type, q, limit } = params; if (type === 'accounts') { - return masto.v1.accounts.search({ + return masto.v1.accounts.search.list({ q, limit, resolve: false, }); } - return masto.v2.search(params); + return masto.v2.search.fetch(params); }} /> {mediaAttachments?.length > 0 && ( @@ -1478,7 +1477,10 @@ function MediaAttachment({ }) { const supportsEdit = supports('@mastodon/edit-media-attributes'); const { type, id, file } = attachment; - const url = file ? URL.createObjectURL(file) : attachment.url; + const url = useMemo( + () => (file ? URL.createObjectURL(file) : attachment.url), + [file, attachment.url], + ); console.log({ attachment }); const [description, setDescription] = useState(attachment.description); const suffixType = type.split('/')[0]; diff --git a/src/components/drafts.jsx b/src/components/drafts.jsx index be783f15..bf2d8c2a 100644 --- a/src/components/drafts.jsx +++ b/src/components/drafts.jsx @@ -128,9 +128,9 @@ function Drafts({ onClose }) { if (replyTo) { setUIState('loading'); try { - replyToStatus = await masto.v1.statuses.fetch( - replyTo.id, - ); + replyToStatus = await masto.v1.statuses + .$select(replyTo.id) + .fetch(); } catch (e) { console.error(e); alert('Error fetching reply-to status!'); diff --git a/src/components/follow-request-buttons.jsx b/src/components/follow-request-buttons.jsx index d0fa6061..12068001 100644 --- a/src/components/follow-request-buttons.jsx +++ b/src/components/follow-request-buttons.jsx @@ -23,7 +23,9 @@ function FollowRequestButtons({ accountID, onChange }) { setRequestState('accept'); (async () => { try { - const rel = await masto.v1.followRequests.authorize(accountID); + const rel = await masto.v1.followRequests + .$select(accountID) + .authorize(); if (!rel?.followedBy) { throw new Error('Follow request not accepted'); } @@ -47,7 +49,9 @@ function FollowRequestButtons({ accountID, onChange }) { setRequestState('reject'); (async () => { try { - const rel = await masto.v1.followRequests.reject(accountID); + const rel = await masto.v1.followRequests + .$select(accountID) + .reject(); if (rel?.followedBy) { throw new Error('Follow request not rejected'); } diff --git a/src/components/icon.jsx b/src/components/icon.jsx index a96a64cd..9186383b 100644 --- a/src/components/icon.jsx +++ b/src/components/icon.jsx @@ -1,3 +1,4 @@ +import { memo } from 'preact/compat'; import { useEffect, useState } from 'preact/hooks'; const SIZES = { @@ -132,9 +133,6 @@ function Icon({ style={{ width: `${iconSize}px`, height: `${iconSize}px`, - display: 'inline-block', - overflow: 'hidden', - lineHeight: 0, ...style, }} > @@ -155,4 +153,4 @@ function Icon({ ); } -export default Icon; +export default memo(Icon); diff --git a/src/components/list-add-edit.jsx b/src/components/list-add-edit.jsx index d5a76338..3bf6ff03 100644 --- a/src/components/list-add-edit.jsx +++ b/src/components/list-add-edit.jsx @@ -56,7 +56,7 @@ function ListAddEdit({ list, onClose }) { let listResult; if (editMode) { - listResult = await masto.v1.lists.update(list.id, { + listResult = await masto.v1.lists.$select(list.id).update({ title, replies_policy: repliesPolicy, exclusive, @@ -141,7 +141,7 @@ function ListAddEdit({ list, onClose }) { (async () => { try { - await masto.v1.lists.remove(list.id); + await masto.v1.lists.$select(list.id).remove(); setUIState('default'); onClose?.({ state: 'deleted', diff --git a/src/components/media.jsx b/src/components/media.jsx index 7861c217..6699fc4f 100644 --- a/src/components/media.jsx +++ b/src/components/media.jsx @@ -1,5 +1,4 @@ import { getBlurHashAverageColor } from 'fast-blurhash'; -import mem from 'mem'; import { Fragment } from 'preact'; import { useCallback, @@ -10,6 +9,7 @@ import { } from 'preact/hooks'; import QuickPinchZoom, { make3dTransformValue } from 'react-quick-pinch-zoom'; +import mem from '../utils/mem'; import states from '../utils/states'; import Icon from './icon'; diff --git a/src/components/notification-service.jsx b/src/components/notification-service.jsx index c0ff73d4..29ec2a29 100644 --- a/src/components/notification-service.jsx +++ b/src/components/notification-service.jsx @@ -38,7 +38,7 @@ export default memo(function NotificationService() { ? getAccountByAccessToken(accessToken) : getCurrentAccount(); (async () => { - const notification = await masto.v1.notifications.fetch(id); + const notification = await masto.v1.notifications.$select(id).fetch(); if (notification && account) { console.log('πŸ›ŽοΈ Notification', { id, notification, account }); const accountInstance = account.instanceURL; diff --git a/src/components/notification.jsx b/src/components/notification.jsx index 079317d2..e02beea3 100644 --- a/src/components/notification.jsx +++ b/src/components/notification.jsx @@ -58,14 +58,14 @@ const contentText = { 'favourite+reblog+account': (count) => `boosted & favourited ${count} of your posts.`, 'favourite+reblog_reply': 'boosted & favourited your reply.', - 'admin.signup': 'signed up.', - 'admin.report': 'reported a post.', + 'admin.sign_up': 'signed up.', + 'admin.report': (targetAccount) => <>reported {targetAccount}, }; const AVATARS_LIMIT = 50; function Notification({ notification, instance, reload, isStatic }) { - const { id, status, account, _accounts, _statuses } = notification; + const { id, status, account, report, _accounts, _statuses } = notification; let { type } = notification; // status = Attached when type of the notification is favourite, reblog, status, mention, poll, or update @@ -119,7 +119,15 @@ function Notification({ notification, instance, reload, isStatic }) { } if (typeof text === 'function') { - text = text(_statuses?.length || _accounts?.length); + const count = _statuses?.length || _accounts?.length; + if (count) { + text = text(count); + } else if (type === 'admin.report') { + const targetAccount = report?.targetAccount; + if (targetAccount) { + text = text(); + } + } } if (type === 'mention' && !status) { diff --git a/src/components/shortcuts-settings.jsx b/src/components/shortcuts-settings.jsx index 55c8b399..c6ecfd31 100644 --- a/src/components/shortcuts-settings.jsx +++ b/src/components/shortcuts-settings.jsx @@ -4,7 +4,6 @@ import { compressToEncodedURIComponent, decompressFromEncodedURIComponent, } from 'lz-string'; -import mem from 'mem'; import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; import { useSnapshot } from 'valtio'; @@ -13,6 +12,7 @@ import multiColumnUrl from '../assets/multi-column.svg'; import tabMenuBarUrl from '../assets/tab-menu-bar.svg'; import { api } from '../utils/api'; +import pmem from '../utils/pmem'; import showToast from '../utils/show-toast'; import states from '../utils/states'; @@ -133,15 +133,10 @@ export const SHORTCUTS_META = { }, list: { id: 'list', - title: mem( - async ({ id }) => { - const list = await api().masto.v1.lists.fetch(id); - return list.title; - }, - { - cacheKey: ([{ id }]) => id, - }, - ), + title: pmem(async ({ id }) => { + const list = await api().masto.v1.lists.$select(id).fetch(); + return list.title; + }), path: ({ id }) => `/l/${id}`, icon: 'list', }, @@ -167,15 +162,10 @@ export const SHORTCUTS_META = { }, 'account-statuses': { id: 'account-statuses', - title: mem( - async ({ id }) => { - const account = await api().masto.v1.accounts.fetch(id); - return account.username || account.acct || account.displayName; - }, - { - cacheKey: ([{ id }]) => id, - }, - ), + title: pmem(async ({ id }) => { + const account = await api().masto.v1.accounts.$select(id).fetch(); + return account.username || account.acct || account.displayName; + }), path: ({ id }) => `/a/${id}`, icon: 'user', }, diff --git a/src/components/status.css b/src/components/status.css index e3a28509..77f55d9a 100644 --- a/src/components/status.css +++ b/src/components/status.css @@ -337,7 +337,7 @@ .status > .container > .meta a.time:after { content: ''; position: absolute; - inset: -16px; + inset: -16px -16px -8px; } .status > .container > .meta .reply-to { opacity: 0.5; @@ -1020,13 +1020,38 @@ body:has(#modal-container .carousel) .status .media img:hover { color: var(--text-color); cursor: pointer; } + + &:only-child { + white-space: pre-line; + overflow: auto; + text-overflow: unset; + display: flex; + gap: 4px; + } } sup { opacity: 0.75; font-variant-numeric: tabular-nums; + flex-shrink: 0; } } + + /* Only 4, for now. Would be better if this is a for loop */ + &:has(.media[data-has-alt]:nth-child(1):is(:hover, :focus)) + figcaption + > div[data-caption-index~='1'], + &:has(.media[data-has-alt]:nth-child(2):is(:hover, :focus)) + figcaption + > div[data-caption-index~='2'], + &:has(.media[data-has-alt]:nth-child(3):is(:hover, :focus)) + figcaption + > div[data-caption-index~='3'], + &:has(.media[data-has-alt]:nth-child(4):is(:hover, :focus)) + figcaption + > div[data-caption-index~='4'] { + color: var(--text-color); + } } .carousel-item { diff --git a/src/components/status.jsx b/src/components/status.jsx index 8477ef2e..9eb846e9 100644 --- a/src/components/status.jsx +++ b/src/components/status.jsx @@ -9,7 +9,6 @@ import { MenuItem, } from '@szhsin/react-menu'; import { decodeBlurHash } from 'fast-blurhash'; -import mem from 'mem'; import pThrottle from 'p-throttle'; import { memo } from 'preact/compat'; import { @@ -42,6 +41,7 @@ import htmlContentLength from '../utils/html-content-length'; import isMastodonLinkMaybe from '../utils/isMastodonLinkMaybe'; import localeMatch from '../utils/locale-match'; import niceDateTime from '../utils/nice-date-time'; +import pmem from '../utils/pmem'; import safeBoundingBoxPadding from '../utils/safe-bounding-box-padding'; import shortenNumber from '../utils/shorten-number'; import showToast from '../utils/show-toast'; @@ -67,13 +67,9 @@ const throttle = pThrottle({ }); function fetchAccount(id, masto) { - try { - return masto.v1.accounts.fetch(id); - } catch (e) { - return Promise.reject(e); - } + return masto.v1.accounts.$select(id).fetch(); } -const memFetchAccount = mem(fetchAccount); +const memFetchAccount = pmem(fetchAccount); const visibilityText = { public: 'Public', @@ -390,11 +386,11 @@ function Status({ reblogsCount: reblogsCount + (reblogged ? -1 : 1), }; if (reblogged) { - const newStatus = await masto.v1.statuses.unreblog(id); + const newStatus = await masto.v1.statuses.$select(id).unreblog(); saveStatus(newStatus, instance); return true; } else { - const newStatus = await masto.v1.statuses.reblog(id); + const newStatus = await masto.v1.statuses.$select(id).reblog(); saveStatus(newStatus, instance); return true; } @@ -418,11 +414,11 @@ function Status({ reblogsCount: reblogsCount + (reblogged ? -1 : 1), }; if (reblogged) { - const newStatus = await masto.v1.statuses.unreblog(id); + const newStatus = await masto.v1.statuses.$select(id).unreblog(); saveStatus(newStatus, instance); return true; } else { - const newStatus = await masto.v1.statuses.reblog(id); + const newStatus = await masto.v1.statuses.$select(id).reblog(); saveStatus(newStatus, instance); return true; } @@ -446,10 +442,10 @@ function Status({ favouritesCount: favouritesCount + (favourited ? -1 : 1), }; if (favourited) { - const newStatus = await masto.v1.statuses.unfavourite(id); + const newStatus = await masto.v1.statuses.$select(id).unfavourite(); saveStatus(newStatus, instance); } else { - const newStatus = await masto.v1.statuses.favourite(id); + const newStatus = await masto.v1.statuses.$select(id).favourite(); saveStatus(newStatus, instance); } } catch (e) { @@ -470,10 +466,10 @@ function Status({ bookmarked: !bookmarked, }; if (bookmarked) { - const newStatus = await masto.v1.statuses.unbookmark(id); + const newStatus = await masto.v1.statuses.$select(id).unbookmark(); saveStatus(newStatus, instance); } else { - const newStatus = await masto.v1.statuses.bookmark(id); + const newStatus = await masto.v1.statuses.$select(id).bookmark(); saveStatus(newStatus, instance); } } catch (e) { @@ -708,9 +704,9 @@ function Status({ { try { - const newStatus = await masto.v1.statuses[ - muted ? 'unmute' : 'mute' - ](id); + const newStatus = await masto.v1.statuses + .$select(id) + [muted ? 'unmute' : 'mute'](); saveStatus(newStatus, instance); showToast(muted ? 'Conversation unmuted' : 'Conversation muted'); } catch (e) { @@ -763,7 +759,7 @@ function Status({ // if (yes) { (async () => { try { - await masto.v1.statuses.remove(id); + await masto.v1.statuses.$select(id).remove(); const cachedStatus = getStatus(id, instance); cachedStatus._deleted = true; showToast('Deleted'); @@ -881,6 +877,62 @@ function Status({ displayedMediaAttachments.some( (media) => !!media.description && !isMediaCaptionLong(media.description), ); + const captionChildren = useMemo(() => { + if (!showMultipleMediaCaptions) return null; + const attachments = []; + displayedMediaAttachments.forEach((media, i) => { + if (!media.description) return; + const index = attachments.findIndex( + (attachment) => attachment.media.description === media.description, + ); + if (index === -1) { + attachments.push({ + media, + indices: [i], + }); + } else { + attachments[index].indices.push(i); + } + }); + return attachments.map(({ media, indices }) => ( +
i + 1).join(' ')} + onClick={(e) => { + e.preventDefault(); + e.stopPropagation(); + states.showMediaAlt = { + alt: media.description, + lang: language, + }; + }} + title={media.description} + > + {indices.map((i) => i + 1).join(' ')} {media.description} +
+ )); + + // return displayedMediaAttachments.map( + // (media, i) => + // !!media.description && ( + //
{ + // e.preventDefault(); + // e.stopPropagation(); + // states.showMediaAlt = { + // alt: media.description, + // lang: language, + // }; + // }} + // title={media.description} + // > + // {i + 1} {media.description} + //
+ // ), + // ); + }, [showMultipleMediaCaptions, displayedMediaAttachments, language]); return (
{ return masto.v1.polls - .fetch(poll.id) + .$select(poll.id) + .fetch() .then((pollResponse) => { states.statuses[sKey].poll = pollResponse; }) @@ -1220,7 +1273,8 @@ function Status({ }} votePoll={(choices) => { return masto.v1.polls - .vote(poll.id, { + .$select(poll.id) + .votes.create({ choices, }) .then((pollResponse) => { @@ -1279,27 +1333,7 @@ function Status({ { - return displayedMediaAttachments.map( - (media, i) => - !!media.description && ( -
{ - e.preventDefault(); - e.stopPropagation(); - states.showMediaAlt = { - alt: media.description, - lang: language, - }; - }} - title={media.description} - > - {i + 1} {media.description} -
- ), - ); - }} + captionChildren={captionChildren} >
{ - return masto.v1.statuses.listHistory(showEdited); + return masto.v1.statuses.$select(showEdited).history.list(); }} onClose={() => { setShowEdited(false); @@ -1534,7 +1568,7 @@ function MultipleMediaFigure(props) {
{children}
- {captionChildren?.()} + {captionChildren}
); @@ -1585,7 +1619,7 @@ function Card({ card, instance }) { // NOTE: This is for quote post // (async () => { // const { masto } = api({ instance }); - // const status = await masto.v1.statuses.fetch(id); + // const status = await masto.v1.statuses.$select(id).fetch(); // saveStatus(status, instance); // setCardStatusID(id); // })(); @@ -1805,15 +1839,16 @@ function ReactionsModal({ statusID, instance, onClose }) { (async () => { try { if (firstLoad) { - reblogIterator.current = masto.v1.statuses.listRebloggedBy(statusID, { - limit: REACTIONS_LIMIT, - }); - favouriteIterator.current = masto.v1.statuses.listFavouritedBy( - statusID, - { + reblogIterator.current = masto.v1.statuses + .$select(statusID) + .rebloggedBy.list({ limit: REACTIONS_LIMIT, - }, - ); + }); + favouriteIterator.current = masto.v1.statuses + .$select(statusID) + .favouritedBy.list({ + limit: REACTIONS_LIMIT, + }); } const [{ value: reblogResults }, { value: favouriteResults }] = await Promise.allSettled([ @@ -2043,21 +2078,24 @@ function _unfurlMastodonLink(instance, url) { if (statusMatch) { const id = statusMatch[3]; const { masto } = api({ instance: domain }); - remoteInstanceFetch = masto.v1.statuses.fetch(id).then((status) => { - if (status?.id) { - return { - status, - instance: domain, - }; - } else { - throw new Error('No results'); - } - }); + remoteInstanceFetch = masto.v1.statuses + .$select(id) + .fetch() + .then((status) => { + if (status?.id) { + return { + status, + instance: domain, + }; + } else { + throw new Error('No results'); + } + }); } const { masto } = api({ instance }); - const mastoSearchFetch = masto.v2 - .search({ + const mastoSearchFetch = masto.v2.search + .fetch({ q: url, type: 'statuses', resolve: true, @@ -2127,11 +2165,7 @@ function nicePostURL(url) { ); } -const unfurlMastodonLink = throttle( - mem(_unfurlMastodonLink, { - cacheKey: (instance, url) => `${instance}:${url}`, - }), -); +const unfurlMastodonLink = throttle(_unfurlMastodonLink); function FilteredStatus({ status, filterInfo, instance, containerProps = {} }) { const { diff --git a/src/components/translation-block.jsx b/src/components/translation-block.jsx index 1d71f968..06ce52de 100644 --- a/src/components/translation-block.jsx +++ b/src/components/translation-block.jsx @@ -7,6 +7,7 @@ import { useEffect, useRef, useState } from 'preact/hooks'; import sourceLanguages from '../data/lingva-source-languages'; import getTranslateTargetLanguage from '../utils/get-translate-target-language'; import localeCode2Text from '../utils/localeCode2Text'; +import pmem from '../utils/pmem'; import Icon from './icon'; import Loader from './loader'; @@ -25,7 +26,7 @@ const LINGVA_INSTANCES = [ ]; let currentLingvaInstance = 0; -function lingvaTranslate(text, source, target) { +function _lingvaTranslate(text, source, target) { console.log('TRANSLATE', text, source, target); const fetchCall = () => { let instance = LINGVA_INSTANCES[currentLingvaInstance]; @@ -55,11 +56,18 @@ function lingvaTranslate(text, source, target) { ); }, }); - // return masto.v1.statuses.translate(id, { + // return masto.v1.statuses.$select(id).translate({ // lang: DEFAULT_LANG, // }); } -const throttledLingvaTranslate = throttle(lingvaTranslate); +const TRANSLATED_MAX_AGE = 1000 * 60 * 60; // 1 hour +const lingvaTranslate = pmem(_lingvaTranslate, { + maxAge: TRANSLATED_MAX_AGE, +}); +const throttledLingvaTranslate = pmem(throttle(lingvaTranslate), { + // I know, this is double-layered memoization + maxAge: TRANSLATED_MAX_AGE, +}); function TranslationBlock({ forceTranslate, diff --git a/src/pages/account-statuses.jsx b/src/pages/account-statuses.jsx index b8212948..0126a399 100644 --- a/src/pages/account-statuses.jsx +++ b/src/pages/account-statuses.jsx @@ -31,7 +31,8 @@ function AccountStatuses() { const results = []; if (firstLoad) { const { value: pinnedStatuses } = await masto.v1.accounts - .listStatuses(id, { + .$select(id) + .statuses.list({ pinned: true, }) .next(); @@ -53,13 +54,15 @@ function AccountStatuses() { } } if (firstLoad || !accountStatusesIterator.current) { - accountStatusesIterator.current = masto.v1.accounts.listStatuses(id, { - limit: LIMIT, - exclude_replies: excludeReplies, - exclude_reblogs: excludeBoosts, - only_media: media, - tagged, - }); + accountStatusesIterator.current = masto.v1.accounts + .$select(id) + .statuses.list({ + limit: LIMIT, + exclude_replies: excludeReplies, + exclude_reblogs: excludeBoosts, + only_media: media, + tagged, + }); } const { value, done } = await accountStatusesIterator.current.next(); if (value?.length) { @@ -86,14 +89,16 @@ function AccountStatuses() { useEffect(() => { (async () => { try { - const acc = await masto.v1.accounts.fetch(id); + const acc = await masto.v1.accounts.$select(id).fetch(); console.log(acc); setAccount(acc); } catch (e) { console.error(e); } try { - const featuredTags = await masto.v1.accounts.listFeaturedTags(id); + const featuredTags = await masto.v1.accounts + .$select(id) + .featuredTags.list(id); console.log({ featuredTags }); setFeaturedTags(featuredTags); } catch (e) { @@ -113,7 +118,7 @@ function AccountStatuses() { masto.v1.accounts.fetch(id)} + fetchAccount={() => masto.v1.accounts.$select(id).fetch()} authenticated={authenticated} standalone /> diff --git a/src/pages/accounts.jsx b/src/pages/accounts.jsx index 47d90b01..d43a33fb 100644 --- a/src/pages/accounts.jsx +++ b/src/pages/accounts.jsx @@ -52,9 +52,9 @@ function Accounts({ onClose }) { onDblClick={async () => { if (isCurrent) { try { - const info = await masto.v1.accounts.fetch( - account.info.id, - ); + const info = await masto.v1.accounts + .$select(account.info.id) + .fetch(); console.log('fetched account info', info); account.info = info; store.local.setJSON('accounts', accounts); diff --git a/src/pages/following.jsx b/src/pages/following.jsx index 627a74e4..3d081f32 100644 --- a/src/pages/following.jsx +++ b/src/pages/following.jsx @@ -13,7 +13,7 @@ const LIMIT = 20; function Following({ title, path, id, ...props }) { useTitle(title || 'Following', path || '/following'); - const { masto, instance } = api(); + const { masto, streaming, instance } = api(); const snapStates = useSnapshot(states); const homeIterator = useRef(); const latestItem = useRef(); @@ -22,7 +22,7 @@ function Following({ title, path, id, ...props }) { async function fetchHome(firstLoad) { if (firstLoad || !homeIterator.current) { - homeIterator.current = masto.v1.timelines.listHome({ limit: LIMIT }); + homeIterator.current = masto.v1.timelines.home.list({ limit: LIMIT }); } const results = await homeIterator.current.next(); let { value } = results; @@ -53,8 +53,8 @@ function Following({ title, path, id, ...props }) { async function checkForUpdates() { try { - const results = await masto.v1.timelines - .listHome({ + const results = await masto.v1.timelines.home + .list({ limit: 5, since_id: latestItem.current, }) @@ -75,52 +75,33 @@ function Following({ title, path, id, ...props }) { } } - const ws = useRef(); - const streamUser = async () => { - console.log('🎏 Start streaming user', ws.current); - if ( - ws.current && - (ws.current.readyState === WebSocket.CONNECTING || - ws.current.readyState === WebSocket.OPEN) - ) { - console.log('🎏 Streaming user already open'); - return; - } - const stream = await masto.v1.stream.streamUser(); - ws.current = stream.ws; - ws.current.__id = Math.random(); - console.log('🎏 Streaming user', ws.current); - - stream.on('status.update', (status) => { - console.log(`πŸ”„ Status ${status.id} updated`); - saveStatus(status, instance); - }); - - stream.on('delete', (statusID) => { - console.log(`❌ Status ${statusID} deleted`); - // delete states.statuses[statusID]; - const s = getStatus(statusID, instance); - if (s) s._deleted = true; - }); - - stream.ws.onclose = () => { - console.log('🎏 Streaming user closed'); - }; - - return stream; - }; useEffect(() => { - let stream; + let sub; (async () => { - stream = await streamUser(); + if (streaming) { + sub = streaming.user.subscribe(); + console.log('🎏 Streaming user', sub); + for await (const entry of sub) { + if (!sub) break; + if (entry.event === 'status.update') { + const status = entry.payload; + console.log(`πŸ”„ Status ${status.id} updated`); + saveStatus(status, instance); + } else if (entry.event === 'delete') { + const statusID = entry.payload; + console.log(`❌ Status ${statusID} deleted`); + // delete states.statuses[statusID]; + const s = getStatus(statusID, instance); + if (s) s._deleted = true; + } + } + } })(); return () => { - if (stream) { - stream.ws.close(); - ws.current = null; - } + sub?.unsubscribe?.(); + sub = null; }; - }, []); + }, [streaming]); return ( { (async () => { try { - const info = await masto.v1.tags.fetch(hashtag); + const info = await masto.v1.tags.$select(hashtag).fetch(); console.log(info); setInfo(info); } catch (e) { @@ -163,7 +165,8 @@ function Hashtags({ columnMode, ...props }) { // return; // } masto.v1.tags - .unfollow(hashtag) + .$select(hashtag) + .unfollow() .then(() => { setInfo({ ...info, following: false }); showToast(`Unfollowed #${hashtag}`); @@ -177,7 +180,8 @@ function Hashtags({ columnMode, ...props }) { }); } else { masto.v1.tags - .follow(hashtag) + .$select(hashtag) + .follow() .then(() => { setInfo({ ...info, following: true }); showToast(`Followed #${hashtag}`); diff --git a/src/pages/list.jsx b/src/pages/list.jsx index dcfa71e4..d6f9a93c 100644 --- a/src/pages/list.jsx +++ b/src/pages/list.jsx @@ -32,7 +32,7 @@ function List(props) { const listIterator = useRef(); async function fetchList(firstLoad) { if (firstLoad || !listIterator.current) { - listIterator.current = masto.v1.timelines.listList(id, { + listIterator.current = masto.v1.timelines.list.$select(id).list({ limit: LIMIT, }); } @@ -56,7 +56,7 @@ function List(props) { async function checkForUpdates() { try { - const results = await masto.v1.timelines.listList(id, { + const results = await masto.v1.timelines.list.$select(id).list({ limit: 1, since_id: latestItem.current, }); @@ -77,7 +77,7 @@ function List(props) { useEffect(() => { (async () => { try { - const list = await masto.v1.lists.fetch(id); + const list = await masto.v1.lists.$select(id).fetch(); setList(list); // setTitle(list.title); } catch (e) { @@ -200,9 +200,11 @@ function ListManageMembers({ listID, onClose }) { (async () => { try { if (firstLoad || !membersIterator.current) { - membersIterator.current = masto.v1.lists.listAccounts(listID, { - limit: MEMBERS_LIMIT, - }); + membersIterator.current = masto.v1.lists + .$select(listID) + .accounts.list({ + limit: MEMBERS_LIMIT, + }); } const results = await membersIterator.current.next(); let { done, value } = results; @@ -274,7 +276,7 @@ function RemoveAddButton({ account, listID }) { setUIState('loading'); (async () => { try { - await masto.v1.lists.addAccount(listID, { + await masto.v1.lists.$select(listID).accounts.create({ accountIds: [account.id], }); setUIState('default'); @@ -290,7 +292,7 @@ function RemoveAddButton({ account, listID }) { (async () => { try { - await masto.v1.lists.removeAccount(listID, { + await masto.v1.lists.$select(listID).accounts.remove({ accountIds: [account.id], }); setUIState('default'); diff --git a/src/pages/public.jsx b/src/pages/public.jsx index b634f236..2fac5b3f 100644 --- a/src/pages/public.jsx +++ b/src/pages/public.jsx @@ -29,7 +29,7 @@ function Public({ local, columnMode, ...props }) { const publicIterator = useRef(); async function fetchPublic(firstLoad) { if (firstLoad || !publicIterator.current) { - publicIterator.current = masto.v1.timelines.listPublic({ + publicIterator.current = masto.v1.timelines.public.list({ limit: LIMIT, local: isLocal, }); @@ -54,8 +54,8 @@ function Public({ local, columnMode, ...props }) { async function checkForUpdates() { try { - const results = await masto.v1.timelines - .listPublic({ + const results = await masto.v1.timelines.public + .list({ limit: 1, local: isLocal, since_id: latestItem.current, diff --git a/src/pages/search.jsx b/src/pages/search.jsx index 4e6a0be1..13016111 100644 --- a/src/pages/search.jsx +++ b/src/pages/search.jsx @@ -90,7 +90,7 @@ function Search(props) { if (authenticated) params.offset = offsetRef.current; } try { - const results = await masto.v2.search(params); + const results = await masto.v2.search.fetch(params); console.log(results); if (type) { if (firstLoad) { diff --git a/src/pages/status.jsx b/src/pages/status.jsx index c4165c7c..0a12ee67 100644 --- a/src/pages/status.jsx +++ b/src/pages/status.jsx @@ -100,7 +100,7 @@ function StatusPage(params) { if (!heroStatus && showMedia) { (async () => { try { - const status = await masto.v1.statuses.fetch(id); + const status = await masto.v1.statuses.$select(id).fetch(); saveStatus(status, instance); setHeroStatus(status); } catch (err) { @@ -235,12 +235,15 @@ function StatusThread({ id, closeLink = '/', instance: propInstance }) { (async () => { const heroFetch = () => - pRetry(() => masto.v1.statuses.fetch(id), { + pRetry(() => masto.v1.statuses.$select(id).fetch(), { retries: 4, }); - const contextFetch = pRetry(() => masto.v1.statuses.fetchContext(id), { - retries: 8, - }); + const contextFetch = pRetry( + () => masto.v1.statuses.$select(id).context.fetch(), + { + retries: 8, + }, + ); const hasStatus = !!snapStates.statuses[sKey]; let heroStatus = snapStates.statuses[sKey]; @@ -647,6 +650,189 @@ function StatusThread({ id, closeLink = '/', instance: propInstance }) { resetScrollPosition(status.id); }, []); + const renderStatus = (status) => { + const { + id: statusID, + ancestor, + isThread, + descendant, + thread, + replies, + repliesCount, + weight, + } = status; + const isHero = statusID === id; + // const StatusParent = useCallback( + // (props) => + // isThread || thread || ancestor ? ( + // { + // resetScrollPosition(statusID); + // }} + // {...props} + // /> + // ) : ( + //
+ // ), + // [isThread, thread], + // ); + return ( +
  • + {isHero ? ( + <> + + + + {uiState !== 'loading' && !authenticated ? ( +
    +

    + You're not logged in. Interactions (reply, boost, etc) are not + possible. +

    + + Log in + +
    + ) : ( + !sameInstance && ( +
    +

    + This post is from another instance ({instance}). + Interactions (reply, boost, etc) are not possible. +

    + +
    + ) + )} + + ) : ( + // + { + resetScrollPosition(statusID); + }} + > + + {ancestor && isThread && repliesCount > 1 && ( + + )}{' '} + {/* {replies?.length > LIMIT && ( + + )} */} + {/* */} + + )} + {descendant && replies?.length > 0 && ( + + )} + {uiState === 'loading' && + isHero && + !!heroStatus?.repliesCount && + !hasDescendants && ( +
    + +
    + )} + {uiState === 'error' && + isHero && + !!heroStatus?.repliesCount && + !hasDescendants && ( +
    + Unable to load replies. +
    + +
    + )} +
  • + ); + }; + return (
    - {statuses.slice(0, limit).map((status) => { - const { - id: statusID, - ancestor, - isThread, - descendant, - thread, - replies, - repliesCount, - weight, - } = status; - const isHero = statusID === id; - // const StatusParent = useCallback( - // (props) => - // isThread || thread || ancestor ? ( - // { - // resetScrollPosition(statusID); - // }} - // {...props} - // /> - // ) : ( - //
    - // ), - // [isThread, thread], - // ); - return ( -
  • - {isHero ? ( - <> - - - - {uiState !== 'loading' && !authenticated ? ( -
    -

    - You're not logged in. Interactions (reply, boost, etc) - are not possible. -

    - - Log in - -
    - ) : ( - !sameInstance && ( -
    -

    - This post is from another instance ( - {instance}). Interactions (reply, boost, etc) - are not possible. -

    - -
    - ) - )} - - ) : ( - // - { - resetScrollPosition(statusID); - }} - > - - {ancestor && isThread && repliesCount > 1 && ( - - )}{' '} - {/* {replies?.length > LIMIT && ( - - )} */} - {/* */} - - )} - {descendant && replies?.length > 0 && ( - - )} - {uiState === 'loading' && - isHero && - !!heroStatus?.repliesCount && - !hasDescendants && ( -
    - -
    - )} - {uiState === 'error' && - isHero && - !!heroStatus?.repliesCount && - !hasDescendants && ( -
    - Unable to load replies. -
    - -
    - )} -
  • - ); - })} + {statuses.slice(0, limit).map(renderStatus)} {showMore > 0 && (