diff --git a/.env b/.env index d8c1b59200..19b2b70080 100644 --- a/.env +++ b/.env @@ -1,5 +1,3 @@ PHANPY_CLIENT_NAME=Phanpy -PHANPY_WEBSITE=https://phanpy.social -PHANPY_LINGVA_INSTANCES="lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud" PHANPY_PRIVACY_POLICY_URL="https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD" PHANPY_TRANSLANG_INSTANCES="translang.phanpy.social" \ No newline at end of file diff --git a/.github/workflows/bundle-size.yml b/.github/workflows/bundle-size.yml new file mode 100644 index 0000000000..35af059296 --- /dev/null +++ b/.github/workflows/bundle-size.yml @@ -0,0 +1,33 @@ +name: Bundle Size Report + +on: + pull_request: + branches: [production] + +permissions: + pull-requests: write + +jobs: + bundle-size: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: 24 + cache: "npm" + - run: npm ci + - name: Build and extract bundle sizes + run: npm run build:sizes --silent > bundle-sizes.md + - name: Debug - show file content + run: | + echo "File size:" + wc -l bundle-sizes.md + echo "First 20 lines:" + head -20 bundle-sizes.md + - name: Comment on PR + uses: marocchino/sticky-pull-request-comment@v2 + with: + hide_and_recreate: true + header: bundle-size + path: bundle-sizes.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 5876646f3b..007096a1ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -383,11 +383,13 @@ Recap: Mastodon v4.3 features (https://github.com/mastodon/mastodon/releases/tag - 💬 Slightly more support for Mastodon v4.5's native quote posts - 🐛 Bug fixes -## Next +## November 26, 2025 + +📢 https://mastodon.social/@cheeaun/115616195859103739 - 🤳 QR code for profiles and shortcuts settings - 🔃 Import/export accounts -- 📸 Extract description from attached images +- 📸 Extract description from attached image metadata - 🐛 Bug fixes - - - - -
diff --git a/package-lock.json b/package-lock.json index 94e77a8ed4..82ce04f55d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,21 +8,22 @@ "name": "phanpy", "version": "0.1.0", "dependencies": { - "@formatjs/intl-localematcher": "~0.6.2", - "@formatjs/intl-segmenter": "~11.7.12", + "@formatjs/intl-localematcher": "~0.7.4", + "@formatjs/intl-segmenter": "~12.0.7", "@formkit/auto-animate": "~0.9.0", "@github/text-expander-element": "~2.9.2", "@iconify-icons/mingcute": "~1.2.9", "@justinribeiro/lite-youtube": "~1.9.0", - "@lingui/detect-locale": "~5.6.0", - "@lingui/macro": "~5.6.0", - "@lingui/react": "~5.6.0", - "@szhsin/react-menu": "~4.5.0", - "chroma-js": "~3.1.2", + "@lingui/detect-locale": "~5.7.0", + "@lingui/macro": "~5.7.0", + "@lingui/react": "~5.7.0", + "@szhsin/react-menu": "~4.5.1", + "chroma-js": "~3.2.0", "compare-versions": "~6.1.1", - "exifreader": "~4.32.0", + "exifreader": "~4.34.0", "fast-blurhash": "~1.1.4", - "fast-equals": "~5.3.3", + "fast-equals": "~6.0.0", + "flexsearch": "~0.8.212", "fuse.js": "~7.1.0", "gifuct-js": "~2.1.2", "html-prettify": "~1.0.7", @@ -31,19 +32,19 @@ "js-cookie": "~3.0.5", "just-debounce-it": "~3.2.0", "lz-string": "~1.5.0", - "masto": "~7.5.0", - "moize": "~6.1.6", - "p-queue": "~9.0.1", - "p-retry": "~7.1.0", + "masto": "~7.10.0", + "micro-memoize": "~5.1.1", + "p-queue": "~9.1.0", + "p-retry": "~7.1.1", "preact": "10.27.2", "punycode": "~2.3.1", - "qr": "~0.5.2", + "qr": "~0.5.3", "react-hotkeys-hook": "~5.2.1", "react-intersection-observer": "~10.0.0", "react-quick-pinch-zoom": "~5.1.1", "react-router-dom": "6.6.2", "swiped-events": "~1.2.0", - "temml": "~0.12.1", + "temml": "~0.13.1", "tinyld": "~1.3.4", "toastify-js": "~1.12.0", "uid": "~2.0.2", @@ -53,23 +54,23 @@ "valtio": "2.1.8" }, "devDependencies": { - "@biomejs/biome": "2.3.7", - "@lingui/babel-plugin-lingui-macro": "~5.6.0", - "@lingui/cli": "~5.6.0", - "@lingui/vite-plugin": "~5.6.0", - "@playwright/test": "~1.56.1", + "@biomejs/biome": "2.3.11", + "@lingui/babel-plugin-lingui-macro": "~5.7.0", + "@lingui/cli": "~5.7.0", + "@lingui/vite-plugin": "~5.7.0", + "@playwright/test": "~1.57.0", "@preact/preset-vite": "~2.10.2", - "@types/node": "~24.10.1", + "@types/node": "~25.0.3", "postcss": "~8.5.6", "postcss-dark-theme-class": "~2.0.0", - "postcss-preset-env": "~10.4.0", + "postcss-preset-env": "~10.6.0", "prop-types": "^15.8.1", - "sonda": "~0.10.0", + "sonda": "~0.10.1", "twitter-text": "~3.1.0", - "vite": "~7.2.4", + "vite": "~7.3.0", "vite-plugin-generate-file": "~0.3.1", "vite-plugin-html-config": "~2.0.2", - "vite-plugin-pwa": "~1.1.0", + "vite-plugin-pwa": "~1.2.0", "vite-plugin-remove-console": "~2.2.0", "vite-plugin-run": "~0.6.1", "workbox-cacheable-response": "~7.4.0", @@ -1685,9 +1686,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.7.tgz", - "integrity": "sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.11.tgz", + "integrity": "sha512-/zt+6qazBWguPG6+eWmiELqO+9jRsMZ/DBU3lfuU2ngtIQYzymocHhKiZRyrbra4aCOoyTg/BmY+6WH5mv9xmQ==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -1701,20 +1702,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.7", - "@biomejs/cli-darwin-x64": "2.3.7", - "@biomejs/cli-linux-arm64": "2.3.7", - "@biomejs/cli-linux-arm64-musl": "2.3.7", - "@biomejs/cli-linux-x64": "2.3.7", - "@biomejs/cli-linux-x64-musl": "2.3.7", - "@biomejs/cli-win32-arm64": "2.3.7", - "@biomejs/cli-win32-x64": "2.3.7" + "@biomejs/cli-darwin-arm64": "2.3.11", + "@biomejs/cli-darwin-x64": "2.3.11", + "@biomejs/cli-linux-arm64": "2.3.11", + "@biomejs/cli-linux-arm64-musl": "2.3.11", + "@biomejs/cli-linux-x64": "2.3.11", + "@biomejs/cli-linux-x64-musl": "2.3.11", + "@biomejs/cli-win32-arm64": "2.3.11", + "@biomejs/cli-win32-x64": "2.3.11" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.7.tgz", - "integrity": "sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.11.tgz", + "integrity": "sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA==", "cpu": [ "arm64" ], @@ -1729,9 +1730,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.7.tgz", - "integrity": "sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.11.tgz", + "integrity": "sha512-fh7nnvbweDPm2xEmFjfmq7zSUiox88plgdHF9OIW4i99WnXrAC3o2P3ag9judoUMv8FCSUnlwJCM1B64nO5Fbg==", "cpu": [ "x64" ], @@ -1746,9 +1747,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.7.tgz", - "integrity": "sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.11.tgz", + "integrity": "sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==", "cpu": [ "arm64" ], @@ -1763,9 +1764,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.7.tgz", - "integrity": "sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.11.tgz", + "integrity": "sha512-XPSQ+XIPZMLaZ6zveQdwNjbX+QdROEd1zPgMwD47zvHV+tCGB88VH+aynyGxAHdzL+Tm/+DtKST5SECs4iwCLg==", "cpu": [ "arm64" ], @@ -1780,9 +1781,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.7.tgz", - "integrity": "sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.11.tgz", + "integrity": "sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==", "cpu": [ "x64" ], @@ -1797,9 +1798,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.7.tgz", - "integrity": "sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.11.tgz", + "integrity": "sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==", "cpu": [ "x64" ], @@ -1814,9 +1815,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.7.tgz", - "integrity": "sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.11.tgz", + "integrity": "sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==", "cpu": [ "arm64" ], @@ -1831,9 +1832,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.7.tgz", - "integrity": "sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.11.tgz", + "integrity": "sha512-43VrG813EW+b5+YbDbz31uUsheX+qFKCpXeY9kfdAx+ww3naKxeVkTD9zLIWxUPfJquANMHrmW3wbe/037G0Qg==", "cpu": [ "x64" ], @@ -2760,6 +2761,29 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-position-area-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz", + "integrity": "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-progressive-custom-properties": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", @@ -2786,6 +2810,33 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-property-rule-prelude-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz", + "integrity": "sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-random-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", @@ -2926,6 +2977,59 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-syntax-descriptor-syntax-production": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz", + "integrity": "sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-system-ui-font-family": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz", + "integrity": "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-text-decoration-shorthand": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", @@ -3516,43 +3620,44 @@ } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", - "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-3.0.7.tgz", + "integrity": "sha512-U55Yulf37vBXN0C7gHm7hrxULVrcrhpQBcdLmIN2rpYpLfC5eIpa1JRX9efjU74gfzjK/MSmSG3Lxv3E4ZNZIw==", "license": "MIT", "dependencies": { - "@formatjs/fast-memoize": "2.2.7", - "@formatjs/intl-localematcher": "0.6.2", + "@formatjs/fast-memoize": "3.0.2", + "@formatjs/intl-localematcher": "0.7.4", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } }, "node_modules/@formatjs/fast-memoize": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", - "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.0.2.tgz", + "integrity": "sha512-YFApUDWFmjpPwAE7VcY7PYVjm6JaLZOAo0UfCQj1/OGi/1QtduG9kIBHmVC551M6AI01qvuP5kjbDebrZOT4Vg==", "license": "MIT", "dependencies": { "tslib": "^2.8.0" } }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", - "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.7.4.tgz", + "integrity": "sha512-AWsSZupIBMU/y04Nj24CjohyNVyfItMJPxSzX5OJwedDEIbGLOHkPxCjAeLeiLF2dw4xmQA8psktdi9MaebBQw==", "license": "MIT", "dependencies": { + "@formatjs/fast-memoize": "3.0.2", "tslib": "^2.8.0" } }, "node_modules/@formatjs/intl-segmenter": { - "version": "11.7.12", - "resolved": "https://registry.npmjs.org/@formatjs/intl-segmenter/-/intl-segmenter-11.7.12.tgz", - "integrity": "sha512-3QefVKh5HvaKU80lAFmqUsWmKYWcpiDymsc0HwFvhuVl0dAnMhtbNmzMN50UiC7ZsnbybelNGrm9GZPp4kbbZA==", + "version": "12.0.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-segmenter/-/intl-segmenter-12.0.7.tgz", + "integrity": "sha512-ac/N+lNi9CaQcYeqrrEmiWWFd2g3navcJQmUG346h4EMRNrEHQzhBrizO2G4qAohvszI9qzSmCXxAmpr0NHLfQ==", "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/intl-localematcher": "0.6.2", + "@formatjs/ecma402-abstract": "3.0.7", + "@formatjs/intl-localematcher": "0.7.4", "tslib": "^2.8.0" } }, @@ -3739,9 +3844,9 @@ "license": "MIT" }, "node_modules/@lingui/babel-plugin-extract-messages": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.6.0.tgz", - "integrity": "sha512-FrTHNisLmH1X23d1ISOFLgChjr6lO+vpDa21enCA7ehTJHWjtxy6YP4rXrX5MWfsozmLFloJsizpNU69OC3e1w==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.7.0.tgz", + "integrity": "sha512-kTRw/cr4crwKim2mAd4f5dHUQtIWK1ydN3Ga5FHb5hYgPhfK9egzykVCIEb/N10TfwwLUjSzNZXmTlCiLrgTLw==", "dev": true, "license": "MIT", "engines": { @@ -3749,9 +3854,9 @@ } }, "node_modules/@lingui/babel-plugin-lingui-macro": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.6.0.tgz", - "integrity": "sha512-r1FwNEfLDPJaC0Goj2gbUR452APWApRZtd8WCGkODpMLen1a1reK+edCRwUeUr72cLbpPVpewr6aBc7deOLySQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.7.0.tgz", + "integrity": "sha512-LoyRpvcocdKfkfill3VOYtyDYclnrB+c/IOS0D0i+xmBvNDjtG28gOVU81brg2w07Hzi6TKhNf3+YSi2UXsILQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -3759,9 +3864,9 @@ "@babel/core": "^7.20.12", "@babel/runtime": "^7.20.13", "@babel/types": "^7.20.7", - "@lingui/conf": "5.6.0", - "@lingui/core": "5.6.0", - "@lingui/message-utils": "5.6.0" + "@lingui/conf": "5.7.0", + "@lingui/core": "5.7.0", + "@lingui/message-utils": "5.7.0" }, "engines": { "node": ">=20.0.0" @@ -3776,9 +3881,9 @@ } }, "node_modules/@lingui/cli": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.6.0.tgz", - "integrity": "sha512-ZqCLqbakKhlViuH0S9AGR54dVnIKYEMeVTgIshL2XVNpAVlfKdzox+EjavEvMI4g4s86MRazLpwioBjfeJG/tg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.7.0.tgz", + "integrity": "sha512-606EuwTvenumOfNRF9JoV1G3JIZyWQldQV+rgkUozmaiEQT+3xuTr6K2IOSBfJZoICG2jwrnMT8ifWr08BAICg==", "dev": true, "license": "MIT", "dependencies": { @@ -3787,12 +3892,12 @@ "@babel/parser": "^7.22.0", "@babel/runtime": "^7.21.0", "@babel/types": "^7.21.2", - "@lingui/babel-plugin-extract-messages": "5.6.0", - "@lingui/babel-plugin-lingui-macro": "5.6.0", - "@lingui/conf": "5.6.0", - "@lingui/core": "5.6.0", - "@lingui/format-po": "5.6.0", - "@lingui/message-utils": "5.6.0", + "@lingui/babel-plugin-extract-messages": "5.7.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", + "@lingui/conf": "5.7.0", + "@lingui/core": "5.7.0", + "@lingui/format-po": "5.7.0", + "@lingui/message-utils": "5.7.0", "chokidar": "3.5.1", "cli-table": "^0.3.11", "commander": "^10.0.0", @@ -3807,7 +3912,7 @@ "picocolors": "^1.1.1", "pofile": "^1.1.4", "pseudolocale": "^2.0.0", - "source-map": "^0.8.0-beta.0", + "source-map": "^0.7.6", "threads": "^1.7.0" }, "bin": { @@ -3817,10 +3922,20 @@ "node": ">=20.0.0" } }, + "node_modules/@lingui/cli/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/@lingui/conf": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.6.0.tgz", - "integrity": "sha512-h8e2p0BhTAsIriwW4l711P3/8N8NH17Rj3of8UWyerWUnvxOpGCIM1wix/CHP65yFF384phC0WqPjBur89TnYg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.7.0.tgz", + "integrity": "sha512-O0TWVfR99H+7SUI4pYGNkCUU1t2WcIwgDTTX3VKq6wH3A+P90QyAJLOXj+/s0JVkc1I37EL23Wtca5QkFBLtOg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3835,19 +3950,19 @@ } }, "node_modules/@lingui/core": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.6.0.tgz", - "integrity": "sha512-s+WOjytLPBi1O3VT8wBklteK8PPPrmuox7A2mEPUO0QOqfFK4mzt5Bdok4RK+MCV61ampLByLlOUwS/NQEGWoQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.7.0.tgz", + "integrity": "sha512-eEQCFqjcwCn2lEHsH/I0koMKfwCJFTKG3Bnx6tkVuYmpfmgagbSMKIMot0WFY9gzafKHGsrvZrNDNT4OwdxDIQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@lingui/message-utils": "5.6.0" + "@lingui/message-utils": "5.7.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@lingui/babel-plugin-lingui-macro": "5.6.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", "babel-plugin-macros": "2 || 3" }, "peerDependenciesMeta": { @@ -3860,23 +3975,23 @@ } }, "node_modules/@lingui/detect-locale": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/detect-locale/-/detect-locale-5.6.0.tgz", - "integrity": "sha512-ZaUr/R/GPwVisVolCyCcbwzqlPVXRM54d7Rfp2aRaIpTODGujmF42NWCWSUEAwHh88gpIhdL3DofdwK17d/ljw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/detect-locale/-/detect-locale-5.7.0.tgz", + "integrity": "sha512-jkfN06MFNb8Ez7IYicbW+/U1uTxPEmxSh/WgrdNrLZzEy1aCFZkUZ1rK7z9OPX8NSx+30/jEu+VyZ2eAEP5MVw==", "license": "MIT", "engines": { "node": ">=20.0.0" } }, "node_modules/@lingui/format-po": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.6.0.tgz", - "integrity": "sha512-z7vgUNjiP+iu/pgfHXaUtgzRv9kvhWZqfb5FIHOAcJkTvod3vjB7FsarKRZ7BmoETMx3khgvdTgzyKGaPaO+dw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.7.0.tgz", + "integrity": "sha512-n2UX7T7N58O8HhcmM6RAVgxM3egloF0AM16VQdMPEKpZiTm8CDN5O3ovJu7ophsbfLp9iKZcbGd+QypZY671+Q==", "dev": true, "license": "MIT", "dependencies": { - "@lingui/conf": "5.6.0", - "@lingui/message-utils": "5.6.0", + "@lingui/conf": "5.7.0", + "@lingui/message-utils": "5.7.0", "date-fns": "^3.6.0", "pofile": "^1.1.4" }, @@ -3885,19 +4000,19 @@ } }, "node_modules/@lingui/macro": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-5.6.0.tgz", - "integrity": "sha512-xv85SmvfgO4e34SRMBqIVlrU/baWowMNL2EeV+BjvQEvD0jNPSrCok94ibWQu0D+N74qBe82OQ+gKWHWTKYPcg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-5.7.0.tgz", + "integrity": "sha512-XDB3obEo/R+HXXCxkEvDyvz7u/m5VlkbyHiXeq2eTFXfzLMXI7wLUyVDbxKysXkqmYcBgzmRUYDTRcA+mUoIKg==", "license": "MIT", "dependencies": { - "@lingui/core": "5.6.0", - "@lingui/react": "5.6.0" + "@lingui/core": "5.7.0", + "@lingui/react": "5.7.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@lingui/babel-plugin-lingui-macro": "5.6.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", "babel-plugin-macros": "2 || 3" }, "peerDependenciesMeta": { @@ -3910,9 +4025,9 @@ } }, "node_modules/@lingui/message-utils": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.6.0.tgz", - "integrity": "sha512-g/Jyf5CzwdYd8KxgyFG/UNePvLsp32yndvb9sAhdS9CscgY3T+0IYviOEB36AaxZcftB51zhdGCMdscoEDiChg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.7.0.tgz", + "integrity": "sha512-yJKzPjJCLz8EkjqExxEBrioiKZtgxgLubOwzjSiZ8n1omuoyeRAqdKkmeOP/fPW2QpkQv33qLqfLtBhrIVJkeg==", "license": "MIT", "dependencies": { "@messageformat/parser": "^5.0.0", @@ -3923,19 +4038,19 @@ } }, "node_modules/@lingui/react": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/react/-/react-5.6.0.tgz", - "integrity": "sha512-EhvDQ3xNloW0f/JCKl6hCDi8JVcwEDFYpQd3iC2i9coom2iwRNbxjVeKUa+/27tjl90bdbJrdgTRtis0RXN1wQ==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/react/-/react-5.7.0.tgz", + "integrity": "sha512-pz9Gh3JYe4KQTmgebjqUCwEYEsl4V0cwVXFo1jxXCESDc40cuOwGIkdHxj7kfBtfJBdsFSzAPs9UVDDd/Ovpzg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@lingui/core": "5.6.0" + "@lingui/core": "5.7.0" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@lingui/babel-plugin-lingui-macro": "5.6.0", + "@lingui/babel-plugin-lingui-macro": "5.7.0", "babel-plugin-macros": "2 || 3", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -3949,14 +4064,14 @@ } }, "node_modules/@lingui/vite-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@lingui/vite-plugin/-/vite-plugin-5.6.0.tgz", - "integrity": "sha512-Zj7K6QVF9uVdc7S8ekFFiYGkTWiTNhmAK1szV0eyP1+CCEY9gr1eWwbxCCsvowA2iPJbwR3MS5dOm8op6ocpHA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@lingui/vite-plugin/-/vite-plugin-5.7.0.tgz", + "integrity": "sha512-Mdmq/WfhTzQ8Q5oL7cYoP2Nu7bBWlZmGlQL0+6Oeb2bgFbabWixcXuqVwGElPvR8PGwGwnZ2gXVs0Y9KdzBDaQ==", "dev": true, "license": "MIT", "dependencies": { - "@lingui/cli": "5.6.0", - "@lingui/conf": "5.6.0" + "@lingui/cli": "5.7.0", + "@lingui/conf": "5.7.0" }, "engines": { "node": ">=20.0.0" @@ -3984,13 +4099,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", - "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz", + "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.56.1" + "playwright": "1.57.0" }, "bin": { "playwright": "cli.js" @@ -4555,9 +4670,9 @@ } }, "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4753,9 +4868,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", - "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", "dev": true, "funding": [ { @@ -4773,10 +4888,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.27.0", - "caniuse-lite": "^1.0.30001754", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", "fraction.js": "^5.3.4", - "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -4887,9 +5001,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.31", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", - "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -4952,9 +5066,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "devOptional": true, "funding": [ { @@ -4973,11 +5087,11 @@ "license": "MIT", "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -5108,9 +5222,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001757", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", - "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", "devOptional": true, "funding": [ { @@ -5174,9 +5288,9 @@ } }, "node_modules/chroma-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-3.1.2.tgz", - "integrity": "sha512-IJnETTalXbsLx1eKEgx19d5L6SRM7cH4vINw/99p/M11HCuXGRWL+6YmCm7FWFGIo6dtWuQoQi1dc5yQ7ESIHg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-3.2.0.tgz", + "integrity": "sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw==", "license": "(BSD-3-Clause AND Apache-2.0)" }, "node_modules/cli-cursor": { @@ -5473,9 +5587,9 @@ } }, "node_modules/cssdb": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.4.2.tgz", - "integrity": "sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.6.0.tgz", + "integrity": "sha512-7ZrRi/Z3cRL1d5I8RuXEWAkRFP3J4GeQRiyVknI4KC70RAU8hT4LysUZDe0y+fYNOktCbxE8sOPUOhyR12UqGQ==", "dev": true, "funding": [ { @@ -5800,9 +5914,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.260", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz", - "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "devOptional": true, "license": "ISC" }, @@ -6096,9 +6210,9 @@ "license": "ISC" }, "node_modules/exifreader": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/exifreader/-/exifreader-4.32.0.tgz", - "integrity": "sha512-sj1PzjpaPwSE/2MeUqoAYcfc2u7AZOGSby0FzmAkB4jjeCXgDryxzVgMwV+tJKGIkGdWkkWiUWoLSJoPHJ6V5Q==", + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/exifreader/-/exifreader-4.34.0.tgz", + "integrity": "sha512-trqk/G6mfxFAUyUdNOsghe51NAo+OQ8z/JGos6JLLHhapvwnWUzOwy82V1MliunCSzLmPMOOzhfequOYg/Aw4w==", "hasInstallScript": true, "license": "MPL-2.0", "optionalDependencies": { @@ -6119,9 +6233,9 @@ "license": "MIT" }, "node_modules/fast-equals": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz", - "integrity": "sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.0.tgz", + "integrity": "sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -6134,6 +6248,12 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fast-stringify/-/fast-stringify-4.0.0.tgz", + "integrity": "sha512-lE2DIivBaLysf6hK5WH/VfMgqRbvBVHcpGVVTmA5Zi8oWIjq9YxIt6lYGdUgP1HNSXxTIat7HEIDnrSvXSeKQw==", + "license": "MIT" + }, "node_modules/fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", @@ -6187,6 +6307,34 @@ "node": ">=8" } }, + "node_modules/flexsearch": { + "version": "0.8.212", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.8.212.tgz", + "integrity": "sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/ts-thomas" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=GEVR88FC9BWRW" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/flexsearch" + }, + { + "type": "patreon", + "url": "https://patreon.com/user?u=96245532" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/ts-thomas" + } + ], + "license": "Apache-2.0" + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -7570,9 +7718,9 @@ } }, "node_modules/masto": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/masto/-/masto-7.5.0.tgz", - "integrity": "sha512-WJHY7LGbPld82TtxiKkQhipjylKQnyUgca/A/F4V7RU8uu2AvZFRKASWySPpsFTUCOtq5vudtE3cjvj1oh/cZw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/masto/-/masto-7.10.0.tgz", + "integrity": "sha512-BTaivOeHkb87oND2Dp/QzRP5kWJnB5khH9xSsfS0N8WzEAziuKV4DjZAHdbh2SNemqwikQeYtMPBsl52Q9sreQ==", "license": "MIT", "dependencies": { "change-case": "^5.4.4", @@ -7600,10 +7748,23 @@ "license": "MIT" }, "node_modules/micro-memoize": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.2.0.tgz", - "integrity": "sha512-dRxIsNh0XosO9sd3aASUabKOzG9dloLO41g74XUGThpHBoGm1ttakPT5in14CuW/EDedkniaShFHbymmmKGOQA==", - "license": "MIT" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-5.1.1.tgz", + "integrity": "sha512-QDwluos8YeMijiKxZGwaV4f4tzj0soS6+xcsJhJ3+4wdEIHMyKbIKVUziebOgWX3e6yiijdoaHo+9tyhbnaWXA==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.3.3", + "fast-stringify": "^4.0.0" + } + }, + "node_modules/micro-memoize/node_modules/fast-equals": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, "node_modules/micromatch": { "version": "4.0.8", @@ -7678,22 +7839,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/moize": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", - "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", - "license": "MIT", - "dependencies": { - "fast-equals": "^3.0.1", - "micro-memoize": "^4.1.2" - } - }, - "node_modules/moize/node_modules/fast-equals": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", - "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", - "license": "MIT" - }, "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", @@ -7754,16 +7899,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -7952,9 +8087,9 @@ } }, "node_modules/p-queue": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.1.tgz", - "integrity": "sha512-RhBdVhSwJb7Ocn3e8ULk4NMwBEuOxe+1zcgphUy9c2e5aR/xbEsdVXxHJ3lynw6Qiqu7OINEyHlZkiblEpaq7w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -7968,9 +8103,9 @@ } }, "node_modules/p-retry": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.0.tgz", - "integrity": "sha512-xL4PiFRQa/f9L9ZvR4/gUCRNus4N8YX80ku8kv9Jqz+ZokkiZLM0bcvX0gm1F3PDi9SPRsww1BDsTWgE6Y1GLQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz", + "integrity": "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==", "license": "MIT", "dependencies": { "is-network-error": "^1.1.0" @@ -8108,13 +8243,13 @@ } }, "node_modules/playwright": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", - "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", + "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.56.1" + "playwright-core": "1.57.0" }, "bin": { "playwright": "cli.js" @@ -8127,9 +8262,9 @@ } }, "node_modules/playwright-core": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", - "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", + "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8777,9 +8912,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.4.0.tgz", - "integrity": "sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.6.0.tgz", + "integrity": "sha512-+LzpUSLCGHUdlZ1YZP7lp7w1MjxInJRSG0uaLyk/V/BM17iU2B7xTO7I8x3uk0WQAcLLh/ffqKzOzfaBvG7Fdw==", "dev": true, "funding": [ { @@ -8820,21 +8955,25 @@ "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", "@csstools/postcss-oklab-function": "^4.0.12", + "@csstools/postcss-position-area-property": "^1.0.0", "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/postcss-property-rule-prelude-list": "^1.0.0", "@csstools/postcss-random-function": "^2.0.1", "@csstools/postcss-relative-color-syntax": "^3.0.12", "@csstools/postcss-scope-pseudo-class": "^4.0.1", "@csstools/postcss-sign-functions": "^1.1.4", "@csstools/postcss-stepped-value-functions": "^4.0.9", + "@csstools/postcss-syntax-descriptor-syntax-production": "^1.0.1", + "@csstools/postcss-system-ui-font-family": "^1.0.0", "@csstools/postcss-text-decoration-shorthand": "^4.0.3", "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.21", - "browserslist": "^4.26.0", + "autoprefixer": "^10.4.23", + "browserslist": "^4.28.1", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.3", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.4.2", + "cssdb": "^8.6.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", "postcss-color-functional-notation": "^7.0.12", @@ -9056,9 +9195,9 @@ } }, "node_modules/qr": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/qr/-/qr-0.5.2.tgz", - "integrity": "sha512-91M3sVlA7xCFpkJtYX5xzVH8tDo4rNZ7jr8v+1CRgPVkZ4D+Vl9y8rtZWJ/YkEUM6U/h0FAu5W/JAK7iowOteA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/qr/-/qr-0.5.3.tgz", + "integrity": "sha512-BSrGdNXa8z6PfEYWtvITV21mQ4asR4UCj38Fa3MUUoFAtYzFK/swEQXF+OeBuNbHPFfs3PzpZuK0BXizWXgFOQ==", "license": "(MIT OR Apache-2.0)", "engines": { "node": ">= 20.19.0" @@ -9734,9 +9873,9 @@ "license": "MIT" }, "node_modules/sonda": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sonda/-/sonda-0.10.0.tgz", - "integrity": "sha512-Mg6YWl8QOD9Yf8wV5teUYZiB0P1oy994pmPJmi3Fr7+0RXhBcNY6TUZFa7c3gHKLJfemfoAeV22+PSBXlzuT4g==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/sonda/-/sonda-0.10.1.tgz", + "integrity": "sha512-nXlQEVsw7833XADV94MXW9EKwLxn4S1U7oSUEgKCQeU4dt0CwYvEFcyRjhjM0Ae2taxsJ9HnFrtw8Eb40/rX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -10096,9 +10235,9 @@ "license": "MIT" }, "node_modules/temml": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/temml/-/temml-0.12.1.tgz", - "integrity": "sha512-7rKps3v+yZ/1aWp2VQkuOgJKiwLgaL5hLR3q8gAglMCqUbofR98frEjHfutW+xncIRzGskucsdTD6aucJ557jg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/temml/-/temml-0.13.1.tgz", + "integrity": "sha512-/fL1utq8QUD9YpcLeZHPRnp9Cbzbexq5hZl5uSBhf8mNYiKkcS4eYbLidDB+/nF8C+RHAcBQbKw2bKoS83mz1Q==", "license": "MIT", "engines": { "node": ">=18.13.0" @@ -10533,9 +10672,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "devOptional": true, "funding": [ { @@ -10629,14 +10768,14 @@ } }, "node_modules/vite": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", - "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -10731,17 +10870,17 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.1.0.tgz", - "integrity": "sha512-VsSpdubPzXhHWVINcSx6uHRMpOHVHQcHsef1QgkOlEoaIDAlssFEW88LBq1a59BuokAhsh2kUDJbaX1bZv4Bjw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.2.0.tgz", + "integrity": "sha512-a2xld+SJshT9Lgcv8Ji4+srFJL4k/1bVbd1x06JIkvecpQkwkvCncD1+gSzcdm3s+owWLpMJerG3aN5jupJEVw==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.6", "pretty-bytes": "^6.1.1", "tinyglobby": "^0.2.10", - "workbox-build": "^7.3.0", - "workbox-window": "^7.3.0" + "workbox-build": "^7.4.0", + "workbox-window": "^7.4.0" }, "engines": { "node": ">=16.0.0" @@ -10752,8 +10891,8 @@ "peerDependencies": { "@vite-pwa/assets-generator": "^1.0.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "workbox-build": "^7.3.0", - "workbox-window": "^7.3.0" + "workbox-build": "^7.4.0", + "workbox-window": "^7.4.0" }, "peerDependenciesMeta": { "@vite-pwa/assets-generator": { @@ -10826,6 +10965,490 @@ "node": ">= 12" } }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, "node_modules/vite/node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", diff --git a/package.json b/package.json index 63ee14b38d..6a87332f94 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", + "build:sizes": "NO_COLOR=true vite build 2>&1 | grep '^dist/' | node scripts/bundle-sizes-to-md.js", "preview": "vite preview", "fetch-instances": "node scripts/fetch-instances-list.js", "sourcemap": "npx source-map-explorer dist/assets/*.js", @@ -21,21 +22,22 @@ "git:po-filter": "git config --local diff.po-filter.textconv \"sed 's/:[0-9]*$//'\"" }, "dependencies": { - "@formatjs/intl-localematcher": "~0.6.2", - "@formatjs/intl-segmenter": "~11.7.12", + "@formatjs/intl-localematcher": "~0.7.4", + "@formatjs/intl-segmenter": "~12.0.7", "@formkit/auto-animate": "~0.9.0", "@github/text-expander-element": "~2.9.2", "@iconify-icons/mingcute": "~1.2.9", "@justinribeiro/lite-youtube": "~1.9.0", - "@lingui/detect-locale": "~5.6.0", - "@lingui/macro": "~5.6.0", - "@lingui/react": "~5.6.0", - "@szhsin/react-menu": "~4.5.0", - "chroma-js": "~3.1.2", + "@lingui/detect-locale": "~5.7.0", + "@lingui/macro": "~5.7.0", + "@lingui/react": "~5.7.0", + "@szhsin/react-menu": "~4.5.1", + "chroma-js": "~3.2.0", "compare-versions": "~6.1.1", - "exifreader": "~4.32.0", + "exifreader": "~4.34.0", "fast-blurhash": "~1.1.4", - "fast-equals": "~5.3.3", + "fast-equals": "~6.0.0", + "flexsearch": "~0.8.212", "fuse.js": "~7.1.0", "gifuct-js": "~2.1.2", "html-prettify": "~1.0.7", @@ -44,19 +46,19 @@ "js-cookie": "~3.0.5", "just-debounce-it": "~3.2.0", "lz-string": "~1.5.0", - "masto": "~7.5.0", - "moize": "~6.1.6", - "p-queue": "~9.0.1", - "p-retry": "~7.1.0", + "masto": "~7.10.0", + "micro-memoize": "~5.1.1", + "p-queue": "~9.1.0", + "p-retry": "~7.1.1", "preact": "10.27.2", "punycode": "~2.3.1", - "qr": "~0.5.2", + "qr": "~0.5.3", "react-hotkeys-hook": "~5.2.1", "react-intersection-observer": "~10.0.0", "react-quick-pinch-zoom": "~5.1.1", "react-router-dom": "6.6.2", "swiped-events": "~1.2.0", - "temml": "~0.12.1", + "temml": "~0.13.1", "tinyld": "~1.3.4", "toastify-js": "~1.12.0", "uid": "~2.0.2", @@ -66,23 +68,23 @@ "valtio": "2.1.8" }, "devDependencies": { - "@biomejs/biome": "2.3.7", - "@lingui/babel-plugin-lingui-macro": "~5.6.0", - "@lingui/cli": "~5.6.0", - "@lingui/vite-plugin": "~5.6.0", - "@playwright/test": "~1.56.1", + "@biomejs/biome": "2.3.11", + "@lingui/babel-plugin-lingui-macro": "~5.7.0", + "@lingui/cli": "~5.7.0", + "@lingui/vite-plugin": "~5.7.0", + "@playwright/test": "~1.57.0", "@preact/preset-vite": "~2.10.2", - "@types/node": "~24.10.1", + "@types/node": "~25.0.3", "postcss": "~8.5.6", "postcss-dark-theme-class": "~2.0.0", - "postcss-preset-env": "~10.4.0", + "postcss-preset-env": "~10.6.0", "prop-types": "^15.8.1", - "sonda": "~0.10.0", + "sonda": "~0.10.1", "twitter-text": "~3.1.0", - "vite": "~7.2.4", + "vite": "~7.3.0", "vite-plugin-generate-file": "~0.3.1", "vite-plugin-html-config": "~2.0.2", - "vite-plugin-pwa": "~1.1.0", + "vite-plugin-pwa": "~1.2.0", "vite-plugin-remove-console": "~2.2.0", "vite-plugin-run": "~0.6.1", "workbox-cacheable-response": "~7.4.0", @@ -93,7 +95,8 @@ "workbox-strategies": "~7.4.0" }, "//notes": [ - "react-quick-pinch-zoom requires prop-types" + "react-quick-pinch-zoom requires prop-types", + "playwright uses @types/node" ], "postcss": { "plugins": { diff --git a/scripts/bundle-sizes-to-md.js b/scripts/bundle-sizes-to-md.js new file mode 100644 index 0000000000..3ba514c648 --- /dev/null +++ b/scripts/bundle-sizes-to-md.js @@ -0,0 +1,52 @@ +#!/usr/bin/env node + +// Converts vite build output to markdown table +// Input: vite build output lines starting with "dist/" +// Output: markdown table with File, Size, Gzip, Map columns + +import { createInterface } from 'readline'; + +const rl = createInterface({ + input: process.stdin, + terminal: false, +}); + +const rows = []; + +rl.on('line', (line) => { + if (!line.startsWith('dist/')) return; + + // Parse line like: dist/assets/main-xxx.js 357.39 kB │ gzip: 111.67 kB │ map: 1,503.67 kB + const parts = line.split('│').map((p) => p.trim()); + + // First part: "dist/assets/file.js 357.39 kB" + const firstPart = parts[0]; + const match = firstPart.match(/^(\S+)\s+(.+)$/); + if (!match) return; + + const file = match[1]; + const size = match[2].trim(); + + // Optional gzip and map + let gzip = ''; + let map = ''; + + for (let i = 1; i < parts.length; i++) { + if (parts[i].startsWith('gzip:')) { + gzip = parts[i].replace('gzip:', '').trim(); + } else if (parts[i].startsWith('map:')) { + map = parts[i].replace('map:', '').trim(); + } + } + + rows.push({ file, size, gzip, map }); +}); + +rl.on('close', () => { + console.log('## 📦 Bundle Size Report\n'); + console.log('| File | Size | Gzip | Map |'); + console.log('|------|------|------|-----|'); + for (const row of rows) { + console.log(`| ${row.file} | ${row.size} | ${row.gzip} | ${row.map} |`); + } +}); diff --git a/src/app.css b/src/app.css index 0781ed832c..3e4673de83 100644 --- a/src/app.css +++ b/src/app.css @@ -5,7 +5,7 @@ html, body { margin: 0; padding: 0; - background-color: var(--bg-color); + background-color: var(--meta-theme-color, var(--bg-color)); color: var(--text-color); overflow-x: hidden; } @@ -281,13 +281,11 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { --grid-gap: 16px; grid-template-columns: 1fr 1fr 1fr; - @media (min-width: 40em) { - width: 95vw; - max-width: calc(320px * 3.3); - transform: translateX(calc(-50% + var(--main-width) / 2)); - &:dir(rtl) { - transform: translateX(calc(50% - var(--main-width) / 2)); - } + width: 95vw; + max-width: calc(320px * 3.3); + transform: translateX(calc(-50% + var(--main-width) / 2)); + &:dir(rtl) { + transform: translateX(calc(50% - var(--main-width) / 2)); } } @@ -1118,7 +1116,8 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { ellipse 50% 32px at bottom center, var(--carousel-faded-color), transparent - ), linear-gradient(to top, var(--bg-color) 8px, transparent 64px); + ), + linear-gradient(to top, var(--bg-color) 8px, transparent 64px); background-repeat: no-repeat; background-position: bottom center; } @@ -1287,8 +1286,12 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { width: 100%; z-index: 1000; display: flex; - background-color: var(--backdrop-color); + background-color: var(--meta-theme-color, var(--backdrop-color)); animation: appear 0.1s ease-out; + + @media (min-width: 40em) { + background-color: var(--backdrop-color); + } } .deck-backdrop > a { flex-grow: 1; @@ -3070,7 +3073,7 @@ ul.link-list li a .icon { @media (min-width: 40em) { html, body { - background-color: var(--bg-faded-color); + background-color: var(--meta-theme-color, var(--bg-faded-color)); } .deck-container { background-color: var(--bg-faded-color); diff --git a/src/app.jsx b/src/app.jsx index f83213f6b7..e550da7c54 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -78,6 +78,9 @@ const Sandbox = ? lazy(() => import('./pages/sandbox')) : () => null; +// Lazy load YearInPosts component +const YearInPosts = lazy(() => import('./pages/year-in-posts')); + // QR Scan Test component for development function QrScanTest() { useEffect(() => { @@ -387,7 +390,7 @@ if (import.meta.env.DEV) { const isPWA = window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true; -const PATH_RESTORE_TIME_LIMIT = 2 * 60 * 60 * 1000; // 2 hours, should be good enough +const PATH_RESTORE_TIME_LIMIT = 1 * 60 * 60 * 1000; // 1 hour, should be good enough function App() { const [isLoggedIn, setIsLoggedIn] = useState(false); @@ -688,6 +691,25 @@ function SecondaryRoutes({ isLoggedIn }) { } /> } /> } /> + + {/* Prevent flash of no background as this is lazy-loaded */} + + + } + > + + + } + /> } /> )} diff --git a/src/assets/features/year-in-posts.png b/src/assets/features/year-in-posts.png new file mode 100644 index 0000000000..93c8fe96c5 Binary files /dev/null and b/src/assets/features/year-in-posts.png differ diff --git a/src/components/ICONS.jsx b/src/components/ICONS.jsx index c07aa352c9..00d339d9d1 100644 --- a/src/components/ICONS.jsx +++ b/src/components/ICONS.jsx @@ -194,4 +194,6 @@ export const ICONS = { 'cursor-hand': () => import('@iconify-icons/mingcute/hand-finger-2-line'), qrcode: () => import('@iconify-icons/mingcute/qrcode-2-line'), scan: () => import('@iconify-icons/mingcute/scan-line'), + note: () => import('@iconify-icons/mingcute/document-3-line'), + grid: () => import('@iconify-icons/mingcute/grid-line'), }; diff --git a/src/components/account-info.css b/src/components/account-info.css index 229a218406..3247e619bc 100644 --- a/src/components/account-info.css +++ b/src/components/account-info.css @@ -376,19 +376,18 @@ font-size: smaller; border-radius: 0; align-self: center !important; - /* clip a dog ear on top right */ - clip-path: polygon(0 0, calc(100% - 4px) 0, 100% 4px, 100% 100%, 0 100%); - &:dir(rtl) { - /* top left */ - clip-path: polygon(4px 0, 100% 0, 100% 100%, 0 100%, 0 4px); - } + /* clip a dog ear on bottom right */ + clip-path: polygon( + 0 0, + 100% 0, + 100% calc(100% - 4px), + calc(100% - 4px) 100%, + 0 100% + ); /* 4x4px square on top right */ background-size: 4px 4px; background-repeat: no-repeat; - background-position: top right; - &:dir(rtl) { - background-position: top left; - } + background-position: bottom right; background-image: linear-gradient( to bottom, var(--private-note-border-color), diff --git a/src/components/account-info.jsx b/src/components/account-info.jsx index 5a0ddaa6e8..5e415e1ed0 100644 --- a/src/components/account-info.jsx +++ b/src/components/account-info.jsx @@ -50,7 +50,7 @@ function fetchFamiliarFollowers(currentID, masto) { }); } const memFetchFamiliarFollowers = pmem(fetchFamiliarFollowers, { - maxAge: ACCOUNT_INFO_MAX_AGE, + expires: ACCOUNT_INFO_MAX_AGE, }); async function fetchPostingStats(accountID, masto) { @@ -107,7 +107,7 @@ async function fetchPostingStats(accountID, masto) { return stats; } const memFetchPostingStats = pmem(fetchPostingStats, { - maxAge: ACCOUNT_INFO_MAX_AGE, + expires: ACCOUNT_INFO_MAX_AGE, }); const isValidUrl = (string) => { diff --git a/src/components/avatar.css b/src/components/avatar.css index 996180a4bb..e9953f6fd7 100644 --- a/src/components/avatar.css +++ b/src/components/avatar.css @@ -8,7 +8,6 @@ box-shadow: 0 0 0 1px var(--bg-blur-color); flex-shrink: 0; vertical-align: middle; - dynamic-range-limit: standard; /* Disable HDR */ &.has-alpha { border-radius: 0; diff --git a/src/components/button-install.js b/src/components/button-install.js new file mode 100644 index 0000000000..6b2cd901ef --- /dev/null +++ b/src/components/button-install.js @@ -0,0 +1,21 @@ +// https://adactio.com/journal/22278 +// https://gist.github.com/adactio/a445544723363d37b9c31a74a03ef928 + +class ButtonInstall extends HTMLElement { + connectedCallback() { + this.button = this.querySelector('button'); + if (window.matchMedia('(display-mode: standalone)').matches) { + this.button.remove(); + return; + } + if (!navigator.install) { + this.button.remove(); + return; + } + this.button.addEventListener('click', async (ev) => { + await navigator.install(); + }); + } +} + +customElements.define('button-install', ButtonInstall); diff --git a/src/components/columns.jsx b/src/components/columns.jsx index 238d911f27..f10f6c2aff 100644 --- a/src/components/columns.jsx +++ b/src/components/columns.jsx @@ -19,7 +19,7 @@ import useTitle from '../utils/useTitle'; const scrollIntoViewOptions = { block: 'nearest', inline: 'nearest', - behavior: 'smooth', + behavior: 'instant', }; function Columns() { diff --git a/src/components/compose-button.jsx b/src/components/compose-button.jsx index 439eaa8dee..c591841877 100644 --- a/src/components/compose-button.jsx +++ b/src/components/compose-button.jsx @@ -37,7 +37,7 @@ const fetchLatestPostsMemoized = pmem( const { value } = await statusesIterator.next(); return value || []; }, - { maxAge: 60000 }, + { expires: 60000 }, ); // 1 minute cache export default function ComposeButton() { diff --git a/src/components/compose-suspense.jsx b/src/components/compose-suspense.jsx index 63864bba6d..db9924a8ce 100644 --- a/src/components/compose-suspense.jsx +++ b/src/components/compose-suspense.jsx @@ -1,4 +1,4 @@ -import { shouldPolyfill } from '@formatjs/intl-segmenter/should-polyfill'; +import { shouldPolyfill } from '@formatjs/intl-segmenter/should-polyfill.js'; import { useEffect, useState } from 'preact/hooks'; import Loader from './loader'; @@ -7,7 +7,7 @@ const supportsIntlSegmenter = !shouldPolyfill(); function importIntlSegmenter() { if (!supportsIntlSegmenter) { - return import('@formatjs/intl-segmenter/polyfill-force').catch(() => {}); + return import('@formatjs/intl-segmenter/polyfill-force.js').catch(() => {}); } } diff --git a/src/components/custom-emojis-modal.jsx b/src/components/custom-emojis-modal.jsx index f004384a9e..a0ae0a1b3e 100644 --- a/src/components/custom-emojis-modal.jsx +++ b/src/components/custom-emojis-modal.jsx @@ -257,6 +257,8 @@ function CustomEmojisModal({ } }, []); + const hasCustomEmojis = !!customEmojis?.length; + return (
• {instance} )}
-
{ - e.preventDefault(); - const emoji = matches[0]; - if (emoji) { - onSelectEmoji(`:${emoji.shortcode}:`); - } - }} - > - -
+ {hasCustomEmojis && ( +
{ + e.preventDefault(); + const emoji = matches[0]; + if (emoji) { + onSelectEmoji(`:${emoji.shortcode}:`); + } + }} + > + +
+ )}
- {matches !== null ? ( -
    - {matches.map((emoji) => ( -
  • - { - onSelectEmoji(`:${emoji.shortcode}:`); - }} - showCode - /> -
  • - ))} -
- ) : ( -
- {uiState === 'error' && ( -
-

- Error loading custom emojis -

+ {hasCustomEmojis ? ( + <> + {matches !== null ? ( +
    + {matches.map((emoji) => ( +
  • + { + onSelectEmoji(`:${emoji.shortcode}:`); + }} + showCode + /> +
  • + ))} +
+ ) : ( +
+ {uiState === 'error' && ( +
+

+ Error loading custom emojis +

+
+ )} + {uiState === 'default' && + Object.entries(customEmojisCatList).map( + ([category, emojis]) => + !!emojis?.length && ( +
+
+ {{ + '--recent--': t`Recently used`, + '--others--': t`Others`, + }[category] || category} +
+ +
+ ), + )}
)} - {uiState === 'default' && - Object.entries(customEmojisCatList).map( - ([category, emojis]) => - !!emojis?.length && ( -
-
- {{ - '--recent--': t`Recently used`, - '--others--': t`Others`, - }[category] || category} -
- -
- ), - )} +
+ + +
+ + ) : ( +
+

+ Custom emojis are not available on this server. +

)} -
- - -
); diff --git a/src/components/intl-segmenter-suspense.jsx b/src/components/intl-segmenter-suspense.jsx index e015401ef2..8a2b7a5e32 100644 --- a/src/components/intl-segmenter-suspense.jsx +++ b/src/components/intl-segmenter-suspense.jsx @@ -1,4 +1,4 @@ -import { shouldPolyfill } from '@formatjs/intl-segmenter/should-polyfill'; +import { shouldPolyfill } from '@formatjs/intl-segmenter/should-polyfill.js'; import { Suspense } from 'preact/compat'; import { useEffect, useState } from 'preact/hooks'; @@ -10,7 +10,7 @@ const supportsIntlSegmenter = !shouldPolyfill(); setTimeout(() => { queueMicrotask(() => { if (!supportsIntlSegmenter) { - import('@formatjs/intl-segmenter/polyfill-force').catch(() => {}); + import('@formatjs/intl-segmenter/polyfill-force.js').catch(() => {}); } }); }, 1000); @@ -23,7 +23,7 @@ export default function IntlSegmenterSuspense({ children }) { const [polyfillLoaded, setPolyfillLoaded] = useState(false); useEffect(() => { (async () => { - await import('@formatjs/intl-segmenter/polyfill-force'); + await import('@formatjs/intl-segmenter/polyfill-force.js'); setPolyfillLoaded(true); })(); }, []); diff --git a/src/components/media-modal.jsx b/src/components/media-modal.jsx index d77a8cbe58..5b5d1097ee 100644 --- a/src/components/media-modal.jsx +++ b/src/components/media-modal.jsx @@ -203,6 +203,10 @@ function MediaModal({ metaColor = $meta.content; $meta.content = mediaColor; } + document.documentElement.style.setProperty( + '--meta-theme-color', + mediaColor, + ); } else { const colorScheme = window.matchMedia('(prefers-color-scheme: dark)') .matches @@ -217,6 +221,10 @@ function MediaModal({ metaColor = $meta.content; $meta.content = mediaColor; } + document.documentElement.style.setProperty( + '--meta-theme-color', + mediaColor, + ); } } return () => { @@ -224,6 +232,7 @@ function MediaModal({ if ($meta && metaColor) { $meta.content = metaColor; } + document.documentElement.style.removeProperty('--meta-theme-color'); }; }, [currentIndex, mediaAccentColors]); diff --git a/src/components/media.jsx b/src/components/media.jsx index 2050e37a14..5858efb4c9 100644 --- a/src/components/media.jsx +++ b/src/components/media.jsx @@ -735,7 +735,26 @@ function Media({ style={!showOriginal && mediaStyles} > {showOriginal ? ( -