this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #261 from cheeaun/main

Update from main

authored by

Chee Aun and committed by
GitHub
4ea8e2c1 cd68aee1

+1766 -1762
+25
.github/workflows/tagrelease.yml
··· 1 + name: Create Release on every tag push in `production` 2 + 3 + on: 4 + push: 5 + branches: 6 + - production 7 + tags: 8 + - '*' 9 + 10 + jobs: 11 + release: 12 + runs-on: ubuntu-latest 13 + steps: 14 + - uses: actions/checkout@v4 15 + with: 16 + ref: production 17 + - uses: actions/setup-node@v3 18 + with: 19 + node-version: 18 20 + - run: npm ci && npm run build 21 + - run: cd dist && zip -r ../phanpy-dist.zip . && cd .. 22 + - uses: softprops/action-gh-release@v1 23 + with: 24 + generate_release_notes: true 25 + files: phanpy-dist.zip
+2 -1
.gitignore
··· 25 25 26 26 # Custom 27 27 .env.dev 28 - src/data/instances-full.json 28 + src/data/instances-full.json 29 + phanpy-dist.zip
+3 -1
README.md
··· 138 138 139 139 [Phanpy](https://bulbapedia.bulbagarden.net/wiki/Phanpy_(Pok%C3%A9mon)) is a Ground-type Pokémon. 140 140 141 - ## Maintainers 141 + ## Maintainers + contributors 142 142 143 143 - [Chee Aun](https://github.com/cheeaun) ([Mastodon](https://mastodon.social/@cheeaun)) ([Twitter](https://twitter.com/cheeaun)) 144 + 145 + [![Contributors](https://contrib.rocks/image?repo=cheeaun/phanpy)](https://github.com/cheeaun/phanpy/graphs/contributors) 144 146 145 147 ## Backstory 146 148
+831 -1104
package-lock.json
··· 12 12 "@github/text-expander-element": "~2.5.0", 13 13 "@iconify-icons/mingcute": "~1.2.8", 14 14 "@justinribeiro/lite-youtube": "~1.5.0", 15 - "@szhsin/react-menu": "~4.0.3", 16 - "@uidotdev/usehooks": "~2.3.1", 15 + "@szhsin/react-menu": "~4.1.0", 16 + "@uidotdev/usehooks": "~2.4.0", 17 17 "dayjs": "~1.11.10", 18 18 "dayjs-twitter": "~0.5.0", 19 19 "fast-blurhash": "~1.1.2", ··· 21 21 "idb-keyval": "~6.2.1", 22 22 "just-debounce-it": "~3.2.0", 23 23 "lz-string": "~1.5.0", 24 - "masto": "~5.11.4", 25 - "mem": "~9.0.2", 24 + "masto": "~6.3.1", 25 + "moize": "~6.1.6", 26 26 "p-retry": "~6.1.0", 27 27 "p-throttle": "~5.1.0", 28 28 "preact": "~10.18.1", ··· 40 40 "valtio": "1.9.0" 41 41 }, 42 42 "devDependencies": { 43 - "@preact/preset-vite": "~2.5.0", 43 + "@preact/preset-vite": "~2.6.0", 44 44 "@trivago/prettier-plugin-sort-imports": "~4.2.0", 45 45 "postcss": "~8.4.31", 46 46 "postcss-dark-theme-class": "~1.0.0", 47 - "postcss-preset-env": "~9.1.4", 47 + "postcss-preset-env": "~9.2.0", 48 48 "twitter-text": "~3.1.0", 49 49 "vite": "~4.4.11", 50 50 "vite-plugin-generate-file": "~0.0.4", ··· 88 88 } 89 89 }, 90 90 "node_modules/@babel/code-frame": { 91 - "version": "7.21.4", 92 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", 93 - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", 91 + "version": "7.22.13", 92 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", 93 + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", 94 94 "dev": true, 95 95 "dependencies": { 96 - "@babel/highlight": "^7.18.6" 96 + "@babel/highlight": "^7.22.13", 97 + "chalk": "^2.4.2" 97 98 }, 98 99 "engines": { 99 100 "node": ">=6.9.0" 100 101 } 101 102 }, 102 103 "node_modules/@babel/compat-data": { 103 - "version": "7.22.3", 104 - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", 105 - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", 104 + "version": "7.23.2", 105 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", 106 + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", 106 107 "dev": true, 107 108 "engines": { 108 109 "node": ">=6.9.0" 109 110 } 110 111 }, 111 112 "node_modules/@babel/core": { 112 - "version": "7.20.2", 113 - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", 114 - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", 113 + "version": "7.23.2", 114 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", 115 + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", 115 116 "dev": true, 116 117 "dependencies": { 117 - "@ampproject/remapping": "^2.1.0", 118 - "@babel/code-frame": "^7.18.6", 119 - "@babel/generator": "^7.20.2", 120 - "@babel/helper-compilation-targets": "^7.20.0", 121 - "@babel/helper-module-transforms": "^7.20.2", 122 - "@babel/helpers": "^7.20.1", 123 - "@babel/parser": "^7.20.2", 124 - "@babel/template": "^7.18.10", 125 - "@babel/traverse": "^7.20.1", 126 - "@babel/types": "^7.20.2", 127 - "convert-source-map": "^1.7.0", 118 + "@ampproject/remapping": "^2.2.0", 119 + "@babel/code-frame": "^7.22.13", 120 + "@babel/generator": "^7.23.0", 121 + "@babel/helper-compilation-targets": "^7.22.15", 122 + "@babel/helper-module-transforms": "^7.23.0", 123 + "@babel/helpers": "^7.23.2", 124 + "@babel/parser": "^7.23.0", 125 + "@babel/template": "^7.22.15", 126 + "@babel/traverse": "^7.23.2", 127 + "@babel/types": "^7.23.0", 128 + "convert-source-map": "^2.0.0", 128 129 "debug": "^4.1.0", 129 130 "gensync": "^1.0.0-beta.2", 130 - "json5": "^2.2.1", 131 - "semver": "^6.3.0" 131 + "json5": "^2.2.3", 132 + "semver": "^6.3.1" 132 133 }, 133 134 "engines": { 134 135 "node": ">=6.9.0" ··· 139 140 } 140 141 }, 141 142 "node_modules/@babel/generator": { 142 - "version": "7.22.3", 143 - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", 144 - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", 143 + "version": "7.23.0", 144 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", 145 + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", 145 146 "dev": true, 146 147 "dependencies": { 147 - "@babel/types": "^7.22.3", 148 + "@babel/types": "^7.23.0", 148 149 "@jridgewell/gen-mapping": "^0.3.2", 149 150 "@jridgewell/trace-mapping": "^0.3.17", 150 151 "jsesc": "^2.5.1" ··· 168 169 } 169 170 }, 170 171 "node_modules/@babel/helper-annotate-as-pure": { 171 - "version": "7.18.6", 172 - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", 173 - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", 172 + "version": "7.22.5", 173 + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", 174 + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", 174 175 "dev": true, 175 176 "dependencies": { 176 - "@babel/types": "^7.18.6" 177 + "@babel/types": "^7.22.5" 177 178 }, 178 179 "engines": { 179 180 "node": ">=6.9.0" ··· 192 193 } 193 194 }, 194 195 "node_modules/@babel/helper-compilation-targets": { 195 - "version": "7.22.1", 196 - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", 197 - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", 196 + "version": "7.22.15", 197 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", 198 + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", 198 199 "dev": true, 199 200 "dependencies": { 200 - "@babel/compat-data": "^7.22.0", 201 - "@babel/helper-validator-option": "^7.21.0", 202 - "browserslist": "^4.21.3", 201 + "@babel/compat-data": "^7.22.9", 202 + "@babel/helper-validator-option": "^7.22.15", 203 + "browserslist": "^4.21.9", 203 204 "lru-cache": "^5.1.1", 204 - "semver": "^6.3.0" 205 + "semver": "^6.3.1" 205 206 }, 206 207 "engines": { 207 208 "node": ">=6.9.0" 208 - }, 209 - "peerDependencies": { 210 - "@babel/core": "^7.0.0" 211 209 } 212 210 }, 213 211 "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { ··· 283 281 } 284 282 }, 285 283 "node_modules/@babel/helper-environment-visitor": { 286 - "version": "7.22.1", 287 - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", 288 - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", 284 + "version": "7.22.20", 285 + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 286 + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", 289 287 "dev": true, 290 288 "engines": { 291 289 "node": ">=6.9.0" 292 290 } 293 291 }, 294 292 "node_modules/@babel/helper-function-name": { 295 - "version": "7.21.0", 296 - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", 297 - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", 293 + "version": "7.23.0", 294 + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 295 + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 298 296 "dev": true, 299 297 "dependencies": { 300 - "@babel/template": "^7.20.7", 301 - "@babel/types": "^7.21.0" 298 + "@babel/template": "^7.22.15", 299 + "@babel/types": "^7.23.0" 302 300 }, 303 301 "engines": { 304 302 "node": ">=6.9.0" 305 303 } 306 304 }, 307 305 "node_modules/@babel/helper-hoist-variables": { 308 - "version": "7.18.6", 309 - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 310 - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 306 + "version": "7.22.5", 307 + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 308 + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 311 309 "dev": true, 312 310 "dependencies": { 313 - "@babel/types": "^7.18.6" 311 + "@babel/types": "^7.22.5" 314 312 }, 315 313 "engines": { 316 314 "node": ">=6.9.0" ··· 329 327 } 330 328 }, 331 329 "node_modules/@babel/helper-module-imports": { 332 - "version": "7.21.4", 333 - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", 334 - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", 330 + "version": "7.22.15", 331 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", 332 + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", 335 333 "dev": true, 336 334 "dependencies": { 337 - "@babel/types": "^7.21.4" 335 + "@babel/types": "^7.22.15" 338 336 }, 339 337 "engines": { 340 338 "node": ">=6.9.0" 341 339 } 342 340 }, 343 341 "node_modules/@babel/helper-module-transforms": { 344 - "version": "7.22.1", 345 - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", 346 - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", 342 + "version": "7.23.0", 343 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", 344 + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", 347 345 "dev": true, 348 346 "dependencies": { 349 - "@babel/helper-environment-visitor": "^7.22.1", 350 - "@babel/helper-module-imports": "^7.21.4", 351 - "@babel/helper-simple-access": "^7.21.5", 352 - "@babel/helper-split-export-declaration": "^7.18.6", 353 - "@babel/helper-validator-identifier": "^7.19.1", 354 - "@babel/template": "^7.21.9", 355 - "@babel/traverse": "^7.22.1", 356 - "@babel/types": "^7.22.0" 347 + "@babel/helper-environment-visitor": "^7.22.20", 348 + "@babel/helper-module-imports": "^7.22.15", 349 + "@babel/helper-simple-access": "^7.22.5", 350 + "@babel/helper-split-export-declaration": "^7.22.6", 351 + "@babel/helper-validator-identifier": "^7.22.20" 357 352 }, 358 353 "engines": { 359 354 "node": ">=6.9.0" 355 + }, 356 + "peerDependencies": { 357 + "@babel/core": "^7.0.0" 360 358 } 361 359 }, 362 360 "node_modules/@babel/helper-optimise-call-expression": { ··· 372 370 } 373 371 }, 374 372 "node_modules/@babel/helper-plugin-utils": { 375 - "version": "7.21.5", 376 - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", 377 - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", 373 + "version": "7.22.5", 374 + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", 375 + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", 378 376 "dev": true, 379 377 "engines": { 380 378 "node": ">=6.9.0" ··· 416 414 } 417 415 }, 418 416 "node_modules/@babel/helper-simple-access": { 419 - "version": "7.21.5", 420 - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", 421 - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", 417 + "version": "7.22.5", 418 + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 419 + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 422 420 "dev": true, 423 421 "dependencies": { 424 - "@babel/types": "^7.21.5" 422 + "@babel/types": "^7.22.5" 425 423 }, 426 424 "engines": { 427 425 "node": ">=6.9.0" ··· 440 438 } 441 439 }, 442 440 "node_modules/@babel/helper-split-export-declaration": { 443 - "version": "7.18.6", 444 - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 445 - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 441 + "version": "7.22.6", 442 + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 443 + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 446 444 "dev": true, 447 445 "dependencies": { 448 - "@babel/types": "^7.18.6" 446 + "@babel/types": "^7.22.5" 449 447 }, 450 448 "engines": { 451 449 "node": ">=6.9.0" 452 450 } 453 451 }, 454 452 "node_modules/@babel/helper-string-parser": { 455 - "version": "7.21.5", 456 - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", 457 - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", 453 + "version": "7.22.5", 454 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", 455 + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", 458 456 "dev": true, 459 457 "engines": { 460 458 "node": ">=6.9.0" 461 459 } 462 460 }, 463 461 "node_modules/@babel/helper-validator-identifier": { 464 - "version": "7.19.1", 465 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 466 - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 462 + "version": "7.22.20", 463 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 464 + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 467 465 "dev": true, 468 466 "engines": { 469 467 "node": ">=6.9.0" 470 468 } 471 469 }, 472 470 "node_modules/@babel/helper-validator-option": { 473 - "version": "7.21.0", 474 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", 475 - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", 471 + "version": "7.22.15", 472 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", 473 + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", 476 474 "dev": true, 477 475 "engines": { 478 476 "node": ">=6.9.0" ··· 494 492 } 495 493 }, 496 494 "node_modules/@babel/helpers": { 497 - "version": "7.20.1", 498 - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", 499 - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", 495 + "version": "7.23.2", 496 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", 497 + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", 500 498 "dev": true, 501 499 "dependencies": { 502 - "@babel/template": "^7.18.10", 503 - "@babel/traverse": "^7.20.1", 504 - "@babel/types": "^7.20.0" 500 + "@babel/template": "^7.22.15", 501 + "@babel/traverse": "^7.23.2", 502 + "@babel/types": "^7.23.0" 505 503 }, 506 504 "engines": { 507 505 "node": ">=6.9.0" 508 506 } 509 507 }, 510 508 "node_modules/@babel/highlight": { 511 - "version": "7.18.6", 512 - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 513 - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 509 + "version": "7.22.20", 510 + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", 511 + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", 514 512 "dev": true, 515 513 "dependencies": { 516 - "@babel/helper-validator-identifier": "^7.18.6", 517 - "chalk": "^2.0.0", 514 + "@babel/helper-validator-identifier": "^7.22.20", 515 + "chalk": "^2.4.2", 518 516 "js-tokens": "^4.0.0" 519 517 }, 520 518 "engines": { ··· 522 520 } 523 521 }, 524 522 "node_modules/@babel/parser": { 525 - "version": "7.22.4", 526 - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", 527 - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", 523 + "version": "7.23.0", 524 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", 525 + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", 528 526 "dev": true, 529 527 "bin": { 530 528 "parser": "bin/babel-parser.js" ··· 717 715 } 718 716 }, 719 717 "node_modules/@babel/plugin-syntax-jsx": { 720 - "version": "7.18.6", 721 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", 722 - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", 718 + "version": "7.22.5", 719 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", 720 + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", 723 721 "dev": true, 724 722 "dependencies": { 725 - "@babel/helper-plugin-utils": "^7.18.6" 723 + "@babel/helper-plugin-utils": "^7.22.5" 726 724 }, 727 725 "engines": { 728 726 "node": ">=6.9.0" ··· 1452 1450 } 1453 1451 }, 1454 1452 "node_modules/@babel/plugin-transform-react-jsx": { 1455 - "version": "7.19.0", 1456 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", 1457 - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", 1453 + "version": "7.22.15", 1454 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", 1455 + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", 1458 1456 "dev": true, 1459 1457 "dependencies": { 1460 - "@babel/helper-annotate-as-pure": "^7.18.6", 1461 - "@babel/helper-module-imports": "^7.18.6", 1462 - "@babel/helper-plugin-utils": "^7.19.0", 1463 - "@babel/plugin-syntax-jsx": "^7.18.6", 1464 - "@babel/types": "^7.19.0" 1458 + "@babel/helper-annotate-as-pure": "^7.22.5", 1459 + "@babel/helper-module-imports": "^7.22.15", 1460 + "@babel/helper-plugin-utils": "^7.22.5", 1461 + "@babel/plugin-syntax-jsx": "^7.22.5", 1462 + "@babel/types": "^7.22.15" 1465 1463 }, 1466 1464 "engines": { 1467 1465 "node": ">=6.9.0" ··· 1471 1469 } 1472 1470 }, 1473 1471 "node_modules/@babel/plugin-transform-react-jsx-development": { 1474 - "version": "7.18.6", 1475 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", 1476 - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", 1472 + "version": "7.22.5", 1473 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", 1474 + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", 1477 1475 "dev": true, 1478 1476 "dependencies": { 1479 - "@babel/plugin-transform-react-jsx": "^7.18.6" 1477 + "@babel/plugin-transform-react-jsx": "^7.22.5" 1480 1478 }, 1481 1479 "engines": { 1482 1480 "node": ">=6.9.0" ··· 1784 1782 } 1785 1783 }, 1786 1784 "node_modules/@babel/template": { 1787 - "version": "7.21.9", 1788 - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", 1789 - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", 1785 + "version": "7.22.15", 1786 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", 1787 + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", 1790 1788 "dev": true, 1791 1789 "dependencies": { 1792 - "@babel/code-frame": "^7.21.4", 1793 - "@babel/parser": "^7.21.9", 1794 - "@babel/types": "^7.21.5" 1790 + "@babel/code-frame": "^7.22.13", 1791 + "@babel/parser": "^7.22.15", 1792 + "@babel/types": "^7.22.15" 1795 1793 }, 1796 1794 "engines": { 1797 1795 "node": ">=6.9.0" 1798 1796 } 1799 1797 }, 1800 1798 "node_modules/@babel/traverse": { 1801 - "version": "7.22.4", 1802 - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", 1803 - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", 1799 + "version": "7.23.2", 1800 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", 1801 + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", 1804 1802 "dev": true, 1805 1803 "dependencies": { 1806 - "@babel/code-frame": "^7.21.4", 1807 - "@babel/generator": "^7.22.3", 1808 - "@babel/helper-environment-visitor": "^7.22.1", 1809 - "@babel/helper-function-name": "^7.21.0", 1810 - "@babel/helper-hoist-variables": "^7.18.6", 1811 - "@babel/helper-split-export-declaration": "^7.18.6", 1812 - "@babel/parser": "^7.22.4", 1813 - "@babel/types": "^7.22.4", 1804 + "@babel/code-frame": "^7.22.13", 1805 + "@babel/generator": "^7.23.0", 1806 + "@babel/helper-environment-visitor": "^7.22.20", 1807 + "@babel/helper-function-name": "^7.23.0", 1808 + "@babel/helper-hoist-variables": "^7.22.5", 1809 + "@babel/helper-split-export-declaration": "^7.22.6", 1810 + "@babel/parser": "^7.23.0", 1811 + "@babel/types": "^7.23.0", 1814 1812 "debug": "^4.1.0", 1815 1813 "globals": "^11.1.0" 1816 1814 }, ··· 1819 1817 } 1820 1818 }, 1821 1819 "node_modules/@babel/types": { 1822 - "version": "7.22.4", 1823 - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", 1824 - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", 1820 + "version": "7.23.0", 1821 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", 1822 + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", 1825 1823 "dev": true, 1826 1824 "dependencies": { 1827 - "@babel/helper-string-parser": "^7.21.5", 1828 - "@babel/helper-validator-identifier": "^7.19.1", 1825 + "@babel/helper-string-parser": "^7.22.5", 1826 + "@babel/helper-validator-identifier": "^7.22.20", 1829 1827 "to-fast-properties": "^2.0.0" 1830 1828 }, 1831 1829 "engines": { ··· 1898 1896 } 1899 1897 }, 1900 1898 "node_modules/@csstools/css-color-parser": { 1901 - "version": "1.3.2", 1902 - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.2.tgz", 1903 - "integrity": "sha512-YLCWI+nm18qr5nj7QhRMGuIi4ddFe0SKEtPQliLf1+pmyHFxoHYd0+Hg+bRnbnVbdyCTTlCqBiUvCeNJfd903g==", 1899 + "version": "1.4.0", 1900 + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz", 1901 + "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==", 1904 1902 "dev": true, 1905 1903 "funding": [ 1906 1904 { ··· 1966 1964 } 1967 1965 }, 1968 1966 "node_modules/@csstools/media-query-list-parser": { 1969 - "version": "2.1.4", 1970 - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", 1971 - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", 1967 + "version": "2.1.5", 1968 + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", 1969 + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", 1972 1970 "dev": true, 1973 1971 "funding": [ 1974 1972 { ··· 1984 1982 "node": "^14 || ^16 || >=18" 1985 1983 }, 1986 1984 "peerDependencies": { 1987 - "@csstools/css-parser-algorithms": "^2.3.1", 1988 - "@csstools/css-tokenizer": "^2.2.0" 1985 + "@csstools/css-parser-algorithms": "^2.3.2", 1986 + "@csstools/css-tokenizer": "^2.2.1" 1989 1987 } 1990 1988 }, 1991 1989 "node_modules/@csstools/postcss-cascade-layers": { ··· 2015 2013 } 2016 2014 }, 2017 2015 "node_modules/@csstools/postcss-color-function": { 2018 - "version": "3.0.5", 2019 - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.5.tgz", 2020 - "integrity": "sha512-q9E7oJwf1Z8nJqQbob9DmFxrte3RQc+pwV+5WlWw6Ei9XaObaNJlPAQ1HfOpcEg/fxrRf/Yf6fgO8Q01r7u17A==", 2016 + "version": "3.0.7", 2017 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz", 2018 + "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==", 2021 2019 "dev": true, 2022 2020 "funding": [ 2023 2021 { ··· 2030 2028 } 2031 2029 ], 2032 2030 "dependencies": { 2033 - "@csstools/css-color-parser": "^1.3.2", 2031 + "@csstools/css-color-parser": "^1.4.0", 2034 2032 "@csstools/css-parser-algorithms": "^2.3.2", 2035 2033 "@csstools/css-tokenizer": "^2.2.1", 2036 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 2034 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 2037 2035 }, 2038 2036 "engines": { 2039 2037 "node": "^14 || ^16 || >=18" ··· 2043 2041 } 2044 2042 }, 2045 2043 "node_modules/@csstools/postcss-color-mix-function": { 2046 - "version": "2.0.5", 2047 - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.5.tgz", 2048 - "integrity": "sha512-0MDBTG0FPDjNlAYMImNjnQ9lrldiFRCmsBx4dZB1ikbFwt6aYJRWDjgXoZY+1CmQ6m1qPeBJO762i6AKwQDlQQ==", 2044 + "version": "2.0.7", 2045 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz", 2046 + "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==", 2049 2047 "dev": true, 2050 2048 "funding": [ 2051 2049 { ··· 2058 2056 } 2059 2057 ], 2060 2058 "dependencies": { 2061 - "@csstools/css-color-parser": "^1.3.2", 2059 + "@csstools/css-color-parser": "^1.4.0", 2062 2060 "@csstools/css-parser-algorithms": "^2.3.2", 2063 2061 "@csstools/css-tokenizer": "^2.2.1", 2064 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 2062 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 2065 2063 }, 2066 2064 "engines": { 2067 2065 "node": "^14 || ^16 || >=18" ··· 2071 2069 } 2072 2070 }, 2073 2071 "node_modules/@csstools/postcss-exponential-functions": { 2074 - "version": "1.0.0", 2075 - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz", 2076 - "integrity": "sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw==", 2072 + "version": "1.0.1", 2073 + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", 2074 + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", 2077 2075 "dev": true, 2078 2076 "funding": [ 2079 2077 { ··· 2086 2084 } 2087 2085 ], 2088 2086 "dependencies": { 2089 - "@csstools/css-calc": "^1.1.3", 2090 - "@csstools/css-parser-algorithms": "^2.3.1", 2091 - "@csstools/css-tokenizer": "^2.2.0" 2087 + "@csstools/css-calc": "^1.1.4", 2088 + "@csstools/css-parser-algorithms": "^2.3.2", 2089 + "@csstools/css-tokenizer": "^2.2.1" 2092 2090 }, 2093 2091 "engines": { 2094 2092 "node": "^14 || ^16 || >=18" ··· 2122 2120 "postcss": "^8.4" 2123 2121 } 2124 2122 }, 2123 + "node_modules/@csstools/postcss-gamut-mapping": { 2124 + "version": "1.0.0", 2125 + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz", 2126 + "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==", 2127 + "dev": true, 2128 + "funding": [ 2129 + { 2130 + "type": "github", 2131 + "url": "https://github.com/sponsors/csstools" 2132 + }, 2133 + { 2134 + "type": "opencollective", 2135 + "url": "https://opencollective.com/csstools" 2136 + } 2137 + ], 2138 + "dependencies": { 2139 + "@csstools/css-color-parser": "^1.4.0", 2140 + "@csstools/css-parser-algorithms": "2.3.2", 2141 + "@csstools/css-tokenizer": "^2.2.1" 2142 + }, 2143 + "engines": { 2144 + "node": "^14 || ^16 || >=18" 2145 + }, 2146 + "peerDependencies": { 2147 + "postcss": "^8.4" 2148 + } 2149 + }, 2125 2150 "node_modules/@csstools/postcss-gradients-interpolation-method": { 2126 - "version": "4.0.5", 2127 - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.5.tgz", 2128 - "integrity": "sha512-ABDOADpKrTvNb+cUBj9ciocCgFvE832eENKVuONca1u2bkFL4jM9430XFmi/GOgzt0agg5Q8FFJHXgYyKbgOFQ==", 2151 + "version": "4.0.7", 2152 + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz", 2153 + "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==", 2129 2154 "dev": true, 2130 2155 "funding": [ 2131 2156 { ··· 2138 2163 } 2139 2164 ], 2140 2165 "dependencies": { 2141 - "@csstools/css-color-parser": "^1.3.2", 2166 + "@csstools/css-color-parser": "^1.4.0", 2142 2167 "@csstools/css-parser-algorithms": "^2.3.2", 2143 2168 "@csstools/css-tokenizer": "^2.2.1", 2144 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 2169 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 2145 2170 }, 2146 2171 "engines": { 2147 2172 "node": "^14 || ^16 || >=18" ··· 2151 2176 } 2152 2177 }, 2153 2178 "node_modules/@csstools/postcss-hwb-function": { 2154 - "version": "3.0.3", 2155 - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.3.tgz", 2156 - "integrity": "sha512-2TqrRD8JzSwQCRKKNc9BFhSEmsz+mR3RtwSw5mQSGILC+LIYCVWeYwC33cI+saFWv0DGZ0NXLx5VSX2tdJyU6w==", 2179 + "version": "3.0.6", 2180 + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz", 2181 + "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==", 2157 2182 "dev": true, 2158 2183 "funding": [ 2159 2184 { ··· 2166 2191 } 2167 2192 ], 2168 2193 "dependencies": { 2169 - "@csstools/css-color-parser": "^1.3.1", 2170 - "@csstools/css-parser-algorithms": "^2.3.1", 2171 - "@csstools/css-tokenizer": "^2.2.0" 2194 + "@csstools/css-color-parser": "^1.4.0", 2195 + "@csstools/css-parser-algorithms": "^2.3.2", 2196 + "@csstools/css-tokenizer": "^2.2.1" 2172 2197 }, 2173 2198 "engines": { 2174 2199 "node": "^14 || ^16 || >=18" ··· 2178 2203 } 2179 2204 }, 2180 2205 "node_modules/@csstools/postcss-ic-unit": { 2181 - "version": "3.0.1", 2182 - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.1.tgz", 2183 - "integrity": "sha512-OkKZV0XZQixChA6r68O9UfGNFv06cPVcuT+MjpzfEuoCfbNWCj+b0dhsmdz776giQ+DymPmFDlTD+QJEFPI7rw==", 2206 + "version": "3.0.2", 2207 + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz", 2208 + "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==", 2184 2209 "dev": true, 2185 2210 "funding": [ 2186 2211 { ··· 2193 2218 } 2194 2219 ], 2195 2220 "dependencies": { 2196 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 2221 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 2197 2222 "postcss-value-parser": "^4.2.0" 2198 2223 }, 2199 2224 "engines": { ··· 2226 2251 } 2227 2252 }, 2228 2253 "node_modules/@csstools/postcss-is-pseudo-class": { 2229 - "version": "4.0.2", 2230 - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.2.tgz", 2231 - "integrity": "sha512-LeAJozyZTY3c1SaHMbwF4p8Ego/2HHprYusmmdmUH7wP6lRF1w3s7IO2iNwQ6fHBrSOfkPUFaUtRUGZLBE23Eg==", 2254 + "version": "4.0.3", 2255 + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz", 2256 + "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==", 2232 2257 "dev": true, 2233 2258 "funding": [ 2234 2259 { ··· 2324 2349 } 2325 2350 }, 2326 2351 "node_modules/@csstools/postcss-media-minmax": { 2327 - "version": "1.0.7", 2328 - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz", 2329 - "integrity": "sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ==", 2352 + "version": "1.1.0", 2353 + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", 2354 + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", 2330 2355 "dev": true, 2331 2356 "funding": [ 2332 2357 { ··· 2339 2364 } 2340 2365 ], 2341 2366 "dependencies": { 2342 - "@csstools/css-calc": "^1.1.3", 2343 - "@csstools/css-parser-algorithms": "^2.3.1", 2344 - "@csstools/css-tokenizer": "^2.2.0", 2345 - "@csstools/media-query-list-parser": "^2.1.4" 2367 + "@csstools/css-calc": "^1.1.4", 2368 + "@csstools/css-parser-algorithms": "^2.3.2", 2369 + "@csstools/css-tokenizer": "^2.2.1", 2370 + "@csstools/media-query-list-parser": "^2.1.5" 2346 2371 }, 2347 2372 "engines": { 2348 2373 "node": "^14 || ^16 || >=18" ··· 2352 2377 } 2353 2378 }, 2354 2379 "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { 2355 - "version": "2.0.2", 2356 - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz", 2357 - "integrity": "sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg==", 2380 + "version": "2.0.3", 2381 + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", 2382 + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", 2358 2383 "dev": true, 2359 2384 "funding": [ 2360 2385 { ··· 2367 2392 } 2368 2393 ], 2369 2394 "dependencies": { 2370 - "@csstools/css-parser-algorithms": "^2.3.1", 2371 - "@csstools/css-tokenizer": "^2.2.0", 2372 - "@csstools/media-query-list-parser": "^2.1.4" 2395 + "@csstools/css-parser-algorithms": "^2.3.2", 2396 + "@csstools/css-tokenizer": "^2.2.1", 2397 + "@csstools/media-query-list-parser": "^2.1.5" 2373 2398 }, 2374 2399 "engines": { 2375 2400 "node": "^14 || ^16 || >=18" ··· 2429 2454 } 2430 2455 }, 2431 2456 "node_modules/@csstools/postcss-oklab-function": { 2432 - "version": "3.0.5", 2433 - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.5.tgz", 2434 - "integrity": "sha512-tFjYaBbAvoks5yvE9uA3b3xsqVKkZJ2sXwPMw1bxlv2ydrmdiojuoRAskRfvMbZQkzp47DzBP1V9GhDLOyFVYA==", 2457 + "version": "3.0.7", 2458 + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz", 2459 + "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==", 2435 2460 "dev": true, 2436 2461 "funding": [ 2437 2462 { ··· 2444 2469 } 2445 2470 ], 2446 2471 "dependencies": { 2447 - "@csstools/css-color-parser": "^1.3.2", 2472 + "@csstools/css-color-parser": "^1.4.0", 2448 2473 "@csstools/css-parser-algorithms": "^2.3.2", 2449 2474 "@csstools/css-tokenizer": "^2.2.1", 2450 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 2475 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 2451 2476 }, 2452 2477 "engines": { 2453 2478 "node": "^14 || ^16 || >=18" ··· 2457 2482 } 2458 2483 }, 2459 2484 "node_modules/@csstools/postcss-progressive-custom-properties": { 2460 - "version": "3.0.1", 2461 - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.1.tgz", 2462 - "integrity": "sha512-yfdEk8o3CWPTusoInmGpOVCcMg1FikcKZyYB5ApULg9mES4FTGNuHK3MESscmm64yladcLNkPlz26O7tk3LMbA==", 2485 + "version": "3.0.2", 2486 + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz", 2487 + "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==", 2463 2488 "dev": true, 2464 2489 "funding": [ 2465 2490 { ··· 2482 2507 } 2483 2508 }, 2484 2509 "node_modules/@csstools/postcss-relative-color-syntax": { 2485 - "version": "2.0.5", 2486 - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.5.tgz", 2487 - "integrity": "sha512-wK8IX6X2+kLKxTTTq5yd7mH2U+GPcTMTpP2rM8ig0/rgxuid7vgTOxup6heZUk1IUA409eak3bYGOtDDYCpxbQ==", 2510 + "version": "2.0.7", 2511 + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz", 2512 + "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==", 2488 2513 "dev": true, 2489 2514 "funding": [ 2490 2515 { ··· 2497 2522 } 2498 2523 ], 2499 2524 "dependencies": { 2500 - "@csstools/css-color-parser": "^1.3.2", 2525 + "@csstools/css-color-parser": "^1.4.0", 2501 2526 "@csstools/css-parser-algorithms": "^2.3.2", 2502 2527 "@csstools/css-tokenizer": "^2.2.1", 2503 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 2528 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 2504 2529 }, 2505 2530 "engines": { 2506 2531 "node": "^14 || ^16 || >=18" ··· 2535 2560 } 2536 2561 }, 2537 2562 "node_modules/@csstools/postcss-stepped-value-functions": { 2538 - "version": "3.0.1", 2539 - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz", 2540 - "integrity": "sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA==", 2563 + "version": "3.0.2", 2564 + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", 2565 + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", 2541 2566 "dev": true, 2542 2567 "funding": [ 2543 2568 { ··· 2550 2575 } 2551 2576 ], 2552 2577 "dependencies": { 2553 - "@csstools/css-calc": "^1.1.3", 2554 - "@csstools/css-parser-algorithms": "^2.3.1", 2555 - "@csstools/css-tokenizer": "^2.2.0" 2578 + "@csstools/css-calc": "^1.1.4", 2579 + "@csstools/css-parser-algorithms": "^2.3.2", 2580 + "@csstools/css-tokenizer": "^2.2.1" 2556 2581 }, 2557 2582 "engines": { 2558 2583 "node": "^14 || ^16 || >=18" ··· 2588 2613 } 2589 2614 }, 2590 2615 "node_modules/@csstools/postcss-trigonometric-functions": { 2591 - "version": "3.0.1", 2592 - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz", 2593 - "integrity": "sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw==", 2616 + "version": "3.0.2", 2617 + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", 2618 + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", 2594 2619 "dev": true, 2595 2620 "funding": [ 2596 2621 { ··· 2603 2628 } 2604 2629 ], 2605 2630 "dependencies": { 2606 - "@csstools/css-calc": "^1.1.3", 2607 - "@csstools/css-parser-algorithms": "^2.3.1", 2608 - "@csstools/css-tokenizer": "^2.2.0" 2631 + "@csstools/css-calc": "^1.1.4", 2632 + "@csstools/css-parser-algorithms": "^2.3.2", 2633 + "@csstools/css-tokenizer": "^2.2.1" 2609 2634 }, 2610 2635 "engines": { 2611 2636 "node": "^14 || ^16 || >=18" ··· 3133 3158 "node": ">=8" 3134 3159 } 3135 3160 }, 3136 - "node_modules/@mastojs/ponyfills": { 3137 - "version": "1.0.4", 3138 - "resolved": "https://registry.npmjs.org/@mastojs/ponyfills/-/ponyfills-1.0.4.tgz", 3139 - "integrity": "sha512-1NaIGmcU7OmyNzx0fk+cYeGTkdXlOJOSdetaC4pStVWsrhht2cdlYSAfe5NDW3FcUmcEm2vVceB9lcClN1RCxw==", 3140 - "dependencies": { 3141 - "@types/node": "^18.11.17", 3142 - "@types/node-fetch": "^2.6.2", 3143 - "abort-controller": "^3.0.0", 3144 - "form-data": "^4.0.0", 3145 - "node-fetch": "^2.6.7" 3146 - } 3147 - }, 3148 3161 "node_modules/@nodelib/fs.scandir": { 3149 3162 "version": "2.1.5", 3150 3163 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", ··· 3181 3194 } 3182 3195 }, 3183 3196 "node_modules/@preact/preset-vite": { 3184 - "version": "2.5.0", 3185 - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", 3186 - "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", 3197 + "version": "2.6.0", 3198 + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.6.0.tgz", 3199 + "integrity": "sha512-5nztNzXbCpqyVum/K94nB2YQ5PTnvWdz4u7/X0jc8+kLyskSSpkNUxLQJeI90zfGSFIX1Ibj2G2JIS/mySHWYQ==", 3187 3200 "dev": true, 3188 3201 "dependencies": { 3189 - "@babel/plugin-transform-react-jsx": "^7.14.9", 3190 - "@babel/plugin-transform-react-jsx-development": "^7.16.7", 3191 - "@prefresh/vite": "^2.2.8", 3202 + "@babel/plugin-transform-react-jsx": "^7.22.15", 3203 + "@babel/plugin-transform-react-jsx-development": "^7.22.5", 3204 + "@prefresh/vite": "^2.4.1", 3192 3205 "@rollup/pluginutils": "^4.1.1", 3193 3206 "babel-plugin-transform-hook-names": "^1.0.2", 3194 - "debug": "^4.3.1", 3195 - "kolorist": "^1.2.10", 3196 - "resolve": "^1.20.0" 3207 + "debug": "^4.3.4", 3208 + "kolorist": "^1.8.0", 3209 + "resolve": "^1.22.8" 3197 3210 }, 3198 3211 "peerDependencies": { 3199 3212 "@babel/core": "7.x", ··· 3201 3214 } 3202 3215 }, 3203 3216 "node_modules/@prefresh/babel-plugin": { 3204 - "version": "0.4.4", 3205 - "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.4.4.tgz", 3206 - "integrity": "sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw==", 3217 + "version": "0.5.0", 3218 + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.0.tgz", 3219 + "integrity": "sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==", 3207 3220 "dev": true 3208 3221 }, 3209 3222 "node_modules/@prefresh/core": { 3210 - "version": "1.4.1", 3211 - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.4.1.tgz", 3212 - "integrity": "sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==", 3223 + "version": "1.5.2", 3224 + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", 3225 + "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", 3213 3226 "dev": true, 3214 3227 "peerDependencies": { 3215 3228 "preact": "^10.0.0" 3216 3229 } 3217 3230 }, 3218 3231 "node_modules/@prefresh/utils": { 3219 - "version": "1.1.3", 3220 - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.1.3.tgz", 3221 - "integrity": "sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==", 3232 + "version": "1.2.0", 3233 + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", 3234 + "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", 3222 3235 "dev": true 3223 3236 }, 3224 3237 "node_modules/@prefresh/vite": { 3225 - "version": "2.2.9", 3226 - "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.2.9.tgz", 3227 - "integrity": "sha512-1ERBF85Ja9/lkrfaltmo4Gca7R2ClQPSHHDDysFgfvPzHmLUeyB0x9WHwhwov/AA1DnyPhsfYT54z3yQd8XrgA==", 3238 + "version": "2.4.1", 3239 + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.1.tgz", 3240 + "integrity": "sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==", 3228 3241 "dev": true, 3229 3242 "dependencies": { 3230 - "@babel/core": "^7.9.6", 3231 - "@prefresh/babel-plugin": "0.4.4", 3232 - "@prefresh/core": "^1.3.3", 3233 - "@prefresh/utils": "^1.1.2", 3234 - "@rollup/pluginutils": "^4.1.0" 3243 + "@babel/core": "^7.22.1", 3244 + "@prefresh/babel-plugin": "0.5.0", 3245 + "@prefresh/core": "^1.5.1", 3246 + "@prefresh/utils": "^1.2.0", 3247 + "@rollup/pluginutils": "^4.2.1" 3235 3248 }, 3236 3249 "peerDependencies": { 3237 3250 "preact": "^10.4.0", 3238 - "vite": ">=2.0.0-beta.3" 3251 + "vite": ">=2.0.0" 3239 3252 } 3240 3253 }, 3241 3254 "node_modules/@remix-run/router": { ··· 3272 3285 } 3273 3286 }, 3274 3287 "node_modules/@szhsin/react-menu": { 3275 - "version": "4.0.3", 3276 - "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.0.3.tgz", 3277 - "integrity": "sha512-TPsOKLEkesE79802evnLt2Mbv/+zwRJdX8776/vxK5ST9SK8SO0A8kRrus6JuxijLxZxFpmY/3VMdoyeCWQHKA==", 3288 + "version": "4.1.0", 3289 + "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.1.0.tgz", 3290 + "integrity": "sha512-lYYGUxqJxM2b/jD2Cn5a9RVOvHl9VBMX8qOnHZuX1w08cO2jslykpz5P75D7WnqudLnXsJ4k4+tI+q2U8XIFYw==", 3278 3291 "dependencies": { 3279 3292 "prop-types": "^15.7.2", 3280 3293 "react-transition-state": "^2.1.0" ··· 3373 3386 "node_modules/@types/node": { 3374 3387 "version": "18.11.17", 3375 3388 "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", 3376 - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" 3377 - }, 3378 - "node_modules/@types/node-fetch": { 3379 - "version": "2.6.2", 3380 - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", 3381 - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", 3382 - "dependencies": { 3383 - "@types/node": "*", 3384 - "form-data": "^3.0.0" 3385 - } 3386 - }, 3387 - "node_modules/@types/node-fetch/node_modules/form-data": { 3388 - "version": "3.0.1", 3389 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 3390 - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 3391 - "dependencies": { 3392 - "asynckit": "^0.4.0", 3393 - "combined-stream": "^1.0.8", 3394 - "mime-types": "^2.1.12" 3395 - }, 3396 - "engines": { 3397 - "node": ">= 6" 3398 - } 3389 + "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", 3390 + "dev": true 3399 3391 }, 3400 3392 "node_modules/@types/resolve": { 3401 3393 "version": "1.17.1", ··· 3418 3410 "dev": true 3419 3411 }, 3420 3412 "node_modules/@uidotdev/usehooks": { 3421 - "version": "2.3.1", 3422 - "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.3.1.tgz", 3423 - "integrity": "sha512-1GL8CatTsTGZdwPNrZ44JhJI5QWip7oyDXEXFBEibJ+P+p+ZBi7mKrpG90ZIdQTSEcvkfiE2Y492Uo3ubPBZ3g==", 3413 + "version": "2.4.0", 3414 + "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.0.tgz", 3415 + "integrity": "sha512-NrpTsZUGsawYxFbEXrd8+FPpfziC4M01GSQgYWOnGa84UiavqVCzCL5bSRe6rfQc4QsHS2rGAA0h63ya/j+p6A==", 3424 3416 "engines": { 3425 3417 "node": ">=16" 3426 3418 }, ··· 3510 3502 "optional": true, 3511 3503 "peer": true 3512 3504 }, 3513 - "node_modules/abort-controller": { 3514 - "version": "3.0.0", 3515 - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 3516 - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 3517 - "dependencies": { 3518 - "event-target-shim": "^5.0.0" 3519 - }, 3520 - "engines": { 3521 - "node": ">=6.5" 3522 - } 3523 - }, 3524 3505 "node_modules/acorn": { 3525 3506 "version": "8.8.1", 3526 3507 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", ··· 3597 3578 "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", 3598 3579 "dev": true 3599 3580 }, 3600 - "node_modules/asynckit": { 3601 - "version": "0.4.0", 3602 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 3603 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 3604 - }, 3605 3581 "node_modules/at-least-node": { 3606 3582 "version": "1.0.0", 3607 3583 "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", ··· 3612 3588 } 3613 3589 }, 3614 3590 "node_modules/autoprefixer": { 3615 - "version": "10.4.15", 3616 - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", 3617 - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", 3591 + "version": "10.4.16", 3592 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", 3593 + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", 3618 3594 "dev": true, 3619 3595 "funding": [ 3620 3596 { ··· 3632 3608 ], 3633 3609 "dependencies": { 3634 3610 "browserslist": "^4.21.10", 3635 - "caniuse-lite": "^1.0.30001520", 3636 - "fraction.js": "^4.2.0", 3611 + "caniuse-lite": "^1.0.30001538", 3612 + "fraction.js": "^4.3.6", 3637 3613 "normalize-range": "^0.1.2", 3638 3614 "picocolors": "^1.0.0", 3639 3615 "postcss-value-parser": "^4.2.0" ··· 3737 3713 } 3738 3714 }, 3739 3715 "node_modules/browserslist": { 3740 - "version": "4.21.10", 3741 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", 3742 - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", 3716 + "version": "4.22.1", 3717 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", 3718 + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", 3743 3719 "dev": true, 3744 3720 "funding": [ 3745 3721 { ··· 3756 3732 } 3757 3733 ], 3758 3734 "dependencies": { 3759 - "caniuse-lite": "^1.0.30001517", 3760 - "electron-to-chromium": "^1.4.477", 3735 + "caniuse-lite": "^1.0.30001541", 3736 + "electron-to-chromium": "^1.4.535", 3761 3737 "node-releases": "^2.0.13", 3762 - "update-browserslist-db": "^1.0.11" 3738 + "update-browserslist-db": "^1.0.13" 3763 3739 }, 3764 3740 "bin": { 3765 3741 "browserslist": "cli.js" ··· 3790 3766 "version": "1.0.2", 3791 3767 "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 3792 3768 "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 3769 + "dev": true, 3793 3770 "dependencies": { 3794 3771 "function-bind": "^1.1.1", 3795 3772 "get-intrinsic": "^1.0.2" ··· 3808 3785 } 3809 3786 }, 3810 3787 "node_modules/caniuse-lite": { 3811 - "version": "1.0.30001532", 3812 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", 3813 - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", 3788 + "version": "1.0.30001547", 3789 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", 3790 + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", 3814 3791 "dev": true, 3815 3792 "funding": [ 3816 3793 { ··· 3892 3869 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 3893 3870 "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 3894 3871 "dev": true 3895 - }, 3896 - "node_modules/combined-stream": { 3897 - "version": "1.0.8", 3898 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 3899 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 3900 - "dependencies": { 3901 - "delayed-stream": "~1.0.0" 3902 - }, 3903 - "engines": { 3904 - "node": ">= 0.8" 3905 - } 3906 3872 }, 3907 3873 "node_modules/commander": { 3908 3874 "version": "2.20.3", ··· 3936 3902 } 3937 3903 }, 3938 3904 "node_modules/convert-source-map": { 3939 - "version": "1.9.0", 3940 - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 3941 - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 3905 + "version": "2.0.0", 3906 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 3907 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 3942 3908 "dev": true 3943 3909 }, 3944 3910 "node_modules/core-js": { ··· 4046 4012 } 4047 4013 }, 4048 4014 "node_modules/cssdb": { 4049 - "version": "7.7.2", 4050 - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.2.tgz", 4051 - "integrity": "sha512-pQPYP7/kch4QlkTcLuUNiNL2v/E+O+VIdotT+ug62/+2B2/jkzs5fMM6RHCzGCZ9C82pODEMSIzRRUzJOrl78g==", 4015 + "version": "7.8.0", 4016 + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.8.0.tgz", 4017 + "integrity": "sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==", 4052 4018 "dev": true, 4053 4019 "funding": [ 4054 4020 { ··· 4128 4094 "url": "https://github.com/sponsors/ljharb" 4129 4095 } 4130 4096 }, 4131 - "node_modules/delayed-stream": { 4132 - "version": "1.0.0", 4133 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 4134 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 4135 - "engines": { 4136 - "node": ">=0.4.0" 4137 - } 4138 - }, 4139 4097 "node_modules/dot-case": { 4140 4098 "version": "3.0.4", 4141 4099 "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", ··· 4166 4124 } 4167 4125 }, 4168 4126 "node_modules/electron-to-chromium": { 4169 - "version": "1.4.490", 4170 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", 4171 - "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==", 4127 + "version": "1.4.553", 4128 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.553.tgz", 4129 + "integrity": "sha512-HiRdtyKS2+VhiXvjhMvvxiMC33FJJqTA5EB2YHgFZW6v7HkK4Q9Ahv2V7O2ZPgAjw+MyCJVMQvigj13H8t+wvA==", 4172 4130 "dev": true 4173 4131 }, 4174 4132 "node_modules/es-abstract": { ··· 4320 4278 "node": ">=0.10.0" 4321 4279 } 4322 4280 }, 4323 - "node_modules/event-target-shim": { 4324 - "version": "5.0.1", 4325 - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 4326 - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 4327 - "engines": { 4328 - "node": ">=6" 4329 - } 4330 - }, 4331 - "node_modules/eventemitter3": { 4332 - "version": "5.0.0", 4333 - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", 4334 - "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==" 4281 + "node_modules/events-to-async": { 4282 + "version": "2.0.0", 4283 + "resolved": "https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.0.tgz", 4284 + "integrity": "sha512-NiZEr4g51nI4/lz/6NdwMqK/TLIctlnp9TQ3wCJjlRp47VgrthUZE4nrk2UhfZ8VzoQ/Xyth+G6MKioLCt0FVA==" 4335 4285 }, 4336 4286 "node_modules/fast-blurhash": { 4337 4287 "version": "1.1.2", ··· 4342 4292 "version": "3.1.3", 4343 4293 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 4344 4294 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 4295 + }, 4296 + "node_modules/fast-equals": { 4297 + "version": "3.0.3", 4298 + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", 4299 + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==" 4345 4300 }, 4346 4301 "node_modules/fast-glob": { 4347 4302 "version": "3.3.1", ··· 4423 4378 "dev": true, 4424 4379 "dependencies": { 4425 4380 "is-callable": "^1.1.3" 4426 - } 4427 - }, 4428 - "node_modules/form-data": { 4429 - "version": "4.0.0", 4430 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 4431 - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 4432 - "dependencies": { 4433 - "asynckit": "^0.4.0", 4434 - "combined-stream": "^1.0.8", 4435 - "mime-types": "^2.1.12" 4436 - }, 4437 - "engines": { 4438 - "node": ">= 6" 4439 4381 } 4440 4382 }, 4441 4383 "node_modules/fraction.js": { 4442 - "version": "4.3.6", 4443 - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", 4444 - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", 4384 + "version": "4.3.7", 4385 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 4386 + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 4445 4387 "dev": true, 4446 4388 "engines": { 4447 4389 "node": "*" ··· 4489 4431 "node_modules/function-bind": { 4490 4432 "version": "1.1.1", 4491 4433 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 4492 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 4434 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 4435 + "dev": true 4493 4436 }, 4494 4437 "node_modules/function.prototype.name": { 4495 4438 "version": "1.1.5", ··· 4531 4474 "version": "1.2.1", 4532 4475 "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 4533 4476 "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 4477 + "dev": true, 4534 4478 "dependencies": { 4535 4479 "function-bind": "^1.1.1", 4536 4480 "has": "^1.0.3", ··· 4641 4585 "version": "1.0.3", 4642 4586 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 4643 4587 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 4588 + "dev": true, 4644 4589 "dependencies": { 4645 4590 "function-bind": "^1.1.1" 4646 4591 }, ··· 4682 4627 "version": "1.0.1", 4683 4628 "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 4684 4629 "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 4630 + "dev": true, 4685 4631 "engines": { 4686 4632 "node": ">= 0.4" 4687 4633 }, ··· 4693 4639 "version": "1.0.3", 4694 4640 "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 4695 4641 "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 4642 + "dev": true, 4696 4643 "engines": { 4697 4644 "node": ">= 0.4" 4698 4645 }, ··· 4820 4767 } 4821 4768 }, 4822 4769 "node_modules/is-core-module": { 4823 - "version": "2.11.0", 4824 - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 4825 - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 4770 + "version": "2.13.0", 4771 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 4772 + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 4826 4773 "dev": true, 4827 4774 "dependencies": { 4828 4775 "has": "^1.0.3" ··· 5256 5203 "integrity": "sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==" 5257 5204 }, 5258 5205 "node_modules/kolorist": { 5259 - "version": "1.6.0", 5260 - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.6.0.tgz", 5261 - "integrity": "sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==", 5206 + "version": "1.8.0", 5207 + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", 5208 + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", 5262 5209 "dev": true 5263 5210 }, 5264 5211 "node_modules/leven": { ··· 5307 5254 "tslib": "^2.0.3" 5308 5255 } 5309 5256 }, 5310 - "node_modules/lru-cache": { 5311 - "version": "6.0.0", 5312 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 5313 - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 5314 - "dependencies": { 5315 - "yallist": "^4.0.0" 5316 - }, 5317 - "engines": { 5318 - "node": ">=10" 5319 - } 5320 - }, 5321 5257 "node_modules/lz-string": { 5322 5258 "version": "1.5.0", 5323 5259 "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", ··· 5335 5271 "sourcemap-codec": "^1.4.8" 5336 5272 } 5337 5273 }, 5338 - "node_modules/map-age-cleaner": { 5339 - "version": "0.1.3", 5340 - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 5341 - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 5342 - "dependencies": { 5343 - "p-defer": "^1.0.0" 5344 - }, 5345 - "engines": { 5346 - "node": ">=6" 5347 - } 5348 - }, 5349 5274 "node_modules/masto": { 5350 - "version": "5.11.4", 5351 - "resolved": "https://registry.npmjs.org/masto/-/masto-5.11.4.tgz", 5352 - "integrity": "sha512-sLF3SJTNZDAP57Y+8vAdd1KQTuWWxmGUrBF1R2GLPL6zij/1wXxV05+h8GZhnfg+696arkt+w6ZlKvEEfH1yvg==", 5275 + "version": "6.3.1", 5276 + "resolved": "https://registry.npmjs.org/masto/-/masto-6.3.1.tgz", 5277 + "integrity": "sha512-Os3MlbGFNL6KHxlKldYY+d/1exO6oBjtF4vx8d6cmXRmeeeW3mKQeunTZz+yY5qWksPg2eVdk+FOhaEnOeclVw==", 5353 5278 "dependencies": { 5354 - "@mastojs/ponyfills": "^1.0.4", 5355 5279 "change-case": "^4.1.2", 5356 - "eventemitter3": "^5.0.0", 5280 + "events-to-async": "^2.0.0", 5357 5281 "isomorphic-ws": "^5.0.0", 5358 - "qs": "^6.11.0", 5359 - "semver": "^7.3.7", 5282 + "ts-custom-error": "^3.3.1", 5360 5283 "ws": "^8.13.0" 5361 5284 } 5362 5285 }, 5363 - "node_modules/masto/node_modules/semver": { 5364 - "version": "7.3.8", 5365 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 5366 - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 5367 - "dependencies": { 5368 - "lru-cache": "^6.0.0" 5369 - }, 5370 - "bin": { 5371 - "semver": "bin/semver.js" 5372 - }, 5373 - "engines": { 5374 - "node": ">=10" 5375 - } 5376 - }, 5377 - "node_modules/mem": { 5378 - "version": "9.0.2", 5379 - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", 5380 - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", 5381 - "dependencies": { 5382 - "map-age-cleaner": "^0.1.3", 5383 - "mimic-fn": "^4.0.0" 5384 - }, 5385 - "engines": { 5386 - "node": ">=12.20" 5387 - }, 5388 - "funding": { 5389 - "url": "https://github.com/sindresorhus/mem?sponsor=1" 5390 - } 5391 - }, 5392 5286 "node_modules/merge-stream": { 5393 5287 "version": "2.0.0", 5394 5288 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", ··· 5404 5298 "node": ">= 8" 5405 5299 } 5406 5300 }, 5301 + "node_modules/micro-memoize": { 5302 + "version": "4.1.2", 5303 + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", 5304 + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" 5305 + }, 5407 5306 "node_modules/micromatch": { 5408 5307 "version": "4.0.5", 5409 5308 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", ··· 5421 5320 "version": "1.52.0", 5422 5321 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 5423 5322 "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 5323 + "dev": true, 5424 5324 "engines": { 5425 5325 "node": ">= 0.6" 5426 5326 } ··· 5429 5329 "version": "2.1.35", 5430 5330 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 5431 5331 "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 5332 + "dev": true, 5432 5333 "dependencies": { 5433 5334 "mime-db": "1.52.0" 5434 5335 }, 5435 5336 "engines": { 5436 5337 "node": ">= 0.6" 5437 - } 5438 - }, 5439 - "node_modules/mimic-fn": { 5440 - "version": "4.0.0", 5441 - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 5442 - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 5443 - "engines": { 5444 - "node": ">=12" 5445 - }, 5446 - "funding": { 5447 - "url": "https://github.com/sponsors/sindresorhus" 5448 5338 } 5449 5339 }, 5450 5340 "node_modules/minimatch": { ··· 5459 5349 "node": "*" 5460 5350 } 5461 5351 }, 5352 + "node_modules/moize": { 5353 + "version": "6.1.6", 5354 + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", 5355 + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", 5356 + "dependencies": { 5357 + "fast-equals": "^3.0.1", 5358 + "micro-memoize": "^4.1.2" 5359 + } 5360 + }, 5462 5361 "node_modules/ms": { 5463 5362 "version": "2.1.2", 5464 5363 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", ··· 5492 5391 "tslib": "^2.0.3" 5493 5392 } 5494 5393 }, 5495 - "node_modules/node-fetch": { 5496 - "version": "2.6.7", 5497 - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 5498 - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 5499 - "dependencies": { 5500 - "whatwg-url": "^5.0.0" 5501 - }, 5502 - "engines": { 5503 - "node": "4.x || >=6.0.0" 5504 - }, 5505 - "peerDependencies": { 5506 - "encoding": "^0.1.0" 5507 - }, 5508 - "peerDependenciesMeta": { 5509 - "encoding": { 5510 - "optional": true 5511 - } 5512 - } 5513 - }, 5514 - "node_modules/node-fetch/node_modules/tr46": { 5515 - "version": "0.0.3", 5516 - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 5517 - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 5518 - }, 5519 - "node_modules/node-fetch/node_modules/webidl-conversions": { 5520 - "version": "3.0.1", 5521 - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 5522 - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 5523 - }, 5524 - "node_modules/node-fetch/node_modules/whatwg-url": { 5525 - "version": "5.0.0", 5526 - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 5527 - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 5528 - "dependencies": { 5529 - "tr46": "~0.0.3", 5530 - "webidl-conversions": "^3.0.0" 5531 - } 5532 - }, 5533 5394 "node_modules/node-releases": { 5534 5395 "version": "2.0.13", 5535 5396 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", ··· 5557 5418 "version": "1.12.3", 5558 5419 "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 5559 5420 "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 5421 + "dev": true, 5560 5422 "funding": { 5561 5423 "url": "https://github.com/sponsors/ljharb" 5562 5424 } ··· 5595 5457 "dev": true, 5596 5458 "dependencies": { 5597 5459 "wrappy": "1" 5598 - } 5599 - }, 5600 - "node_modules/p-defer": { 5601 - "version": "1.0.0", 5602 - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 5603 - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", 5604 - "engines": { 5605 - "node": ">=4" 5606 5460 } 5607 5461 }, 5608 5462 "node_modules/p-retry": { ··· 5755 5609 } 5756 5610 }, 5757 5611 "node_modules/postcss-color-functional-notation": { 5758 - "version": "6.0.1", 5759 - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.1.tgz", 5760 - "integrity": "sha512-IouVx77fASIjOChWxkvOjYGnYNKq286cSiKFJwWNICV9NP2xZWVOS9WOriR/8uIB2zt/44bzQyw4GteCLpP2SA==", 5612 + "version": "6.0.2", 5613 + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz", 5614 + "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==", 5761 5615 "dev": true, 5762 5616 "funding": [ 5763 5617 { ··· 5770 5624 } 5771 5625 ], 5772 5626 "dependencies": { 5773 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 5627 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 5774 5628 "postcss-value-parser": "^4.2.0" 5775 5629 }, 5776 5630 "engines": { ··· 5825 5679 } 5826 5680 }, 5827 5681 "node_modules/postcss-custom-media": { 5828 - "version": "10.0.1", 5829 - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.1.tgz", 5830 - "integrity": "sha512-fil7cosvzlIAYmZJPtNFcTH0Er7a3GveEK4q5Y/L24eWQHmiw8Fv/E5DMkVpdbNjkGzJxrvowOSt/Il9HZ06VQ==", 5682 + "version": "10.0.2", 5683 + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", 5684 + "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", 5831 5685 "dev": true, 5832 5686 "funding": [ 5833 5687 { ··· 5840 5694 } 5841 5695 ], 5842 5696 "dependencies": { 5843 - "@csstools/cascade-layer-name-parser": "^1.0.4", 5844 - "@csstools/css-parser-algorithms": "^2.3.1", 5845 - "@csstools/css-tokenizer": "^2.2.0", 5846 - "@csstools/media-query-list-parser": "^2.1.4" 5697 + "@csstools/cascade-layer-name-parser": "^1.0.5", 5698 + "@csstools/css-parser-algorithms": "^2.3.2", 5699 + "@csstools/css-tokenizer": "^2.2.1", 5700 + "@csstools/media-query-list-parser": "^2.1.5" 5847 5701 }, 5848 5702 "engines": { 5849 5703 "node": "^14 || ^16 || >=18" ··· 5881 5735 } 5882 5736 }, 5883 5737 "node_modules/postcss-custom-selectors": { 5884 - "version": "7.1.5", 5885 - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.5.tgz", 5886 - "integrity": "sha512-0UYtz7GG10bZrRiUdZ/2Flt+hp5p/WP0T7JgAPZ/Xhgb0wFjW/p7QOjE+M58S9Z3x11P9YaNPcrsoOGewWYkcw==", 5738 + "version": "7.1.6", 5739 + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz", 5740 + "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==", 5887 5741 "dev": true, 5888 5742 "funding": [ 5889 5743 { ··· 5896 5750 } 5897 5751 ], 5898 5752 "dependencies": { 5899 - "@csstools/cascade-layer-name-parser": "^1.0.4", 5900 - "@csstools/css-parser-algorithms": "^2.3.1", 5901 - "@csstools/css-tokenizer": "^2.2.0", 5753 + "@csstools/cascade-layer-name-parser": "^1.0.5", 5754 + "@csstools/css-parser-algorithms": "^2.3.2", 5755 + "@csstools/css-tokenizer": "^2.2.1", 5902 5756 "postcss-selector-parser": "^6.0.13" 5903 5757 }, 5904 5758 "engines": { ··· 5956 5810 } 5957 5811 }, 5958 5812 "node_modules/postcss-double-position-gradients": { 5959 - "version": "5.0.1", 5960 - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.1.tgz", 5961 - "integrity": "sha512-ogcHzfC5q4nfySyZyNF7crvK3/MRDTh+akzE+l7bgJUjVkhgfahBuI+ZAm/5EeaVSVKnCOgqtC6wTyUFgLVLTw==", 5813 + "version": "5.0.2", 5814 + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz", 5815 + "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==", 5962 5816 "dev": true, 5963 5817 "funding": [ 5964 5818 { ··· 5971 5825 } 5972 5826 ], 5973 5827 "dependencies": { 5974 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 5828 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 5975 5829 "postcss-value-parser": "^4.2.0" 5976 5830 }, 5977 5831 "engines": { ··· 6088 5942 } 6089 5943 }, 6090 5944 "node_modules/postcss-lab-function": { 6091 - "version": "6.0.5", 6092 - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.5.tgz", 6093 - "integrity": "sha512-v1NG08v7tN9n76rA5j5HQ4sRu/kqXBuOFNAYhfHqbyDQ1WbsGKfPNN9VnJSSI3V0KIlShodYQPf3ORjMSo1w9g==", 5945 + "version": "6.0.7", 5946 + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz", 5947 + "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==", 6094 5948 "dev": true, 6095 5949 "funding": [ 6096 5950 { ··· 6103 5957 } 6104 5958 ], 6105 5959 "dependencies": { 6106 - "@csstools/css-color-parser": "^1.3.2", 5960 + "@csstools/css-color-parser": "^1.4.0", 6107 5961 "@csstools/css-parser-algorithms": "^2.3.2", 6108 5962 "@csstools/css-tokenizer": "^2.2.1", 6109 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 5963 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 6110 5964 }, 6111 5965 "engines": { 6112 5966 "node": "^14 || ^16 || >=18" ··· 6248 6102 } 6249 6103 }, 6250 6104 "node_modules/postcss-preset-env": { 6251 - "version": "9.1.4", 6252 - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.1.4.tgz", 6253 - "integrity": "sha512-k2scWtmYBZhjAzMJw8Fgc4hnfkZa4KpPjK0z6+tTAJ4/3ZAmaJJ1VBQ9T7OS0qvper8AyD+kqN2UB2tYFQ4eeA==", 6105 + "version": "9.2.0", 6106 + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.2.0.tgz", 6107 + "integrity": "sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==", 6254 6108 "dev": true, 6255 6109 "funding": [ 6256 6110 { ··· 6264 6118 ], 6265 6119 "dependencies": { 6266 6120 "@csstools/postcss-cascade-layers": "^4.0.0", 6267 - "@csstools/postcss-color-function": "^3.0.4", 6268 - "@csstools/postcss-color-mix-function": "^2.0.4", 6269 - "@csstools/postcss-exponential-functions": "^1.0.0", 6121 + "@csstools/postcss-color-function": "^3.0.7", 6122 + "@csstools/postcss-color-mix-function": "^2.0.7", 6123 + "@csstools/postcss-exponential-functions": "^1.0.1", 6270 6124 "@csstools/postcss-font-format-keywords": "^3.0.0", 6271 - "@csstools/postcss-gradients-interpolation-method": "^4.0.4", 6272 - "@csstools/postcss-hwb-function": "^3.0.3", 6273 - "@csstools/postcss-ic-unit": "^3.0.1", 6125 + "@csstools/postcss-gamut-mapping": "^1.0.0", 6126 + "@csstools/postcss-gradients-interpolation-method": "^4.0.7", 6127 + "@csstools/postcss-hwb-function": "^3.0.6", 6128 + "@csstools/postcss-ic-unit": "^3.0.2", 6274 6129 "@csstools/postcss-initial": "^1.0.0", 6275 - "@csstools/postcss-is-pseudo-class": "^4.0.2", 6130 + "@csstools/postcss-is-pseudo-class": "^4.0.3", 6276 6131 "@csstools/postcss-logical-float-and-clear": "^2.0.0", 6277 6132 "@csstools/postcss-logical-resize": "^2.0.0", 6278 - "@csstools/postcss-logical-viewport-units": "^2.0.2", 6279 - "@csstools/postcss-media-minmax": "^1.0.7", 6280 - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.2", 6133 + "@csstools/postcss-logical-viewport-units": "^2.0.3", 6134 + "@csstools/postcss-media-minmax": "^1.1.0", 6135 + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3", 6281 6136 "@csstools/postcss-nested-calc": "^3.0.0", 6282 6137 "@csstools/postcss-normalize-display-values": "^3.0.1", 6283 - "@csstools/postcss-oklab-function": "^3.0.4", 6284 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 6285 - "@csstools/postcss-relative-color-syntax": "^2.0.4", 6138 + "@csstools/postcss-oklab-function": "^3.0.7", 6139 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 6140 + "@csstools/postcss-relative-color-syntax": "^2.0.7", 6286 6141 "@csstools/postcss-scope-pseudo-class": "^3.0.0", 6287 - "@csstools/postcss-stepped-value-functions": "^3.0.1", 6142 + "@csstools/postcss-stepped-value-functions": "^3.0.2", 6288 6143 "@csstools/postcss-text-decoration-shorthand": "^3.0.3", 6289 - "@csstools/postcss-trigonometric-functions": "^3.0.1", 6144 + "@csstools/postcss-trigonometric-functions": "^3.0.2", 6290 6145 "@csstools/postcss-unset-value": "^3.0.0", 6291 - "autoprefixer": "^10.4.15", 6292 - "browserslist": "^4.21.10", 6146 + "autoprefixer": "^10.4.16", 6147 + "browserslist": "^4.22.1", 6293 6148 "css-blank-pseudo": "^6.0.0", 6294 6149 "css-has-pseudo": "^6.0.0", 6295 6150 "css-prefers-color-scheme": "^9.0.0", 6296 - "cssdb": "^7.7.2", 6151 + "cssdb": "^7.8.0", 6297 6152 "postcss-attribute-case-insensitive": "^6.0.2", 6298 6153 "postcss-clamp": "^4.1.0", 6299 - "postcss-color-functional-notation": "^6.0.1", 6154 + "postcss-color-functional-notation": "^6.0.2", 6300 6155 "postcss-color-hex-alpha": "^9.0.2", 6301 6156 "postcss-color-rebeccapurple": "^9.0.1", 6302 - "postcss-custom-media": "^10.0.1", 6303 - "postcss-custom-properties": "^13.3.1", 6304 - "postcss-custom-selectors": "^7.1.5", 6157 + "postcss-custom-media": "^10.0.2", 6158 + "postcss-custom-properties": "^13.3.2", 6159 + "postcss-custom-selectors": "^7.1.6", 6305 6160 "postcss-dir-pseudo-class": "^8.0.0", 6306 - "postcss-double-position-gradients": "^5.0.1", 6161 + "postcss-double-position-gradients": "^5.0.2", 6307 6162 "postcss-focus-visible": "^9.0.0", 6308 6163 "postcss-focus-within": "^8.0.0", 6309 6164 "postcss-font-variant": "^5.0.0", 6310 6165 "postcss-gap-properties": "^5.0.0", 6311 6166 "postcss-image-set-function": "^6.0.1", 6312 - "postcss-lab-function": "^6.0.4", 6167 + "postcss-lab-function": "^6.0.7", 6313 6168 "postcss-logical": "^7.0.0", 6314 6169 "postcss-nesting": "^12.0.1", 6315 6170 "postcss-opacity-percentage": "^2.0.0", ··· 6461 6316 "node": ">=6" 6462 6317 } 6463 6318 }, 6464 - "node_modules/qs": { 6465 - "version": "6.11.0", 6466 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 6467 - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 6468 - "dependencies": { 6469 - "side-channel": "^1.0.4" 6470 - }, 6471 - "engines": { 6472 - "node": ">=0.6" 6473 - }, 6474 - "funding": { 6475 - "url": "https://github.com/sponsors/ljharb" 6476 - } 6477 - }, 6478 6319 "node_modules/queue-microtask": { 6479 6320 "version": "1.2.3", 6480 6321 "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", ··· 6712 6553 } 6713 6554 }, 6714 6555 "node_modules/resolve": { 6715 - "version": "1.22.1", 6716 - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 6717 - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 6556 + "version": "1.22.8", 6557 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 6558 + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 6718 6559 "dev": true, 6719 6560 "dependencies": { 6720 - "is-core-module": "^2.9.0", 6561 + "is-core-module": "^2.13.0", 6721 6562 "path-parse": "^1.0.7", 6722 6563 "supports-preserve-symlinks-flag": "^1.0.0" 6723 6564 }, ··· 6829 6670 } 6830 6671 }, 6831 6672 "node_modules/semver": { 6832 - "version": "6.3.0", 6833 - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 6834 - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 6673 + "version": "6.3.1", 6674 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 6675 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 6835 6676 "dev": true, 6836 6677 "bin": { 6837 6678 "semver": "bin/semver.js" ··· 6860 6701 "version": "1.0.4", 6861 6702 "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 6862 6703 "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 6704 + "dev": true, 6863 6705 "dependencies": { 6864 6706 "call-bind": "^1.0.0", 6865 6707 "get-intrinsic": "^1.0.2", ··· 7137 6979 "punycode": "^2.1.0" 7138 6980 } 7139 6981 }, 6982 + "node_modules/ts-custom-error": { 6983 + "version": "3.3.1", 6984 + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", 6985 + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==", 6986 + "engines": { 6987 + "node": ">=14.0.0" 6988 + } 6989 + }, 7140 6990 "node_modules/tslib": { 7141 6991 "version": "2.4.1", 7142 6992 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", ··· 7290 7140 } 7291 7141 }, 7292 7142 "node_modules/update-browserslist-db": { 7293 - "version": "1.0.11", 7294 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 7295 - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 7143 + "version": "1.0.13", 7144 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 7145 + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 7296 7146 "dev": true, 7297 7147 "funding": [ 7298 7148 { ··· 7991 7841 "optional": true 7992 7842 } 7993 7843 } 7994 - }, 7995 - "node_modules/yallist": { 7996 - "version": "4.0.0", 7997 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 7998 - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 7999 7844 } 8000 7845 }, 8001 7846 "dependencies": { ··· 8021 7866 } 8022 7867 }, 8023 7868 "@babel/code-frame": { 8024 - "version": "7.21.4", 8025 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", 8026 - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", 7869 + "version": "7.22.13", 7870 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", 7871 + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", 8027 7872 "dev": true, 8028 7873 "requires": { 8029 - "@babel/highlight": "^7.18.6" 7874 + "@babel/highlight": "^7.22.13", 7875 + "chalk": "^2.4.2" 8030 7876 } 8031 7877 }, 8032 7878 "@babel/compat-data": { 8033 - "version": "7.22.3", 8034 - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", 8035 - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", 7879 + "version": "7.23.2", 7880 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", 7881 + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", 8036 7882 "dev": true 8037 7883 }, 8038 7884 "@babel/core": { 8039 - "version": "7.20.2", 8040 - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", 8041 - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", 7885 + "version": "7.23.2", 7886 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", 7887 + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", 8042 7888 "dev": true, 8043 7889 "requires": { 8044 - "@ampproject/remapping": "^2.1.0", 8045 - "@babel/code-frame": "^7.18.6", 8046 - "@babel/generator": "^7.20.2", 8047 - "@babel/helper-compilation-targets": "^7.20.0", 8048 - "@babel/helper-module-transforms": "^7.20.2", 8049 - "@babel/helpers": "^7.20.1", 8050 - "@babel/parser": "^7.20.2", 8051 - "@babel/template": "^7.18.10", 8052 - "@babel/traverse": "^7.20.1", 8053 - "@babel/types": "^7.20.2", 8054 - "convert-source-map": "^1.7.0", 7890 + "@ampproject/remapping": "^2.2.0", 7891 + "@babel/code-frame": "^7.22.13", 7892 + "@babel/generator": "^7.23.0", 7893 + "@babel/helper-compilation-targets": "^7.22.15", 7894 + "@babel/helper-module-transforms": "^7.23.0", 7895 + "@babel/helpers": "^7.23.2", 7896 + "@babel/parser": "^7.23.0", 7897 + "@babel/template": "^7.22.15", 7898 + "@babel/traverse": "^7.23.2", 7899 + "@babel/types": "^7.23.0", 7900 + "convert-source-map": "^2.0.0", 8055 7901 "debug": "^4.1.0", 8056 7902 "gensync": "^1.0.0-beta.2", 8057 - "json5": "^2.2.1", 8058 - "semver": "^6.3.0" 7903 + "json5": "^2.2.3", 7904 + "semver": "^6.3.1" 8059 7905 } 8060 7906 }, 8061 7907 "@babel/generator": { 8062 - "version": "7.22.3", 8063 - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", 8064 - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", 7908 + "version": "7.23.0", 7909 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", 7910 + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", 8065 7911 "dev": true, 8066 7912 "requires": { 8067 - "@babel/types": "^7.22.3", 7913 + "@babel/types": "^7.23.0", 8068 7914 "@jridgewell/gen-mapping": "^0.3.2", 8069 7915 "@jridgewell/trace-mapping": "^0.3.17", 8070 7916 "jsesc": "^2.5.1" ··· 8084 7930 } 8085 7931 }, 8086 7932 "@babel/helper-annotate-as-pure": { 8087 - "version": "7.18.6", 8088 - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", 8089 - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", 7933 + "version": "7.22.5", 7934 + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", 7935 + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", 8090 7936 "dev": true, 8091 7937 "requires": { 8092 - "@babel/types": "^7.18.6" 7938 + "@babel/types": "^7.22.5" 8093 7939 } 8094 7940 }, 8095 7941 "@babel/helper-builder-binary-assignment-operator-visitor": { ··· 8102 7948 } 8103 7949 }, 8104 7950 "@babel/helper-compilation-targets": { 8105 - "version": "7.22.1", 8106 - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", 8107 - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", 7951 + "version": "7.22.15", 7952 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", 7953 + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", 8108 7954 "dev": true, 8109 7955 "requires": { 8110 - "@babel/compat-data": "^7.22.0", 8111 - "@babel/helper-validator-option": "^7.21.0", 8112 - "browserslist": "^4.21.3", 7956 + "@babel/compat-data": "^7.22.9", 7957 + "@babel/helper-validator-option": "^7.22.15", 7958 + "browserslist": "^4.21.9", 8113 7959 "lru-cache": "^5.1.1", 8114 - "semver": "^6.3.0" 7960 + "semver": "^6.3.1" 8115 7961 }, 8116 7962 "dependencies": { 8117 7963 "lru-cache": { ··· 8174 8020 } 8175 8021 }, 8176 8022 "@babel/helper-environment-visitor": { 8177 - "version": "7.22.1", 8178 - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", 8179 - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", 8023 + "version": "7.22.20", 8024 + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 8025 + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", 8180 8026 "dev": true 8181 8027 }, 8182 8028 "@babel/helper-function-name": { 8183 - "version": "7.21.0", 8184 - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", 8185 - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", 8029 + "version": "7.23.0", 8030 + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 8031 + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 8186 8032 "dev": true, 8187 8033 "requires": { 8188 - "@babel/template": "^7.20.7", 8189 - "@babel/types": "^7.21.0" 8034 + "@babel/template": "^7.22.15", 8035 + "@babel/types": "^7.23.0" 8190 8036 } 8191 8037 }, 8192 8038 "@babel/helper-hoist-variables": { 8193 - "version": "7.18.6", 8194 - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 8195 - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 8039 + "version": "7.22.5", 8040 + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 8041 + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 8196 8042 "dev": true, 8197 8043 "requires": { 8198 - "@babel/types": "^7.18.6" 8044 + "@babel/types": "^7.22.5" 8199 8045 } 8200 8046 }, 8201 8047 "@babel/helper-member-expression-to-functions": { ··· 8208 8054 } 8209 8055 }, 8210 8056 "@babel/helper-module-imports": { 8211 - "version": "7.21.4", 8212 - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", 8213 - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", 8057 + "version": "7.22.15", 8058 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", 8059 + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", 8214 8060 "dev": true, 8215 8061 "requires": { 8216 - "@babel/types": "^7.21.4" 8062 + "@babel/types": "^7.22.15" 8217 8063 } 8218 8064 }, 8219 8065 "@babel/helper-module-transforms": { 8220 - "version": "7.22.1", 8221 - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", 8222 - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", 8066 + "version": "7.23.0", 8067 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", 8068 + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", 8223 8069 "dev": true, 8224 8070 "requires": { 8225 - "@babel/helper-environment-visitor": "^7.22.1", 8226 - "@babel/helper-module-imports": "^7.21.4", 8227 - "@babel/helper-simple-access": "^7.21.5", 8228 - "@babel/helper-split-export-declaration": "^7.18.6", 8229 - "@babel/helper-validator-identifier": "^7.19.1", 8230 - "@babel/template": "^7.21.9", 8231 - "@babel/traverse": "^7.22.1", 8232 - "@babel/types": "^7.22.0" 8071 + "@babel/helper-environment-visitor": "^7.22.20", 8072 + "@babel/helper-module-imports": "^7.22.15", 8073 + "@babel/helper-simple-access": "^7.22.5", 8074 + "@babel/helper-split-export-declaration": "^7.22.6", 8075 + "@babel/helper-validator-identifier": "^7.22.20" 8233 8076 } 8234 8077 }, 8235 8078 "@babel/helper-optimise-call-expression": { ··· 8242 8085 } 8243 8086 }, 8244 8087 "@babel/helper-plugin-utils": { 8245 - "version": "7.21.5", 8246 - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", 8247 - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", 8088 + "version": "7.22.5", 8089 + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", 8090 + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", 8248 8091 "dev": true 8249 8092 }, 8250 8093 "@babel/helper-remap-async-to-generator": { ··· 8274 8117 } 8275 8118 }, 8276 8119 "@babel/helper-simple-access": { 8277 - "version": "7.21.5", 8278 - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", 8279 - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", 8120 + "version": "7.22.5", 8121 + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 8122 + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 8280 8123 "dev": true, 8281 8124 "requires": { 8282 - "@babel/types": "^7.21.5" 8125 + "@babel/types": "^7.22.5" 8283 8126 } 8284 8127 }, 8285 8128 "@babel/helper-skip-transparent-expression-wrappers": { ··· 8292 8135 } 8293 8136 }, 8294 8137 "@babel/helper-split-export-declaration": { 8295 - "version": "7.18.6", 8296 - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 8297 - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 8138 + "version": "7.22.6", 8139 + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 8140 + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 8298 8141 "dev": true, 8299 8142 "requires": { 8300 - "@babel/types": "^7.18.6" 8143 + "@babel/types": "^7.22.5" 8301 8144 } 8302 8145 }, 8303 8146 "@babel/helper-string-parser": { 8304 - "version": "7.21.5", 8305 - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", 8306 - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", 8147 + "version": "7.22.5", 8148 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", 8149 + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", 8307 8150 "dev": true 8308 8151 }, 8309 8152 "@babel/helper-validator-identifier": { 8310 - "version": "7.19.1", 8311 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 8312 - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 8153 + "version": "7.22.20", 8154 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 8155 + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 8313 8156 "dev": true 8314 8157 }, 8315 8158 "@babel/helper-validator-option": { 8316 - "version": "7.21.0", 8317 - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", 8318 - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", 8159 + "version": "7.22.15", 8160 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", 8161 + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", 8319 8162 "dev": true 8320 8163 }, 8321 8164 "@babel/helper-wrap-function": { ··· 8331 8174 } 8332 8175 }, 8333 8176 "@babel/helpers": { 8334 - "version": "7.20.1", 8335 - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", 8336 - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", 8177 + "version": "7.23.2", 8178 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", 8179 + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", 8337 8180 "dev": true, 8338 8181 "requires": { 8339 - "@babel/template": "^7.18.10", 8340 - "@babel/traverse": "^7.20.1", 8341 - "@babel/types": "^7.20.0" 8182 + "@babel/template": "^7.22.15", 8183 + "@babel/traverse": "^7.23.2", 8184 + "@babel/types": "^7.23.0" 8342 8185 } 8343 8186 }, 8344 8187 "@babel/highlight": { 8345 - "version": "7.18.6", 8346 - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 8347 - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 8188 + "version": "7.22.20", 8189 + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", 8190 + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", 8348 8191 "dev": true, 8349 8192 "requires": { 8350 - "@babel/helper-validator-identifier": "^7.18.6", 8351 - "chalk": "^2.0.0", 8193 + "@babel/helper-validator-identifier": "^7.22.20", 8194 + "chalk": "^2.4.2", 8352 8195 "js-tokens": "^4.0.0" 8353 8196 } 8354 8197 }, 8355 8198 "@babel/parser": { 8356 - "version": "7.22.4", 8357 - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", 8358 - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", 8199 + "version": "7.23.0", 8200 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", 8201 + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", 8359 8202 "dev": true 8360 8203 }, 8361 8204 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { ··· 8482 8325 } 8483 8326 }, 8484 8327 "@babel/plugin-syntax-jsx": { 8485 - "version": "7.18.6", 8486 - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", 8487 - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", 8328 + "version": "7.22.5", 8329 + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", 8330 + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", 8488 8331 "dev": true, 8489 8332 "requires": { 8490 - "@babel/helper-plugin-utils": "^7.18.6" 8333 + "@babel/helper-plugin-utils": "^7.22.5" 8491 8334 } 8492 8335 }, 8493 8336 "@babel/plugin-syntax-logical-assignment-operators": { ··· 8953 8796 } 8954 8797 }, 8955 8798 "@babel/plugin-transform-react-jsx": { 8956 - "version": "7.19.0", 8957 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", 8958 - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", 8799 + "version": "7.22.15", 8800 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", 8801 + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", 8959 8802 "dev": true, 8960 8803 "requires": { 8961 - "@babel/helper-annotate-as-pure": "^7.18.6", 8962 - "@babel/helper-module-imports": "^7.18.6", 8963 - "@babel/helper-plugin-utils": "^7.19.0", 8964 - "@babel/plugin-syntax-jsx": "^7.18.6", 8965 - "@babel/types": "^7.19.0" 8804 + "@babel/helper-annotate-as-pure": "^7.22.5", 8805 + "@babel/helper-module-imports": "^7.22.15", 8806 + "@babel/helper-plugin-utils": "^7.22.5", 8807 + "@babel/plugin-syntax-jsx": "^7.22.5", 8808 + "@babel/types": "^7.22.15" 8966 8809 } 8967 8810 }, 8968 8811 "@babel/plugin-transform-react-jsx-development": { 8969 - "version": "7.18.6", 8970 - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", 8971 - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", 8812 + "version": "7.22.5", 8813 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", 8814 + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", 8972 8815 "dev": true, 8973 8816 "requires": { 8974 - "@babel/plugin-transform-react-jsx": "^7.18.6" 8817 + "@babel/plugin-transform-react-jsx": "^7.22.5" 8975 8818 } 8976 8819 }, 8977 8820 "@babel/plugin-transform-regenerator": { ··· 9195 9038 } 9196 9039 }, 9197 9040 "@babel/template": { 9198 - "version": "7.21.9", 9199 - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", 9200 - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", 9041 + "version": "7.22.15", 9042 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", 9043 + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", 9201 9044 "dev": true, 9202 9045 "requires": { 9203 - "@babel/code-frame": "^7.21.4", 9204 - "@babel/parser": "^7.21.9", 9205 - "@babel/types": "^7.21.5" 9046 + "@babel/code-frame": "^7.22.13", 9047 + "@babel/parser": "^7.22.15", 9048 + "@babel/types": "^7.22.15" 9206 9049 } 9207 9050 }, 9208 9051 "@babel/traverse": { 9209 - "version": "7.22.4", 9210 - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", 9211 - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", 9052 + "version": "7.23.2", 9053 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", 9054 + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", 9212 9055 "dev": true, 9213 9056 "requires": { 9214 - "@babel/code-frame": "^7.21.4", 9215 - "@babel/generator": "^7.22.3", 9216 - "@babel/helper-environment-visitor": "^7.22.1", 9217 - "@babel/helper-function-name": "^7.21.0", 9218 - "@babel/helper-hoist-variables": "^7.18.6", 9219 - "@babel/helper-split-export-declaration": "^7.18.6", 9220 - "@babel/parser": "^7.22.4", 9221 - "@babel/types": "^7.22.4", 9057 + "@babel/code-frame": "^7.22.13", 9058 + "@babel/generator": "^7.23.0", 9059 + "@babel/helper-environment-visitor": "^7.22.20", 9060 + "@babel/helper-function-name": "^7.23.0", 9061 + "@babel/helper-hoist-variables": "^7.22.5", 9062 + "@babel/helper-split-export-declaration": "^7.22.6", 9063 + "@babel/parser": "^7.23.0", 9064 + "@babel/types": "^7.23.0", 9222 9065 "debug": "^4.1.0", 9223 9066 "globals": "^11.1.0" 9224 9067 } 9225 9068 }, 9226 9069 "@babel/types": { 9227 - "version": "7.22.4", 9228 - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", 9229 - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", 9070 + "version": "7.23.0", 9071 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", 9072 + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", 9230 9073 "dev": true, 9231 9074 "requires": { 9232 - "@babel/helper-string-parser": "^7.21.5", 9233 - "@babel/helper-validator-identifier": "^7.19.1", 9075 + "@babel/helper-string-parser": "^7.22.5", 9076 + "@babel/helper-validator-identifier": "^7.22.20", 9234 9077 "to-fast-properties": "^2.0.0" 9235 9078 } 9236 9079 }, ··· 9255 9098 "requires": {} 9256 9099 }, 9257 9100 "@csstools/css-color-parser": { 9258 - "version": "1.3.2", 9259 - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.2.tgz", 9260 - "integrity": "sha512-YLCWI+nm18qr5nj7QhRMGuIi4ddFe0SKEtPQliLf1+pmyHFxoHYd0+Hg+bRnbnVbdyCTTlCqBiUvCeNJfd903g==", 9101 + "version": "1.4.0", 9102 + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz", 9103 + "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==", 9261 9104 "dev": true, 9262 9105 "requires": { 9263 9106 "@csstools/color-helpers": "^3.0.2", ··· 9278 9121 "dev": true 9279 9122 }, 9280 9123 "@csstools/media-query-list-parser": { 9281 - "version": "2.1.4", 9282 - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", 9283 - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", 9124 + "version": "2.1.5", 9125 + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", 9126 + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", 9284 9127 "dev": true, 9285 9128 "requires": {} 9286 9129 }, ··· 9295 9138 } 9296 9139 }, 9297 9140 "@csstools/postcss-color-function": { 9298 - "version": "3.0.5", 9299 - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.5.tgz", 9300 - "integrity": "sha512-q9E7oJwf1Z8nJqQbob9DmFxrte3RQc+pwV+5WlWw6Ei9XaObaNJlPAQ1HfOpcEg/fxrRf/Yf6fgO8Q01r7u17A==", 9141 + "version": "3.0.7", 9142 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz", 9143 + "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==", 9301 9144 "dev": true, 9302 9145 "requires": { 9303 - "@csstools/css-color-parser": "^1.3.2", 9146 + "@csstools/css-color-parser": "^1.4.0", 9304 9147 "@csstools/css-parser-algorithms": "^2.3.2", 9305 9148 "@csstools/css-tokenizer": "^2.2.1", 9306 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 9149 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 9307 9150 } 9308 9151 }, 9309 9152 "@csstools/postcss-color-mix-function": { 9310 - "version": "2.0.5", 9311 - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.5.tgz", 9312 - "integrity": "sha512-0MDBTG0FPDjNlAYMImNjnQ9lrldiFRCmsBx4dZB1ikbFwt6aYJRWDjgXoZY+1CmQ6m1qPeBJO762i6AKwQDlQQ==", 9153 + "version": "2.0.7", 9154 + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz", 9155 + "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==", 9313 9156 "dev": true, 9314 9157 "requires": { 9315 - "@csstools/css-color-parser": "^1.3.2", 9158 + "@csstools/css-color-parser": "^1.4.0", 9316 9159 "@csstools/css-parser-algorithms": "^2.3.2", 9317 9160 "@csstools/css-tokenizer": "^2.2.1", 9318 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 9161 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 9319 9162 } 9320 9163 }, 9321 9164 "@csstools/postcss-exponential-functions": { 9322 - "version": "1.0.0", 9323 - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz", 9324 - "integrity": "sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw==", 9165 + "version": "1.0.1", 9166 + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", 9167 + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", 9325 9168 "dev": true, 9326 9169 "requires": { 9327 - "@csstools/css-calc": "^1.1.3", 9328 - "@csstools/css-parser-algorithms": "^2.3.1", 9329 - "@csstools/css-tokenizer": "^2.2.0" 9170 + "@csstools/css-calc": "^1.1.4", 9171 + "@csstools/css-parser-algorithms": "^2.3.2", 9172 + "@csstools/css-tokenizer": "^2.2.1" 9330 9173 } 9331 9174 }, 9332 9175 "@csstools/postcss-font-format-keywords": { ··· 9338 9181 "postcss-value-parser": "^4.2.0" 9339 9182 } 9340 9183 }, 9184 + "@csstools/postcss-gamut-mapping": { 9185 + "version": "1.0.0", 9186 + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz", 9187 + "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==", 9188 + "dev": true, 9189 + "requires": { 9190 + "@csstools/css-color-parser": "^1.4.0", 9191 + "@csstools/css-parser-algorithms": "2.3.2", 9192 + "@csstools/css-tokenizer": "^2.2.1" 9193 + } 9194 + }, 9341 9195 "@csstools/postcss-gradients-interpolation-method": { 9342 - "version": "4.0.5", 9343 - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.5.tgz", 9344 - "integrity": "sha512-ABDOADpKrTvNb+cUBj9ciocCgFvE832eENKVuONca1u2bkFL4jM9430XFmi/GOgzt0agg5Q8FFJHXgYyKbgOFQ==", 9196 + "version": "4.0.7", 9197 + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz", 9198 + "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==", 9345 9199 "dev": true, 9346 9200 "requires": { 9347 - "@csstools/css-color-parser": "^1.3.2", 9201 + "@csstools/css-color-parser": "^1.4.0", 9348 9202 "@csstools/css-parser-algorithms": "^2.3.2", 9349 9203 "@csstools/css-tokenizer": "^2.2.1", 9350 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 9204 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 9351 9205 } 9352 9206 }, 9353 9207 "@csstools/postcss-hwb-function": { 9354 - "version": "3.0.3", 9355 - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.3.tgz", 9356 - "integrity": "sha512-2TqrRD8JzSwQCRKKNc9BFhSEmsz+mR3RtwSw5mQSGILC+LIYCVWeYwC33cI+saFWv0DGZ0NXLx5VSX2tdJyU6w==", 9208 + "version": "3.0.6", 9209 + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz", 9210 + "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==", 9357 9211 "dev": true, 9358 9212 "requires": { 9359 - "@csstools/css-color-parser": "^1.3.1", 9360 - "@csstools/css-parser-algorithms": "^2.3.1", 9361 - "@csstools/css-tokenizer": "^2.2.0" 9213 + "@csstools/css-color-parser": "^1.4.0", 9214 + "@csstools/css-parser-algorithms": "^2.3.2", 9215 + "@csstools/css-tokenizer": "^2.2.1" 9362 9216 } 9363 9217 }, 9364 9218 "@csstools/postcss-ic-unit": { 9365 - "version": "3.0.1", 9366 - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.1.tgz", 9367 - "integrity": "sha512-OkKZV0XZQixChA6r68O9UfGNFv06cPVcuT+MjpzfEuoCfbNWCj+b0dhsmdz776giQ+DymPmFDlTD+QJEFPI7rw==", 9219 + "version": "3.0.2", 9220 + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz", 9221 + "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==", 9368 9222 "dev": true, 9369 9223 "requires": { 9370 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 9224 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 9371 9225 "postcss-value-parser": "^4.2.0" 9372 9226 } 9373 9227 }, ··· 9379 9233 "requires": {} 9380 9234 }, 9381 9235 "@csstools/postcss-is-pseudo-class": { 9382 - "version": "4.0.2", 9383 - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.2.tgz", 9384 - "integrity": "sha512-LeAJozyZTY3c1SaHMbwF4p8Ego/2HHprYusmmdmUH7wP6lRF1w3s7IO2iNwQ6fHBrSOfkPUFaUtRUGZLBE23Eg==", 9236 + "version": "4.0.3", 9237 + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz", 9238 + "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==", 9385 9239 "dev": true, 9386 9240 "requires": { 9387 9241 "@csstools/selector-specificity": "^3.0.0", ··· 9414 9268 } 9415 9269 }, 9416 9270 "@csstools/postcss-media-minmax": { 9417 - "version": "1.0.7", 9418 - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz", 9419 - "integrity": "sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ==", 9271 + "version": "1.1.0", 9272 + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", 9273 + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", 9420 9274 "dev": true, 9421 9275 "requires": { 9422 - "@csstools/css-calc": "^1.1.3", 9423 - "@csstools/css-parser-algorithms": "^2.3.1", 9424 - "@csstools/css-tokenizer": "^2.2.0", 9425 - "@csstools/media-query-list-parser": "^2.1.4" 9276 + "@csstools/css-calc": "^1.1.4", 9277 + "@csstools/css-parser-algorithms": "^2.3.2", 9278 + "@csstools/css-tokenizer": "^2.2.1", 9279 + "@csstools/media-query-list-parser": "^2.1.5" 9426 9280 } 9427 9281 }, 9428 9282 "@csstools/postcss-media-queries-aspect-ratio-number-values": { 9429 - "version": "2.0.2", 9430 - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz", 9431 - "integrity": "sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg==", 9283 + "version": "2.0.3", 9284 + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", 9285 + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", 9432 9286 "dev": true, 9433 9287 "requires": { 9434 - "@csstools/css-parser-algorithms": "^2.3.1", 9435 - "@csstools/css-tokenizer": "^2.2.0", 9436 - "@csstools/media-query-list-parser": "^2.1.4" 9288 + "@csstools/css-parser-algorithms": "^2.3.2", 9289 + "@csstools/css-tokenizer": "^2.2.1", 9290 + "@csstools/media-query-list-parser": "^2.1.5" 9437 9291 } 9438 9292 }, 9439 9293 "@csstools/postcss-nested-calc": { ··· 9455 9309 } 9456 9310 }, 9457 9311 "@csstools/postcss-oklab-function": { 9458 - "version": "3.0.5", 9459 - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.5.tgz", 9460 - "integrity": "sha512-tFjYaBbAvoks5yvE9uA3b3xsqVKkZJ2sXwPMw1bxlv2ydrmdiojuoRAskRfvMbZQkzp47DzBP1V9GhDLOyFVYA==", 9312 + "version": "3.0.7", 9313 + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz", 9314 + "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==", 9461 9315 "dev": true, 9462 9316 "requires": { 9463 - "@csstools/css-color-parser": "^1.3.2", 9317 + "@csstools/css-color-parser": "^1.4.0", 9464 9318 "@csstools/css-parser-algorithms": "^2.3.2", 9465 9319 "@csstools/css-tokenizer": "^2.2.1", 9466 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 9320 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 9467 9321 } 9468 9322 }, 9469 9323 "@csstools/postcss-progressive-custom-properties": { 9470 - "version": "3.0.1", 9471 - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.1.tgz", 9472 - "integrity": "sha512-yfdEk8o3CWPTusoInmGpOVCcMg1FikcKZyYB5ApULg9mES4FTGNuHK3MESscmm64yladcLNkPlz26O7tk3LMbA==", 9324 + "version": "3.0.2", 9325 + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz", 9326 + "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==", 9473 9327 "dev": true, 9474 9328 "requires": { 9475 9329 "postcss-value-parser": "^4.2.0" 9476 9330 } 9477 9331 }, 9478 9332 "@csstools/postcss-relative-color-syntax": { 9479 - "version": "2.0.5", 9480 - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.5.tgz", 9481 - "integrity": "sha512-wK8IX6X2+kLKxTTTq5yd7mH2U+GPcTMTpP2rM8ig0/rgxuid7vgTOxup6heZUk1IUA409eak3bYGOtDDYCpxbQ==", 9333 + "version": "2.0.7", 9334 + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz", 9335 + "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==", 9482 9336 "dev": true, 9483 9337 "requires": { 9484 - "@csstools/css-color-parser": "^1.3.2", 9338 + "@csstools/css-color-parser": "^1.4.0", 9485 9339 "@csstools/css-parser-algorithms": "^2.3.2", 9486 9340 "@csstools/css-tokenizer": "^2.2.1", 9487 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 9341 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 9488 9342 } 9489 9343 }, 9490 9344 "@csstools/postcss-scope-pseudo-class": { ··· 9497 9351 } 9498 9352 }, 9499 9353 "@csstools/postcss-stepped-value-functions": { 9500 - "version": "3.0.1", 9501 - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz", 9502 - "integrity": "sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA==", 9354 + "version": "3.0.2", 9355 + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", 9356 + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", 9503 9357 "dev": true, 9504 9358 "requires": { 9505 - "@csstools/css-calc": "^1.1.3", 9506 - "@csstools/css-parser-algorithms": "^2.3.1", 9507 - "@csstools/css-tokenizer": "^2.2.0" 9359 + "@csstools/css-calc": "^1.1.4", 9360 + "@csstools/css-parser-algorithms": "^2.3.2", 9361 + "@csstools/css-tokenizer": "^2.2.1" 9508 9362 } 9509 9363 }, 9510 9364 "@csstools/postcss-text-decoration-shorthand": { ··· 9518 9372 } 9519 9373 }, 9520 9374 "@csstools/postcss-trigonometric-functions": { 9521 - "version": "3.0.1", 9522 - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz", 9523 - "integrity": "sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw==", 9375 + "version": "3.0.2", 9376 + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", 9377 + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", 9524 9378 "dev": true, 9525 9379 "requires": { 9526 - "@csstools/css-calc": "^1.1.3", 9527 - "@csstools/css-parser-algorithms": "^2.3.1", 9528 - "@csstools/css-tokenizer": "^2.2.0" 9380 + "@csstools/css-calc": "^1.1.4", 9381 + "@csstools/css-parser-algorithms": "^2.3.2", 9382 + "@csstools/css-tokenizer": "^2.2.1" 9529 9383 } 9530 9384 }, 9531 9385 "@csstools/postcss-unset-value": { ··· 9806 9660 "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", 9807 9661 "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" 9808 9662 }, 9809 - "@mastojs/ponyfills": { 9810 - "version": "1.0.4", 9811 - "resolved": "https://registry.npmjs.org/@mastojs/ponyfills/-/ponyfills-1.0.4.tgz", 9812 - "integrity": "sha512-1NaIGmcU7OmyNzx0fk+cYeGTkdXlOJOSdetaC4pStVWsrhht2cdlYSAfe5NDW3FcUmcEm2vVceB9lcClN1RCxw==", 9813 - "requires": { 9814 - "@types/node": "^18.11.17", 9815 - "@types/node-fetch": "^2.6.2", 9816 - "abort-controller": "^3.0.0", 9817 - "form-data": "^4.0.0", 9818 - "node-fetch": "^2.6.7" 9819 - } 9820 - }, 9821 9663 "@nodelib/fs.scandir": { 9822 9664 "version": "2.1.5", 9823 9665 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", ··· 9845 9687 } 9846 9688 }, 9847 9689 "@preact/preset-vite": { 9848 - "version": "2.5.0", 9849 - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", 9850 - "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", 9690 + "version": "2.6.0", 9691 + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.6.0.tgz", 9692 + "integrity": "sha512-5nztNzXbCpqyVum/K94nB2YQ5PTnvWdz4u7/X0jc8+kLyskSSpkNUxLQJeI90zfGSFIX1Ibj2G2JIS/mySHWYQ==", 9851 9693 "dev": true, 9852 9694 "requires": { 9853 - "@babel/plugin-transform-react-jsx": "^7.14.9", 9854 - "@babel/plugin-transform-react-jsx-development": "^7.16.7", 9855 - "@prefresh/vite": "^2.2.8", 9695 + "@babel/plugin-transform-react-jsx": "^7.22.15", 9696 + "@babel/plugin-transform-react-jsx-development": "^7.22.5", 9697 + "@prefresh/vite": "^2.4.1", 9856 9698 "@rollup/pluginutils": "^4.1.1", 9857 9699 "babel-plugin-transform-hook-names": "^1.0.2", 9858 - "debug": "^4.3.1", 9859 - "kolorist": "^1.2.10", 9860 - "resolve": "^1.20.0" 9700 + "debug": "^4.3.4", 9701 + "kolorist": "^1.8.0", 9702 + "resolve": "^1.22.8" 9861 9703 } 9862 9704 }, 9863 9705 "@prefresh/babel-plugin": { 9864 - "version": "0.4.4", 9865 - "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.4.4.tgz", 9866 - "integrity": "sha512-/EvgIFMDL+nd20WNvMO0JQnzIl1EJPgmSaSYrZUww7A+aSdKsi37aL07TljrZR1cBMuzFxcr4xvqsUQLFJEukw==", 9706 + "version": "0.5.0", 9707 + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.0.tgz", 9708 + "integrity": "sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==", 9867 9709 "dev": true 9868 9710 }, 9869 9711 "@prefresh/core": { 9870 - "version": "1.4.1", 9871 - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.4.1.tgz", 9872 - "integrity": "sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==", 9712 + "version": "1.5.2", 9713 + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", 9714 + "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", 9873 9715 "dev": true, 9874 9716 "requires": {} 9875 9717 }, 9876 9718 "@prefresh/utils": { 9877 - "version": "1.1.3", 9878 - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.1.3.tgz", 9879 - "integrity": "sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A==", 9719 + "version": "1.2.0", 9720 + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", 9721 + "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", 9880 9722 "dev": true 9881 9723 }, 9882 9724 "@prefresh/vite": { 9883 - "version": "2.2.9", 9884 - "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.2.9.tgz", 9885 - "integrity": "sha512-1ERBF85Ja9/lkrfaltmo4Gca7R2ClQPSHHDDysFgfvPzHmLUeyB0x9WHwhwov/AA1DnyPhsfYT54z3yQd8XrgA==", 9725 + "version": "2.4.1", 9726 + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.1.tgz", 9727 + "integrity": "sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==", 9886 9728 "dev": true, 9887 9729 "requires": { 9888 - "@babel/core": "^7.9.6", 9889 - "@prefresh/babel-plugin": "0.4.4", 9890 - "@prefresh/core": "^1.3.3", 9891 - "@prefresh/utils": "^1.1.2", 9892 - "@rollup/pluginutils": "^4.1.0" 9730 + "@babel/core": "^7.22.1", 9731 + "@prefresh/babel-plugin": "0.5.0", 9732 + "@prefresh/core": "^1.5.1", 9733 + "@prefresh/utils": "^1.2.0", 9734 + "@rollup/pluginutils": "^4.2.1" 9893 9735 } 9894 9736 }, 9895 9737 "@remix-run/router": { ··· 9920 9762 } 9921 9763 }, 9922 9764 "@szhsin/react-menu": { 9923 - "version": "4.0.3", 9924 - "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.0.3.tgz", 9925 - "integrity": "sha512-TPsOKLEkesE79802evnLt2Mbv/+zwRJdX8776/vxK5ST9SK8SO0A8kRrus6JuxijLxZxFpmY/3VMdoyeCWQHKA==", 9765 + "version": "4.1.0", 9766 + "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.1.0.tgz", 9767 + "integrity": "sha512-lYYGUxqJxM2b/jD2Cn5a9RVOvHl9VBMX8qOnHZuX1w08cO2jslykpz5P75D7WnqudLnXsJ4k4+tI+q2U8XIFYw==", 9926 9768 "requires": { 9927 9769 "prop-types": "^15.7.2", 9928 9770 "react-transition-state": "^2.1.0" ··· 9998 9840 "@types/node": { 9999 9841 "version": "18.11.17", 10000 9842 "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz", 10001 - "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==" 10002 - }, 10003 - "@types/node-fetch": { 10004 - "version": "2.6.2", 10005 - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", 10006 - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", 10007 - "requires": { 10008 - "@types/node": "*", 10009 - "form-data": "^3.0.0" 10010 - }, 10011 - "dependencies": { 10012 - "form-data": { 10013 - "version": "3.0.1", 10014 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", 10015 - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", 10016 - "requires": { 10017 - "asynckit": "^0.4.0", 10018 - "combined-stream": "^1.0.8", 10019 - "mime-types": "^2.1.12" 10020 - } 10021 - } 10022 - } 9843 + "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==", 9844 + "dev": true 10023 9845 }, 10024 9846 "@types/resolve": { 10025 9847 "version": "1.17.1", ··· 10042 9864 "dev": true 10043 9865 }, 10044 9866 "@uidotdev/usehooks": { 10045 - "version": "2.3.1", 10046 - "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.3.1.tgz", 10047 - "integrity": "sha512-1GL8CatTsTGZdwPNrZ44JhJI5QWip7oyDXEXFBEibJ+P+p+ZBi7mKrpG90ZIdQTSEcvkfiE2Y492Uo3ubPBZ3g==", 9867 + "version": "2.4.0", 9868 + "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.0.tgz", 9869 + "integrity": "sha512-NrpTsZUGsawYxFbEXrd8+FPpfziC4M01GSQgYWOnGa84UiavqVCzCL5bSRe6rfQc4QsHS2rGAA0h63ya/j+p6A==", 10048 9870 "requires": {} 10049 9871 }, 10050 9872 "@vue/compiler-core": { ··· 10128 9950 "optional": true, 10129 9951 "peer": true 10130 9952 }, 10131 - "abort-controller": { 10132 - "version": "3.0.0", 10133 - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 10134 - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 10135 - "requires": { 10136 - "event-target-shim": "^5.0.0" 10137 - } 10138 - }, 10139 9953 "acorn": { 10140 9954 "version": "8.8.1", 10141 9955 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", ··· 10190 10004 "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", 10191 10005 "dev": true 10192 10006 }, 10193 - "asynckit": { 10194 - "version": "0.4.0", 10195 - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 10196 - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 10197 - }, 10198 10007 "at-least-node": { 10199 10008 "version": "1.0.0", 10200 10009 "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", ··· 10202 10011 "dev": true 10203 10012 }, 10204 10013 "autoprefixer": { 10205 - "version": "10.4.15", 10206 - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", 10207 - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", 10014 + "version": "10.4.16", 10015 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", 10016 + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", 10208 10017 "dev": true, 10209 10018 "requires": { 10210 10019 "browserslist": "^4.21.10", 10211 - "caniuse-lite": "^1.0.30001520", 10212 - "fraction.js": "^4.2.0", 10020 + "caniuse-lite": "^1.0.30001538", 10021 + "fraction.js": "^4.3.6", 10213 10022 "normalize-range": "^0.1.2", 10214 10023 "picocolors": "^1.0.0", 10215 10024 "postcss-value-parser": "^4.2.0" ··· 10284 10093 } 10285 10094 }, 10286 10095 "browserslist": { 10287 - "version": "4.21.10", 10288 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", 10289 - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", 10096 + "version": "4.22.1", 10097 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", 10098 + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", 10290 10099 "dev": true, 10291 10100 "requires": { 10292 - "caniuse-lite": "^1.0.30001517", 10293 - "electron-to-chromium": "^1.4.477", 10101 + "caniuse-lite": "^1.0.30001541", 10102 + "electron-to-chromium": "^1.4.535", 10294 10103 "node-releases": "^2.0.13", 10295 - "update-browserslist-db": "^1.0.11" 10104 + "update-browserslist-db": "^1.0.13" 10296 10105 } 10297 10106 }, 10298 10107 "buffer-from": { ··· 10311 10120 "version": "1.0.2", 10312 10121 "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 10313 10122 "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 10123 + "dev": true, 10314 10124 "requires": { 10315 10125 "function-bind": "^1.1.1", 10316 10126 "get-intrinsic": "^1.0.2" ··· 10326 10136 } 10327 10137 }, 10328 10138 "caniuse-lite": { 10329 - "version": "1.0.30001532", 10330 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", 10331 - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", 10139 + "version": "1.0.30001547", 10140 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", 10141 + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", 10332 10142 "dev": true 10333 10143 }, 10334 10144 "capital-case": { ··· 10391 10201 "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 10392 10202 "dev": true 10393 10203 }, 10394 - "combined-stream": { 10395 - "version": "1.0.8", 10396 - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 10397 - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 10398 - "requires": { 10399 - "delayed-stream": "~1.0.0" 10400 - } 10401 - }, 10402 10204 "commander": { 10403 10205 "version": "2.20.3", 10404 10206 "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", ··· 10428 10230 } 10429 10231 }, 10430 10232 "convert-source-map": { 10431 - "version": "1.9.0", 10432 - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 10433 - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 10233 + "version": "2.0.0", 10234 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 10235 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 10434 10236 "dev": true 10435 10237 }, 10436 10238 "core-js": { ··· 10482 10284 "requires": {} 10483 10285 }, 10484 10286 "cssdb": { 10485 - "version": "7.7.2", 10486 - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.2.tgz", 10487 - "integrity": "sha512-pQPYP7/kch4QlkTcLuUNiNL2v/E+O+VIdotT+ug62/+2B2/jkzs5fMM6RHCzGCZ9C82pODEMSIzRRUzJOrl78g==", 10287 + "version": "7.8.0", 10288 + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.8.0.tgz", 10289 + "integrity": "sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==", 10488 10290 "dev": true 10489 10291 }, 10490 10292 "cssesc": { ··· 10530 10332 "has-property-descriptors": "^1.0.0", 10531 10333 "object-keys": "^1.1.1" 10532 10334 } 10533 - }, 10534 - "delayed-stream": { 10535 - "version": "1.0.0", 10536 - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 10537 - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 10538 10335 }, 10539 10336 "dot-case": { 10540 10337 "version": "3.0.4", ··· 10560 10357 } 10561 10358 }, 10562 10359 "electron-to-chromium": { 10563 - "version": "1.4.490", 10564 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", 10565 - "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==", 10360 + "version": "1.4.553", 10361 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.553.tgz", 10362 + "integrity": "sha512-HiRdtyKS2+VhiXvjhMvvxiMC33FJJqTA5EB2YHgFZW6v7HkK4Q9Ahv2V7O2ZPgAjw+MyCJVMQvigj13H8t+wvA==", 10566 10363 "dev": true 10567 10364 }, 10568 10365 "es-abstract": { ··· 10683 10480 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 10684 10481 "dev": true 10685 10482 }, 10686 - "event-target-shim": { 10687 - "version": "5.0.1", 10688 - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 10689 - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 10690 - }, 10691 - "eventemitter3": { 10692 - "version": "5.0.0", 10693 - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", 10694 - "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==" 10483 + "events-to-async": { 10484 + "version": "2.0.0", 10485 + "resolved": "https://registry.npmjs.org/events-to-async/-/events-to-async-2.0.0.tgz", 10486 + "integrity": "sha512-NiZEr4g51nI4/lz/6NdwMqK/TLIctlnp9TQ3wCJjlRp47VgrthUZE4nrk2UhfZ8VzoQ/Xyth+G6MKioLCt0FVA==" 10695 10487 }, 10696 10488 "fast-blurhash": { 10697 10489 "version": "1.1.2", ··· 10702 10494 "version": "3.1.3", 10703 10495 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 10704 10496 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 10497 + }, 10498 + "fast-equals": { 10499 + "version": "3.0.3", 10500 + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", 10501 + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==" 10705 10502 }, 10706 10503 "fast-glob": { 10707 10504 "version": "3.3.1", ··· 10778 10575 "is-callable": "^1.1.3" 10779 10576 } 10780 10577 }, 10781 - "form-data": { 10782 - "version": "4.0.0", 10783 - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 10784 - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 10785 - "requires": { 10786 - "asynckit": "^0.4.0", 10787 - "combined-stream": "^1.0.8", 10788 - "mime-types": "^2.1.12" 10789 - } 10790 - }, 10791 10578 "fraction.js": { 10792 - "version": "4.3.6", 10793 - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", 10794 - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", 10579 + "version": "4.3.7", 10580 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 10581 + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 10795 10582 "dev": true 10796 10583 }, 10797 10584 "fs-extra": { ··· 10822 10609 "function-bind": { 10823 10610 "version": "1.1.1", 10824 10611 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 10825 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 10612 + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 10613 + "dev": true 10826 10614 }, 10827 10615 "function.prototype.name": { 10828 10616 "version": "1.1.5", ··· 10852 10640 "version": "1.2.1", 10853 10641 "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 10854 10642 "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 10643 + "dev": true, 10855 10644 "requires": { 10856 10645 "function-bind": "^1.1.1", 10857 10646 "has": "^1.0.3", ··· 10932 10721 "version": "1.0.3", 10933 10722 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 10934 10723 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 10724 + "dev": true, 10935 10725 "requires": { 10936 10726 "function-bind": "^1.1.1" 10937 10727 } ··· 10960 10750 "has-proto": { 10961 10751 "version": "1.0.1", 10962 10752 "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 10963 - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" 10753 + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 10754 + "dev": true 10964 10755 }, 10965 10756 "has-symbols": { 10966 10757 "version": "1.0.3", 10967 10758 "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 10968 - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 10759 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 10760 + "dev": true 10969 10761 }, 10970 10762 "has-tostringtag": { 10971 10763 "version": "1.0.0", ··· 11060 10852 "dev": true 11061 10853 }, 11062 10854 "is-core-module": { 11063 - "version": "2.11.0", 11064 - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 11065 - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 10855 + "version": "2.13.0", 10856 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 10857 + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 11066 10858 "dev": true, 11067 10859 "requires": { 11068 10860 "has": "^1.0.3" ··· 11364 11156 "integrity": "sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==" 11365 11157 }, 11366 11158 "kolorist": { 11367 - "version": "1.6.0", 11368 - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.6.0.tgz", 11369 - "integrity": "sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==", 11159 + "version": "1.8.0", 11160 + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", 11161 + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", 11370 11162 "dev": true 11371 11163 }, 11372 11164 "leven": { ··· 11409 11201 "tslib": "^2.0.3" 11410 11202 } 11411 11203 }, 11412 - "lru-cache": { 11413 - "version": "6.0.0", 11414 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 11415 - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 11416 - "requires": { 11417 - "yallist": "^4.0.0" 11418 - } 11419 - }, 11420 11204 "lz-string": { 11421 11205 "version": "1.5.0", 11422 11206 "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", ··· 11431 11215 "sourcemap-codec": "^1.4.8" 11432 11216 } 11433 11217 }, 11434 - "map-age-cleaner": { 11435 - "version": "0.1.3", 11436 - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 11437 - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 11438 - "requires": { 11439 - "p-defer": "^1.0.0" 11440 - } 11441 - }, 11442 11218 "masto": { 11443 - "version": "5.11.4", 11444 - "resolved": "https://registry.npmjs.org/masto/-/masto-5.11.4.tgz", 11445 - "integrity": "sha512-sLF3SJTNZDAP57Y+8vAdd1KQTuWWxmGUrBF1R2GLPL6zij/1wXxV05+h8GZhnfg+696arkt+w6ZlKvEEfH1yvg==", 11219 + "version": "6.3.1", 11220 + "resolved": "https://registry.npmjs.org/masto/-/masto-6.3.1.tgz", 11221 + "integrity": "sha512-Os3MlbGFNL6KHxlKldYY+d/1exO6oBjtF4vx8d6cmXRmeeeW3mKQeunTZz+yY5qWksPg2eVdk+FOhaEnOeclVw==", 11446 11222 "requires": { 11447 - "@mastojs/ponyfills": "^1.0.4", 11448 11223 "change-case": "^4.1.2", 11449 - "eventemitter3": "^5.0.0", 11224 + "events-to-async": "^2.0.0", 11450 11225 "isomorphic-ws": "^5.0.0", 11451 - "qs": "^6.11.0", 11452 - "semver": "^7.3.7", 11226 + "ts-custom-error": "^3.3.1", 11453 11227 "ws": "^8.13.0" 11454 - }, 11455 - "dependencies": { 11456 - "semver": { 11457 - "version": "7.3.8", 11458 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 11459 - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 11460 - "requires": { 11461 - "lru-cache": "^6.0.0" 11462 - } 11463 - } 11464 - } 11465 - }, 11466 - "mem": { 11467 - "version": "9.0.2", 11468 - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", 11469 - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", 11470 - "requires": { 11471 - "map-age-cleaner": "^0.1.3", 11472 - "mimic-fn": "^4.0.0" 11473 11228 } 11474 11229 }, 11475 11230 "merge-stream": { ··· 11484 11239 "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 11485 11240 "dev": true 11486 11241 }, 11242 + "micro-memoize": { 11243 + "version": "4.1.2", 11244 + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", 11245 + "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==" 11246 + }, 11487 11247 "micromatch": { 11488 11248 "version": "4.0.5", 11489 11249 "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", ··· 11497 11257 "mime-db": { 11498 11258 "version": "1.52.0", 11499 11259 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 11500 - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 11260 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 11261 + "dev": true 11501 11262 }, 11502 11263 "mime-types": { 11503 11264 "version": "2.1.35", 11504 11265 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 11505 11266 "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 11267 + "dev": true, 11506 11268 "requires": { 11507 11269 "mime-db": "1.52.0" 11508 11270 } 11509 11271 }, 11510 - "mimic-fn": { 11511 - "version": "4.0.0", 11512 - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 11513 - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" 11514 - }, 11515 11272 "minimatch": { 11516 11273 "version": "3.1.2", 11517 11274 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", ··· 11519 11276 "dev": true, 11520 11277 "requires": { 11521 11278 "brace-expansion": "^1.1.7" 11279 + } 11280 + }, 11281 + "moize": { 11282 + "version": "6.1.6", 11283 + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", 11284 + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", 11285 + "requires": { 11286 + "fast-equals": "^3.0.1", 11287 + "micro-memoize": "^4.1.2" 11522 11288 } 11523 11289 }, 11524 11290 "ms": { ··· 11542 11308 "tslib": "^2.0.3" 11543 11309 } 11544 11310 }, 11545 - "node-fetch": { 11546 - "version": "2.6.7", 11547 - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 11548 - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 11549 - "requires": { 11550 - "whatwg-url": "^5.0.0" 11551 - }, 11552 - "dependencies": { 11553 - "tr46": { 11554 - "version": "0.0.3", 11555 - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 11556 - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 11557 - }, 11558 - "webidl-conversions": { 11559 - "version": "3.0.1", 11560 - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 11561 - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 11562 - }, 11563 - "whatwg-url": { 11564 - "version": "5.0.0", 11565 - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 11566 - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 11567 - "requires": { 11568 - "tr46": "~0.0.3", 11569 - "webidl-conversions": "^3.0.0" 11570 - } 11571 - } 11572 - } 11573 - }, 11574 11311 "node-releases": { 11575 11312 "version": "2.0.13", 11576 11313 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", ··· 11591 11328 "object-inspect": { 11592 11329 "version": "1.12.3", 11593 11330 "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 11594 - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" 11331 + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 11332 + "dev": true 11595 11333 }, 11596 11334 "object-keys": { 11597 11335 "version": "1.1.1", ··· 11620 11358 "wrappy": "1" 11621 11359 } 11622 11360 }, 11623 - "p-defer": { 11624 - "version": "1.0.0", 11625 - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 11626 - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" 11627 - }, 11628 11361 "p-retry": { 11629 11362 "version": "6.1.0", 11630 11363 "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.1.0.tgz", ··· 11721 11454 } 11722 11455 }, 11723 11456 "postcss-color-functional-notation": { 11724 - "version": "6.0.1", 11725 - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.1.tgz", 11726 - "integrity": "sha512-IouVx77fASIjOChWxkvOjYGnYNKq286cSiKFJwWNICV9NP2xZWVOS9WOriR/8uIB2zt/44bzQyw4GteCLpP2SA==", 11457 + "version": "6.0.2", 11458 + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz", 11459 + "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==", 11727 11460 "dev": true, 11728 11461 "requires": { 11729 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 11462 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 11730 11463 "postcss-value-parser": "^4.2.0" 11731 11464 } 11732 11465 }, ··· 11749 11482 } 11750 11483 }, 11751 11484 "postcss-custom-media": { 11752 - "version": "10.0.1", 11753 - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.1.tgz", 11754 - "integrity": "sha512-fil7cosvzlIAYmZJPtNFcTH0Er7a3GveEK4q5Y/L24eWQHmiw8Fv/E5DMkVpdbNjkGzJxrvowOSt/Il9HZ06VQ==", 11485 + "version": "10.0.2", 11486 + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz", 11487 + "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==", 11755 11488 "dev": true, 11756 11489 "requires": { 11757 - "@csstools/cascade-layer-name-parser": "^1.0.4", 11758 - "@csstools/css-parser-algorithms": "^2.3.1", 11759 - "@csstools/css-tokenizer": "^2.2.0", 11760 - "@csstools/media-query-list-parser": "^2.1.4" 11490 + "@csstools/cascade-layer-name-parser": "^1.0.5", 11491 + "@csstools/css-parser-algorithms": "^2.3.2", 11492 + "@csstools/css-tokenizer": "^2.2.1", 11493 + "@csstools/media-query-list-parser": "^2.1.5" 11761 11494 } 11762 11495 }, 11763 11496 "postcss-custom-properties": { ··· 11773 11506 } 11774 11507 }, 11775 11508 "postcss-custom-selectors": { 11776 - "version": "7.1.5", 11777 - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.5.tgz", 11778 - "integrity": "sha512-0UYtz7GG10bZrRiUdZ/2Flt+hp5p/WP0T7JgAPZ/Xhgb0wFjW/p7QOjE+M58S9Z3x11P9YaNPcrsoOGewWYkcw==", 11509 + "version": "7.1.6", 11510 + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz", 11511 + "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==", 11779 11512 "dev": true, 11780 11513 "requires": { 11781 - "@csstools/cascade-layer-name-parser": "^1.0.4", 11782 - "@csstools/css-parser-algorithms": "^2.3.1", 11783 - "@csstools/css-tokenizer": "^2.2.0", 11514 + "@csstools/cascade-layer-name-parser": "^1.0.5", 11515 + "@csstools/css-parser-algorithms": "^2.3.2", 11516 + "@csstools/css-tokenizer": "^2.2.1", 11784 11517 "postcss-selector-parser": "^6.0.13" 11785 11518 } 11786 11519 }, ··· 11801 11534 } 11802 11535 }, 11803 11536 "postcss-double-position-gradients": { 11804 - "version": "5.0.1", 11805 - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.1.tgz", 11806 - "integrity": "sha512-ogcHzfC5q4nfySyZyNF7crvK3/MRDTh+akzE+l7bgJUjVkhgfahBuI+ZAm/5EeaVSVKnCOgqtC6wTyUFgLVLTw==", 11537 + "version": "5.0.2", 11538 + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz", 11539 + "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==", 11807 11540 "dev": true, 11808 11541 "requires": { 11809 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 11542 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 11810 11543 "postcss-value-parser": "^4.2.0" 11811 11544 } 11812 11545 }, ··· 11852 11585 } 11853 11586 }, 11854 11587 "postcss-lab-function": { 11855 - "version": "6.0.5", 11856 - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.5.tgz", 11857 - "integrity": "sha512-v1NG08v7tN9n76rA5j5HQ4sRu/kqXBuOFNAYhfHqbyDQ1WbsGKfPNN9VnJSSI3V0KIlShodYQPf3ORjMSo1w9g==", 11588 + "version": "6.0.7", 11589 + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz", 11590 + "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==", 11858 11591 "dev": true, 11859 11592 "requires": { 11860 - "@csstools/css-color-parser": "^1.3.2", 11593 + "@csstools/css-color-parser": "^1.4.0", 11861 11594 "@csstools/css-parser-algorithms": "^2.3.2", 11862 11595 "@csstools/css-tokenizer": "^2.2.1", 11863 - "@csstools/postcss-progressive-custom-properties": "^3.0.1" 11596 + "@csstools/postcss-progressive-custom-properties": "^3.0.2" 11864 11597 } 11865 11598 }, 11866 11599 "postcss-logical": { ··· 11915 11648 } 11916 11649 }, 11917 11650 "postcss-preset-env": { 11918 - "version": "9.1.4", 11919 - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.1.4.tgz", 11920 - "integrity": "sha512-k2scWtmYBZhjAzMJw8Fgc4hnfkZa4KpPjK0z6+tTAJ4/3ZAmaJJ1VBQ9T7OS0qvper8AyD+kqN2UB2tYFQ4eeA==", 11651 + "version": "9.2.0", 11652 + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.2.0.tgz", 11653 + "integrity": "sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==", 11921 11654 "dev": true, 11922 11655 "requires": { 11923 11656 "@csstools/postcss-cascade-layers": "^4.0.0", 11924 - "@csstools/postcss-color-function": "^3.0.4", 11925 - "@csstools/postcss-color-mix-function": "^2.0.4", 11926 - "@csstools/postcss-exponential-functions": "^1.0.0", 11657 + "@csstools/postcss-color-function": "^3.0.7", 11658 + "@csstools/postcss-color-mix-function": "^2.0.7", 11659 + "@csstools/postcss-exponential-functions": "^1.0.1", 11927 11660 "@csstools/postcss-font-format-keywords": "^3.0.0", 11928 - "@csstools/postcss-gradients-interpolation-method": "^4.0.4", 11929 - "@csstools/postcss-hwb-function": "^3.0.3", 11930 - "@csstools/postcss-ic-unit": "^3.0.1", 11661 + "@csstools/postcss-gamut-mapping": "^1.0.0", 11662 + "@csstools/postcss-gradients-interpolation-method": "^4.0.7", 11663 + "@csstools/postcss-hwb-function": "^3.0.6", 11664 + "@csstools/postcss-ic-unit": "^3.0.2", 11931 11665 "@csstools/postcss-initial": "^1.0.0", 11932 - "@csstools/postcss-is-pseudo-class": "^4.0.2", 11666 + "@csstools/postcss-is-pseudo-class": "^4.0.3", 11933 11667 "@csstools/postcss-logical-float-and-clear": "^2.0.0", 11934 11668 "@csstools/postcss-logical-resize": "^2.0.0", 11935 - "@csstools/postcss-logical-viewport-units": "^2.0.2", 11936 - "@csstools/postcss-media-minmax": "^1.0.7", 11937 - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.2", 11669 + "@csstools/postcss-logical-viewport-units": "^2.0.3", 11670 + "@csstools/postcss-media-minmax": "^1.1.0", 11671 + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3", 11938 11672 "@csstools/postcss-nested-calc": "^3.0.0", 11939 11673 "@csstools/postcss-normalize-display-values": "^3.0.1", 11940 - "@csstools/postcss-oklab-function": "^3.0.4", 11941 - "@csstools/postcss-progressive-custom-properties": "^3.0.1", 11942 - "@csstools/postcss-relative-color-syntax": "^2.0.4", 11674 + "@csstools/postcss-oklab-function": "^3.0.7", 11675 + "@csstools/postcss-progressive-custom-properties": "^3.0.2", 11676 + "@csstools/postcss-relative-color-syntax": "^2.0.7", 11943 11677 "@csstools/postcss-scope-pseudo-class": "^3.0.0", 11944 - "@csstools/postcss-stepped-value-functions": "^3.0.1", 11678 + "@csstools/postcss-stepped-value-functions": "^3.0.2", 11945 11679 "@csstools/postcss-text-decoration-shorthand": "^3.0.3", 11946 - "@csstools/postcss-trigonometric-functions": "^3.0.1", 11680 + "@csstools/postcss-trigonometric-functions": "^3.0.2", 11947 11681 "@csstools/postcss-unset-value": "^3.0.0", 11948 - "autoprefixer": "^10.4.15", 11949 - "browserslist": "^4.21.10", 11682 + "autoprefixer": "^10.4.16", 11683 + "browserslist": "^4.22.1", 11950 11684 "css-blank-pseudo": "^6.0.0", 11951 11685 "css-has-pseudo": "^6.0.0", 11952 11686 "css-prefers-color-scheme": "^9.0.0", 11953 - "cssdb": "^7.7.2", 11687 + "cssdb": "^7.8.0", 11954 11688 "postcss-attribute-case-insensitive": "^6.0.2", 11955 11689 "postcss-clamp": "^4.1.0", 11956 - "postcss-color-functional-notation": "^6.0.1", 11690 + "postcss-color-functional-notation": "^6.0.2", 11957 11691 "postcss-color-hex-alpha": "^9.0.2", 11958 11692 "postcss-color-rebeccapurple": "^9.0.1", 11959 - "postcss-custom-media": "^10.0.1", 11960 - "postcss-custom-properties": "^13.3.1", 11961 - "postcss-custom-selectors": "^7.1.5", 11693 + "postcss-custom-media": "^10.0.2", 11694 + "postcss-custom-properties": "^13.3.2", 11695 + "postcss-custom-selectors": "^7.1.6", 11962 11696 "postcss-dir-pseudo-class": "^8.0.0", 11963 - "postcss-double-position-gradients": "^5.0.1", 11697 + "postcss-double-position-gradients": "^5.0.2", 11964 11698 "postcss-focus-visible": "^9.0.0", 11965 11699 "postcss-focus-within": "^8.0.0", 11966 11700 "postcss-font-variant": "^5.0.0", 11967 11701 "postcss-gap-properties": "^5.0.0", 11968 11702 "postcss-image-set-function": "^6.0.1", 11969 - "postcss-lab-function": "^6.0.4", 11703 + "postcss-lab-function": "^6.0.7", 11970 11704 "postcss-logical": "^7.0.0", 11971 11705 "postcss-nesting": "^12.0.1", 11972 11706 "postcss-opacity-percentage": "^2.0.0", ··· 12058 11792 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 12059 11793 "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 12060 11794 "dev": true 12061 - }, 12062 - "qs": { 12063 - "version": "6.11.0", 12064 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 12065 - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 12066 - "requires": { 12067 - "side-channel": "^1.0.4" 12068 - } 12069 11795 }, 12070 11796 "queue-microtask": { 12071 11797 "version": "1.2.3", ··· 12228 11954 "dev": true 12229 11955 }, 12230 11956 "resolve": { 12231 - "version": "1.22.1", 12232 - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 12233 - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 11957 + "version": "1.22.8", 11958 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 11959 + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 12234 11960 "dev": true, 12235 11961 "requires": { 12236 - "is-core-module": "^2.9.0", 11962 + "is-core-module": "^2.13.0", 12237 11963 "path-parse": "^1.0.7", 12238 11964 "supports-preserve-symlinks-flag": "^1.0.0" 12239 11965 } ··· 12294 12020 } 12295 12021 }, 12296 12022 "semver": { 12297 - "version": "6.3.0", 12298 - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 12299 - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 12023 + "version": "6.3.1", 12024 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 12025 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 12300 12026 "dev": true 12301 12027 }, 12302 12028 "sentence-case": { ··· 12322 12048 "version": "1.0.4", 12323 12049 "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 12324 12050 "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 12051 + "dev": true, 12325 12052 "requires": { 12326 12053 "call-bind": "^1.0.0", 12327 12054 "get-intrinsic": "^1.0.2", ··· 12527 12254 "punycode": "^2.1.0" 12528 12255 } 12529 12256 }, 12257 + "ts-custom-error": { 12258 + "version": "3.3.1", 12259 + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", 12260 + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==" 12261 + }, 12530 12262 "tslib": { 12531 12263 "version": "2.4.1", 12532 12264 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", ··· 12645 12377 "dev": true 12646 12378 }, 12647 12379 "update-browserslist-db": { 12648 - "version": "1.0.11", 12649 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 12650 - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 12380 + "version": "1.0.13", 12381 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 12382 + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 12651 12383 "dev": true, 12652 12384 "requires": { 12653 12385 "escalade": "^3.1.1", ··· 13153 12885 "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", 13154 12886 "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", 13155 12887 "requires": {} 13156 - }, 13157 - "yallist": { 13158 - "version": "4.0.0", 13159 - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 13160 - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 13161 12888 } 13162 12889 } 13163 12890 }
+6 -6
package.json
··· 14 14 "@github/text-expander-element": "~2.5.0", 15 15 "@iconify-icons/mingcute": "~1.2.8", 16 16 "@justinribeiro/lite-youtube": "~1.5.0", 17 - "@szhsin/react-menu": "~4.0.3", 18 - "@uidotdev/usehooks": "~2.3.1", 17 + "@szhsin/react-menu": "~4.1.0", 18 + "@uidotdev/usehooks": "~2.4.0", 19 19 "dayjs": "~1.11.10", 20 20 "dayjs-twitter": "~0.5.0", 21 21 "fast-blurhash": "~1.1.2", ··· 23 23 "idb-keyval": "~6.2.1", 24 24 "just-debounce-it": "~3.2.0", 25 25 "lz-string": "~1.5.0", 26 - "masto": "~5.11.4", 27 - "mem": "~9.0.2", 26 + "masto": "~6.3.1", 27 + "moize": "~6.1.6", 28 28 "p-retry": "~6.1.0", 29 29 "p-throttle": "~5.1.0", 30 30 "preact": "~10.18.1", ··· 42 42 "valtio": "1.9.0" 43 43 }, 44 44 "devDependencies": { 45 - "@preact/preset-vite": "~2.5.0", 45 + "@preact/preset-vite": "~2.6.0", 46 46 "@trivago/prettier-plugin-sort-imports": "~4.2.0", 47 47 "postcss": "~8.4.31", 48 48 "postcss-dark-theme-class": "~1.0.0", 49 - "postcss-preset-env": "~9.1.4", 49 + "postcss-preset-env": "~9.2.0", 50 50 "twitter-text": "~3.1.0", 51 51 "vite": "~4.4.11", 52 52 "vite-plugin-generate-file": "~0.0.4",
+1 -1
public/sw.js
··· 165 165 166 166 event.waitUntil( 167 167 (async () => { 168 + await event.notification.close(); 168 169 const clients = await self.clients.matchAll({ 169 170 type: 'window', 170 171 includeUncontrolled: true, ··· 194 195 console.log('NOTIFICATION CLICK openWindow', url); 195 196 await self.clients.openWindow(url); 196 197 } 197 - await event.notification.close(); 198 198 })(), 199 199 ); 200 200 });
+9 -3
src/app.css
··· 1418 1418 1419 1419 .icon { 1420 1420 flex-shrink: 0; 1421 + display: inline-block; 1422 + overflow: hidden; 1423 + line-height: 0; 1424 + 1425 + svg { 1426 + contain: none; 1427 + } 1421 1428 } 1422 1429 1423 1430 /* TAG */ ··· 1754 1761 font-weight: 500; 1755 1762 text-shadow: 0 1px var(--bg-color); 1756 1763 background-color: var(--bg-color); 1757 - border: 1px solid var(--outline-color); 1764 + border: 2px solid var(--link-faded-color); 1758 1765 box-shadow: 0 3px 16px var(--drop-shadow-color), 1759 1766 0 6px 16px -3px var(--drop-shadow-color); 1760 1767 } ··· 1762 1769 color: var(--text-color); 1763 1770 border-color: var(--link-color); 1764 1771 filter: none !important; 1765 - box-shadow: 0 0 0 1px var(--link-text-color), 1766 - 0 3px 16px var(--drop-shadow-color), 1772 + box-shadow: 0 3px 16px var(--drop-shadow-color), 1767 1773 0 6px 16px -3px var(--drop-shadow-color), 1768 1774 0 6px 16px var(--drop-shadow-color); 1769 1775 }
+11 -10
src/app.jsx
··· 114 114 code, 115 115 }); 116 116 117 - const masto = initClient({ instance: instanceURL, accessToken }); 117 + const client = initClient({ instance: instanceURL, accessToken }); 118 118 await Promise.allSettled([ 119 - initInstance(masto, instanceURL), 120 - initAccount(masto, instanceURL, accessToken, vapidKey), 119 + initInstance(client, instanceURL), 120 + initAccount(client, instanceURL, accessToken, vapidKey), 121 121 ]); 122 122 initStates(); 123 - initPreferences(masto); 123 + initPreferences(client); 124 124 125 125 setIsLoggedIn(true); 126 126 setUIState('default'); ··· 130 130 const account = getCurrentAccount(); 131 131 if (account) { 132 132 store.session.set('currentAccount', account.info.id); 133 - const { masto, instance } = api({ account }); 134 - console.log('masto', masto); 133 + const { client } = api({ account }); 134 + const { instance } = client; 135 + // console.log('masto', masto); 135 136 initStates(); 136 - initPreferences(masto); 137 + initPreferences(client); 137 138 setUIState('loading'); 138 139 (async () => { 139 140 try { 140 - await initInstance(masto, instance); 141 + await initInstance(client, instance); 141 142 } catch (e) { 142 143 } finally { 143 144 setIsLoggedIn(true); ··· 253 254 <Shortcuts /> 254 255 )} 255 256 <Modals /> 256 - <NotificationService /> 257 + {isLoggedIn && <NotificationService />} 257 258 <BackgroundService isLoggedIn={isLoggedIn} /> 258 - <SearchCommand onClose={focusDeck} /> 259 + {uiState !== 'loading' && <SearchCommand onClose={focusDeck} />} 259 260 <KeyboardShortcutsHelp /> 260 261 </> 261 262 );
+70 -10
src/components/account-info.css
··· 220 220 } 221 221 222 222 .account-container .actions { 223 + margin-block: 8px; 223 224 display: flex; 224 225 gap: 8px; 225 226 justify-content: space-between; ··· 342 343 opacity: 1; 343 344 } 344 345 } 345 - .account-container .posting-stats { 346 - font-size: 90%; 347 - color: var(--text-insignificant-color); 346 + .account-container .posting-stats-button { 347 + display: flex; 348 + align-items: center; 349 + justify-content: center; 350 + gap: 8px; 351 + width: 100%; 352 + color: inherit; 348 353 background-color: var(--bg-faded-color); 349 354 padding: 8px 12px; 350 - --size: 8px; 351 - --original-color: var(--link-color); 355 + font-size: 90%; 356 + color: var(--text-insignificant-color); 357 + line-height: 1; 358 + vertical-align: text-top; 359 + border-radius: 4px; 352 360 353 361 &:is(:hover, :focus-within) { 362 + color: var(--text-color); 354 363 background-color: var(--link-bg-hover-color); 364 + filter: none !important; 365 + } 366 + 367 + .loader-container { 368 + margin: 0; 369 + opacity: 0.5; 370 + transform: scale(0.75); 371 + } 372 + } 373 + 374 + @keyframes wobble { 375 + 0% { 376 + transform: rotate(-4deg); 377 + } 378 + 100% { 379 + transform: rotate(4deg); 380 + } 381 + } 382 + @keyframes loading-spin { 383 + 0% { 384 + transform: rotate(0deg) scale(0.75); 385 + } 386 + 100% { 387 + transform: rotate(360deg) scale(0.75); 388 + } 389 + } 390 + .posting-stats-icon { 391 + display: inline-block; 392 + width: 24px; 393 + height: 8px; 394 + filter: opacity(0.75); 395 + animation: wobble 2s linear both infinite alternate !important; 396 + 397 + &.loading { 398 + animation: loading-spin 0.35s linear both infinite !important; 399 + } 400 + } 401 + 402 + .account-container { 403 + --posting-stats-size: 8px; 404 + --original-color: var(--link-color); 405 + 406 + .posting-stats { 407 + font-size: 90%; 408 + color: var(--text-insignificant-color); 409 + background-color: var(--bg-faded-color); 410 + padding: 8px 12px; 411 + 412 + &:is(:hover, :focus-within) { 413 + background-color: var(--link-bg-hover-color); 414 + } 355 415 } 356 416 357 417 .posting-stats-bar { 358 418 --gap: 0.5px; 359 419 --gap-color: var(--outline-color); 360 - height: var(--size); 361 - border-radius: var(--size); 420 + height: var(--posting-stats-size); 421 + border-radius: var(--posting-stats-size); 362 422 overflow: hidden; 363 423 margin: 8px 0; 364 424 box-shadow: inset 0 0 0 1px var(--outline-color), ··· 388 448 389 449 .posting-stats-legend-item { 390 450 display: inline-block; 391 - width: var(--size); 392 - height: var(--size); 393 - border-radius: var(--size); 451 + width: var(--posting-stats-size); 452 + height: var(--posting-stats-size); 453 + border-radius: var(--posting-stats-size); 394 454 background-color: var(--text-insignificant-color); 395 455 vertical-align: middle; 396 456 margin: 0 4px 2px;
+231 -155
src/components/account-info.jsx
··· 15 15 import getHTMLText from '../utils/getHTMLText'; 16 16 import handleContentLinks from '../utils/handle-content-links'; 17 17 import niceDateTime from '../utils/nice-date-time'; 18 + import pmem from '../utils/pmem'; 18 19 import shortenNumber from '../utils/shorten-number'; 19 20 import showToast from '../utils/show-toast'; 20 21 import states, { hideAllModals } from '../utils/states'; ··· 55 56 56 57 const LIMIT = 80; 57 58 59 + const ACCOUNT_INFO_MAX_AGE = 1000 * 60 * 10; // 10 mins 60 + 61 + function fetchFamiliarFollowers(currentID, masto) { 62 + return masto.v1.accounts.familiarFollowers.fetch({ 63 + id: [currentID], 64 + }); 65 + } 66 + const memFetchFamiliarFollowers = pmem(fetchFamiliarFollowers, { 67 + maxAge: ACCOUNT_INFO_MAX_AGE, 68 + }); 69 + 70 + async function fetchPostingStats(accountID, masto) { 71 + const fetchStatuses = masto.v1.accounts 72 + .$select(accountID) 73 + .statuses.list({ 74 + limit: 20, 75 + }) 76 + .next(); 77 + 78 + const { value: statuses } = await fetchStatuses; 79 + console.log('fetched statuses', statuses); 80 + const stats = { 81 + total: statuses.length, 82 + originals: 0, 83 + replies: 0, 84 + boosts: 0, 85 + }; 86 + // Categories statuses by type 87 + // - Original posts (not replies to others) 88 + // - Threads (self-replies + 1st original post) 89 + // - Boosts (reblogs) 90 + // - Replies (not-self replies) 91 + statuses.forEach((status) => { 92 + if (status.reblog) { 93 + stats.boosts++; 94 + } else if ( 95 + !!status.inReplyToId && 96 + status.inReplyToAccountId !== status.account.id // Not self-reply 97 + ) { 98 + stats.replies++; 99 + } else { 100 + stats.originals++; 101 + } 102 + }); 103 + 104 + // Count days since last post 105 + if (statuses.length) { 106 + stats.daysSinceLastPost = Math.ceil( 107 + (Date.now() - new Date(statuses[statuses.length - 1].createdAt)) / 108 + 86400000, 109 + ); 110 + } 111 + 112 + console.log('posting stats', stats); 113 + return stats; 114 + } 115 + const memFetchPostingStats = pmem(fetchPostingStats, { 116 + maxAge: ACCOUNT_INFO_MAX_AGE, 117 + }); 118 + 58 119 function AccountInfo({ 59 120 account, 60 121 fetchAccount = () => {}, ··· 149 210 const familiarFollowersCache = useRef([]); 150 211 async function fetchFollowers(firstLoad) { 151 212 if (firstLoad || !followersIterator.current) { 152 - followersIterator.current = masto.v1.accounts.listFollowers(id, { 213 + followersIterator.current = masto.v1.accounts.$select(id).followers.list({ 153 214 limit: LIMIT, 154 215 }); 155 216 } ··· 162 223 // On first load, fetch familiar followers, merge to top of results' `value` 163 224 // Remove dups on every fetch 164 225 if (firstLoad) { 165 - const familiarFollowers = await masto.v1.accounts.fetchFamiliarFollowers( 166 - id, 167 - ); 226 + const familiarFollowers = await masto.v1.accounts 227 + .familiarFollowers(id) 228 + .fetch(); 168 229 familiarFollowersCache.current = familiarFollowers[0].accounts; 169 230 newValue = [ 170 231 ...familiarFollowersCache.current, ··· 193 254 const followingIterator = useRef(); 194 255 async function fetchFollowing(firstLoad) { 195 256 if (firstLoad || !followingIterator.current) { 196 - followingIterator.current = masto.v1.accounts.listFollowing(id, { 257 + followingIterator.current = masto.v1.accounts.$select(id).following.list({ 197 258 limit: LIMIT, 198 259 }); 199 260 } ··· 206 267 207 268 const [familiarFollowers, setFamiliarFollowers] = useState([]); 208 269 const [postingStats, setPostingStats] = useState(); 209 - const hasPostingStats = postingStats?.total >= 3; 270 + const [postingStatsUIState, setPostingStatsUIState] = useState('default'); 271 + const hasPostingStats = !!postingStats?.total; 272 + 273 + const renderFamiliarFollowers = async (currentID) => { 274 + try { 275 + const followers = await memFetchFamiliarFollowers( 276 + currentID, 277 + currentMasto, 278 + ); 279 + console.log('fetched familiar followers', followers); 280 + setFamiliarFollowers( 281 + followers[0].accounts.slice(0, FAMILIAR_FOLLOWERS_LIMIT), 282 + ); 283 + } catch (e) { 284 + console.error(e); 285 + } 286 + }; 287 + 288 + const renderPostingStats = async () => { 289 + if (!id) return; 290 + setPostingStatsUIState('loading'); 291 + try { 292 + const stats = await memFetchPostingStats(id, masto); 293 + setPostingStats(stats); 294 + setPostingStatsUIState('default'); 295 + } catch (e) { 296 + console.error(e); 297 + setPostingStatsUIState('error'); 298 + } 299 + }; 210 300 211 301 const onRelationshipChange = useCallback( 212 302 ({ relationship, currentID }) => { 213 303 if (!relationship.following) { 214 - (async () => { 215 - try { 216 - const fetchFamiliarFollowers = 217 - currentMasto.v1.accounts.fetchFamiliarFollowers(currentID); 218 - const fetchStatuses = currentMasto.v1.accounts 219 - .listStatuses(currentID, { 220 - limit: 20, 221 - }) 222 - .next(); 223 - 224 - const followers = await fetchFamiliarFollowers; 225 - console.log('fetched familiar followers', followers); 226 - setFamiliarFollowers( 227 - followers[0].accounts.slice(0, FAMILIAR_FOLLOWERS_LIMIT), 228 - ); 229 - 230 - if (!standalone) { 231 - const { value: statuses } = await fetchStatuses; 232 - console.log('fetched statuses', statuses); 233 - const stats = { 234 - total: statuses.length, 235 - originals: 0, 236 - replies: 0, 237 - boosts: 0, 238 - }; 239 - // Categories statuses by type 240 - // - Original posts (not replies to others) 241 - // - Threads (self-replies + 1st original post) 242 - // - Boosts (reblogs) 243 - // - Replies (not-self replies) 244 - statuses.forEach((status) => { 245 - if (status.reblog) { 246 - stats.boosts++; 247 - } else if ( 248 - status.inReplyToAccountId !== currentID && 249 - !!status.inReplyToId 250 - ) { 251 - stats.replies++; 252 - } else { 253 - stats.originals++; 254 - } 255 - }); 256 - 257 - // Count days since last post 258 - stats.daysSinceLastPost = Math.ceil( 259 - (Date.now() - 260 - new Date(statuses[statuses.length - 1].createdAt)) / 261 - 86400000, 262 - ); 263 - 264 - console.log('posting stats', stats); 265 - setPostingStats(stats); 266 - } 267 - } catch (e) { 268 - console.error(e); 269 - } 270 - })(); 304 + renderFamiliarFollowers(currentID); 305 + if (!standalone) { 306 + renderPostingStats(); 307 + } 271 308 } 272 309 }, 273 - [standalone], 310 + [standalone, id], 274 311 ); 275 312 276 313 return ( ··· 307 344 <p>████████ ███████</p> 308 345 <p>███████████████ ███████████████</p> 309 346 </div> 310 - <p class="stats"> 347 + <div class="stats"> 311 348 <div> 312 349 <span>██</span> Followers 313 350 </div> ··· 318 355 <span>██</span> Posts 319 356 </div> 320 357 <div>Joined ██</div> 321 - </p> 358 + </div> 322 359 </main> 323 360 </> 324 361 ) : ( ··· 583 620 )} 584 621 </div> 585 622 </div> 586 - {hasPostingStats && ( 587 - <Link 623 + {!!postingStats && ( 624 + <LinkOrDiv 588 625 to={accountLink} 589 626 class="account-metadata-box" 590 627 onClick={() => { ··· 593 630 > 594 631 <div class="shazam-container"> 595 632 <div class="shazam-container-inner"> 596 - <div 597 - class="posting-stats" 598 - title={`${Math.round( 599 - (postingStats.originals / postingStats.total) * 100, 600 - )}% original posts, ${Math.round( 601 - (postingStats.replies / postingStats.total) * 100, 602 - )}% replies, ${Math.round( 603 - (postingStats.boosts / postingStats.total) * 100, 604 - )}% boosts`} 605 - > 606 - <div> 607 - {postingStats.daysSinceLastPost < 365 608 - ? `Last ${postingStats.total} posts in the past 609 - ${postingStats.daysSinceLastPost} day${ 610 - postingStats.daysSinceLastPost > 1 ? 's' : '' 611 - }` 612 - : ` 613 - Last ${postingStats.total} posts in the past year(s) 614 - `} 615 - </div> 633 + {hasPostingStats ? ( 616 634 <div 617 - class="posting-stats-bar" 618 - style={{ 619 - // [originals | replies | boosts] 620 - '--originals-percentage': `${ 621 - (postingStats.originals / postingStats.total) * 622 - 100 623 - }%`, 624 - '--replies-percentage': `${ 625 - ((postingStats.originals + postingStats.replies) / 626 - postingStats.total) * 627 - 100 628 - }%`, 629 - }} 630 - /> 631 - <div class="posting-stats-legends"> 632 - <span class="ib"> 633 - <span class="posting-stats-legend-item posting-stats-legend-item-originals" />{' '} 634 - Original 635 - </span>{' '} 636 - <span class="ib"> 637 - <span class="posting-stats-legend-item posting-stats-legend-item-replies" />{' '} 638 - Replies 639 - </span>{' '} 640 - <span class="ib"> 641 - <span class="posting-stats-legend-item posting-stats-legend-item-boosts" />{' '} 642 - Boosts 643 - </span> 635 + class="posting-stats" 636 + title={`${Math.round( 637 + (postingStats.originals / postingStats.total) * 100, 638 + )}% original posts, ${Math.round( 639 + (postingStats.replies / postingStats.total) * 100, 640 + )}% replies, ${Math.round( 641 + (postingStats.boosts / postingStats.total) * 100, 642 + )}% boosts`} 643 + > 644 + <div> 645 + {postingStats.daysSinceLastPost < 365 646 + ? `Last ${postingStats.total} posts in the past 647 + ${postingStats.daysSinceLastPost} day${ 648 + postingStats.daysSinceLastPost > 1 ? 's' : '' 649 + }` 650 + : ` 651 + Last ${postingStats.total} posts in the past year(s) 652 + `} 653 + </div> 654 + <div 655 + class="posting-stats-bar" 656 + style={{ 657 + // [originals | replies | boosts] 658 + '--originals-percentage': `${ 659 + (postingStats.originals / postingStats.total) * 660 + 100 661 + }%`, 662 + '--replies-percentage': `${ 663 + ((postingStats.originals + 664 + postingStats.replies) / 665 + postingStats.total) * 666 + 100 667 + }%`, 668 + }} 669 + /> 670 + <div class="posting-stats-legends"> 671 + <span class="ib"> 672 + <span class="posting-stats-legend-item posting-stats-legend-item-originals" />{' '} 673 + Original 674 + </span>{' '} 675 + <span class="ib"> 676 + <span class="posting-stats-legend-item posting-stats-legend-item-replies" />{' '} 677 + Replies 678 + </span>{' '} 679 + <span class="ib"> 680 + <span class="posting-stats-legend-item posting-stats-legend-item-boosts" />{' '} 681 + Boosts 682 + </span> 683 + </div> 644 684 </div> 645 - </div> 685 + ) : ( 686 + <div class="posting-stats">Post stats unavailable.</div> 687 + )} 646 688 </div> 647 689 </div> 648 - </Link> 690 + </LinkOrDiv> 649 691 )} 692 + <div class="account-metadata-box"> 693 + <div 694 + class="shazam-container no-animation" 695 + hidden={!!postingStats} 696 + > 697 + <div class="shazam-container-inner"> 698 + <button 699 + type="button" 700 + class="posting-stats-button" 701 + disabled={postingStatsUIState === 'loading'} 702 + onClick={() => { 703 + renderPostingStats(); 704 + }} 705 + > 706 + <div 707 + class={`posting-stats-bar posting-stats-icon ${ 708 + postingStatsUIState === 'loading' ? 'loading' : '' 709 + }`} 710 + style={{ 711 + '--originals-percentage': '33%', 712 + '--replies-percentage': '66%', 713 + }} 714 + /> 715 + View post stats{' '} 716 + {/* <Loader 717 + abrupt 718 + hidden={postingStatsUIState !== 'loading'} 719 + /> */} 720 + </button> 721 + </div> 722 + </div> 723 + </div> 650 724 <RelatedActions 651 725 info={info} 652 726 instance={instance} ··· 712 786 // Grab this account from my logged-in instance 713 787 const acctHasInstance = info.acct.includes('@'); 714 788 try { 715 - const results = await currentMasto.v2.search({ 789 + const results = await currentMasto.v2.search.fetch({ 716 790 q: acctHasInstance ? info.acct : `${info.username}@${instance}`, 717 791 type: 'accounts', 718 792 limit: 1, ··· 742 816 743 817 setRelationshipUIState('loading'); 744 818 745 - const fetchRelationships = currentMasto.v1.accounts.fetchRelationships([ 746 - currentID, 747 - ]); 819 + const fetchRelationships = currentMasto.v1.accounts.relationships.fetch( 820 + { 821 + id: [currentID], 822 + }, 823 + ); 748 824 749 825 try { 750 826 const relationships = await fetchRelationships; ··· 778 854 779 855 return ( 780 856 <> 781 - <p class="actions"> 857 + <div class="actions"> 782 858 <span> 783 859 {followedBy ? ( 784 860 <span class="tag">Following you</span> ··· 913 989 setRelationshipUIState('loading'); 914 990 (async () => { 915 991 try { 916 - const newRelationship = 917 - await currentMasto.v1.accounts.unmute( 918 - currentInfo?.id || id, 919 - ); 992 + const newRelationship = await currentMasto.v1.accounts 993 + .$select(currentInfo?.id || id) 994 + .unmute(); 920 995 console.log('unmuting', newRelationship); 921 996 setRelationship(newRelationship); 922 997 setRelationshipUIState('default'); ··· 962 1037 (async () => { 963 1038 try { 964 1039 const newRelationship = 965 - await currentMasto.v1.accounts.mute( 966 - currentInfo?.id || id, 967 - { 1040 + await currentMasto.v1.accounts 1041 + .$select(currentInfo?.id || id) 1042 + .mute({ 968 1043 duration, 969 - }, 970 - ); 1044 + }); 971 1045 console.log('muting', newRelationship); 972 1046 setRelationship(newRelationship); 973 1047 setRelationshipUIState('default'); ··· 1008 1082 (async () => { 1009 1083 try { 1010 1084 if (blocking) { 1011 - const newRelationship = 1012 - await currentMasto.v1.accounts.unblock( 1013 - currentInfo?.id || id, 1014 - ); 1085 + const newRelationship = await currentMasto.v1.accounts 1086 + .$select(currentInfo?.id || id) 1087 + .unblock(); 1015 1088 console.log('unblocking', newRelationship); 1016 1089 setRelationship(newRelationship); 1017 1090 setRelationshipUIState('default'); 1018 1091 showToast(`Unblocked @${username}`); 1019 1092 } else { 1020 - const newRelationship = 1021 - await currentMasto.v1.accounts.block( 1022 - currentInfo?.id || id, 1023 - ); 1093 + const newRelationship = await currentMasto.v1.accounts 1094 + .$select(currentInfo?.id || id) 1095 + .block(); 1024 1096 console.log('blocking', newRelationship); 1025 1097 setRelationship(newRelationship); 1026 1098 setRelationshipUIState('default'); ··· 1089 1161 // ); 1090 1162 1091 1163 // if (yes) { 1092 - newRelationship = await currentMasto.v1.accounts.unfollow( 1093 - accountID.current, 1094 - ); 1164 + newRelationship = await currentMasto.v1.accounts 1165 + .$select(accountID.current) 1166 + .unfollow(); 1095 1167 // } 1096 1168 } else { 1097 - newRelationship = await currentMasto.v1.accounts.follow( 1098 - accountID.current, 1099 - ); 1169 + newRelationship = await currentMasto.v1.accounts 1170 + .$select(accountID.current) 1171 + .follow(); 1100 1172 } 1101 1173 1102 1174 if (newRelationship) setRelationship(newRelationship); ··· 1135 1207 </MenuConfirm> 1136 1208 )} 1137 1209 </span> 1138 - </p> 1210 + </div> 1139 1211 {!!showTranslatedBio && ( 1140 1212 <Modal 1141 1213 class="light" ··· 1241 1313 (async () => { 1242 1314 try { 1243 1315 const lists = await masto.v1.lists.list(); 1244 - const listsContainingAccount = await masto.v1.accounts.listLists( 1245 - accountID, 1246 - ); 1316 + const listsContainingAccount = await masto.v1.accounts 1317 + .$select(accountID) 1318 + .lists.list(); 1247 1319 console.log({ lists, listsContainingAccount }); 1248 1320 setLists(lists); 1249 1321 setListsContainingAccount(listsContainingAccount); ··· 1285 1357 (async () => { 1286 1358 try { 1287 1359 if (inList) { 1288 - await masto.v1.lists.removeAccount(list.id, { 1289 - accountIds: [accountID], 1290 - }); 1360 + await masto.v1.lists 1361 + .$select(list.id) 1362 + .accounts.remove({ 1363 + accountIds: [accountID], 1364 + }); 1291 1365 } else { 1292 - await masto.v1.lists.addAccount(list.id, { 1293 - accountIds: [accountID], 1294 - }); 1366 + await masto.v1.lists 1367 + .$select(list.id) 1368 + .accounts.create({ 1369 + accountIds: [accountID], 1370 + }); 1295 1371 } 1296 1372 // setUIState('default'); 1297 1373 reload();
+2 -2
src/components/account-sheet.jsx
··· 46 46 }); 47 47 return info; 48 48 } catch (e) { 49 - const result = await masto.v2.search({ 49 + const result = await masto.v2.search.fetch({ 50 50 q: account, 51 51 type: 'accounts', 52 52 limit: 1, ··· 57 57 } else if (/https?:\/\/[^/]+\/@/.test(account)) { 58 58 const accountURL = new URL(account); 59 59 const acct = accountURL.pathname.replace(/^\//, ''); 60 - const result = await masto.v2.search({ 60 + const result = await masto.v2.search.fetch({ 61 61 q: acct, 62 62 type: 'accounts', 63 63 limit: 1,
+1
src/components/avatar.css
··· 21 21 height: 100%; 22 22 object-fit: cover; 23 23 background-color: var(--img-bg-color); 24 + contain: none; 24 25 } 25 26 26 27 .avatar[data-loaded],
+18 -26
src/components/background-service.jsx
··· 11 11 // - WebSocket to receive notifications when page is visible 12 12 const [visible, setVisible] = useState(true); 13 13 usePageVisibility(setVisible); 14 - const notificationStream = useRef(); 15 14 useEffect(() => { 15 + let sub; 16 16 if (isLoggedIn && visible) { 17 - const { masto, instance } = api(); 17 + const { masto, streaming, instance } = api(); 18 18 (async () => { 19 19 // 1. Get the latest notification 20 20 if (states.notificationsLast) { ··· 42 42 } 43 43 44 44 // 2. Start streaming 45 - notificationStream.current = await masto.ws.stream( 46 - '/api/v1/streaming', 47 - { 48 - stream: 'user:notification', 49 - }, 50 - ); 51 - console.log('🎏 Streaming notification', notificationStream.current); 52 - 53 - notificationStream.current.on('notification', (notification) => { 54 - console.log('🔔🔔 Notification', notification); 55 - if (notification.status) { 56 - saveStatus(notification.status, instance, { 57 - skipThreading: true, 58 - }); 45 + if (streaming) { 46 + sub = streaming.user.notification.subscribe(); 47 + console.log('🎏 Streaming notification', sub); 48 + for await (const entry of sub) { 49 + if (!sub) break; 50 + console.log('🔔🔔 Notification entry', entry); 51 + if (entry.event === 'notification') { 52 + console.log('🔔🔔 Notification', entry); 53 + saveStatus(entry.payload, instance, { 54 + skipThreading: true, 55 + }); 56 + } 57 + states.notificationsShowNew = true; 59 58 } 60 - states.notificationsShowNew = true; 61 - }); 62 - 63 - notificationStream.current.ws.onclose = () => { 64 - console.log('🔔🔔 Notification stream closed'); 65 - }; 59 + } 66 60 })(); 67 61 } 68 62 return () => { 69 - if (notificationStream.current) { 70 - notificationStream.current.ws.close(); 71 - notificationStream.current = null; 72 - } 63 + sub?.unsubscribe?.(); 64 + sub = null; 73 65 }; 74 66 }, [visible, isLoggedIn]); 75 67
+21 -19
src/components/compose.jsx
··· 185 185 : visibility, 186 186 ); 187 187 setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG); 188 - setSensitive(sensitive); 188 + setSensitive(sensitive && !!spoilerText); 189 189 } else if (editStatus) { 190 190 const { visibility, language, sensitive, poll, mediaAttachments } = 191 191 editStatus; ··· 197 197 setUIState('loading'); 198 198 (async () => { 199 199 try { 200 - const statusSource = await masto.v1.statuses.fetchSource( 201 - editStatus.id, 202 - ); 200 + const statusSource = await masto.v1.statuses 201 + .$select(editStatus.id) 202 + .source.fetch(); 203 203 console.log({ statusSource }); 204 204 const { text, spoilerText } = statusSource; 205 205 textareaRef.current.value = text; ··· 749 749 file, 750 750 description, 751 751 }); 752 - return masto.v2.mediaAttachments 753 - .create(params) 754 - .then((res) => { 755 - if (res.id) { 756 - attachment.id = res.id; 757 - } 758 - return res; 759 - }); 752 + return masto.v2.media.create(params).then((res) => { 753 + if (res.id) { 754 + attachment.id = res.id; 755 + } 756 + return res; 757 + }); 760 758 } 761 759 }); 762 760 const results = await Promise.allSettled(mediaPromises); ··· 784 782 /* NOTE: 785 783 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? 786 784 Code: https://github.com/neet/masto.js/blob/dd0d649067b6a2b6e60fbb0a96597c373a255b00/src/serializers/is-object.ts#L2 785 + 786 + // TODO: Note above is no longer true in Masto.js v6. Revisit this. 787 787 */ 788 788 let params = { 789 789 status, ··· 818 818 819 819 let newStatus; 820 820 if (editStatus) { 821 - newStatus = await masto.v1.statuses.update( 822 - editStatus.id, 823 - params, 824 - ); 821 + newStatus = await masto.v1.statuses 822 + .$select(editStatus.id) 823 + .update(params); 825 824 saveStatus(newStatus, instance, { 826 825 skipThreading: true, 827 826 }); ··· 935 934 performSearch={(params) => { 936 935 const { type, q, limit } = params; 937 936 if (type === 'accounts') { 938 - return masto.v1.accounts.search({ 937 + return masto.v1.accounts.search.list({ 939 938 q, 940 939 limit, 941 940 resolve: false, 942 941 }); 943 942 } 944 - return masto.v2.search(params); 943 + return masto.v2.search.fetch(params); 945 944 }} 946 945 /> 947 946 {mediaAttachments?.length > 0 && ( ··· 1478 1477 }) { 1479 1478 const supportsEdit = supports('@mastodon/edit-media-attributes'); 1480 1479 const { type, id, file } = attachment; 1481 - const url = file ? URL.createObjectURL(file) : attachment.url; 1480 + const url = useMemo( 1481 + () => (file ? URL.createObjectURL(file) : attachment.url), 1482 + [file, attachment.url], 1483 + ); 1482 1484 console.log({ attachment }); 1483 1485 const [description, setDescription] = useState(attachment.description); 1484 1486 const suffixType = type.split('/')[0];
+3 -3
src/components/drafts.jsx
··· 128 128 if (replyTo) { 129 129 setUIState('loading'); 130 130 try { 131 - replyToStatus = await masto.v1.statuses.fetch( 132 - replyTo.id, 133 - ); 131 + replyToStatus = await masto.v1.statuses 132 + .$select(replyTo.id) 133 + .fetch(); 134 134 } catch (e) { 135 135 console.error(e); 136 136 alert('Error fetching reply-to status!');
+6 -2
src/components/follow-request-buttons.jsx
··· 23 23 setRequestState('accept'); 24 24 (async () => { 25 25 try { 26 - const rel = await masto.v1.followRequests.authorize(accountID); 26 + const rel = await masto.v1.followRequests 27 + .$select(accountID) 28 + .authorize(); 27 29 if (!rel?.followedBy) { 28 30 throw new Error('Follow request not accepted'); 29 31 } ··· 47 49 setRequestState('reject'); 48 50 (async () => { 49 51 try { 50 - const rel = await masto.v1.followRequests.reject(accountID); 52 + const rel = await masto.v1.followRequests 53 + .$select(accountID) 54 + .reject(); 51 55 if (rel?.followedBy) { 52 56 throw new Error('Follow request not rejected'); 53 57 }
+2 -4
src/components/icon.jsx
··· 1 + import { memo } from 'preact/compat'; 1 2 import { useEffect, useState } from 'preact/hooks'; 2 3 3 4 const SIZES = { ··· 132 133 style={{ 133 134 width: `${iconSize}px`, 134 135 height: `${iconSize}px`, 135 - display: 'inline-block', 136 - overflow: 'hidden', 137 - lineHeight: 0, 138 136 ...style, 139 137 }} 140 138 > ··· 155 153 ); 156 154 } 157 155 158 - export default Icon; 156 + export default memo(Icon);
+2 -2
src/components/list-add-edit.jsx
··· 56 56 let listResult; 57 57 58 58 if (editMode) { 59 - listResult = await masto.v1.lists.update(list.id, { 59 + listResult = await masto.v1.lists.$select(list.id).update({ 60 60 title, 61 61 replies_policy: repliesPolicy, 62 62 exclusive, ··· 141 141 142 142 (async () => { 143 143 try { 144 - await masto.v1.lists.remove(list.id); 144 + await masto.v1.lists.$select(list.id).remove(); 145 145 setUIState('default'); 146 146 onClose?.({ 147 147 state: 'deleted',
+1 -1
src/components/media.jsx
··· 1 1 import { getBlurHashAverageColor } from 'fast-blurhash'; 2 - import mem from 'mem'; 3 2 import { Fragment } from 'preact'; 4 3 import { 5 4 useCallback, ··· 10 9 } from 'preact/hooks'; 11 10 import QuickPinchZoom, { make3dTransformValue } from 'react-quick-pinch-zoom'; 12 11 12 + import mem from '../utils/mem'; 13 13 import states from '../utils/states'; 14 14 15 15 import Icon from './icon';
+1 -1
src/components/notification-service.jsx
··· 38 38 ? getAccountByAccessToken(accessToken) 39 39 : getCurrentAccount(); 40 40 (async () => { 41 - const notification = await masto.v1.notifications.fetch(id); 41 + const notification = await masto.v1.notifications.$select(id).fetch(); 42 42 if (notification && account) { 43 43 console.log('🛎️ Notification', { id, notification, account }); 44 44 const accountInstance = account.instanceURL;
+12 -4
src/components/notification.jsx
··· 58 58 'favourite+reblog+account': (count) => 59 59 `boosted & favourited ${count} of your posts.`, 60 60 'favourite+reblog_reply': 'boosted & favourited your reply.', 61 - 'admin.signup': 'signed up.', 62 - 'admin.report': 'reported a post.', 61 + 'admin.sign_up': 'signed up.', 62 + 'admin.report': (targetAccount) => <>reported {targetAccount}</>, 63 63 }; 64 64 65 65 const AVATARS_LIMIT = 50; 66 66 67 67 function Notification({ notification, instance, reload, isStatic }) { 68 - const { id, status, account, _accounts, _statuses } = notification; 68 + const { id, status, account, report, _accounts, _statuses } = notification; 69 69 let { type } = notification; 70 70 71 71 // status = Attached when type of the notification is favourite, reblog, status, mention, poll, or update ··· 119 119 } 120 120 121 121 if (typeof text === 'function') { 122 - text = text(_statuses?.length || _accounts?.length); 122 + const count = _statuses?.length || _accounts?.length; 123 + if (count) { 124 + text = text(count); 125 + } else if (type === 'admin.report') { 126 + const targetAccount = report?.targetAccount; 127 + if (targetAccount) { 128 + text = text(<NameText account={targetAccount} showAvatar />); 129 + } 130 + } 123 131 } 124 132 125 133 if (type === 'mention' && !status) {
+9 -19
src/components/shortcuts-settings.jsx
··· 4 4 compressToEncodedURIComponent, 5 5 decompressFromEncodedURIComponent, 6 6 } from 'lz-string'; 7 - import mem from 'mem'; 8 7 import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; 9 8 import { useSnapshot } from 'valtio'; 10 9 ··· 13 12 import tabMenuBarUrl from '../assets/tab-menu-bar.svg'; 14 13 15 14 import { api } from '../utils/api'; 15 + import pmem from '../utils/pmem'; 16 16 import showToast from '../utils/show-toast'; 17 17 import states from '../utils/states'; 18 18 ··· 133 133 }, 134 134 list: { 135 135 id: 'list', 136 - title: mem( 137 - async ({ id }) => { 138 - const list = await api().masto.v1.lists.fetch(id); 139 - return list.title; 140 - }, 141 - { 142 - cacheKey: ([{ id }]) => id, 143 - }, 144 - ), 136 + title: pmem(async ({ id }) => { 137 + const list = await api().masto.v1.lists.$select(id).fetch(); 138 + return list.title; 139 + }), 145 140 path: ({ id }) => `/l/${id}`, 146 141 icon: 'list', 147 142 }, ··· 167 162 }, 168 163 'account-statuses': { 169 164 id: 'account-statuses', 170 - title: mem( 171 - async ({ id }) => { 172 - const account = await api().masto.v1.accounts.fetch(id); 173 - return account.username || account.acct || account.displayName; 174 - }, 175 - { 176 - cacheKey: ([{ id }]) => id, 177 - }, 178 - ), 165 + title: pmem(async ({ id }) => { 166 + const account = await api().masto.v1.accounts.$select(id).fetch(); 167 + return account.username || account.acct || account.displayName; 168 + }), 179 169 path: ({ id }) => `/a/${id}`, 180 170 icon: 'user', 181 171 },
+26 -1
src/components/status.css
··· 337 337 .status > .container > .meta a.time:after { 338 338 content: ''; 339 339 position: absolute; 340 - inset: -16px; 340 + inset: -16px -16px -8px; 341 341 } 342 342 .status > .container > .meta .reply-to { 343 343 opacity: 0.5; ··· 1020 1020 color: var(--text-color); 1021 1021 cursor: pointer; 1022 1022 } 1023 + 1024 + &:only-child { 1025 + white-space: pre-line; 1026 + overflow: auto; 1027 + text-overflow: unset; 1028 + display: flex; 1029 + gap: 4px; 1030 + } 1023 1031 } 1024 1032 1025 1033 sup { 1026 1034 opacity: 0.75; 1027 1035 font-variant-numeric: tabular-nums; 1036 + flex-shrink: 0; 1028 1037 } 1038 + } 1039 + 1040 + /* Only 4, for now. Would be better if this is a for loop */ 1041 + &:has(.media[data-has-alt]:nth-child(1):is(:hover, :focus)) 1042 + figcaption 1043 + > div[data-caption-index~='1'], 1044 + &:has(.media[data-has-alt]:nth-child(2):is(:hover, :focus)) 1045 + figcaption 1046 + > div[data-caption-index~='2'], 1047 + &:has(.media[data-has-alt]:nth-child(3):is(:hover, :focus)) 1048 + figcaption 1049 + > div[data-caption-index~='3'], 1050 + &:has(.media[data-has-alt]:nth-child(4):is(:hover, :focus)) 1051 + figcaption 1052 + > div[data-caption-index~='4'] { 1053 + color: var(--text-color); 1029 1054 } 1030 1055 } 1031 1056
+104 -70
src/components/status.jsx
··· 9 9 MenuItem, 10 10 } from '@szhsin/react-menu'; 11 11 import { decodeBlurHash } from 'fast-blurhash'; 12 - import mem from 'mem'; 13 12 import pThrottle from 'p-throttle'; 14 13 import { memo } from 'preact/compat'; 15 14 import { ··· 42 41 import isMastodonLinkMaybe from '../utils/isMastodonLinkMaybe'; 43 42 import localeMatch from '../utils/locale-match'; 44 43 import niceDateTime from '../utils/nice-date-time'; 44 + import pmem from '../utils/pmem'; 45 45 import safeBoundingBoxPadding from '../utils/safe-bounding-box-padding'; 46 46 import shortenNumber from '../utils/shorten-number'; 47 47 import showToast from '../utils/show-toast'; ··· 67 67 }); 68 68 69 69 function fetchAccount(id, masto) { 70 - try { 71 - return masto.v1.accounts.fetch(id); 72 - } catch (e) { 73 - return Promise.reject(e); 74 - } 70 + return masto.v1.accounts.$select(id).fetch(); 75 71 } 76 - const memFetchAccount = mem(fetchAccount); 72 + const memFetchAccount = pmem(fetchAccount); 77 73 78 74 const visibilityText = { 79 75 public: 'Public', ··· 390 386 reblogsCount: reblogsCount + (reblogged ? -1 : 1), 391 387 }; 392 388 if (reblogged) { 393 - const newStatus = await masto.v1.statuses.unreblog(id); 389 + const newStatus = await masto.v1.statuses.$select(id).unreblog(); 394 390 saveStatus(newStatus, instance); 395 391 return true; 396 392 } else { 397 - const newStatus = await masto.v1.statuses.reblog(id); 393 + const newStatus = await masto.v1.statuses.$select(id).reblog(); 398 394 saveStatus(newStatus, instance); 399 395 return true; 400 396 } ··· 418 414 reblogsCount: reblogsCount + (reblogged ? -1 : 1), 419 415 }; 420 416 if (reblogged) { 421 - const newStatus = await masto.v1.statuses.unreblog(id); 417 + const newStatus = await masto.v1.statuses.$select(id).unreblog(); 422 418 saveStatus(newStatus, instance); 423 419 return true; 424 420 } else { 425 - const newStatus = await masto.v1.statuses.reblog(id); 421 + const newStatus = await masto.v1.statuses.$select(id).reblog(); 426 422 saveStatus(newStatus, instance); 427 423 return true; 428 424 } ··· 446 442 favouritesCount: favouritesCount + (favourited ? -1 : 1), 447 443 }; 448 444 if (favourited) { 449 - const newStatus = await masto.v1.statuses.unfavourite(id); 445 + const newStatus = await masto.v1.statuses.$select(id).unfavourite(); 450 446 saveStatus(newStatus, instance); 451 447 } else { 452 - const newStatus = await masto.v1.statuses.favourite(id); 448 + const newStatus = await masto.v1.statuses.$select(id).favourite(); 453 449 saveStatus(newStatus, instance); 454 450 } 455 451 } catch (e) { ··· 470 466 bookmarked: !bookmarked, 471 467 }; 472 468 if (bookmarked) { 473 - const newStatus = await masto.v1.statuses.unbookmark(id); 469 + const newStatus = await masto.v1.statuses.$select(id).unbookmark(); 474 470 saveStatus(newStatus, instance); 475 471 } else { 476 - const newStatus = await masto.v1.statuses.bookmark(id); 472 + const newStatus = await masto.v1.statuses.$select(id).bookmark(); 477 473 saveStatus(newStatus, instance); 478 474 } 479 475 } catch (e) { ··· 708 704 <MenuItem 709 705 onClick={async () => { 710 706 try { 711 - const newStatus = await masto.v1.statuses[ 712 - muted ? 'unmute' : 'mute' 713 - ](id); 707 + const newStatus = await masto.v1.statuses 708 + .$select(id) 709 + [muted ? 'unmute' : 'mute'](); 714 710 saveStatus(newStatus, instance); 715 711 showToast(muted ? 'Conversation unmuted' : 'Conversation muted'); 716 712 } catch (e) { ··· 763 759 // if (yes) { 764 760 (async () => { 765 761 try { 766 - await masto.v1.statuses.remove(id); 762 + await masto.v1.statuses.$select(id).remove(); 767 763 const cachedStatus = getStatus(id, instance); 768 764 cachedStatus._deleted = true; 769 765 showToast('Deleted'); ··· 881 877 displayedMediaAttachments.some( 882 878 (media) => !!media.description && !isMediaCaptionLong(media.description), 883 879 ); 880 + const captionChildren = useMemo(() => { 881 + if (!showMultipleMediaCaptions) return null; 882 + const attachments = []; 883 + displayedMediaAttachments.forEach((media, i) => { 884 + if (!media.description) return; 885 + const index = attachments.findIndex( 886 + (attachment) => attachment.media.description === media.description, 887 + ); 888 + if (index === -1) { 889 + attachments.push({ 890 + media, 891 + indices: [i], 892 + }); 893 + } else { 894 + attachments[index].indices.push(i); 895 + } 896 + }); 897 + return attachments.map(({ media, indices }) => ( 898 + <div 899 + key={media.id} 900 + data-caption-index={indices.map((i) => i + 1).join(' ')} 901 + onClick={(e) => { 902 + e.preventDefault(); 903 + e.stopPropagation(); 904 + states.showMediaAlt = { 905 + alt: media.description, 906 + lang: language, 907 + }; 908 + }} 909 + title={media.description} 910 + > 911 + <sup>{indices.map((i) => i + 1).join(' ')}</sup> {media.description} 912 + </div> 913 + )); 914 + 915 + // return displayedMediaAttachments.map( 916 + // (media, i) => 917 + // !!media.description && ( 918 + // <div 919 + // key={media.id} 920 + // data-caption-index={i + 1} 921 + // onClick={(e) => { 922 + // e.preventDefault(); 923 + // e.stopPropagation(); 924 + // states.showMediaAlt = { 925 + // alt: media.description, 926 + // lang: language, 927 + // }; 928 + // }} 929 + // title={media.description} 930 + // > 931 + // <sup>{i + 1}</sup> {media.description} 932 + // </div> 933 + // ), 934 + // ); 935 + }, [showMultipleMediaCaptions, displayedMediaAttachments, language]); 884 936 885 937 return ( 886 938 <article ··· 1212 1264 }} 1213 1265 refresh={() => { 1214 1266 return masto.v1.polls 1215 - .fetch(poll.id) 1267 + .$select(poll.id) 1268 + .fetch() 1216 1269 .then((pollResponse) => { 1217 1270 states.statuses[sKey].poll = pollResponse; 1218 1271 }) ··· 1220 1273 }} 1221 1274 votePoll={(choices) => { 1222 1275 return masto.v1.polls 1223 - .vote(poll.id, { 1276 + .$select(poll.id) 1277 + .votes.create({ 1224 1278 choices, 1225 1279 }) 1226 1280 .then((pollResponse) => { ··· 1279 1333 <MultipleMediaFigure 1280 1334 lang={language} 1281 1335 enabled={showMultipleMediaCaptions} 1282 - captionChildren={() => { 1283 - return displayedMediaAttachments.map( 1284 - (media, i) => 1285 - !!media.description && ( 1286 - <div 1287 - key={media.id} 1288 - onClick={(e) => { 1289 - e.preventDefault(); 1290 - e.stopPropagation(); 1291 - states.showMediaAlt = { 1292 - alt: media.description, 1293 - lang: language, 1294 - }; 1295 - }} 1296 - title={media.description} 1297 - > 1298 - <sup>{i + 1}</sup> {media.description} 1299 - </div> 1300 - ), 1301 - ); 1302 - }} 1336 + captionChildren={captionChildren} 1303 1337 > 1304 1338 <div 1305 1339 ref={mediaContainerRef} ··· 1498 1532 statusID={showEdited} 1499 1533 instance={instance} 1500 1534 fetchStatusHistory={() => { 1501 - return masto.v1.statuses.listHistory(showEdited); 1535 + return masto.v1.statuses.$select(showEdited).history.list(); 1502 1536 }} 1503 1537 onClose={() => { 1504 1538 setShowEdited(false); ··· 1534 1568 <figure class="media-figure-multiple"> 1535 1569 {children} 1536 1570 <figcaption lang={lang} dir="auto"> 1537 - {captionChildren?.()} 1571 + {captionChildren} 1538 1572 </figcaption> 1539 1573 </figure> 1540 1574 ); ··· 1585 1619 // NOTE: This is for quote post 1586 1620 // (async () => { 1587 1621 // const { masto } = api({ instance }); 1588 - // const status = await masto.v1.statuses.fetch(id); 1622 + // const status = await masto.v1.statuses.$select(id).fetch(); 1589 1623 // saveStatus(status, instance); 1590 1624 // setCardStatusID(id); 1591 1625 // })(); ··· 1805 1839 (async () => { 1806 1840 try { 1807 1841 if (firstLoad) { 1808 - reblogIterator.current = masto.v1.statuses.listRebloggedBy(statusID, { 1809 - limit: REACTIONS_LIMIT, 1810 - }); 1811 - favouriteIterator.current = masto.v1.statuses.listFavouritedBy( 1812 - statusID, 1813 - { 1842 + reblogIterator.current = masto.v1.statuses 1843 + .$select(statusID) 1844 + .rebloggedBy.list({ 1845 + limit: REACTIONS_LIMIT, 1846 + }); 1847 + favouriteIterator.current = masto.v1.statuses 1848 + .$select(statusID) 1849 + .favouritedBy.list({ 1814 1850 limit: REACTIONS_LIMIT, 1815 - }, 1816 - ); 1851 + }); 1817 1852 } 1818 1853 const [{ value: reblogResults }, { value: favouriteResults }] = 1819 1854 await Promise.allSettled([ ··· 2043 2078 if (statusMatch) { 2044 2079 const id = statusMatch[3]; 2045 2080 const { masto } = api({ instance: domain }); 2046 - remoteInstanceFetch = masto.v1.statuses.fetch(id).then((status) => { 2047 - if (status?.id) { 2048 - return { 2049 - status, 2050 - instance: domain, 2051 - }; 2052 - } else { 2053 - throw new Error('No results'); 2054 - } 2055 - }); 2081 + remoteInstanceFetch = masto.v1.statuses 2082 + .$select(id) 2083 + .fetch() 2084 + .then((status) => { 2085 + if (status?.id) { 2086 + return { 2087 + status, 2088 + instance: domain, 2089 + }; 2090 + } else { 2091 + throw new Error('No results'); 2092 + } 2093 + }); 2056 2094 } 2057 2095 2058 2096 const { masto } = api({ instance }); 2059 - const mastoSearchFetch = masto.v2 2060 - .search({ 2097 + const mastoSearchFetch = masto.v2.search 2098 + .fetch({ 2061 2099 q: url, 2062 2100 type: 'statuses', 2063 2101 resolve: true, ··· 2127 2165 ); 2128 2166 } 2129 2167 2130 - const unfurlMastodonLink = throttle( 2131 - mem(_unfurlMastodonLink, { 2132 - cacheKey: (instance, url) => `${instance}:${url}`, 2133 - }), 2134 - ); 2168 + const unfurlMastodonLink = throttle(_unfurlMastodonLink); 2135 2169 2136 2170 function FilteredStatus({ status, filterInfo, instance, containerProps = {} }) { 2137 2171 const {
+11 -3
src/components/translation-block.jsx
··· 7 7 import sourceLanguages from '../data/lingva-source-languages'; 8 8 import getTranslateTargetLanguage from '../utils/get-translate-target-language'; 9 9 import localeCode2Text from '../utils/localeCode2Text'; 10 + import pmem from '../utils/pmem'; 10 11 11 12 import Icon from './icon'; 12 13 import Loader from './loader'; ··· 25 26 ]; 26 27 let currentLingvaInstance = 0; 27 28 28 - function lingvaTranslate(text, source, target) { 29 + function _lingvaTranslate(text, source, target) { 29 30 console.log('TRANSLATE', text, source, target); 30 31 const fetchCall = () => { 31 32 let instance = LINGVA_INSTANCES[currentLingvaInstance]; ··· 55 56 ); 56 57 }, 57 58 }); 58 - // return masto.v1.statuses.translate(id, { 59 + // return masto.v1.statuses.$select(id).translate({ 59 60 // lang: DEFAULT_LANG, 60 61 // }); 61 62 } 62 - const throttledLingvaTranslate = throttle(lingvaTranslate); 63 + const TRANSLATED_MAX_AGE = 1000 * 60 * 60; // 1 hour 64 + const lingvaTranslate = pmem(_lingvaTranslate, { 65 + maxAge: TRANSLATED_MAX_AGE, 66 + }); 67 + const throttledLingvaTranslate = pmem(throttle(lingvaTranslate), { 68 + // I know, this is double-layered memoization 69 + maxAge: TRANSLATED_MAX_AGE, 70 + }); 63 71 64 72 function TranslationBlock({ 65 73 forceTranslate,
+16 -11
src/pages/account-statuses.jsx
··· 31 31 const results = []; 32 32 if (firstLoad) { 33 33 const { value: pinnedStatuses } = await masto.v1.accounts 34 - .listStatuses(id, { 34 + .$select(id) 35 + .statuses.list({ 35 36 pinned: true, 36 37 }) 37 38 .next(); ··· 53 54 } 54 55 } 55 56 if (firstLoad || !accountStatusesIterator.current) { 56 - accountStatusesIterator.current = masto.v1.accounts.listStatuses(id, { 57 - limit: LIMIT, 58 - exclude_replies: excludeReplies, 59 - exclude_reblogs: excludeBoosts, 60 - only_media: media, 61 - tagged, 62 - }); 57 + accountStatusesIterator.current = masto.v1.accounts 58 + .$select(id) 59 + .statuses.list({ 60 + limit: LIMIT, 61 + exclude_replies: excludeReplies, 62 + exclude_reblogs: excludeBoosts, 63 + only_media: media, 64 + tagged, 65 + }); 63 66 } 64 67 const { value, done } = await accountStatusesIterator.current.next(); 65 68 if (value?.length) { ··· 86 89 useEffect(() => { 87 90 (async () => { 88 91 try { 89 - const acc = await masto.v1.accounts.fetch(id); 92 + const acc = await masto.v1.accounts.$select(id).fetch(); 90 93 console.log(acc); 91 94 setAccount(acc); 92 95 } catch (e) { 93 96 console.error(e); 94 97 } 95 98 try { 96 - const featuredTags = await masto.v1.accounts.listFeaturedTags(id); 99 + const featuredTags = await masto.v1.accounts 100 + .$select(id) 101 + .featuredTags.list(id); 97 102 console.log({ featuredTags }); 98 103 setFeaturedTags(featuredTags); 99 104 } catch (e) { ··· 113 118 <AccountInfo 114 119 instance={instance} 115 120 account={cachedAccount || id} 116 - fetchAccount={() => masto.v1.accounts.fetch(id)} 121 + fetchAccount={() => masto.v1.accounts.$select(id).fetch()} 117 122 authenticated={authenticated} 118 123 standalone 119 124 />
+3 -3
src/pages/accounts.jsx
··· 52 52 onDblClick={async () => { 53 53 if (isCurrent) { 54 54 try { 55 - const info = await masto.v1.accounts.fetch( 56 - account.info.id, 57 - ); 55 + const info = await masto.v1.accounts 56 + .$select(account.info.id) 57 + .fetch(); 58 58 console.log('fetched account info', info); 59 59 account.info = info; 60 60 store.local.setJSON('accounts', accounts);
+26 -45
src/pages/following.jsx
··· 13 13 14 14 function Following({ title, path, id, ...props }) { 15 15 useTitle(title || 'Following', path || '/following'); 16 - const { masto, instance } = api(); 16 + const { masto, streaming, instance } = api(); 17 17 const snapStates = useSnapshot(states); 18 18 const homeIterator = useRef(); 19 19 const latestItem = useRef(); ··· 22 22 23 23 async function fetchHome(firstLoad) { 24 24 if (firstLoad || !homeIterator.current) { 25 - homeIterator.current = masto.v1.timelines.listHome({ limit: LIMIT }); 25 + homeIterator.current = masto.v1.timelines.home.list({ limit: LIMIT }); 26 26 } 27 27 const results = await homeIterator.current.next(); 28 28 let { value } = results; ··· 53 53 54 54 async function checkForUpdates() { 55 55 try { 56 - const results = await masto.v1.timelines 57 - .listHome({ 56 + const results = await masto.v1.timelines.home 57 + .list({ 58 58 limit: 5, 59 59 since_id: latestItem.current, 60 60 }) ··· 75 75 } 76 76 } 77 77 78 - const ws = useRef(); 79 - const streamUser = async () => { 80 - console.log('🎏 Start streaming user', ws.current); 81 - if ( 82 - ws.current && 83 - (ws.current.readyState === WebSocket.CONNECTING || 84 - ws.current.readyState === WebSocket.OPEN) 85 - ) { 86 - console.log('🎏 Streaming user already open'); 87 - return; 88 - } 89 - const stream = await masto.v1.stream.streamUser(); 90 - ws.current = stream.ws; 91 - ws.current.__id = Math.random(); 92 - console.log('🎏 Streaming user', ws.current); 93 - 94 - stream.on('status.update', (status) => { 95 - console.log(`🔄 Status ${status.id} updated`); 96 - saveStatus(status, instance); 97 - }); 98 - 99 - stream.on('delete', (statusID) => { 100 - console.log(`❌ Status ${statusID} deleted`); 101 - // delete states.statuses[statusID]; 102 - const s = getStatus(statusID, instance); 103 - if (s) s._deleted = true; 104 - }); 105 - 106 - stream.ws.onclose = () => { 107 - console.log('🎏 Streaming user closed'); 108 - }; 109 - 110 - return stream; 111 - }; 112 78 useEffect(() => { 113 - let stream; 79 + let sub; 114 80 (async () => { 115 - stream = await streamUser(); 81 + if (streaming) { 82 + sub = streaming.user.subscribe(); 83 + console.log('🎏 Streaming user', sub); 84 + for await (const entry of sub) { 85 + if (!sub) break; 86 + if (entry.event === 'status.update') { 87 + const status = entry.payload; 88 + console.log(`🔄 Status ${status.id} updated`); 89 + saveStatus(status, instance); 90 + } else if (entry.event === 'delete') { 91 + const statusID = entry.payload; 92 + console.log(`❌ Status ${statusID} deleted`); 93 + // delete states.statuses[statusID]; 94 + const s = getStatus(statusID, instance); 95 + if (s) s._deleted = true; 96 + } 97 + } 98 + } 116 99 })(); 117 100 return () => { 118 - if (stream) { 119 - stream.ws.close(); 120 - ws.current = null; 121 - } 101 + sub?.unsubscribe?.(); 102 + sub = null; 122 103 }; 123 - }, []); 104 + }, [streaming]); 124 105 125 106 return ( 126 107 <Timeline
+12 -8
src/pages/hashtag.jsx
··· 46 46 const maxID = useRef(undefined); 47 47 async function fetchHashtags(firstLoad) { 48 48 // if (firstLoad || !hashtagsIterator.current) { 49 - // hashtagsIterator.current = masto.v1.timelines.listHashtag(hashtag, { 49 + // hashtagsIterator.current = masto.v1.timelines.tag.$select(hashtag).list({ 50 50 // limit: LIMIT, 51 51 // any: hashtags.slice(1), 52 52 // }); ··· 54 54 // const results = await hashtagsIterator.current.next(); 55 55 56 56 // NOTE: Temporary fix for listHashtag not persisting `any` in subsequent calls. 57 - const results = await masto.v1.timelines 58 - .listHashtag(hashtag, { 57 + const results = await masto.v1.timelines.tag 58 + .$select(hashtag) 59 + .list({ 59 60 limit: LIMIT, 60 61 any: hashtags.slice(1), 61 62 maxId: firstLoad ? undefined : maxID.current, ··· 81 82 82 83 async function checkForUpdates() { 83 84 try { 84 - const results = await masto.v1.timelines 85 - .listHashtag(hashtag, { 85 + const results = await masto.v1.timelines.tag 86 + .$select(hashtag) 87 + .list({ 86 88 limit: 1, 87 89 any: hashtags.slice(1), 88 90 since_id: latestItem.current, ··· 104 106 useEffect(() => { 105 107 (async () => { 106 108 try { 107 - const info = await masto.v1.tags.fetch(hashtag); 109 + const info = await masto.v1.tags.$select(hashtag).fetch(); 108 110 console.log(info); 109 111 setInfo(info); 110 112 } catch (e) { ··· 163 165 // return; 164 166 // } 165 167 masto.v1.tags 166 - .unfollow(hashtag) 168 + .$select(hashtag) 169 + .unfollow() 167 170 .then(() => { 168 171 setInfo({ ...info, following: false }); 169 172 showToast(`Unfollowed #${hashtag}`); ··· 177 180 }); 178 181 } else { 179 182 masto.v1.tags 180 - .follow(hashtag) 183 + .$select(hashtag) 184 + .follow() 181 185 .then(() => { 182 186 setInfo({ ...info, following: true }); 183 187 showToast(`Followed #${hashtag}`);
+10 -8
src/pages/list.jsx
··· 32 32 const listIterator = useRef(); 33 33 async function fetchList(firstLoad) { 34 34 if (firstLoad || !listIterator.current) { 35 - listIterator.current = masto.v1.timelines.listList(id, { 35 + listIterator.current = masto.v1.timelines.list.$select(id).list({ 36 36 limit: LIMIT, 37 37 }); 38 38 } ··· 56 56 57 57 async function checkForUpdates() { 58 58 try { 59 - const results = await masto.v1.timelines.listList(id, { 59 + const results = await masto.v1.timelines.list.$select(id).list({ 60 60 limit: 1, 61 61 since_id: latestItem.current, 62 62 }); ··· 77 77 useEffect(() => { 78 78 (async () => { 79 79 try { 80 - const list = await masto.v1.lists.fetch(id); 80 + const list = await masto.v1.lists.$select(id).fetch(); 81 81 setList(list); 82 82 // setTitle(list.title); 83 83 } catch (e) { ··· 200 200 (async () => { 201 201 try { 202 202 if (firstLoad || !membersIterator.current) { 203 - membersIterator.current = masto.v1.lists.listAccounts(listID, { 204 - limit: MEMBERS_LIMIT, 205 - }); 203 + membersIterator.current = masto.v1.lists 204 + .$select(listID) 205 + .accounts.list({ 206 + limit: MEMBERS_LIMIT, 207 + }); 206 208 } 207 209 const results = await membersIterator.current.next(); 208 210 let { done, value } = results; ··· 274 276 setUIState('loading'); 275 277 (async () => { 276 278 try { 277 - await masto.v1.lists.addAccount(listID, { 279 + await masto.v1.lists.$select(listID).accounts.create({ 278 280 accountIds: [account.id], 279 281 }); 280 282 setUIState('default'); ··· 290 292 291 293 (async () => { 292 294 try { 293 - await masto.v1.lists.removeAccount(listID, { 295 + await masto.v1.lists.$select(listID).accounts.remove({ 294 296 accountIds: [account.id], 295 297 }); 296 298 setUIState('default');
+3 -3
src/pages/public.jsx
··· 29 29 const publicIterator = useRef(); 30 30 async function fetchPublic(firstLoad) { 31 31 if (firstLoad || !publicIterator.current) { 32 - publicIterator.current = masto.v1.timelines.listPublic({ 32 + publicIterator.current = masto.v1.timelines.public.list({ 33 33 limit: LIMIT, 34 34 local: isLocal, 35 35 }); ··· 54 54 55 55 async function checkForUpdates() { 56 56 try { 57 - const results = await masto.v1.timelines 58 - .listPublic({ 57 + const results = await masto.v1.timelines.public 58 + .list({ 59 59 limit: 1, 60 60 local: isLocal, 61 61 since_id: latestItem.current,
+1 -1
src/pages/search.jsx
··· 90 90 if (authenticated) params.offset = offsetRef.current; 91 91 } 92 92 try { 93 - const results = await masto.v2.search(params); 93 + const results = await masto.v2.search.fetch(params); 94 94 console.log(results); 95 95 if (type) { 96 96 if (firstLoad) {
+192 -194
src/pages/status.jsx
··· 100 100 if (!heroStatus && showMedia) { 101 101 (async () => { 102 102 try { 103 - const status = await masto.v1.statuses.fetch(id); 103 + const status = await masto.v1.statuses.$select(id).fetch(); 104 104 saveStatus(status, instance); 105 105 setHeroStatus(status); 106 106 } catch (err) { ··· 235 235 236 236 (async () => { 237 237 const heroFetch = () => 238 - pRetry(() => masto.v1.statuses.fetch(id), { 238 + pRetry(() => masto.v1.statuses.$select(id).fetch(), { 239 239 retries: 4, 240 240 }); 241 - const contextFetch = pRetry(() => masto.v1.statuses.fetchContext(id), { 242 - retries: 8, 243 - }); 241 + const contextFetch = pRetry( 242 + () => masto.v1.statuses.$select(id).context.fetch(), 243 + { 244 + retries: 8, 245 + }, 246 + ); 244 247 245 248 const hasStatus = !!snapStates.statuses[sKey]; 246 249 let heroStatus = snapStates.statuses[sKey]; ··· 647 650 resetScrollPosition(status.id); 648 651 }, []); 649 652 653 + const renderStatus = (status) => { 654 + const { 655 + id: statusID, 656 + ancestor, 657 + isThread, 658 + descendant, 659 + thread, 660 + replies, 661 + repliesCount, 662 + weight, 663 + } = status; 664 + const isHero = statusID === id; 665 + // const StatusParent = useCallback( 666 + // (props) => 667 + // isThread || thread || ancestor ? ( 668 + // <Link 669 + // class="status-link" 670 + // to={ 671 + // instance ? `/${instance}/s/${statusID}` : `/s/${statusID}` 672 + // } 673 + // onClick={() => { 674 + // resetScrollPosition(statusID); 675 + // }} 676 + // {...props} 677 + // /> 678 + // ) : ( 679 + // <div class="status-focus" tabIndex={0} {...props} /> 680 + // ), 681 + // [isThread, thread], 682 + // ); 683 + return ( 684 + <li 685 + key={statusID} 686 + ref={isHero ? heroStatusRef : null} 687 + class={`${ancestor ? 'ancestor' : ''} ${ 688 + descendant ? 'descendant' : '' 689 + } ${thread ? 'thread' : ''} ${isHero ? 'hero' : ''}`} 690 + > 691 + {isHero ? ( 692 + <> 693 + <InView 694 + threshold={0.1} 695 + onChange={onView} 696 + class="status-focus" 697 + tabIndex={0} 698 + > 699 + <Status 700 + statusID={statusID} 701 + instance={instance} 702 + withinContext 703 + size="l" 704 + enableTranslate 705 + forceTranslate={translate} 706 + /> 707 + </InView> 708 + {uiState !== 'loading' && !authenticated ? ( 709 + <div class="post-status-banner"> 710 + <p> 711 + You're not logged in. Interactions (reply, boost, etc) are not 712 + possible. 713 + </p> 714 + <Link to="/login" class="button"> 715 + Log in 716 + </Link> 717 + </div> 718 + ) : ( 719 + !sameInstance && ( 720 + <div class="post-status-banner"> 721 + <p> 722 + This post is from another instance (<b>{instance}</b>). 723 + Interactions (reply, boost, etc) are not possible. 724 + </p> 725 + <button 726 + type="button" 727 + disabled={uiState === 'loading'} 728 + onClick={() => { 729 + setUIState('loading'); 730 + (async () => { 731 + try { 732 + const results = await currentMasto.v2.search.fetch({ 733 + q: heroStatus.url, 734 + type: 'statuses', 735 + resolve: true, 736 + limit: 1, 737 + }); 738 + if (results.statuses.length) { 739 + const status = results.statuses[0]; 740 + location.hash = currentInstance 741 + ? `/${currentInstance}/s/${status.id}` 742 + : `/s/${status.id}`; 743 + } else { 744 + throw new Error('No results'); 745 + } 746 + } catch (e) { 747 + setUIState('default'); 748 + alert('Error: ' + e); 749 + console.error(e); 750 + } 751 + })(); 752 + }} 753 + > 754 + <Icon icon="transfer" /> Switch to my instance to enable 755 + interactions 756 + </button> 757 + </div> 758 + ) 759 + )} 760 + </> 761 + ) : ( 762 + // <StatusParent> 763 + <Link 764 + class="status-link" 765 + to={instance ? `/${instance}/s/${statusID}` : `/s/${statusID}`} 766 + onClick={() => { 767 + resetScrollPosition(statusID); 768 + }} 769 + > 770 + <Status 771 + statusID={statusID} 772 + instance={instance} 773 + withinContext 774 + size={thread || ancestor ? 'm' : 's'} 775 + enableTranslate 776 + onMediaClick={handleMediaClick} 777 + onStatusLinkClick={handleStatusLinkClick} 778 + /> 779 + {ancestor && isThread && repliesCount > 1 && ( 780 + <div class="replies-link"> 781 + <Icon icon="comment" />{' '} 782 + <span title={repliesCount}>{shortenNumber(repliesCount)}</span> 783 + </div> 784 + )}{' '} 785 + {/* {replies?.length > LIMIT && ( 786 + <div class="replies-link"> 787 + <Icon icon="comment" />{' '} 788 + <span title={replies.length}> 789 + {shortenNumber(replies.length)} 790 + </span> 791 + </div> 792 + )} */} 793 + {/* </StatusParent> */} 794 + </Link> 795 + )} 796 + {descendant && replies?.length > 0 && ( 797 + <SubComments 798 + instance={instance} 799 + replies={replies} 800 + hasParentThread={thread} 801 + level={1} 802 + accWeight={weight} 803 + openAll={totalDescendants.current < SUBCOMMENTS_OPEN_ALL_LIMIT} 804 + /> 805 + )} 806 + {uiState === 'loading' && 807 + isHero && 808 + !!heroStatus?.repliesCount && 809 + !hasDescendants && ( 810 + <div class="status-loading"> 811 + <Loader /> 812 + </div> 813 + )} 814 + {uiState === 'error' && 815 + isHero && 816 + !!heroStatus?.repliesCount && 817 + !hasDescendants && ( 818 + <div class="status-error"> 819 + Unable to load replies. 820 + <br /> 821 + <button 822 + type="button" 823 + class="plain" 824 + onClick={() => { 825 + states.reloadStatusPage++; 826 + }} 827 + > 828 + Try again 829 + </button> 830 + </div> 831 + )} 832 + </li> 833 + ); 834 + }; 835 + 650 836 return ( 651 837 <div 652 838 tabIndex="-1" ··· 866 1052 uiState === 'loading' ? 'loading' : '' 867 1053 }`} 868 1054 > 869 - {statuses.slice(0, limit).map((status) => { 870 - const { 871 - id: statusID, 872 - ancestor, 873 - isThread, 874 - descendant, 875 - thread, 876 - replies, 877 - repliesCount, 878 - weight, 879 - } = status; 880 - const isHero = statusID === id; 881 - // const StatusParent = useCallback( 882 - // (props) => 883 - // isThread || thread || ancestor ? ( 884 - // <Link 885 - // class="status-link" 886 - // to={ 887 - // instance ? `/${instance}/s/${statusID}` : `/s/${statusID}` 888 - // } 889 - // onClick={() => { 890 - // resetScrollPosition(statusID); 891 - // }} 892 - // {...props} 893 - // /> 894 - // ) : ( 895 - // <div class="status-focus" tabIndex={0} {...props} /> 896 - // ), 897 - // [isThread, thread], 898 - // ); 899 - return ( 900 - <li 901 - key={statusID} 902 - ref={isHero ? heroStatusRef : null} 903 - class={`${ancestor ? 'ancestor' : ''} ${ 904 - descendant ? 'descendant' : '' 905 - } ${thread ? 'thread' : ''} ${isHero ? 'hero' : ''}`} 906 - > 907 - {isHero ? ( 908 - <> 909 - <InView 910 - threshold={0.1} 911 - onChange={onView} 912 - class="status-focus" 913 - tabIndex={0} 914 - > 915 - <Status 916 - statusID={statusID} 917 - instance={instance} 918 - withinContext 919 - size="l" 920 - enableTranslate 921 - forceTranslate={translate} 922 - /> 923 - </InView> 924 - {uiState !== 'loading' && !authenticated ? ( 925 - <div class="post-status-banner"> 926 - <p> 927 - You're not logged in. Interactions (reply, boost, etc) 928 - are not possible. 929 - </p> 930 - <Link to="/login" class="button"> 931 - Log in 932 - </Link> 933 - </div> 934 - ) : ( 935 - !sameInstance && ( 936 - <div class="post-status-banner"> 937 - <p> 938 - This post is from another instance ( 939 - <b>{instance}</b>). Interactions (reply, boost, etc) 940 - are not possible. 941 - </p> 942 - <button 943 - type="button" 944 - disabled={uiState === 'loading'} 945 - onClick={() => { 946 - setUIState('loading'); 947 - (async () => { 948 - try { 949 - const results = await currentMasto.v2.search({ 950 - q: heroStatus.url, 951 - type: 'statuses', 952 - resolve: true, 953 - limit: 1, 954 - }); 955 - if (results.statuses.length) { 956 - const status = results.statuses[0]; 957 - location.hash = currentInstance 958 - ? `/${currentInstance}/s/${status.id}` 959 - : `/s/${status.id}`; 960 - } else { 961 - throw new Error('No results'); 962 - } 963 - } catch (e) { 964 - setUIState('default'); 965 - alert('Error: ' + e); 966 - console.error(e); 967 - } 968 - })(); 969 - }} 970 - > 971 - <Icon icon="transfer" /> Switch to my instance to 972 - enable interactions 973 - </button> 974 - </div> 975 - ) 976 - )} 977 - </> 978 - ) : ( 979 - // <StatusParent> 980 - <Link 981 - class="status-link" 982 - to={ 983 - instance ? `/${instance}/s/${statusID}` : `/s/${statusID}` 984 - } 985 - onClick={() => { 986 - resetScrollPosition(statusID); 987 - }} 988 - > 989 - <Status 990 - statusID={statusID} 991 - instance={instance} 992 - withinContext 993 - size={thread || ancestor ? 'm' : 's'} 994 - enableTranslate 995 - onMediaClick={handleMediaClick} 996 - onStatusLinkClick={handleStatusLinkClick} 997 - /> 998 - {ancestor && isThread && repliesCount > 1 && ( 999 - <div class="replies-link"> 1000 - <Icon icon="comment" />{' '} 1001 - <span title={repliesCount}> 1002 - {shortenNumber(repliesCount)} 1003 - </span> 1004 - </div> 1005 - )}{' '} 1006 - {/* {replies?.length > LIMIT && ( 1007 - <div class="replies-link"> 1008 - <Icon icon="comment" />{' '} 1009 - <span title={replies.length}> 1010 - {shortenNumber(replies.length)} 1011 - </span> 1012 - </div> 1013 - )} */} 1014 - {/* </StatusParent> */} 1015 - </Link> 1016 - )} 1017 - {descendant && replies?.length > 0 && ( 1018 - <SubComments 1019 - instance={instance} 1020 - replies={replies} 1021 - hasParentThread={thread} 1022 - level={1} 1023 - accWeight={weight} 1024 - openAll={ 1025 - totalDescendants.current < SUBCOMMENTS_OPEN_ALL_LIMIT 1026 - } 1027 - /> 1028 - )} 1029 - {uiState === 'loading' && 1030 - isHero && 1031 - !!heroStatus?.repliesCount && 1032 - !hasDescendants && ( 1033 - <div class="status-loading"> 1034 - <Loader /> 1035 - </div> 1036 - )} 1037 - {uiState === 'error' && 1038 - isHero && 1039 - !!heroStatus?.repliesCount && 1040 - !hasDescendants && ( 1041 - <div class="status-error"> 1042 - Unable to load replies. 1043 - <br /> 1044 - <button 1045 - type="button" 1046 - class="plain" 1047 - onClick={() => { 1048 - states.reloadStatusPage++; 1049 - }} 1050 - > 1051 - Try again 1052 - </button> 1053 - </div> 1054 - )} 1055 - </li> 1056 - ); 1057 - })} 1055 + {statuses.slice(0, limit).map(renderStatus)} 1058 1056 {showMore > 0 && ( 1059 1057 <li> 1060 1058 <button
+4 -4
src/pages/trending.jsx
··· 30 30 const trendIterator = useRef(); 31 31 async function fetchTrend(firstLoad) { 32 32 if (firstLoad || !trendIterator.current) { 33 - trendIterator.current = masto.v1.trends.listStatuses({ 33 + trendIterator.current = masto.v1.trends.statuses.list({ 34 34 limit: LIMIT, 35 35 }); 36 36 37 37 // Get hashtags 38 38 try { 39 - const iterator = masto.v1.trends.listTags(); 39 + const iterator = masto.v1.trends.tags.list(); 40 40 const { value: tags } = await iterator.next(); 41 41 console.log(tags); 42 42 setHashtags(tags); ··· 64 64 65 65 async function checkForUpdates() { 66 66 try { 67 - const results = await masto.v1.trends 68 - .listStatuses({ 67 + const results = await masto.v1.trends.statuses 68 + .list({ 69 69 limit: 1, 70 70 // NOT SUPPORTED 71 71 // since_id: latestItem.current,
+67 -24
src/utils/api.js
··· 1 - import { createClient } from 'masto'; 1 + import { createRestAPIClient, createStreamingAPIClient } from 'masto'; 2 2 3 3 import store from './store'; 4 4 import { ··· 37 37 } 38 38 const url = instance ? `https://${instance}` : `https://${DEFAULT_INSTANCE}`; 39 39 40 - const client = createClient({ 40 + const masto = createRestAPIClient({ 41 41 url, 42 42 accessToken, // Can be null 43 - disableVersionCheck: true, // Allow non-Mastodon instances 44 43 timeout: 30_000, // Unfortunatly this is global instead of per-request 45 44 }); 46 - client.__instance__ = instance; 47 45 46 + const client = { 47 + masto, 48 + instance, 49 + accessToken, 50 + }; 48 51 apis[instance] = client; 49 52 if (!accountApis[instance]) accountApis[instance] = {}; 50 53 if (accessToken) accountApis[instance][accessToken] = client; ··· 55 58 // Get the instance information 56 59 // The config is needed for composing 57 60 export async function initInstance(client, instance) { 58 - const masto = client; 61 + console.log('INIT INSTANCE', client, instance); 62 + const { masto, accessToken } = client; 59 63 // Request v2, fallback to v1 if fail 60 64 let info; 61 65 try { ··· 63 67 } catch (e) {} 64 68 if (!info) { 65 69 try { 66 - info = await masto.v1.instances.fetch(); 70 + info = await masto.v1.instance.fetch(); 67 71 } catch (e) {} 68 72 } 69 73 if (!info) return; ··· 91 95 store.local.setJSON('instances', instances); 92 96 // This is a weird place to put this but here's updating the masto instance with the streaming API URL set in the configuration 93 97 // Reason: Streaming WebSocket URL may change, unlike the standard API REST URLs 94 - if (streamingApi || streaming) { 98 + const supportsWebSocket = 'WebSocket' in window; 99 + if (supportsWebSocket && (streamingApi || streaming)) { 95 100 console.log('🎏 Streaming API URL:', streaming || streamingApi); 96 - masto.config.props.streamingApiUrl = streaming || streamingApi; 101 + // masto.config.props.streamingApiUrl = streaming || streamingApi; 102 + // Legacy masto.ws 103 + const streamClient = createStreamingAPIClient({ 104 + streamingApiUrl: streaming || streamingApi, 105 + accessToken, 106 + implementation: WebSocket, 107 + }); 108 + client.streaming = streamClient; 109 + // masto.ws = streamClient; 110 + console.log('🎏 Streaming API client:', client); 97 111 } 98 112 } 99 113 100 114 // Get the account information and store it 101 115 export async function initAccount(client, instance, accessToken, vapidKey) { 102 - const masto = client; 116 + const { masto } = client; 103 117 const mastoAccount = await masto.v1.accounts.verifyCredentials(); 104 118 119 + console.log('CURRENTACCOUNT SET', mastoAccount.id); 105 120 store.session.set('currentAccount', mastoAccount.id); 106 121 107 122 saveAccount({ ··· 115 130 // Get preferences 116 131 export async function initPreferences(client) { 117 132 try { 118 - const masto = client; 133 + const { masto } = client; 119 134 const preferences = await masto.v1.preferences.fetch(); 120 135 store.account.set('preferences', preferences); 121 136 } catch (e) { ··· 134 149 135 150 // If instance and accessToken are provided, get the masto instance for that account 136 151 if (instance && accessToken) { 152 + const client = 153 + accountApis[instance]?.[accessToken] || 154 + initClient({ instance, accessToken }); 155 + const { masto, streaming } = client; 137 156 return { 138 - masto: 139 - accountApis[instance]?.[accessToken] || 140 - initClient({ instance, accessToken }), 157 + masto, 158 + streaming, 159 + client, 141 160 authenticated: true, 142 161 instance, 143 162 }; ··· 149 168 for (const instance in accountApis) { 150 169 if (accountApis[instance][accessToken]) { 151 170 console.log('X 2', accountApis, instance, accessToken); 171 + const client = accountApis[instance][accessToken]; 172 + const { masto, streaming } = client; 152 173 return { 153 - masto: accountApis[instance][accessToken], 174 + masto, 175 + streaming, 176 + client, 154 177 authenticated: true, 155 178 instance, 156 179 }; ··· 160 183 if (account) { 161 184 const accessToken = account.accessToken; 162 185 const instance = account.instanceURL.toLowerCase().trim(); 186 + const client = initClient({ instance, accessToken }); 187 + const { masto, streaming } = client; 163 188 return { 164 - masto: initClient({ instance, accessToken }), 189 + masto, 190 + streaming, 191 + client, 165 192 authenticated: true, 166 193 instance, 167 194 }; ··· 178 205 if (account) { 179 206 const accessToken = account.accessToken; 180 207 const instance = account.instanceURL.toLowerCase().trim(); 208 + const client = 209 + accountApis[instance]?.[accessToken] || 210 + initClient({ instance, accessToken }); 211 + const { masto, streaming } = client; 181 212 return { 182 - masto: 183 - accountApis[instance]?.[accessToken] || 184 - initClient({ instance, accessToken }), 213 + masto, 214 + streaming, 215 + client, 185 216 authenticated: true, 186 217 instance, 187 218 }; ··· 192 223 193 224 // If only instance is provided, get the masto instance for that instance 194 225 if (instance) { 195 - const masto = apis[instance] || initClient({ instance }); 226 + const client = apis[instance] || initClient({ instance }); 227 + const { masto, streaming, accessToken } = client; 196 228 return { 197 229 masto, 198 - authenticated: !!masto.config.props.accessToken, 230 + streaming, 231 + client, 232 + authenticated: !!accessToken, 199 233 instance, 200 234 }; 201 235 } ··· 203 237 // If no instance is provided, get the masto instance for the current account 204 238 if (currentAccountApi) { 205 239 return { 206 - masto: currentAccountApi, 240 + masto: currentAccountApi.masto, 241 + streaming: currentAccountApi.streaming, 242 + client: currentAccountApi, 207 243 authenticated: true, 208 - instance: currentAccountApi.__instance__, 244 + instance: currentAccountApi.instance, 209 245 }; 210 246 } 211 247 const currentAccount = getCurrentAccount(); ··· 215 251 accountApis[instance]?.[accessToken] || 216 252 initClient({ instance, accessToken }); 217 253 return { 218 - masto: currentAccountApi, 254 + masto: currentAccountApi.masto, 255 + streaming: currentAccountApi.streaming, 256 + client: currentAccountApi, 219 257 authenticated: true, 220 258 instance, 221 259 }; 222 260 } 223 261 224 262 // If no instance is provided and no account is logged in, get the masto instance for DEFAULT_INSTANCE 263 + const client = 264 + apis[DEFAULT_INSTANCE] || initClient({ instance: DEFAULT_INSTANCE }); 265 + const { masto, streaming } = client; 225 266 return { 226 - masto: apis[DEFAULT_INSTANCE] || initClient({ instance: DEFAULT_INSTANCE }), 267 + masto, 268 + streaming, 269 + client, 227 270 authenticated: false, 228 271 instance: DEFAULT_INSTANCE, 229 272 };
+3 -1
src/utils/enhance-content.js
··· 1 1 import emojifyText from './emojify-text'; 2 + import mem from './mem'; 2 3 3 4 const fauxDiv = document.createElement('div'); 4 5 const whitelistLinkClasses = ['u-url', 'mention', 'hashtag']; 5 6 6 - function enhanceContent(content, opts = {}) { 7 + function _enhanceContent(content, opts = {}) { 7 8 const { emojis, postEnhanceDOM = () => {} } = opts; 8 9 let enhancedContent = content; 9 10 const dom = document.createElement('div'); ··· 250 251 251 252 return enhancedContent; 252 253 } 254 + const enhanceContent = mem(_enhanceContent); 253 255 254 256 const defaultRejectFilter = [ 255 257 // Document metadata
+3 -4
src/utils/locale-match.jsx
··· 1 1 import { match } from '@formatjs/intl-localematcher'; 2 - import mem from 'mem'; 2 + 3 + import mem from './mem'; 3 4 4 5 function _localeMatch(...args) { 5 6 // Wrap in try/catch because localeMatcher throws on invalid locales ··· 10 11 return defaultLocale || false; 11 12 } 12 13 } 13 - const localeMatch = mem(_localeMatch, { 14 - cacheKey: (args) => args.join(), 15 - }); 14 + const localeMatch = mem(_localeMatch); 16 15 17 16 export default localeMatch;
+5
src/utils/mem.js
··· 1 + import moize from 'moize'; 2 + 3 + export default function mem(fn, opts = {}) { 4 + return moize(fn, { ...opts, maxSize: 100 }); 5 + }
+5
src/utils/pmem.js
··· 1 + import mem from './mem'; 2 + 3 + export default function pmem(fn, opts = {}) { 4 + return mem(fn, { isPromise: true, ...opts }); 5 + }
+4 -4
src/utils/push-notifications.js
··· 34 34 35 35 function createBackendPushSubscription(subscription) { 36 36 const { masto } = api(); 37 - return masto.v1.webPushSubscriptions.create(subscription); 37 + return masto.v1.push.subscription.create(subscription); 38 38 } 39 39 40 40 function fetchBackendPushSubscription() { 41 41 const { masto } = api(); 42 - return masto.v1.webPushSubscriptions.fetch(); 42 + return masto.v1.push.subscription.fetch(); 43 43 } 44 44 45 45 function updateBackendPushSubscription(subscription) { 46 46 const { masto } = api(); 47 - return masto.v1.webPushSubscriptions.update(subscription); 47 + return masto.v1.push.subscription.update(subscription); 48 48 } 49 49 50 50 function removeBackendPushSubscription() { 51 51 const { masto } = api(); 52 - return masto.v1.webPushSubscriptions.remove(); 52 + return masto.v1.push.subscription.remove(); 53 53 } 54 54 55 55 // Front-end
+4 -4
src/utils/states.js
··· 1 - import mem from 'mem'; 2 1 import { proxy, subscribe } from 'valtio'; 3 2 import { subscribeKey } from 'valtio/utils'; 4 3 5 4 import { api } from './api'; 5 + import pmem from './pmem'; 6 6 import store from './store'; 7 7 8 8 const states = proxy({ ··· 207 207 if (!prevStatus) { 208 208 if (fetchIndex++ > 3) throw 'Too many fetches for thread'; // Some people revive old threads 209 209 await new Promise((r) => setTimeout(r, 500 * fetchIndex)); // Be nice to rate limits 210 - // prevStatus = await masto.v1.statuses.fetch(inReplyToId); 210 + // prevStatus = await masto.v1.statuses.$.select(inReplyToId).fetch(); 211 211 prevStatus = await fetchStatus(inReplyToId, masto); 212 212 saveStatus(prevStatus, instance, { skipThreading: true }); 213 213 } ··· 229 229 }); 230 230 } 231 231 232 - const fetchStatus = mem((statusID, masto) => { 233 - return masto.v1.statuses.fetch(statusID); 232 + const fetchStatus = pmem((statusID, masto) => { 233 + return masto.v1.statuses.$select(statusID).fetch(); 234 234 });