Merge pull request #459 from cheeaun/main

Update from main
This commit is contained in:
Chee Aun 2024-03-17 21:12:58 +08:00 committed by GitHub
commit c7c764a4f0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 419 additions and 242 deletions

View file

@ -10,6 +10,7 @@ assignees: ''
**Describe the bug** **Describe the bug**
A clear and concise description of what the bug is. A clear and concise description of what the bug is.
- Which site: [e.g. dev.phanpy.social OR phanpy.social] - Which site: [e.g. dev.phanpy.social OR phanpy.social]
- Which site version: [On Phanpy, go to Settings -> About]
- Which instance: [e.g. mastodon.social] - Which instance: [e.g. mastodon.social]
**To Reproduce** **To Reproduce**

477
package-lock.json generated
View file

@ -44,16 +44,16 @@
"valtio": "1.13.2" "valtio": "1.13.2"
}, },
"devDependencies": { "devDependencies": {
"@preact/preset-vite": "~2.8.1", "@preact/preset-vite": "~2.8.2",
"@trivago/prettier-plugin-sort-imports": "~4.3.0", "@trivago/prettier-plugin-sort-imports": "~4.3.0",
"postcss": "~8.4.35", "postcss": "~8.4.35",
"postcss-dark-theme-class": "~1.2.1", "postcss-dark-theme-class": "~1.2.1",
"postcss-preset-env": "~9.4.0", "postcss-preset-env": "~9.5.1",
"twitter-text": "~3.1.0", "twitter-text": "~3.1.0",
"vite": "~5.1.5", "vite": "~5.1.6",
"vite-plugin-generate-file": "~0.1.1", "vite-plugin-generate-file": "~0.1.1",
"vite-plugin-html-config": "~1.0.11", "vite-plugin-html-config": "~1.0.11",
"vite-plugin-pwa": "~0.19.2", "vite-plugin-pwa": "~0.19.4",
"vite-plugin-remove-console": "~2.2.0", "vite-plugin-remove-console": "~2.2.0",
"workbox-cacheable-response": "~7.0.0", "workbox-cacheable-response": "~7.0.0",
"workbox-expiration": "~7.0.0", "workbox-expiration": "~7.0.0",
@ -1950,9 +1950,9 @@
} }
}, },
"node_modules/@csstools/cascade-layer-name-parser": { "node_modules/@csstools/cascade-layer-name-parser": {
"version": "1.0.8", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.8.tgz", "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz",
"integrity": "sha512-xHxXavWvXB5nAA9IvZtjEzkONM3hPXpxqYK4cEw60LcqPiFjq7ZlEFxOyYFPrG4UdANKtnucNtRVDy7frjq6AA==", "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1968,8 +1968,8 @@
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
}, },
"peerDependencies": { "peerDependencies": {
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
} }
}, },
"node_modules/@csstools/color-helpers": { "node_modules/@csstools/color-helpers": {
@ -1992,9 +1992,9 @@
} }
}, },
"node_modules/@csstools/css-calc": { "node_modules/@csstools/css-calc": {
"version": "1.1.7", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.7.tgz", "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz",
"integrity": "sha512-+7bUzB5I4cI97tKmBJA8ilTl/YRo6VAOdlrnd/4x2NyK60nvYurGKa5TZpE1zcgIrTC97iJRE0/V65feyFytuw==", "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2010,14 +2010,14 @@
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
}, },
"peerDependencies": { "peerDependencies": {
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
} }
}, },
"node_modules/@csstools/css-color-parser": { "node_modules/@csstools/css-color-parser": {
"version": "1.5.2", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.5.2.tgz", "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.6.0.tgz",
"integrity": "sha512-5GEkuuUxD5dael3xoWjyf7gAPAi4pwm8X8JW/nUMhxntGY4Wo4Lp7vKlex4V5ZgTfAoov14rZFsZyOantdTatg==", "integrity": "sha512-Wc1X6jZvGhT8Bii4jUF6tC3Je3wgDFg7D/SvGKndrnakDsCPk4TMxtt4AQHyWdMBrBJ1hLjXbppaXgP1DUIpBw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2031,20 +2031,20 @@
], ],
"dependencies": { "dependencies": {
"@csstools/color-helpers": "^4.0.0", "@csstools/color-helpers": "^4.0.0",
"@csstools/css-calc": "^1.1.7" "@csstools/css-calc": "^1.2.0"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
}, },
"peerDependencies": { "peerDependencies": {
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
} }
}, },
"node_modules/@csstools/css-parser-algorithms": { "node_modules/@csstools/css-parser-algorithms": {
"version": "2.6.0", "version": "2.6.1",
"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
"integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2060,13 +2060,13 @@
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
}, },
"peerDependencies": { "peerDependencies": {
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
} }
}, },
"node_modules/@csstools/css-tokenizer": { "node_modules/@csstools/css-tokenizer": {
"version": "2.2.3", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
"integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2083,9 +2083,9 @@
} }
}, },
"node_modules/@csstools/media-query-list-parser": { "node_modules/@csstools/media-query-list-parser": {
"version": "2.1.8", "version": "2.1.9",
"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz",
"integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2101,8 +2101,8 @@
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
}, },
"peerDependencies": { "peerDependencies": {
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
} }
}, },
"node_modules/@csstools/postcss-cascade-layers": { "node_modules/@csstools/postcss-cascade-layers": {
@ -2132,9 +2132,9 @@
} }
}, },
"node_modules/@csstools/postcss-color-function": { "node_modules/@csstools/postcss-color-function": {
"version": "3.0.10", "version": "3.0.11",
"resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.10.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.11.tgz",
"integrity": "sha512-jxiXmSl4ZYX8KewFjL5ef6of9uW73VkaHeDb2tqb5q4ZDPYxjusNX1KJ8UXY8+7ydqS5QBo42tVMrSMGy+rDmw==", "integrity": "sha512-z53Pp2tsemiIq72PKu4vjD0CtcQlXdvA22elEHuDOvCIlqphNjd5ZD5HBns/ZjaJF7BjPls2zaAT58hfLyS0MQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2147,10 +2147,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2161,9 +2161,9 @@
} }
}, },
"node_modules/@csstools/postcss-color-mix-function": { "node_modules/@csstools/postcss-color-mix-function": {
"version": "2.0.10", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.10.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.11.tgz",
"integrity": "sha512-zeD856+FDCUjB077pPS+Z9OnTQnqpiJrao3TW+sasCb/gJ3vZCX7sRSRFsRUo0/MntTtJu9hkKv9eMkFmfjydA==", "integrity": "sha512-Jz1R5ZXxpT5FIY95F3VSJtwQYWCYOtCBUBS/ShDxS+fUtd3sAdAtD3a9tAdz3FG3BvkmqtlURyoIhJRu/wfo/A==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2176,10 +2176,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2190,9 +2190,9 @@
} }
}, },
"node_modules/@csstools/postcss-exponential-functions": { "node_modules/@csstools/postcss-exponential-functions": {
"version": "1.0.4", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.4.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz",
"integrity": "sha512-frMf0CFVnZoGEKAHlxLy3s4g/tpjyFn5+A+h895UJNm9Uc+ewGT7+EeK7Kh9IHH4pD4FkaGW1vOQtER00PLurQ==", "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2205,9 +2205,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-calc": "^1.1.7", "@csstools/css-calc": "^1.2.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -2243,9 +2243,9 @@
} }
}, },
"node_modules/@csstools/postcss-gamut-mapping": { "node_modules/@csstools/postcss-gamut-mapping": {
"version": "1.0.3", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.3.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.4.tgz",
"integrity": "sha512-P0+ude1KyCy9LXOe2pHJmpcXK4q/OQbr2Sn2wQSssMw0rALGmny2MfHiCqEu8n6mf2cN6lWDZdzY8enBk8WHXQ==", "integrity": "sha512-jjHP44awnSijgddNJpZEFfmb8csFx+BiYYpX+ydyScWwLzSpve5eLXneu4uIhZmKom+WXLXWc4y7CvOfVLQ2VQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2258,9 +2258,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -2270,9 +2270,9 @@
} }
}, },
"node_modules/@csstools/postcss-gradients-interpolation-method": { "node_modules/@csstools/postcss-gradients-interpolation-method": {
"version": "4.0.10", "version": "4.0.12",
"resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.10.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.12.tgz",
"integrity": "sha512-PwKOxVuX8lo52bPtPeKjaIp6oH2EzhcBxCndRcvGZKsqZYQ35k9A5G4yihZ+wp7PoxPqDNiXuhQsvQG2lqMpOA==", "integrity": "sha512-F1mOb6MuIMAV7qq9dYLhi2tlmmQn+osCVl+VdDNI+4AO6y3l6dTWmc7XVQMsVxIZCKEZMie9KLtE0PRp3i1UyQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2285,10 +2285,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2299,9 +2299,9 @@
} }
}, },
"node_modules/@csstools/postcss-hwb-function": { "node_modules/@csstools/postcss-hwb-function": {
"version": "3.0.9", "version": "3.0.10",
"resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.9.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.10.tgz",
"integrity": "sha512-S3/Z+mGHWIKAex7DLsHFDiku5lBEK34avT2My6sGPNCXB38TZjrKI0rd7JdN9oulem5sn+CU7oONyIftui24oQ==", "integrity": "sha512-wYyhFLQ1zkirAhfRxh5BK9WRIJGBb7jtE9H9a2wPOf20kGbS/PmqxHtGmE+o1vSz/MaBIbW+6lqyS16yEzjQJA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2314,10 +2314,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2328,9 +2328,9 @@
} }
}, },
"node_modules/@csstools/postcss-ic-unit": { "node_modules/@csstools/postcss-ic-unit": {
"version": "3.0.4", "version": "3.0.5",
"resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.4.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.5.tgz",
"integrity": "sha512-OB6ojl33/TQHhjVx1NI+n3EnYbdUM6Q/mSUv3WFATdcz7IrH/CmBaZt7P1R6j1Xdp58thIa6jm4Je7saGs+2AA==", "integrity": "sha512-9CriM/zvKXa/lDARlxs/MgeyKE6ZmmX4V77VLD7VUxKLVSt0Go3NCy/gRMbwGzxbrk3iaHFXnFbc2lNw+/7jcg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2343,7 +2343,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0", "@csstools/utilities": "^1.0.0",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
@ -2403,9 +2403,9 @@
} }
}, },
"node_modules/@csstools/postcss-light-dark-function": { "node_modules/@csstools/postcss-light-dark-function": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.1.tgz",
"integrity": "sha512-KHo633V16DGo6tmpr1ARAwO73CPBNmDI3PfSQYe7ZBMiv60WEizbcEroK75fHjxKYJ4tj9uCCzp5sYG4cEUqqw==", "integrity": "sha512-CJOcp+m7Njbu91HtYMMoYuZznsvNSpJtLiR/7BO8/bHTXYPiuAZfxunh7wXLkMbHd5dRBgAVAQZ+H4iFqrvWZw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2418,9 +2418,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2522,9 +2522,9 @@
} }
}, },
"node_modules/@csstools/postcss-logical-viewport-units": { "node_modules/@csstools/postcss-logical-viewport-units": {
"version": "2.0.6", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.6.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz",
"integrity": "sha512-6hV0ngZh8J7HqNY3kyt+z5ABN/XE18qvrU7ne4YSkKfltrWDnQgGiW/Q+h7bdQz8/W5juAefcdCCAJUIBE7erg==", "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2537,7 +2537,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2548,9 +2548,9 @@
} }
}, },
"node_modules/@csstools/postcss-media-minmax": { "node_modules/@csstools/postcss-media-minmax": {
"version": "1.1.3", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.3.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz",
"integrity": "sha512-W9AFRQSLvT+Dxtp20AewzGTUxzkJ21XSKzqRALwQdAv0uJGXkR76qgdhkoX0L/tcV4gXtgDfVtGYL/x2Nz/M5Q==", "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2563,10 +2563,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-calc": "^1.1.7", "@csstools/css-calc": "^1.2.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/media-query-list-parser": "^2.1.8" "@csstools/media-query-list-parser": "^2.1.9"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -2576,9 +2576,9 @@
} }
}, },
"node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": {
"version": "2.0.6", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.6.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz",
"integrity": "sha512-awc2qenSDvx6r+w6G9xxENp+LsbvHC8mMMV23KYmk4pR3YL8JxeKPDSiDhmqd93FQ9nNNDc/CaCQEcvP+GV4rw==", "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2591,9 +2591,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/media-query-list-parser": "^2.1.8" "@csstools/media-query-list-parser": "^2.1.9"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -2654,9 +2654,9 @@
} }
}, },
"node_modules/@csstools/postcss-oklab-function": { "node_modules/@csstools/postcss-oklab-function": {
"version": "3.0.10", "version": "3.0.11",
"resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.10.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.11.tgz",
"integrity": "sha512-s9trs1c+gUMtaTtwrrIpdVQkUbRuwi6bQ9rBHaqwt4kd3kEnEYfP85uLY1inFx6Rt8OM2XVg3PSYbfnFSAO51A==", "integrity": "sha512-nIeOZqTFn/zJXSb70JwUcyUBb9658FED7saZlaZNEEhQ3GYxjRhdlV7hgflNi0FDdqNqaEeeI/B/BqnPG9+Q/Q==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2669,10 +2669,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2683,9 +2683,9 @@
} }
}, },
"node_modules/@csstools/postcss-progressive-custom-properties": { "node_modules/@csstools/postcss-progressive-custom-properties": {
"version": "3.1.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.1.0.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.1.1.tgz",
"integrity": "sha512-Mfb1T1BHa6pktLI+poMEHI7Q+VYvAsdwJZPFsSkIB2ZUsawCiPxXLw06BKSVPITxFlaY/FEUzfpyOTfX9YCE2w==", "integrity": "sha512-cx/bZgj+MK8SpRZNTu2zGeVFMCQfhsaeuDhukAhfA53yykvIXaTIwLi5shW9hfkvPrkqBeFoiRAzq/qogxeHTA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2708,9 +2708,9 @@
} }
}, },
"node_modules/@csstools/postcss-relative-color-syntax": { "node_modules/@csstools/postcss-relative-color-syntax": {
"version": "2.0.10", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.10.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.11.tgz",
"integrity": "sha512-IkTIk9Eq2VegSN4lgsljGY8boyfX3l3Pw58e+R9oyPe/Ye7r3NwuiQ3w0nkXoQ+RC+d240V6n7eZme2mEPqQvg==", "integrity": "sha512-YmYGwGLoqZp71wXqjyFuG+JApL+CoZqUZ+MJshlokdqqryKX/zj/NrSrwMTAwB4xSx2DgHJUQK3iWumUse8rXw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2723,10 +2723,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -2762,9 +2762,9 @@
} }
}, },
"node_modules/@csstools/postcss-stepped-value-functions": { "node_modules/@csstools/postcss-stepped-value-functions": {
"version": "3.0.5", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.5.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz",
"integrity": "sha512-B8K8RaTrYVZLxbNzVUvFO3SlCDJDaUTAO7KRth05fa7f01ufPvb6ztdBuxSoRwOtmNp8iROxPJHOemWo2kBBtA==", "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2777,9 +2777,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-calc": "^1.1.7", "@csstools/css-calc": "^1.2.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -2815,9 +2815,9 @@
} }
}, },
"node_modules/@csstools/postcss-trigonometric-functions": { "node_modules/@csstools/postcss-trigonometric-functions": {
"version": "3.0.5", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.5.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz",
"integrity": "sha512-RhBfQ0TsBudyPuoo8pXKdfQuUiQxMU/Sc5GyV57bWk93JbUHXq6b4CdPx+B/tHUeFKvocVJn/e2jbu96rh0d3Q==", "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2830,9 +2830,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-calc": "^1.1.7", "@csstools/css-calc": "^1.2.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3" "@csstools/css-tokenizer": "^2.2.4"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -2863,6 +2863,28 @@
"postcss": "^8.4" "postcss": "^8.4"
} }
}, },
"node_modules/@csstools/selector-resolve-nested": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz",
"integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/csstools"
},
{
"type": "opencollective",
"url": "https://opencollective.com/csstools"
}
],
"engines": {
"node": "^14 || ^16 || >=18"
},
"peerDependencies": {
"postcss-selector-parser": "^6.0.13"
}
},
"node_modules/@csstools/selector-specificity": { "node_modules/@csstools/selector-specificity": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz",
@ -3125,9 +3147,9 @@
} }
}, },
"node_modules/@preact/preset-vite": { "node_modules/@preact/preset-vite": {
"version": "2.8.1", "version": "2.8.2",
"resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.1.tgz", "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz",
"integrity": "sha512-a9KV4opdj17X2gOFuGup0aE+sXYABX/tJi/QDptOrleX4FlnoZgDWvz45tHOdVfrZX+3uvVsIYPHxRsTerkDNA==", "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx": "^7.22.15",
@ -3139,7 +3161,9 @@
"kolorist": "^1.8.0", "kolorist": "^1.8.0",
"magic-string": "0.30.5", "magic-string": "0.30.5",
"node-html-parser": "^6.1.10", "node-html-parser": "^6.1.10",
"resolve": "^1.22.8" "resolve": "^1.22.8",
"source-map": "^0.7.4",
"stack-trace": "^1.0.0-pre2"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "7.x", "@babel/core": "7.x",
@ -3164,6 +3188,15 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/@preact/preset-vite/node_modules/source-map": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
"integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/@prefresh/babel-plugin": { "node_modules/@prefresh/babel-plugin": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.0.tgz", "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.0.tgz",
@ -3706,9 +3739,9 @@
} }
}, },
"node_modules/autoprefixer": { "node_modules/autoprefixer": {
"version": "10.4.17", "version": "10.4.18",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz",
"integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -3725,8 +3758,8 @@
} }
], ],
"dependencies": { "dependencies": {
"browserslist": "^4.22.2", "browserslist": "^4.23.0",
"caniuse-lite": "^1.0.30001578", "caniuse-lite": "^1.0.30001591",
"fraction.js": "^4.3.7", "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2", "normalize-range": "^0.1.2",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
@ -3921,9 +3954,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001588", "version": "1.0.30001597",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz",
"integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -4186,9 +4219,9 @@
} }
}, },
"node_modules/cssdb": { "node_modules/cssdb": {
"version": "7.11.0", "version": "7.11.2",
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.0.tgz", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz",
"integrity": "sha512-YUVAJhjDcTZzVD5XE49l3PQtGE29vvhzaL1bM3BtkvSmIRJeYENdfn1dn5jauBI7BBF+IyyiBS+oSVx3Hz/Gaw==", "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6039,9 +6072,9 @@
} }
}, },
"node_modules/postcss-color-functional-notation": { "node_modules/postcss-color-functional-notation": {
"version": "6.0.5", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.5.tgz", "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.6.tgz",
"integrity": "sha512-aTFsIy89ftjyclwUHRwvz1IxucLzVrzmmcXmtbPWT9GdyYeaJEKeAwbaZzOZn7AQlXg4xfwgkYhKsofC4aLIwg==", "integrity": "sha512-2GENDVgEk1dt+OdVhPO+zO4Dzj31Xs9EuKgQLbY9RSkKS3jUqnbTAh33bUhKce5JM1ZmsXm0azCb7Bh8j6W6Nw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6054,10 +6087,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -6120,9 +6153,9 @@
} }
}, },
"node_modules/postcss-custom-media": { "node_modules/postcss-custom-media": {
"version": "10.0.3", "version": "10.0.4",
"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.3.tgz", "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz",
"integrity": "sha512-wfJ9nKpLn/Qy7LASKu0Rj9Iq2uMzlRt27P4FAE1889IKRMdYUgy8SqvdXfAOs7LJLQX9Fjm0mZ+TSFphD/mKwA==", "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6135,10 +6168,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/cascade-layer-name-parser": "^1.0.8", "@csstools/cascade-layer-name-parser": "^1.0.9",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/media-query-list-parser": "^2.1.8" "@csstools/media-query-list-parser": "^2.1.9"
}, },
"engines": { "engines": {
"node": "^14 || ^16 || >=18" "node": "^14 || ^16 || >=18"
@ -6148,9 +6181,9 @@
} }
}, },
"node_modules/postcss-custom-properties": { "node_modules/postcss-custom-properties": {
"version": "13.3.5", "version": "13.3.6",
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.5.tgz", "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.6.tgz",
"integrity": "sha512-xHg8DTCMfN2nrqs2CQTF+0m5jgnzKL5zrW5Y05KF6xBRO0uDPxiplBm/xcr1o49SLbyJXkMuaRJKhRzkrquKnQ==", "integrity": "sha512-vVVIwQbJiIz+PBLMIWA6XMi53Zg66/f474KolA7x0Das6EwkATc/9ZvM6zZx2gs7ZhcgVHjmWBbHkK9FlCgLeA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6163,9 +6196,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/cascade-layer-name-parser": "^1.0.8", "@csstools/cascade-layer-name-parser": "^1.0.9",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/utilities": "^1.0.0", "@csstools/utilities": "^1.0.0",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
@ -6177,9 +6210,9 @@
} }
}, },
"node_modules/postcss-custom-selectors": { "node_modules/postcss-custom-selectors": {
"version": "7.1.7", "version": "7.1.8",
"resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.7.tgz", "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz",
"integrity": "sha512-N19MpExaR+hYTXU59VO02xE42zLoAUYSVcupwkKlWWLteOb+sWCWHw5FhV7u7gVLTzaGULy7nZP3DNTHgOZAPA==", "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6192,9 +6225,9 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/cascade-layer-name-parser": "^1.0.8", "@csstools/cascade-layer-name-parser": "^1.0.9",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"postcss-selector-parser": "^6.0.13" "postcss-selector-parser": "^6.0.13"
}, },
"engines": { "engines": {
@ -6252,9 +6285,9 @@
} }
}, },
"node_modules/postcss-double-position-gradients": { "node_modules/postcss-double-position-gradients": {
"version": "5.0.4", "version": "5.0.5",
"resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.4.tgz", "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.5.tgz",
"integrity": "sha512-xOH2QhazCPeYR+ziYaDcGlpo7Bpw8PVoggOFfU/xPkmBRUQH8MR2eWoPY1CZM93CB0WKs2mxq3ORo83QGIooLw==", "integrity": "sha512-26Tx4BfoxMNO9C89Nk56bfGv4jAwdDVgrQOyHZOP/6/D+xuOBf306KzTjHC2oBzaIIVtX+famOWHv4raxMjJMQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6267,7 +6300,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0", "@csstools/utilities": "^1.0.0",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
@ -6387,9 +6420,9 @@
} }
}, },
"node_modules/postcss-lab-function": { "node_modules/postcss-lab-function": {
"version": "6.0.10", "version": "6.0.11",
"resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.10.tgz", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.11.tgz",
"integrity": "sha512-Csvw/CwwuwTojK2O3Ad0SvYKrfnAKy+uvT+1Fjk6igR+n8gHuJHIwdj1A2s46EZZojg3RkibdMBuv1vMvR6Sng==", "integrity": "sha512-toTAozTlBBhqSynSJ32O6ssukZFphS58AAQcVqMA8kG/E04+v+e7E5OKRqq68M/VJaWIeMdpyeBEO51buMrdvw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6402,10 +6435,10 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/css-color-parser": "^1.5.2", "@csstools/css-color-parser": "^1.6.0",
"@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.3", "@csstools/css-tokenizer": "^2.2.4",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/utilities": "^1.0.0" "@csstools/utilities": "^1.0.0"
}, },
"engines": { "engines": {
@ -6441,9 +6474,9 @@
} }
}, },
"node_modules/postcss-nesting": { "node_modules/postcss-nesting": {
"version": "12.0.3", "version": "12.1.0",
"resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.3.tgz", "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.0.tgz",
"integrity": "sha512-yrtMRPFNkfZMv9ikBvZ/Eh3RxhpMBKQ3KzD7LCY8+jYVlgju/Mdcxi4JY8bW2Y7ISXw8GTLuF/o+kFtp+yaVfQ==", "integrity": "sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6456,6 +6489,7 @@
} }
], ],
"dependencies": { "dependencies": {
"@csstools/selector-resolve-nested": "^1.1.0",
"@csstools/selector-specificity": "^3.0.2", "@csstools/selector-specificity": "^3.0.2",
"postcss-selector-parser": "^6.0.13" "postcss-selector-parser": "^6.0.13"
}, },
@ -6550,9 +6584,9 @@
} }
}, },
"node_modules/postcss-preset-env": { "node_modules/postcss-preset-env": {
"version": "9.4.0", "version": "9.5.1",
"resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.4.0.tgz", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.1.tgz",
"integrity": "sha512-5X2UA4Dn4xo7sJFCxlzW/dAGo71Oxh/K5DVls33hd2e3j06OKnW5FJQTw2hB0wTnGv0f6WcMaVBGFqcEfAgwlw==", "integrity": "sha512-m2biepZ2amqH/ygGRV+lQxnT9+AsYG2OScMwBRLa9YefDOXaCVKzsPtmnvdUG7QENdhAl9tE9nsHbYHVYsqJmQ==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -6566,58 +6600,58 @@
], ],
"dependencies": { "dependencies": {
"@csstools/postcss-cascade-layers": "^4.0.3", "@csstools/postcss-cascade-layers": "^4.0.3",
"@csstools/postcss-color-function": "^3.0.10", "@csstools/postcss-color-function": "^3.0.11",
"@csstools/postcss-color-mix-function": "^2.0.10", "@csstools/postcss-color-mix-function": "^2.0.11",
"@csstools/postcss-exponential-functions": "^1.0.4", "@csstools/postcss-exponential-functions": "^1.0.5",
"@csstools/postcss-font-format-keywords": "^3.0.2", "@csstools/postcss-font-format-keywords": "^3.0.2",
"@csstools/postcss-gamut-mapping": "^1.0.3", "@csstools/postcss-gamut-mapping": "^1.0.4",
"@csstools/postcss-gradients-interpolation-method": "^4.0.10", "@csstools/postcss-gradients-interpolation-method": "^4.0.12",
"@csstools/postcss-hwb-function": "^3.0.9", "@csstools/postcss-hwb-function": "^3.0.10",
"@csstools/postcss-ic-unit": "^3.0.4", "@csstools/postcss-ic-unit": "^3.0.5",
"@csstools/postcss-initial": "^1.0.1", "@csstools/postcss-initial": "^1.0.1",
"@csstools/postcss-is-pseudo-class": "^4.0.5", "@csstools/postcss-is-pseudo-class": "^4.0.5",
"@csstools/postcss-light-dark-function": "^1.0.0", "@csstools/postcss-light-dark-function": "^1.0.1",
"@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-float-and-clear": "^2.0.1",
"@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overflow": "^1.0.1",
"@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1",
"@csstools/postcss-logical-resize": "^2.0.1", "@csstools/postcss-logical-resize": "^2.0.1",
"@csstools/postcss-logical-viewport-units": "^2.0.6", "@csstools/postcss-logical-viewport-units": "^2.0.7",
"@csstools/postcss-media-minmax": "^1.1.3", "@csstools/postcss-media-minmax": "^1.1.4",
"@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.6", "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7",
"@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-nested-calc": "^3.0.2",
"@csstools/postcss-normalize-display-values": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2",
"@csstools/postcss-oklab-function": "^3.0.10", "@csstools/postcss-oklab-function": "^3.0.11",
"@csstools/postcss-progressive-custom-properties": "^3.1.0", "@csstools/postcss-progressive-custom-properties": "^3.1.1",
"@csstools/postcss-relative-color-syntax": "^2.0.10", "@csstools/postcss-relative-color-syntax": "^2.0.11",
"@csstools/postcss-scope-pseudo-class": "^3.0.1", "@csstools/postcss-scope-pseudo-class": "^3.0.1",
"@csstools/postcss-stepped-value-functions": "^3.0.5", "@csstools/postcss-stepped-value-functions": "^3.0.6",
"@csstools/postcss-text-decoration-shorthand": "^3.0.4", "@csstools/postcss-text-decoration-shorthand": "^3.0.4",
"@csstools/postcss-trigonometric-functions": "^3.0.5", "@csstools/postcss-trigonometric-functions": "^3.0.6",
"@csstools/postcss-unset-value": "^3.0.1", "@csstools/postcss-unset-value": "^3.0.1",
"autoprefixer": "^10.4.17", "autoprefixer": "^10.4.18",
"browserslist": "^4.22.3", "browserslist": "^4.22.3",
"css-blank-pseudo": "^6.0.1", "css-blank-pseudo": "^6.0.1",
"css-has-pseudo": "^6.0.2", "css-has-pseudo": "^6.0.2",
"css-prefers-color-scheme": "^9.0.1", "css-prefers-color-scheme": "^9.0.1",
"cssdb": "^7.11.0", "cssdb": "^7.11.1",
"postcss-attribute-case-insensitive": "^6.0.3", "postcss-attribute-case-insensitive": "^6.0.3",
"postcss-clamp": "^4.1.0", "postcss-clamp": "^4.1.0",
"postcss-color-functional-notation": "^6.0.5", "postcss-color-functional-notation": "^6.0.6",
"postcss-color-hex-alpha": "^9.0.4", "postcss-color-hex-alpha": "^9.0.4",
"postcss-color-rebeccapurple": "^9.0.3", "postcss-color-rebeccapurple": "^9.0.3",
"postcss-custom-media": "^10.0.3", "postcss-custom-media": "^10.0.4",
"postcss-custom-properties": "^13.3.5", "postcss-custom-properties": "^13.3.6",
"postcss-custom-selectors": "^7.1.7", "postcss-custom-selectors": "^7.1.8",
"postcss-dir-pseudo-class": "^8.0.1", "postcss-dir-pseudo-class": "^8.0.1",
"postcss-double-position-gradients": "^5.0.4", "postcss-double-position-gradients": "^5.0.5",
"postcss-focus-visible": "^9.0.1", "postcss-focus-visible": "^9.0.1",
"postcss-focus-within": "^8.0.1", "postcss-focus-within": "^8.0.1",
"postcss-font-variant": "^5.0.0", "postcss-font-variant": "^5.0.0",
"postcss-gap-properties": "^5.0.1", "postcss-gap-properties": "^5.0.1",
"postcss-image-set-function": "^6.0.3", "postcss-image-set-function": "^6.0.3",
"postcss-lab-function": "^6.0.10", "postcss-lab-function": "^6.0.11",
"postcss-logical": "^7.0.1", "postcss-logical": "^7.0.1",
"postcss-nesting": "^12.0.3", "postcss-nesting": "^12.1.0",
"postcss-opacity-percentage": "^2.0.0", "postcss-opacity-percentage": "^2.0.0",
"postcss-overflow-shorthand": "^5.0.1", "postcss-overflow-shorthand": "^5.0.1",
"postcss-page-break": "^3.0.4", "postcss-page-break": "^3.0.4",
@ -7266,6 +7300,15 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/stack-trace": {
"version": "1.0.0-pre2",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz",
"integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==",
"dev": true,
"engines": {
"node": ">=16"
}
},
"node_modules/string-length": { "node_modules/string-length": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz", "resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz",
@ -7815,9 +7858,9 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.1.5", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz",
"integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.19.3", "esbuild": "^0.19.3",
@ -7896,9 +7939,9 @@
} }
}, },
"node_modules/vite-plugin-pwa": { "node_modules/vite-plugin-pwa": {
"version": "0.19.2", "version": "0.19.4",
"resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.19.2.tgz", "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.19.4.tgz",
"integrity": "sha512-LSQJFPxCAQYbRuSyc9EbRLRqLpaBA9onIZuQFomfUYjWSgHuQLonahetDlPSC9zsxmkSEhQH8dXZN8yL978h3w==", "integrity": "sha512-KiEFXaYEj2Hg1it+yECy75oqNmlXimI7BaLx7Sxl7Qsd9EIVxaf3GX1mZdLpHe83pDgHBNwm9USGQxSCNp5m7A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"debug": "^4.3.4", "debug": "^4.3.4",

View file

@ -46,16 +46,16 @@
"valtio": "1.13.2" "valtio": "1.13.2"
}, },
"devDependencies": { "devDependencies": {
"@preact/preset-vite": "~2.8.1", "@preact/preset-vite": "~2.8.2",
"@trivago/prettier-plugin-sort-imports": "~4.3.0", "@trivago/prettier-plugin-sort-imports": "~4.3.0",
"postcss": "~8.4.35", "postcss": "~8.4.35",
"postcss-dark-theme-class": "~1.2.1", "postcss-dark-theme-class": "~1.2.1",
"postcss-preset-env": "~9.4.0", "postcss-preset-env": "~9.5.1",
"twitter-text": "~3.1.0", "twitter-text": "~3.1.0",
"vite": "~5.1.5", "vite": "~5.1.6",
"vite-plugin-generate-file": "~0.1.1", "vite-plugin-generate-file": "~0.1.1",
"vite-plugin-html-config": "~1.0.11", "vite-plugin-html-config": "~1.0.11",
"vite-plugin-pwa": "~0.19.2", "vite-plugin-pwa": "~0.19.4",
"vite-plugin-remove-console": "~2.2.0", "vite-plugin-remove-console": "~2.2.0",
"workbox-cacheable-response": "~7.0.0", "workbox-cacheable-response": "~7.0.0",
"workbox-expiration": "~7.0.0", "workbox-expiration": "~7.0.0",

View file

@ -34,6 +34,8 @@ a.mention span {
text-decoration-color: inherit; text-decoration-color: inherit;
text-decoration-thickness: 2px; text-decoration-thickness: 2px;
text-underline-offset: 2px; text-underline-offset: 2px;
font-variant-numeric: slashed-zero;
font-feature-settings: 'ss01';
} }
/* a.mention:has(span).hashtag { /* a.mention:has(span).hashtag {
color: var(--link-light-color); color: var(--link-light-color);
@ -2673,6 +2675,10 @@ ul.link-list li a .icon {
box-shadow: 0px 1px var(--bg-blur-color); box-shadow: 0px 1px var(--bg-blur-color);
transition: transform 0.4s var(--timing-function); transition: transform 0.4s var(--timing-function);
--back-transition: transform 0.4s ease-out; --back-transition: transform 0.4s ease-out;
&:is(:empty, :has(> a:empty)) {
display: none;
}
} }
.timeline:not(.flat) > li > a { .timeline:not(.flat) > li > a {
border-radius: inherit; border-radius: inherit;

View file

@ -95,6 +95,10 @@
0 1px 10px var(--bg-color), 0 1px 10px var(--bg-color), 0 1px 10px var(--bg-color), 0 1px 10px var(--bg-color),
0 1px 10px var(--bg-color); 0 1px 10px var(--bg-color);
z-index: 2; z-index: 2;
strong {
color: var(--red-color);
}
} }
#_compose-container .status-preview-legend.reply-to { #_compose-container .status-preview-legend.reply-to {
color: var(--reply-to-color); color: var(--reply-to-color);

View file

@ -174,6 +174,8 @@ function highlightText(text, { maxCharacters = Infinity }) {
); // Emoji shortcodes ); // Emoji shortcodes
} }
const rtf = new Intl.RelativeTimeFormat();
function Compose({ function Compose({
onClose, onClose,
replyToStatus, replyToStatus,
@ -637,6 +639,16 @@ function Compose({
return [topLanguages, restLanguages]; return [topLanguages, restLanguages];
}, [language]); }, [language]);
const replyToStatusMonthsAgo = useMemo(
() =>
!!replyToStatus?.createdAt &&
Math.floor(
(Date.now() - new Date(replyToStatus.createdAt)) /
(1000 * 60 * 60 * 24 * 30),
),
[replyToStatus],
);
return ( return (
<div id="compose-container-outer"> <div id="compose-container-outer">
<div id="compose-container" class={standalone ? 'standalone' : ''}> <div id="compose-container" class={standalone ? 'standalone' : ''}>
@ -786,6 +798,16 @@ function Compose({
Replying to @ Replying to @
{replyToStatus.account.acct || replyToStatus.account.username} {replyToStatus.account.acct || replyToStatus.account.username}
&rsquo;s post &rsquo;s post
{replyToStatusMonthsAgo >= 3 && (
<>
{' '}
(
<strong>
{rtf.format(-replyToStatusMonthsAgo, 'month')}
</strong>
)
</>
)}
</div> </div>
</div> </div>
)} )}

View file

@ -8,6 +8,11 @@
font-weight: 500; font-weight: 500;
unicode-bidi: isolate; unicode-bidi: isolate;
} }
i {
font-variant-numeric: slashed-zero;
font-feature-settings: 'ss01';
}
} }
.name-text.show-acct { .name-text.show-acct {
display: inline-block; display: inline-block;

View file

@ -85,6 +85,8 @@ const isIOS =
window.ontouchstart !== undefined && window.ontouchstart !== undefined &&
/iPad|iPhone|iPod/.test(navigator.userAgent); /iPad|iPhone|iPod/.test(navigator.userAgent);
const rtf = new Intl.RelativeTimeFormat();
const REACTIONS_LIMIT = 80; const REACTIONS_LIMIT = 80;
function getPollText(poll) { function getPollText(poll) {
@ -508,6 +510,13 @@ function Status({
(attachment) => !attachment.description?.trim?.(), (attachment) => !attachment.description?.trim?.(),
); );
}, [mediaAttachments]); }, [mediaAttachments]);
const statusMonthsAgo = useMemo(() => {
return Math.floor(
(new Date() - createdAtDate) / (1000 * 60 * 60 * 24 * 30),
);
}, [createdAtDate]);
const boostStatus = async () => { const boostStatus = async () => {
if (!sameInstance || !authenticated) { if (!sameInstance || !authenticated) {
alert(unauthInteractionErrorMessage); alert(unauthInteractionErrorMessage);
@ -767,12 +776,22 @@ function Status({
</MenuItem> </MenuItem>
} }
menuFooter={ menuFooter={
mediaNoDesc && mediaNoDesc && !reblogged ? (
!reblogged && (
<div class="footer"> <div class="footer">
<Icon icon="alert" /> <Icon icon="alert" />
Some media have no descriptions. Some media have no descriptions.
</div> </div>
) : (
statusMonthsAgo >= 3 && (
<div class="footer">
<Icon icon="info" />
<span>
Old post (
<strong>{rtf.format(-statusMonthsAgo, 'month')}</strong>
)
</span>
</div>
)
) )
} }
disabled={!canBoost} disabled={!canBoost}
@ -2213,10 +2232,10 @@ function Card({ card, selfReferential, instance }) {
<p class="meta domain" dir="auto"> <p class="meta domain" dir="auto">
{domain} {domain}
</p> </p>
<p class="title" dir="auto"> <p class="title" dir="auto" title={title}>
{title} {title}
</p> </p>
<p class="meta" dir="auto"> <p class="meta" dir="auto" title={description}>
{description || {description ||
(!!publishedAt && ( (!!publishedAt && (
<RelativeTime datetime={publishedAt} format="micro" /> <RelativeTime datetime={publishedAt} format="micro" />
@ -2285,8 +2304,8 @@ function Card({ card, selfReferential, instance }) {
<p class="meta domain"> <p class="meta domain">
<Icon icon="link" size="s" /> <span>{domain}</span> <Icon icon="link" size="s" /> <span>{domain}</span>
</p> </p>
<p class="title">{title}</p> <p class="title" title={title}>{title}</p>
<p class="meta">{description || providerName || authorName}</p> <p class="meta" title={description || providerName || authorName}>{description || providerName || authorName}</p>
</div> </div>
</a> </a>
); );

View file

@ -535,15 +535,15 @@ const TimelineItem = memo(
const url = instance const url = instance
? `/${instance}/s/${actualStatusID}` ? `/${instance}/s/${actualStatusID}`
: `/s/${actualStatusID}`; : `/s/${actualStatusID}`;
let title = '';
if (type === 'boosts') {
title = `${items.length} Boosts`;
} else if (type === 'pinned') {
title = 'Pinned posts';
}
const isCarousel = type === 'boosts' || type === 'pinned';
if (items) { if (items) {
const fItems = filteredItems(items, filterContext); const fItems = filteredItems(items, filterContext);
let title = '';
if (type === 'boosts') {
title = `${fItems.length} Boosts`;
} else if (type === 'pinned') {
title = 'Pinned posts';
}
const isCarousel = type === 'boosts' || type === 'pinned';
if (isCarousel) { if (isCarousel) {
// Here, we don't hide filtered posts, but we sort them last // Here, we don't hide filtered posts, but we sort them last
fItems.sort((a, b) => { fItems.sort((a, b) => {

View file

@ -525,10 +525,13 @@
background-color: var(--bg-faded-color); background-color: var(--bg-faded-color);
box-shadow: 0 8px 16px -8px var(--drop-shadow-color), box-shadow: 0 8px 16px -8px var(--drop-shadow-color),
inset 0 1px var(--bg-color); inset 0 1px var(--bg-color);
outline: 1px solid var(--outline-color);
text-shadow: 0 1px var(--bg-color); text-shadow: 0 1px var(--bg-color);
} }
&:hover:not(:focus-visible) {
outline: 1px solid var(--outline-color);
}
&:active { &:active {
filter: brightness(0.95); filter: brightness(0.95);
box-shadow: none; box-shadow: none;
@ -1091,6 +1094,20 @@
dd { dd {
margin-block-end: 1em; margin-block-end: 1em;
margin-inline: 1em; margin-inline: 1em;
+ dd {
margin-block-start: -0.9em;
}
} }
} }
kbd {
border-radius: 4px;
display: inline-block;
padding: 0.2em 0.3em;
margin: 1px 0;
line-height: 1;
border: 1px solid var(--outline-color);
background-color: var(--bg-faded-color);
}
} }

View file

@ -648,7 +648,7 @@ function Catchup() {
const [showHelp, setShowHelp] = useState(false); const [showHelp, setShowHelp] = useState(false);
const itemsSelector = '.catchup-list > li > a'; const itemsSelector = '.catchup-list > li > a';
useHotkeys( const jRef = useHotkeys(
'j', 'j',
() => { () => {
const activeItem = document.activeElement.closest(itemsSelector); const activeItem = document.activeElement.closest(itemsSelector);
@ -692,7 +692,7 @@ function Catchup() {
}, },
); );
useHotkeys( const kRef = useHotkeys(
'k', 'k',
() => { () => {
const activeItem = document.activeElement.closest(itemsSelector); const activeItem = document.activeElement.closest(itemsSelector);
@ -736,34 +736,73 @@ function Catchup() {
}, },
); );
useHotkeys( const hlRef = useHotkeys(
'h, l', 'h, l',
(_, handler) => { (_, handler) => {
// Go next/prev selectedAuthor in authorCountsList list // Go next/prev selectedAuthor in authorCountsList list
const key = handler.keys[0];
if (selectedAuthor) { if (selectedAuthor) {
const key = handler.keys[0];
const index = authorCountsList.indexOf(selectedAuthor); const index = authorCountsList.indexOf(selectedAuthor);
if (key === 'h') { if (key === 'h') {
if (index > 0 && index < authorCountsList.length) { if (index > 0 && index < authorCountsList.length) {
setSelectedAuthor(authorCountsList[index - 1]); setSelectedAuthor(authorCountsList[index - 1]);
scrollableRef.current?.focus();
} }
} else if (key === 'l') { } else if (key === 'l') {
if (index < authorCountsList.length - 1 && index >= 0) { if (index < authorCountsList.length - 1 && index >= 0) {
setSelectedAuthor(authorCountsList[index + 1]); setSelectedAuthor(authorCountsList[index + 1]);
scrollableRef.current?.focus();
} }
} }
} else if (key === 'l') {
setSelectedAuthor(authorCountsList[0]);
scrollableRef.current?.focus();
} }
}, },
{ {
preventDefault: true, preventDefault: true,
ignoreModifiers: true, ignoreModifiers: true,
enableOnFormTags: true, enableOnFormTags: ['input'],
},
);
const escRef = useHotkeys(
'esc',
() => {
setSelectedAuthor(null);
scrollableRef.current?.focus();
},
{
preventDefault: true,
ignoreModifiers: true,
enableOnFormTags: ['input'],
},
);
const dotRef = useHotkeys(
'.',
() => {
scrollableRef.current?.scrollTo({
top: 0,
behavior: 'smooth',
});
},
{
preventDefault: true,
ignoreModifiers: true,
enableOnFormTags: ['input'],
}, },
); );
return ( return (
<div <div
ref={scrollableRef} ref={(node) => {
scrollableRef.current = node;
jRef.current = node;
kRef.current = node;
hlRef.current = node;
escRef.current = node;
}}
id="catchup-page" id="catchup-page"
class="deck-container" class="deck-container"
tabIndex="-1" tabIndex="-1"
@ -1425,6 +1464,25 @@ function Catchup() {
Posts are grouped by authors, sorted by posts count per Posts are grouped by authors, sorted by posts count per
author. author.
</dd> </dd>
<dt>Keyboard shortcuts</dt>
<dd>
<kbd>j</kbd>: Next post
</dd>
<dd>
<kbd>k</kbd>: Previous post
</dd>
<dd>
<kbd>l</kbd>: Next author
</dd>
<dd>
<kbd>h</kbd>: Previous author
</dd>
<dd>
<kbd>Enter</kbd>: Open post details
</dd>
<dd>
<kbd>.</kbd>: Scroll to top
</dd>
</dl> </dl>
</main> </main>
</div> </div>

View file

@ -16,7 +16,9 @@ function handleContentLinks(opts) {
const textBeforeLinkIsAt = prevText?.endsWith('@'); const textBeforeLinkIsAt = prevText?.endsWith('@');
const textStartsWithAt = target.innerText.startsWith('@'); const textStartsWithAt = target.innerText.startsWith('@');
if ( if (
(target.classList.contains('u-url') && textStartsWithAt) || ((target.classList.contains('u-url') ||
target.classList.contains('mention')) &&
textStartsWithAt) ||
(textBeforeLinkIsAt && !textStartsWithAt) (textBeforeLinkIsAt && !textStartsWithAt)
) { ) {
const targetText = ( const targetText = (