From 04588874c7b2305308b7e1eb6aa0cd07761c8b5d Mon Sep 17 00:00:00 2001 From: COxDE <63153334+coxde@users.noreply.github.com> Date: Thu, 27 Jun 2024 13:38:55 +0100 Subject: [PATCH 001/327] fix: enable/disable boosts button logic --- src/components/account-info.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/account-info.jsx b/src/components/account-info.jsx index 1704e446..5eff593f 100644 --- a/src/components/account-info.jsx +++ b/src/components/account-info.jsx @@ -1159,8 +1159,8 @@ function RelatedActions({ setRelationshipUIState('default'); showToast( rel.showingReblogs - ? `Boosts from @${username} disabled.` - : `Boosts from @${username} enabled.`, + ? `Boosts from @${username} enabled.` + : `Boosts from @${username} disabled.`, ); } catch (e) { alert(e); From 09745e3078864e5ec36c3acbd45162e1f39cb279 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Tue, 25 Jun 2024 07:48:42 +0800 Subject: [PATCH 002/327] Don't show account if notification = severed_relationships --- src/components/notification.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/notification.jsx b/src/components/notification.jsx index 1308948b..cb2180c7 100644 --- a/src/components/notification.jsx +++ b/src/components/notification.jsx @@ -285,7 +285,7 @@ function Notification({ {type !== 'mention' && ( <>

- {!/poll|update/i.test(type) && ( + {!/poll|update|severed_relationships/i.test(type) && ( <> {_accounts?.length > 1 ? ( <> From 5ab0ea1b592b059c71b688b6795a92bd8745c2d2 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Tue, 25 Jun 2024 10:45:52 +0800 Subject: [PATCH 003/327] Remove usehooks dep In the end, only used one hook out of so many hooks --- package-lock.json | 14 -------------- package.json | 1 - src/components/menu2.jsx | 2 +- src/utils/useWindowSize.js | 28 ++++++++++++++++++++++++++++ 4 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 src/utils/useWindowSize.js diff --git a/package-lock.json b/package-lock.json index 376051c0..37c34121 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "@iconify-icons/mingcute": "~1.2.9", "@justinribeiro/lite-youtube": "~1.5.0", "@szhsin/react-menu": "~4.1.0", - "@uidotdev/usehooks": "~2.4.1", "compare-versions": "~6.1.0", "dayjs": "~1.11.11", "dayjs-twitter": "~0.5.0", @@ -3886,19 +3885,6 @@ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "dev": true }, - "node_modules/@uidotdev/usehooks": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.1.tgz", - "integrity": "sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, "node_modules/@vue/compiler-core": { "version": "3.2.45", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz", diff --git a/package.json b/package.json index 21feda6f..3c87980e 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,6 @@ "@iconify-icons/mingcute": "~1.2.9", "@justinribeiro/lite-youtube": "~1.5.0", "@szhsin/react-menu": "~4.1.0", - "@uidotdev/usehooks": "~2.4.1", "compare-versions": "~6.1.0", "dayjs": "~1.11.11", "dayjs-twitter": "~0.5.0", diff --git a/src/components/menu2.jsx b/src/components/menu2.jsx index 6ca68320..3d83a72d 100644 --- a/src/components/menu2.jsx +++ b/src/components/menu2.jsx @@ -1,8 +1,8 @@ import { Menu } from '@szhsin/react-menu'; -import { useWindowSize } from '@uidotdev/usehooks'; import { useRef } from 'preact/hooks'; import safeBoundingBoxPadding from '../utils/safe-bounding-box-padding'; +import useWindowSize from '../utils/useWindowSize'; // It's like Menu but with sensible defaults, bug fixes and improvements. function Menu2(props) { diff --git a/src/utils/useWindowSize.js b/src/utils/useWindowSize.js new file mode 100644 index 00000000..0907cee7 --- /dev/null +++ b/src/utils/useWindowSize.js @@ -0,0 +1,28 @@ +import { useLayoutEffect, useState } from 'preact/hooks'; + +export default function useWindowSize() { + const [size, setSize] = useState({ + width: null, + height: null, + }); + + useLayoutEffect(() => { + const handleResize = () => { + setSize({ + width: window.innerWidth, + height: window.innerHeight, + }); + }; + + handleResize(); + window.addEventListener('resize', handleResize, { + passive: true, + }); + + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + + return size; +} From 1b3938f3d23165ce3bca55633d09984666e51a6a Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Tue, 25 Jun 2024 14:47:39 +0800 Subject: [PATCH 004/327] Add bundle-visualizer --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3c87980e..8c33cfd0 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "vite build", "preview": "vite preview", "fetch-instances": "env $(cat .env.local | grep -v \"#\" | xargs) node scripts/fetch-instances-list.js", - "sourcemap": "npx source-map-explorer dist/assets/*.js" + "sourcemap": "npx source-map-explorer dist/assets/*.js", + "bundle-visualizer": "npx vite-bundle-visualizer" }, "dependencies": { "@formatjs/intl-localematcher": "~0.5.4", From f7024f77234023e5e07e59a17531e01aa62fa3d7 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 26 Jun 2024 17:26:41 +0800 Subject: [PATCH 005/327] Only allow trending link posts for current instance, not remote instance For this to work on remote instance, will need to fetch its version and check first --- src/pages/trending.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/trending.jsx b/src/pages/trending.jsx index 1b85de77..670e30d4 100644 --- a/src/pages/trending.jsx +++ b/src/pages/trending.jsx @@ -72,6 +72,8 @@ function Trending({ columnMode, ...props }) { // const navigate = useNavigate(); const latestItem = useRef(); + const sameCurrentInstance = instance === currentInstance; + const [hashtags, setHashtags] = useState([]); const [links, setLinks] = useState([]); const trendIterator = useRef(); @@ -137,7 +139,8 @@ function Trending({ columnMode, ...props }) { const [currentLink, setCurrentLink] = useState(null); const hasCurrentLink = !!currentLink; const currentLinkRef = useRef(); - const supportsTrendingLinkPosts = supports('@mastodon/trending-hashtags'); + const supportsTrendingLinkPosts = + sameCurrentInstance && supports('@mastodon/trending-hashtags'); useEffect(() => { if (currentLink && currentLinkRef.current) { From 046d3d323a1088d28269128f43b54e28b54f91a2 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 27 Jun 2024 16:09:57 +0800 Subject: [PATCH 006/327] Enable unfurling when fetching reply hints --- src/utils/timeline-utils.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/utils/timeline-utils.jsx b/src/utils/timeline-utils.jsx index 20225f12..af902766 100644 --- a/src/utils/timeline-utils.jsx +++ b/src/utils/timeline-utils.jsx @@ -227,7 +227,6 @@ export function groupContext(items, instance) { const replyToStatus = await fetchStatus(inReplyToId, masto); saveStatus(replyToStatus, instance, { skipThreading: true, - skipUnfurling: true, }); states.statusReply[sKey] = { id: replyToStatus.id, @@ -253,7 +252,6 @@ export function groupContext(items, instance) { for (const replyToStatus of replyToStatuses) { saveStatus(replyToStatus, instance, { skipThreading: true, - skipUnfurling: true, }); const sKey = inReplyToIds.find( ({ inReplyToId }) => inReplyToId === replyToStatus.id, From 71823fbad28860d298212e93bac54b6a62b1049f Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 27 Jun 2024 17:47:50 +0800 Subject: [PATCH 007/327] Fix typo --- src/pages/hashtag.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/hashtag.jsx b/src/pages/hashtag.jsx index 7cd31d25..a4d7b67a 100644 --- a/src/pages/hashtag.jsx +++ b/src/pages/hashtag.jsx @@ -366,7 +366,7 @@ function Hashtags({ media: mediaView, columnMode, ...props }) { } }} > - Add to Shorcuts + Add to Shortcuts { From b6a25f593932be3f33227c2f5d53df91b8ec27f7 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 27 Jun 2024 17:48:22 +0800 Subject: [PATCH 008/327] MVP-ish add/remove featured tags --- src/pages/hashtag.jsx | 83 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/pages/hashtag.jsx b/src/pages/hashtag.jsx index a4d7b67a..d2ec714e 100644 --- a/src/pages/hashtag.jsx +++ b/src/pages/hashtag.jsx @@ -140,6 +140,26 @@ function Hashtags({ media: mediaView, columnMode, ...props }) { const reachLimit = hashtags.length >= TOTAL_TAGS_LIMIT; + const [featuredUIState, setFeaturedUIState] = useState('default'); + const [featuredTags, setFeaturedTags] = useState([]); + const [isFeaturedTag, setIsFeaturedTag] = useState(false); + useEffect(() => { + if (!authenticated) return; + (async () => { + try { + const featuredTags = await masto.v1.featuredTags.list(); + setFeaturedTags(featuredTags); + setIsFeaturedTag( + featuredTags.some( + (tag) => tag.name.toLowerCase() === hashtag.toLowerCase(), + ), + ); + } catch (e) { + console.error(e); + } + })(); + }, []); + return ( )} + { + setFeaturedUIState('loading'); + if (isFeaturedTag) { + const featuredTagID = featuredTags.find( + (tag) => tag.name.toLowerCase() === hashtag.toLowerCase(), + ).id; + if (featuredTagID) { + masto.v1.featuredTags + .$select(featuredTagID) + .remove() + .then(() => { + setIsFeaturedTag(false); + showToast('Unfeatured on profile'); + setFeaturedTags( + featuredTags.filter( + (tag) => tag.id !== featuredTagID, + ), + ); + }) + .catch((e) => { + console.error(e); + }) + .finally(() => { + setFeaturedUIState('default'); + }); + } else { + showToast('Unable to unfeature on profile'); + } + } else { + masto.v1.featuredTags + .create({ + name: hashtag, + }) + .then((value) => { + setIsFeaturedTag(true); + showToast('Featured on profile'); + setFeaturedTags(featuredTags.concat(value)); + }) + .catch((e) => { + console.error(e); + }) + .finally(() => { + setFeaturedUIState('default'); + }); + } + }} + > + {isFeaturedTag ? ( + <> + + Featured on profile + + ) : ( + <> + + Feature on profile + + )} + )} From e6e884f1cb80ecdc95051d792c8d81d6352f383f Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 28 Jun 2024 07:49:30 +0800 Subject: [PATCH 009/327] Refactor + make card post work for no-image cards --- src/components/status.jsx | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/components/status.jsx b/src/components/status.jsx index daf4ba64..327f3ae9 100644 --- a/src/components/status.jsx +++ b/src/components/status.jsx @@ -2456,6 +2456,22 @@ function MediaFirstContainer(props) { ); } +function getDomain(url) { + return punycode.toUnicode( + URL.parse(url) + .hostname.replace(/^www\./, '') + .replace(/\/$/, ''), + ); +} + +// "Post": Quote post + card link preview combo +// Assume all links from these domains are "posts" +// Mastodon links are "posts" too but they are converted to real quote posts and there's too many domains to check +// This is just "Progressive Enhancement" +function isCardPost(domain) { + return ['x.com', 'twitter.com', 'threads.net', 'bsky.app'].includes(domain); +} + function Card({ card, selfReferential, instance }) { const snapStates = useSnapshot(states); const { @@ -2534,11 +2550,7 @@ function Card({ card, selfReferential, instance }) { ); if (hasText && (image || (type === 'photo' && blurhash))) { - const domain = punycode.toUnicode( - URL.parse(url) - .hostname.replace(/^www\./, '') - .replace(/\/$/, ''), - ); + const domain = getDomain(url); let blurhashImage; const rgbAverageColor = image && blurhash ? getBlurHashAverageColor(blurhash) : null; @@ -2559,11 +2571,7 @@ function Card({ card, selfReferential, instance }) { blurhashImage = canvas.toDataURL(); } - // "Post": Quote post + card link preview combo - // Assume all links from these domains are "posts" - // Mastodon links are "posts" too but they are converted to real quote posts and there's too many domains to check - // This is just "Progressive Enhancement" - const isPost = ['x.com', 'twitter.com', 'threads.net'].includes(domain); + const isPost = isCardPost(domain); return ( From 95bf9e183ef0893252c5018f05c77e9830bab912 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Mon, 1 Jul 2024 17:41:21 +0800 Subject: [PATCH 010/327] Replace trivago/ with ianvs/prettier-plugin-sort-imports --- .prettierrc | 12 +- package-lock.json | 252 ++++++++++++++------------------ package.json | 2 +- src/app.jsx | 3 + src/components/account-info.jsx | 2 +- src/components/compose.jsx | 5 +- src/components/media-modal.jsx | 2 +- src/components/shortcuts.jsx | 2 +- src/components/status.jsx | 7 +- src/compose.jsx | 2 - src/main.jsx | 2 - src/pages/account-statuses.jsx | 3 +- src/pages/accounts.jsx | 2 +- src/pages/following.jsx | 3 +- src/pages/hashtag.jsx | 5 +- src/pages/list.jsx | 2 +- src/pages/public.jsx | 3 +- src/pages/trending.jsx | 3 +- 18 files changed, 135 insertions(+), 177 deletions(-) diff --git a/.prettierrc b/.prettierrc index 7764b6c3..6063e9a9 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,18 +3,20 @@ "useTabs": false, "singleQuote": true, "trailingComma": "all", + "plugins": ["@ianvs/prettier-plugin-sort-imports"], "importOrder": [ "^[^.].*.css$", "index.css$", ".css$", + "", "./polyfills", + "", "", + "", "/assets/", + "", "^../", + "", "^[./]" - ], - "importOrderSeparation": true, - "importOrderSortSpecifiers": true, - "importOrderGroupNamespaceSpecifiers": true, - "importOrderCaseInsensitive": true + ] } diff --git a/package-lock.json b/package-lock.json index 37c34121..4cc3cc0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,8 +46,8 @@ "valtio": "1.13.2" }, "devDependencies": { + "@ianvs/prettier-plugin-sort-imports": "~4.3.0", "@preact/preset-vite": "~2.8.2", - "@trivago/prettier-plugin-sort-imports": "~4.3.0", "postcss": "~8.4.38", "postcss-dark-theme-class": "~1.3.0", "postcss-preset-env": "~9.5.14", @@ -95,12 +95,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" }, "engines": { @@ -168,12 +168,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.5", + "@babel/types": "^7.24.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -294,37 +294,37 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -453,30 +453,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -541,12 +541,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -556,9 +556,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1830,49 +1830,27 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3274,6 +3252,62 @@ "dom-input-range": "^1.1.6" } }, + "node_modules/@ianvs/prettier-plugin-sort-imports": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", + "integrity": "sha512-OOMtUcO4J3LoL63dOKAe7bn+lSRRPeit2DqNHpx+wvBp3Grejo2PMaK4Mp1mwy8pnat64ccSgk/lBZbsAdLErw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.0", + "@babel/generator": "^7.23.6", + "@babel/parser": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "semver": "^7.5.2" + }, + "peerDependencies": { + "@vue/compiler-sfc": "2.7.x || 3.x", + "prettier": "2 || 3" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + } + }, + "node_modules/@ianvs/prettier-plugin-sort-imports/node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ianvs/prettier-plugin-sort-imports/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@iconify-icons/mingcute": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/@iconify-icons/mingcute/-/mingcute-1.2.9.tgz", @@ -3789,69 +3823,6 @@ "react-dom": ">=16.14.0" } }, - "node_modules/@trivago/prettier-plugin-sort-imports": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", - "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/generator": "7.17.7", - "@babel/parser": "^7.20.5", - "@babel/traverse": "7.23.2", - "@babel/types": "7.17.0", - "javascript-natural-sort": "0.7.1", - "lodash": "^4.17.21" - }, - "peerDependencies": { - "@vue/compiler-sfc": "3.x", - "prettier": "2.x - 3.x" - }, - "peerDependenciesMeta": { - "@vue/compiler-sfc": { - "optional": true - } - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -5949,13 +5920,6 @@ "node": ">=8" } }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true, - "license": "MIT" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", diff --git a/package.json b/package.json index 8c33cfd0..e85bfc47 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "valtio": "1.13.2" }, "devDependencies": { + "@ianvs/prettier-plugin-sort-imports": "~4.3.0", "@preact/preset-vite": "~2.8.2", - "@trivago/prettier-plugin-sort-imports": "~4.3.0", "postcss": "~8.4.38", "postcss-dark-theme-class": "~1.3.0", "postcss-preset-env": "~9.5.14", diff --git a/src/app.jsx b/src/app.jsx index 446ecbc5..d2d044c2 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -9,7 +9,9 @@ import { useState, } from 'preact/hooks'; import { matchPath, Route, Routes, useLocation } from 'react-router-dom'; + import 'swiped-events'; + import { subscribe } from 'valtio'; import BackgroundService from './components/background-service'; @@ -54,6 +56,7 @@ import focusDeck from './utils/focus-deck'; import states, { initStates, statusKey } from './utils/states'; import store from './utils/store'; import { getCurrentAccount, setCurrentAccountID } from './utils/store-utils'; + import './utils/toast-alert'; window.__STATES__ = states; diff --git a/src/components/account-info.jsx b/src/components/account-info.jsx index 5eff593f..bf40243b 100644 --- a/src/components/account-info.jsx +++ b/src/components/account-info.jsx @@ -33,9 +33,9 @@ import Icon from './icon'; import Link from './link'; import ListAddEdit from './list-add-edit'; import Loader from './loader'; -import Menu2 from './menu2'; import MenuConfirm from './menu-confirm'; import MenuLink from './menu-link'; +import Menu2 from './menu2'; import Modal from './modal'; import SubMenu2 from './submenu2'; import TranslationBlock from './translation-block'; diff --git a/src/components/compose.jsx b/src/components/compose.jsx index d74fc4e5..de4cb698 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -1,11 +1,10 @@ import './compose.css'; - import '@github/text-expander-element'; + import { MenuItem } from '@szhsin/react-menu'; import { deepEqual } from 'fast-equals'; import Fuse from 'fuse.js'; -import { memo } from 'preact/compat'; -import { forwardRef } from 'preact/compat'; +import { forwardRef, memo } from 'preact/compat'; import { useCallback, useEffect, diff --git a/src/components/media-modal.jsx b/src/components/media-modal.jsx index 968988bf..9f804938 100644 --- a/src/components/media-modal.jsx +++ b/src/components/media-modal.jsx @@ -16,8 +16,8 @@ import states from '../utils/states'; import Icon from './icon'; import Link from './link'; import Media from './media'; -import Menu2 from './menu2'; import MenuLink from './menu-link'; +import Menu2 from './menu2'; const { PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL } = import.meta.env; diff --git a/src/components/shortcuts.jsx b/src/components/shortcuts.jsx index ddbe9cd3..79700f03 100644 --- a/src/components/shortcuts.jsx +++ b/src/components/shortcuts.jsx @@ -15,8 +15,8 @@ import states from '../utils/states'; import AsyncText from './AsyncText'; import Icon from './icon'; import Link from './link'; -import Menu2 from './menu2'; import MenuLink from './menu-link'; +import Menu2 from './menu2'; import SubMenu2 from './submenu2'; function Shortcuts() { diff --git a/src/components/status.jsx b/src/components/status.jsx index 327f3ae9..ab5928ff 100644 --- a/src/components/status.jsx +++ b/src/components/status.jsx @@ -1,6 +1,6 @@ import './status.css'; - import '@justinribeiro/lite-youtube'; + import { ControlledMenu, Menu, @@ -32,8 +32,8 @@ import CustomEmoji from '../components/custom-emoji'; import EmojiText from '../components/emoji-text'; import LazyShazam from '../components/lazy-shazam'; import Loader from '../components/loader'; -import Menu2 from '../components/menu2'; import MenuConfirm from '../components/menu-confirm'; +import Menu2 from '../components/menu2'; import Modal from '../components/modal'; import NameText from '../components/name-text'; import Poll from '../components/poll'; @@ -69,8 +69,7 @@ import visibilityIconsMap from '../utils/visibility-icons-map'; import Avatar from './avatar'; import Icon from './icon'; import Link from './link'; -import Media from './media'; -import { isMediaCaptionLong } from './media'; +import Media, { isMediaCaptionLong } from './media'; import MenuLink from './menu-link'; import RelativeTime from './relative-time'; import TranslationBlock from './translation-block'; diff --git a/src/compose.jsx b/src/compose.jsx index 4e3571d6..5b2fcba0 100644 --- a/src/compose.jsx +++ b/src/compose.jsx @@ -1,7 +1,5 @@ import './index.css'; - import './app.css'; - import './polyfills'; import { render } from 'preact'; diff --git a/src/main.jsx b/src/main.jsx index 9f87f2b1..43db9d38 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,7 +1,5 @@ import './index.css'; - import './cloak-mode.css'; - import './polyfills'; // Polyfill needed for Firefox < 122 diff --git a/src/pages/account-statuses.jsx b/src/pages/account-statuses.jsx index 20306ccf..b72cd795 100644 --- a/src/pages/account-statuses.jsx +++ b/src/pages/account-statuses.jsx @@ -19,8 +19,7 @@ import Timeline from '../components/timeline'; import { api } from '../utils/api'; import pmem from '../utils/pmem'; import showToast from '../utils/show-toast'; -import states from '../utils/states'; -import { saveStatus } from '../utils/states'; +import states, { saveStatus } from '../utils/states'; import { isMediaFirstInstance } from '../utils/store-utils'; import useTitle from '../utils/useTitle'; diff --git a/src/pages/accounts.jsx b/src/pages/accounts.jsx index efa38a19..775ba1a1 100644 --- a/src/pages/accounts.jsx +++ b/src/pages/accounts.jsx @@ -7,8 +7,8 @@ import { useReducer } from 'preact/hooks'; import Avatar from '../components/avatar'; import Icon from '../components/icon'; import Link from '../components/link'; -import Menu2 from '../components/menu2'; import MenuConfirm from '../components/menu-confirm'; +import Menu2 from '../components/menu2'; import NameText from '../components/name-text'; import { api } from '../utils/api'; import states from '../utils/states'; diff --git a/src/pages/following.jsx b/src/pages/following.jsx index 5a48de29..2f978328 100644 --- a/src/pages/following.jsx +++ b/src/pages/following.jsx @@ -4,8 +4,7 @@ import { useSnapshot } from 'valtio'; import Timeline from '../components/timeline'; import { api } from '../utils/api'; import { filteredItems } from '../utils/filters'; -import states from '../utils/states'; -import { getStatus, saveStatus } from '../utils/states'; +import states, { getStatus, saveStatus } from '../utils/states'; import supports from '../utils/supports'; import { assignFollowedTags, diff --git a/src/pages/hashtag.jsx b/src/pages/hashtag.jsx index d2ec714e..f7b26cb0 100644 --- a/src/pages/hashtag.jsx +++ b/src/pages/hashtag.jsx @@ -9,15 +9,14 @@ import { useEffect, useMemo, useRef, useState } from 'preact/hooks'; import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import Icon from '../components/icon'; -import Menu2 from '../components/menu2'; import MenuConfirm from '../components/menu-confirm'; +import Menu2 from '../components/menu2'; import { SHORTCUTS_LIMIT } from '../components/shortcuts-settings'; import Timeline from '../components/timeline'; import { api } from '../utils/api'; import { filteredItems } from '../utils/filters'; import showToast from '../utils/show-toast'; -import states from '../utils/states'; -import { saveStatus } from '../utils/states'; +import states, { saveStatus } from '../utils/states'; import { isMediaFirstInstance } from '../utils/store-utils'; import useTitle from '../utils/useTitle'; diff --git a/src/pages/list.jsx b/src/pages/list.jsx index 3524c547..de38dba3 100644 --- a/src/pages/list.jsx +++ b/src/pages/list.jsx @@ -10,9 +10,9 @@ import AccountBlock from '../components/account-block'; import Icon from '../components/icon'; import Link from '../components/link'; import ListAddEdit from '../components/list-add-edit'; -import Menu2 from '../components/menu2'; import MenuConfirm from '../components/menu-confirm'; import MenuLink from '../components/menu-link'; +import Menu2 from '../components/menu2'; import Modal from '../components/modal'; import Timeline from '../components/timeline'; import { api } from '../utils/api'; diff --git a/src/pages/public.jsx b/src/pages/public.jsx index c1d49216..db8ab309 100644 --- a/src/pages/public.jsx +++ b/src/pages/public.jsx @@ -8,8 +8,7 @@ import Menu2 from '../components/menu2'; import Timeline from '../components/timeline'; import { api } from '../utils/api'; import { filteredItems } from '../utils/filters'; -import states from '../utils/states'; -import { saveStatus } from '../utils/states'; +import states, { saveStatus } from '../utils/states'; import supports from '../utils/supports'; import useTitle from '../utils/useTitle'; diff --git a/src/pages/trending.jsx b/src/pages/trending.jsx index 670e30d4..80a73550 100644 --- a/src/pages/trending.jsx +++ b/src/pages/trending.jsx @@ -19,8 +19,7 @@ import { oklab2rgb, rgb2oklab } from '../utils/color-utils'; import { filteredItems } from '../utils/filters'; import pmem from '../utils/pmem'; import shortenNumber from '../utils/shorten-number'; -import states from '../utils/states'; -import { saveStatus } from '../utils/states'; +import states, { saveStatus } from '../utils/states'; import supports from '../utils/supports'; import useTitle from '../utils/useTitle'; From c950a6552cbc4050395dc7b82856b3c09973c76d Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 3 Jul 2024 20:01:11 +0800 Subject: [PATCH 011/327] Experiment: unhide header when clicking on timeline items --- src/components/timeline.jsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/timeline.jsx b/src/components/timeline.jsx index d4696502..d35692fb 100644 --- a/src/components/timeline.jsx +++ b/src/components/timeline.jsx @@ -388,6 +388,17 @@ function Timeline({ dotRef.current = node; }} tabIndex="-1" + onClick={(e) => { + // If click on timeline item, unhide header + if ( + headerRef.current && + e.target.closest('.timeline-item, .timeline-item-alt') + ) { + setTimeout(() => { + headerRef.current.hidden = false; + }, 250); + } + }} >

Date: Wed, 3 Jul 2024 20:02:47 +0800 Subject: [PATCH 012/327] Upgrade dependencies --- package-lock.json | 438 +++++++++++++++++++++++----------------------- package.json | 10 +- 2 files changed, 223 insertions(+), 225 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4cc3cc0b..71d894ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.0", + "preact": "~10.22.1", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.10.3", @@ -47,12 +47,12 @@ }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.0", - "@preact/preset-vite": "~2.8.2", - "postcss": "~8.4.38", + "@preact/preset-vite": "~2.8.3", + "postcss": "~8.4.39", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~9.5.14", + "postcss-preset-env": "~9.5.15", "twitter-text": "~3.1.0", - "vite": "~5.3.1", + "vite": "~5.3.3", "vite-plugin-generate-file": "~0.1.1", "vite-plugin-html-config": "~1.0.11", "vite-plugin-pwa": "~0.20.0", @@ -1858,9 +1858,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", - "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.12.tgz", + "integrity": "sha512-iNCCOnaoycAfcIot3v/orjkTol+j8+Z5xgpqxUpZSdqeaxCADQZtldHhlvzDipmi7OoWdcJUO6DRZcnkMSBEIg==", "dev": true, "funding": [ { @@ -1876,14 +1876,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" } }, "node_modules/@csstools/color-helpers": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.0.tgz", - "integrity": "sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.1.tgz", + "integrity": "sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==", "dev": true, "funding": [ { @@ -1900,9 +1900,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", - "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.3.tgz", + "integrity": "sha512-rlOh81K3CvtY969Od5b1h29YT6MpCHejMCURKrRrXFeCpz67HGaBNvBmWT5S7S+CKn+V7KJ+qxSmK8jNd/aZWA==", "dev": true, "funding": [ { @@ -1918,14 +1918,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" } }, "node_modules/@csstools/css-color-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", - "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.3.tgz", + "integrity": "sha512-Qqhb5I/gEh1wI4brf6Kmy0Xn4J1IqO8OTDKWGRsBYtL4bGkHcV9i0XI2Mmo/UYFtSRoXW/RmKTcMh6sCI433Cw==", "dev": true, "funding": [ { @@ -1938,21 +1938,21 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.2.0", - "@csstools/css-calc": "^1.2.2" + "@csstools/color-helpers": "^4.2.1", + "@csstools/css-calc": "^1.2.3" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.0.tgz", + "integrity": "sha512-qvBMcOU/uWFCH/VO0MYe0AMs0BGMWAt6FTryMbFIKYtZtVnqTZtT8ktv5o718llkaGZWomJezJZjq3vJDHeJNQ==", "dev": true, "funding": [ { @@ -1968,13 +1968,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.3.2" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.2.tgz", + "integrity": "sha512-0xYOf4pQpAaE6Sm2Q0x3p25oRukzWQ/O8hWVvhIt9Iv98/uu053u2CGm/g3kJ+P0vOYTAYzoU8Evq2pg9ZPXtw==", "dev": true, "funding": [ { @@ -1991,9 +1991,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.12.tgz", + "integrity": "sha512-t1/CdyVJzOQUiGUcIBXRzTAkWTFPxiPnoKwowKW2z9Uj78c2bBWI/X94BeVfUwVq1xtCjD7dnO8kS6WONgp8Jw==", "dev": true, "funding": [ { @@ -2009,8 +2009,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -2040,9 +2040,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", - "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.17.tgz", + "integrity": "sha512-hi6g5KHMvxpxf01LCVu5xnNxX5h2Vkn9aKRmspn2esWjWtshuTXVOavTjwvogA+Eycm9Rn21QTYNU+qbKw6IeQ==", "dev": true, "funding": [ { @@ -2055,9 +2055,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2069,9 +2069,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", - "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.17.tgz", + "integrity": "sha512-Y65GHGCY1R+9+/5KrJjN7gAF1NZydng4AGknMggeUJIyo2ckLb4vBrlDmpIcHDdjQtV5631j1hxvalVTbpoiFw==", "dev": true, "funding": [ { @@ -2084,9 +2084,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2098,9 +2098,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", - "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.8.tgz", + "integrity": "sha512-/4WHpu4MrCCsUWRaDreyBcdF+5xnudk1JJLg6aWREeMaSpr3vsD0eywmOXct3xUm28TCqKS//S86IlcDJJdzoQ==", "dev": true, "funding": [ { @@ -2113,9 +2113,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-calc": "^1.2.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2151,9 +2151,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", - "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.10.tgz", + "integrity": "sha512-iPz4/cO8YiNjAYdtAiKGBdKZdFlAvDtUr2AgvAMxCa83e9MwTIKmsJZC3Frw7VYmkfknmdElEZr1FJU+PmB2PA==", "dev": true, "funding": [ { @@ -2166,9 +2166,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2178,9 +2178,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", - "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.18.tgz", + "integrity": "sha512-rZH7RnNYY911I/n8+DRrcri89GffptdyuFDGGj/UbxDISFirdR1uI/wcur9KYR/uFHXqrnJjrfi1cisfB7bL+g==", "dev": true, "funding": [ { @@ -2193,9 +2193,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2207,9 +2207,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", - "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.16.tgz", + "integrity": "sha512-nlC4D5xB7pomgR4kDZ1lqbVqrs6gxPqsM2OE5CkCn0EqCMxtqqtadtbK2dcFwzyujv3DL4wYNo+fgF4rJgLPZA==", "dev": true, "funding": [ { @@ -2222,9 +2222,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2311,9 +2311,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", - "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.6.tgz", + "integrity": "sha512-bu+cxKpcTrMDMkVCv7QURwKNPZEuXA3J0Udvz3HfmQHt4+OIvvfvDpTgejFXdOliCU4zK9/QdqebPcYneygZtg==", "dev": true, "funding": [ { @@ -2326,8 +2326,8 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2430,9 +2430,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", - "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.10.tgz", + "integrity": "sha512-nGP0KanI/jXrUMpaIBz6mdy/vNs3d/cjbNYuoEc7lCdNkntmxZvwxC2zIKI8QzGWaYsh9jahozMVceZ0jNyjgg==", "dev": true, "funding": [ { @@ -2445,7 +2445,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2456,9 +2456,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", - "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.7.tgz", + "integrity": "sha512-AjLG+vJvhrN2geUjYNvzncW1TJ+vC4QrVPGrLPxOSJ2QXC94krQErSW4aXMj0b13zhvVWeqf2NHIOVQknqV9cg==", "dev": true, "funding": [ { @@ -2471,10 +2471,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11" + "@csstools/css-calc": "^1.2.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", + "@csstools/media-query-list-parser": "^2.1.12" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2484,9 +2484,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", - "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.10.tgz", + "integrity": "sha512-DXae3i7OYJTejxcoUuf/AOIpy+6FWfGGKo/I3WefZI538l3k+ErU6V2xQOx/UmUXT2FDIdE1Ucl9JkZib2rEsA==", "dev": true, "funding": [ { @@ -2499,9 +2499,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11" + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", + "@csstools/media-query-list-parser": "^2.1.12" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2562,9 +2562,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", - "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.17.tgz", + "integrity": "sha512-kIng3Xmw6NKUvD/eEoHGwbyDFXDsuzsVGtNo3ndgZYYqy+DLiD+3drxwRKiViE5LUieLB1ERczXpLVmpSw61eg==", "dev": true, "funding": [ { @@ -2577,9 +2577,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2616,9 +2616,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", - "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.17.tgz", + "integrity": "sha512-EVckAtG8bocItZflXLJ50Su+gwg/4Jhkz1BztyNsT0/svwS6QMAeLjyUA75OsgtejNWQHvBMWna4xc9LCqdjrQ==", "dev": true, "funding": [ { @@ -2631,9 +2631,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2670,9 +2670,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", - "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.9.tgz", + "integrity": "sha512-uAw1J8hiZ0mM1DLaziI7CP5oagSwDnS5kufuROGIJFzESYfTqNVS3b7FgDZto9AxXdkwI+Sn48+cvG8PwzGMog==", "dev": true, "funding": [ { @@ -2685,9 +2685,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-calc": "^1.2.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2697,9 +2697,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz", - "integrity": "sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz", + "integrity": "sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==", "dev": true, "funding": [ { @@ -2712,7 +2712,7 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.2.0", + "@csstools/color-helpers": "^4.2.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2723,9 +2723,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", - "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.9.tgz", + "integrity": "sha512-rCAtKX3EsH91ZIHoxFzAAcMQeQCS+PsjzHl6fvsGXz/SV3lqzSmO7MWgFXyPktC2zjZXgOObAJ/2QkhMqVpgNg==", "dev": true, "funding": [ { @@ -2738,9 +2738,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-calc": "^1.2.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2" }, "engines": { "node": "^14 || ^16 || >=18" @@ -3457,11 +3457,12 @@ } }, "node_modules/@preact/preset-vite": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz", - "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.3.tgz", + "integrity": "sha512-IT4+IV3D4lIyoDrp4FUfx4dT2yW/5KIl2MXAsqqItGTbz1xUhtSyP9nS2kLXNnhLG4I2Nku/X+vKFMmRG+oMDA==", "dev": true, "dependencies": { + "@babel/code-frame": "^7.22.13", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@prefresh/vite": "^2.4.1", @@ -4195,9 +4196,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -4214,10 +4215,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -4275,9 +4276,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true, "funding": [ { @@ -4791,9 +4792,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.677", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz", - "integrity": "sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q==", + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", "dev": true }, "node_modules/entities": { @@ -4971,11 +4972,10 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -6381,11 +6381,10 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "license": "ISC" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -6410,9 +6409,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "funding": [ { @@ -6430,7 +6429,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -6479,9 +6478,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", - "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.12.tgz", + "integrity": "sha512-LGLWl6EDofJwDHMElYvt4YU9AeH+oijzOfeKhE0ebuu0aBSDeEg7CfFXMi0iiXWV1VKxn3MLGOtcBNnOiQS9Yg==", "dev": true, "funding": [ { @@ -6494,9 +6493,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -6560,9 +6559,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", - "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.7.tgz", + "integrity": "sha512-o2k5nnvRZhF36pr1fGFM7a1EMTcNdKNO70Tp1g2lfpYgiwIctR7ic4acBCDHBMYRcQ8mFlaBB1QsEywqrSIaFQ==", "dev": true, "funding": [ { @@ -6575,10 +6574,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.11", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11" + "@csstools/cascade-layer-name-parser": "^1.0.12", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", + "@csstools/media-query-list-parser": "^2.1.12" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6588,9 +6587,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.10", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", - "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.11.tgz", + "integrity": "sha512-CAIgz03I/GMhVbAKIi3u3P8j5JY2KHl0TlePcfUX3OUy8t0ynnWvyJaS1D92pEAw1LjmeKWi7+aIU0s53iYdOQ==", "dev": true, "funding": [ { @@ -6603,9 +6602,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.11", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/cascade-layer-name-parser": "^1.0.12", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -6617,9 +6616,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.10", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", - "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.11.tgz", + "integrity": "sha512-IoGprXOueDJL5t3ZuWR+QzPpmrQCFNhvoICsg0vDSehGwWNG0YV/Z4A+zouGRonC7NJThoV+A8A74IEMqMQUQw==", "dev": true, "funding": [ { @@ -6632,10 +6631,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.11", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "postcss-selector-parser": "^6.0.13" + "@csstools/cascade-layer-name-parser": "^1.0.12", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", + "postcss-selector-parser": "^6.1.0" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6830,9 +6829,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", - "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", + "version": "6.0.17", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.17.tgz", + "integrity": "sha512-QzjC6/3J6XKZzHGuUKhWNvlDMfWo+08dQOfQj4vWQdpZFdOxCh9QCR4w4XbV68EkdzywJie1mcm81jwFyV0+kg==", "dev": true, "funding": [ { @@ -6845,9 +6844,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-color-parser": "^2.0.3", + "@csstools/css-parser-algorithms": "^2.7.0", + "@csstools/css-tokenizer": "^2.3.2", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -6994,9 +6993,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.5.14", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.14.tgz", - "integrity": "sha512-gTMi+3kENN/mN+K59aR+vEOjlkujTmmXJcM9rnAqGh9Y/euQ/ypdp9rd8mO1eoIjAD8vNS15+xbkBxoi+65BqQ==", + "version": "9.5.15", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.15.tgz", + "integrity": "sha512-z/2akOVQChOGAdzaUR4pQrDOM3xGZc5/k4THHWyREbWAfngaJATA2SkEQMkiyV5Y/EoSwE0nt0IiaIs6CMmxfQ==", "dev": true, "funding": [ { @@ -7010,48 +7009,48 @@ ], "dependencies": { "@csstools/postcss-cascade-layers": "^4.0.6", - "@csstools/postcss-color-function": "^3.0.16", - "@csstools/postcss-color-mix-function": "^2.0.16", - "@csstools/postcss-exponential-functions": "^1.0.7", + "@csstools/postcss-color-function": "^3.0.17", + "@csstools/postcss-color-mix-function": "^2.0.17", + "@csstools/postcss-exponential-functions": "^1.0.8", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.9", - "@csstools/postcss-gradients-interpolation-method": "^4.0.17", - "@csstools/postcss-hwb-function": "^3.0.15", + "@csstools/postcss-gamut-mapping": "^1.0.10", + "@csstools/postcss-gradients-interpolation-method": "^4.0.18", + "@csstools/postcss-hwb-function": "^3.0.16", "@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-initial": "^1.0.1", "@csstools/postcss-is-pseudo-class": "^4.0.8", - "@csstools/postcss-light-dark-function": "^1.0.5", + "@csstools/postcss-light-dark-function": "^1.0.6", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.9", - "@csstools/postcss-media-minmax": "^1.1.6", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", + "@csstools/postcss-logical-viewport-units": "^2.0.10", + "@csstools/postcss-media-minmax": "^1.1.7", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.10", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.16", + "@csstools/postcss-oklab-function": "^3.0.17", "@csstools/postcss-progressive-custom-properties": "^3.2.0", - "@csstools/postcss-relative-color-syntax": "^2.0.16", + "@csstools/postcss-relative-color-syntax": "^2.0.17", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.8", - "@csstools/postcss-text-decoration-shorthand": "^3.0.6", - "@csstools/postcss-trigonometric-functions": "^3.0.8", + "@csstools/postcss-stepped-value-functions": "^3.0.9", + "@csstools/postcss-text-decoration-shorthand": "^3.0.7", + "@csstools/postcss-trigonometric-functions": "^3.0.9", "@csstools/postcss-unset-value": "^3.0.1", "autoprefixer": "^10.4.19", - "browserslist": "^4.22.3", + "browserslist": "^4.23.1", "css-blank-pseudo": "^6.0.2", "css-has-pseudo": "^6.0.5", "css-prefers-color-scheme": "^9.0.1", "cssdb": "^8.0.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.11", + "postcss-color-functional-notation": "^6.0.12", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.6", - "postcss-custom-properties": "^13.3.10", - "postcss-custom-selectors": "^7.1.10", + "postcss-custom-media": "^10.0.7", + "postcss-custom-properties": "^13.3.11", + "postcss-custom-selectors": "^7.1.11", "postcss-dir-pseudo-class": "^8.0.1", "postcss-double-position-gradients": "^5.0.6", "postcss-focus-visible": "^9.0.1", @@ -7059,7 +7058,7 @@ "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.16", + "postcss-lab-function": "^6.0.17", "postcss-logical": "^7.0.1", "postcss-nesting": "^12.1.5", "postcss-opacity-percentage": "^2.0.0", @@ -7158,9 +7157,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.22.0", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", - "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", + "version": "10.22.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz", + "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -8247,9 +8246,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -8265,10 +8264,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -8378,13 +8376,13 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dev": true, "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "rollup": "^4.13.0" }, "bin": { diff --git a/package.json b/package.json index e85bfc47..957f0528 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.0", + "preact": "~10.22.1", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.10.3", @@ -50,12 +50,12 @@ }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.0", - "@preact/preset-vite": "~2.8.2", - "postcss": "~8.4.38", + "@preact/preset-vite": "~2.8.3", + "postcss": "~8.4.39", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~9.5.14", + "postcss-preset-env": "~9.5.15", "twitter-text": "~3.1.0", - "vite": "~5.3.1", + "vite": "~5.3.3", "vite-plugin-generate-file": "~0.1.1", "vite-plugin-html-config": "~1.0.11", "vite-plugin-pwa": "~0.20.0", From a72400febf62e34e0aaaeef86ae64ed6e373d492 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 5 Jul 2024 16:19:04 +0800 Subject: [PATCH 013/327] Test support Hollo --- src/utils/isMastodonLinkMaybe.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/isMastodonLinkMaybe.jsx b/src/utils/isMastodonLinkMaybe.jsx index f36e300c..c26624b8 100644 --- a/src/utils/isMastodonLinkMaybe.jsx +++ b/src/utils/isMastodonLinkMaybe.jsx @@ -7,6 +7,7 @@ export default function isMastodonLinkMaybe(url) { /^\/notes\/[a-z0-9]+$/i.test(pathname) || // Misskey, Firefish /^\/(notice|objects)\/[a-z0-9-]+$/i.test(pathname) || // Pleroma /^\/@[^/]+\/post\/[a-z0-9]+$/i.test(pathname) || // Threads + /^\/@[^/]+\/[a-z0-9]+[a-z0-9\-]+[a-z0-9]+$/i.test(pathname) || // Hollo /#\/[^\/]+\.[^\/]+\/s\/.+/i.test(hash) // Phanpy 🫣 ); } catch (e) { From f0872e79fbc4c5666118d317c7bfbab6f290903b Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 5 Jul 2024 18:56:52 +0800 Subject: [PATCH 014/327] Revert "Upgrade dependencies" This reverts commit cb9848fe8c03968516db9cc27acf7e49d7e84409. --- package-lock.json | 438 +++++++++++++++++++++++----------------------- package.json | 10 +- 2 files changed, 225 insertions(+), 223 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71d894ae..4cc3cc0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.1", + "preact": "~10.22.0", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.10.3", @@ -47,12 +47,12 @@ }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.0", - "@preact/preset-vite": "~2.8.3", - "postcss": "~8.4.39", + "@preact/preset-vite": "~2.8.2", + "postcss": "~8.4.38", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~9.5.15", + "postcss-preset-env": "~9.5.14", "twitter-text": "~3.1.0", - "vite": "~5.3.3", + "vite": "~5.3.1", "vite-plugin-generate-file": "~0.1.1", "vite-plugin-html-config": "~1.0.11", "vite-plugin-pwa": "~0.20.0", @@ -1858,9 +1858,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.12.tgz", - "integrity": "sha512-iNCCOnaoycAfcIot3v/orjkTol+j8+Z5xgpqxUpZSdqeaxCADQZtldHhlvzDipmi7OoWdcJUO6DRZcnkMSBEIg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true, "funding": [ { @@ -1876,14 +1876,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/color-helpers": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.1.tgz", - "integrity": "sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.0.tgz", + "integrity": "sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==", "dev": true, "funding": [ { @@ -1900,9 +1900,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.3.tgz", - "integrity": "sha512-rlOh81K3CvtY969Od5b1h29YT6MpCHejMCURKrRrXFeCpz67HGaBNvBmWT5S7S+CKn+V7KJ+qxSmK8jNd/aZWA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", + "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", "dev": true, "funding": [ { @@ -1918,14 +1918,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-color-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.3.tgz", - "integrity": "sha512-Qqhb5I/gEh1wI4brf6Kmy0Xn4J1IqO8OTDKWGRsBYtL4bGkHcV9i0XI2Mmo/UYFtSRoXW/RmKTcMh6sCI433Cw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", + "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", "dev": true, "funding": [ { @@ -1938,21 +1938,21 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.2.1", - "@csstools/css-calc": "^1.2.3" + "@csstools/color-helpers": "^4.2.0", + "@csstools/css-calc": "^1.2.2" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.0.tgz", - "integrity": "sha512-qvBMcOU/uWFCH/VO0MYe0AMs0BGMWAt6FTryMbFIKYtZtVnqTZtT8ktv5o718llkaGZWomJezJZjq3vJDHeJNQ==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true, "funding": [ { @@ -1968,13 +1968,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.2.tgz", - "integrity": "sha512-0xYOf4pQpAaE6Sm2Q0x3p25oRukzWQ/O8hWVvhIt9Iv98/uu053u2CGm/g3kJ+P0vOYTAYzoU8Evq2pg9ZPXtw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true, "funding": [ { @@ -1991,9 +1991,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.12.tgz", - "integrity": "sha512-t1/CdyVJzOQUiGUcIBXRzTAkWTFPxiPnoKwowKW2z9Uj78c2bBWI/X94BeVfUwVq1xtCjD7dnO8kS6WONgp8Jw==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true, "funding": [ { @@ -2009,8 +2009,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -2040,9 +2040,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.17.tgz", - "integrity": "sha512-hi6g5KHMvxpxf01LCVu5xnNxX5h2Vkn9aKRmspn2esWjWtshuTXVOavTjwvogA+Eycm9Rn21QTYNU+qbKw6IeQ==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", + "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", "dev": true, "funding": [ { @@ -2055,9 +2055,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2069,9 +2069,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.17.tgz", - "integrity": "sha512-Y65GHGCY1R+9+/5KrJjN7gAF1NZydng4AGknMggeUJIyo2ckLb4vBrlDmpIcHDdjQtV5631j1hxvalVTbpoiFw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", + "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", "dev": true, "funding": [ { @@ -2084,9 +2084,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2098,9 +2098,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.8.tgz", - "integrity": "sha512-/4WHpu4MrCCsUWRaDreyBcdF+5xnudk1JJLg6aWREeMaSpr3vsD0eywmOXct3xUm28TCqKS//S86IlcDJJdzoQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", + "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", "dev": true, "funding": [ { @@ -2113,9 +2113,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2151,9 +2151,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.10.tgz", - "integrity": "sha512-iPz4/cO8YiNjAYdtAiKGBdKZdFlAvDtUr2AgvAMxCa83e9MwTIKmsJZC3Frw7VYmkfknmdElEZr1FJU+PmB2PA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", + "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", "dev": true, "funding": [ { @@ -2166,9 +2166,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2178,9 +2178,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.18.tgz", - "integrity": "sha512-rZH7RnNYY911I/n8+DRrcri89GffptdyuFDGGj/UbxDISFirdR1uI/wcur9KYR/uFHXqrnJjrfi1cisfB7bL+g==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", + "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", "dev": true, "funding": [ { @@ -2193,9 +2193,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2207,9 +2207,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.16.tgz", - "integrity": "sha512-nlC4D5xB7pomgR4kDZ1lqbVqrs6gxPqsM2OE5CkCn0EqCMxtqqtadtbK2dcFwzyujv3DL4wYNo+fgF4rJgLPZA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", + "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", "dev": true, "funding": [ { @@ -2222,9 +2222,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2311,9 +2311,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.6.tgz", - "integrity": "sha512-bu+cxKpcTrMDMkVCv7QURwKNPZEuXA3J0Udvz3HfmQHt4+OIvvfvDpTgejFXdOliCU4zK9/QdqebPcYneygZtg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", + "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", "dev": true, "funding": [ { @@ -2326,8 +2326,8 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2430,9 +2430,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.10.tgz", - "integrity": "sha512-nGP0KanI/jXrUMpaIBz6mdy/vNs3d/cjbNYuoEc7lCdNkntmxZvwxC2zIKI8QzGWaYsh9jahozMVceZ0jNyjgg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", + "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", "dev": true, "funding": [ { @@ -2445,7 +2445,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2456,9 +2456,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.7.tgz", - "integrity": "sha512-AjLG+vJvhrN2geUjYNvzncW1TJ+vC4QrVPGrLPxOSJ2QXC94krQErSW4aXMj0b13zhvVWeqf2NHIOVQknqV9cg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", + "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", "dev": true, "funding": [ { @@ -2471,10 +2471,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", - "@csstools/media-query-list-parser": "^2.1.12" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2484,9 +2484,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.10.tgz", - "integrity": "sha512-DXae3i7OYJTejxcoUuf/AOIpy+6FWfGGKo/I3WefZI538l3k+ErU6V2xQOx/UmUXT2FDIdE1Ucl9JkZib2rEsA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", + "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", "dev": true, "funding": [ { @@ -2499,9 +2499,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", - "@csstools/media-query-list-parser": "^2.1.12" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2562,9 +2562,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.17.tgz", - "integrity": "sha512-kIng3Xmw6NKUvD/eEoHGwbyDFXDsuzsVGtNo3ndgZYYqy+DLiD+3drxwRKiViE5LUieLB1ERczXpLVmpSw61eg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", + "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", "dev": true, "funding": [ { @@ -2577,9 +2577,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2616,9 +2616,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.17.tgz", - "integrity": "sha512-EVckAtG8bocItZflXLJ50Su+gwg/4Jhkz1BztyNsT0/svwS6QMAeLjyUA75OsgtejNWQHvBMWna4xc9LCqdjrQ==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", + "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", "dev": true, "funding": [ { @@ -2631,9 +2631,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -2670,9 +2670,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.9.tgz", - "integrity": "sha512-uAw1J8hiZ0mM1DLaziI7CP5oagSwDnS5kufuROGIJFzESYfTqNVS3b7FgDZto9AxXdkwI+Sn48+cvG8PwzGMog==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", + "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", "dev": true, "funding": [ { @@ -2685,9 +2685,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2697,9 +2697,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz", - "integrity": "sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz", + "integrity": "sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw==", "dev": true, "funding": [ { @@ -2712,7 +2712,7 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.2.1", + "@csstools/color-helpers": "^4.2.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2723,9 +2723,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.9.tgz", - "integrity": "sha512-rCAtKX3EsH91ZIHoxFzAAcMQeQCS+PsjzHl6fvsGXz/SV3lqzSmO7MWgFXyPktC2zjZXgOObAJ/2QkhMqVpgNg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", + "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", "dev": true, "funding": [ { @@ -2738,9 +2738,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -3457,12 +3457,11 @@ } }, "node_modules/@preact/preset-vite": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.3.tgz", - "integrity": "sha512-IT4+IV3D4lIyoDrp4FUfx4dT2yW/5KIl2MXAsqqItGTbz1xUhtSyP9nS2kLXNnhLG4I2Nku/X+vKFMmRG+oMDA==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz", + "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@prefresh/vite": "^2.4.1", @@ -4196,9 +4195,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -4215,10 +4214,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4276,9 +4275,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001605", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", + "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", "dev": true, "funding": [ { @@ -4792,9 +4791,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.4.677", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz", + "integrity": "sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q==", "dev": true }, "node_modules/entities": { @@ -4972,10 +4971,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6381,10 +6381,11 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6409,9 +6410,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -6429,7 +6430,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", + "picocolors": "^1.0.0", "source-map-js": "^1.2.0" }, "engines": { @@ -6478,9 +6479,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.12.tgz", - "integrity": "sha512-LGLWl6EDofJwDHMElYvt4YU9AeH+oijzOfeKhE0ebuu0aBSDeEg7CfFXMi0iiXWV1VKxn3MLGOtcBNnOiQS9Yg==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", + "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", "dev": true, "funding": [ { @@ -6493,9 +6494,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -6559,9 +6560,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.7.tgz", - "integrity": "sha512-o2k5nnvRZhF36pr1fGFM7a1EMTcNdKNO70Tp1g2lfpYgiwIctR7ic4acBCDHBMYRcQ8mFlaBB1QsEywqrSIaFQ==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "funding": [ { @@ -6574,10 +6575,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.12", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", - "@csstools/media-query-list-parser": "^2.1.12" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6587,9 +6588,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.11.tgz", - "integrity": "sha512-CAIgz03I/GMhVbAKIi3u3P8j5JY2KHl0TlePcfUX3OUy8t0ynnWvyJaS1D92pEAw1LjmeKWi7+aIU0s53iYdOQ==", + "version": "13.3.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", + "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", "dev": true, "funding": [ { @@ -6602,9 +6603,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.12", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -6616,9 +6617,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.11.tgz", - "integrity": "sha512-IoGprXOueDJL5t3ZuWR+QzPpmrQCFNhvoICsg0vDSehGwWNG0YV/Z4A+zouGRonC7NJThoV+A8A74IEMqMQUQw==", + "version": "7.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", + "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", "dev": true, "funding": [ { @@ -6631,10 +6632,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.12", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", - "postcss-selector-parser": "^6.1.0" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "postcss-selector-parser": "^6.0.13" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6829,9 +6830,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.17.tgz", - "integrity": "sha512-QzjC6/3J6XKZzHGuUKhWNvlDMfWo+08dQOfQj4vWQdpZFdOxCh9QCR4w4XbV68EkdzywJie1mcm81jwFyV0+kg==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", + "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", "dev": true, "funding": [ { @@ -6844,9 +6845,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.3", - "@csstools/css-parser-algorithms": "^2.7.0", - "@csstools/css-tokenizer": "^2.3.2", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, @@ -6993,9 +6994,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.5.15", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.15.tgz", - "integrity": "sha512-z/2akOVQChOGAdzaUR4pQrDOM3xGZc5/k4THHWyREbWAfngaJATA2SkEQMkiyV5Y/EoSwE0nt0IiaIs6CMmxfQ==", + "version": "9.5.14", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.14.tgz", + "integrity": "sha512-gTMi+3kENN/mN+K59aR+vEOjlkujTmmXJcM9rnAqGh9Y/euQ/ypdp9rd8mO1eoIjAD8vNS15+xbkBxoi+65BqQ==", "dev": true, "funding": [ { @@ -7009,48 +7010,48 @@ ], "dependencies": { "@csstools/postcss-cascade-layers": "^4.0.6", - "@csstools/postcss-color-function": "^3.0.17", - "@csstools/postcss-color-mix-function": "^2.0.17", - "@csstools/postcss-exponential-functions": "^1.0.8", + "@csstools/postcss-color-function": "^3.0.16", + "@csstools/postcss-color-mix-function": "^2.0.16", + "@csstools/postcss-exponential-functions": "^1.0.7", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.10", - "@csstools/postcss-gradients-interpolation-method": "^4.0.18", - "@csstools/postcss-hwb-function": "^3.0.16", + "@csstools/postcss-gamut-mapping": "^1.0.9", + "@csstools/postcss-gradients-interpolation-method": "^4.0.17", + "@csstools/postcss-hwb-function": "^3.0.15", "@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-initial": "^1.0.1", "@csstools/postcss-is-pseudo-class": "^4.0.8", - "@csstools/postcss-light-dark-function": "^1.0.6", + "@csstools/postcss-light-dark-function": "^1.0.5", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.10", - "@csstools/postcss-media-minmax": "^1.1.7", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.10", + "@csstools/postcss-logical-viewport-units": "^2.0.9", + "@csstools/postcss-media-minmax": "^1.1.6", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.17", + "@csstools/postcss-oklab-function": "^3.0.16", "@csstools/postcss-progressive-custom-properties": "^3.2.0", - "@csstools/postcss-relative-color-syntax": "^2.0.17", + "@csstools/postcss-relative-color-syntax": "^2.0.16", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.9", - "@csstools/postcss-text-decoration-shorthand": "^3.0.7", - "@csstools/postcss-trigonometric-functions": "^3.0.9", + "@csstools/postcss-stepped-value-functions": "^3.0.8", + "@csstools/postcss-text-decoration-shorthand": "^3.0.6", + "@csstools/postcss-trigonometric-functions": "^3.0.8", "@csstools/postcss-unset-value": "^3.0.1", "autoprefixer": "^10.4.19", - "browserslist": "^4.23.1", + "browserslist": "^4.22.3", "css-blank-pseudo": "^6.0.2", "css-has-pseudo": "^6.0.5", "css-prefers-color-scheme": "^9.0.1", "cssdb": "^8.0.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.12", + "postcss-color-functional-notation": "^6.0.11", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.7", - "postcss-custom-properties": "^13.3.11", - "postcss-custom-selectors": "^7.1.11", + "postcss-custom-media": "^10.0.6", + "postcss-custom-properties": "^13.3.10", + "postcss-custom-selectors": "^7.1.10", "postcss-dir-pseudo-class": "^8.0.1", "postcss-double-position-gradients": "^5.0.6", "postcss-focus-visible": "^9.0.1", @@ -7058,7 +7059,7 @@ "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.17", + "postcss-lab-function": "^6.0.16", "postcss-logical": "^7.0.1", "postcss-nesting": "^12.1.5", "postcss-opacity-percentage": "^2.0.0", @@ -7157,9 +7158,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.22.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz", - "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==", + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", + "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -8246,9 +8247,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -8264,9 +8265,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -8376,13 +8378,13 @@ } }, "node_modules/vite": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", - "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", "dev": true, "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.39", + "postcss": "^8.4.38", "rollup": "^4.13.0" }, "bin": { diff --git a/package.json b/package.json index 957f0528..e85bfc47 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.1", + "preact": "~10.22.0", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.10.3", @@ -50,12 +50,12 @@ }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.0", - "@preact/preset-vite": "~2.8.3", - "postcss": "~8.4.39", + "@preact/preset-vite": "~2.8.2", + "postcss": "~8.4.38", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~9.5.15", + "postcss-preset-env": "~9.5.14", "twitter-text": "~3.1.0", - "vite": "~5.3.3", + "vite": "~5.3.1", "vite-plugin-generate-file": "~0.1.1", "vite-plugin-html-config": "~1.0.11", "vite-plugin-pwa": "~0.20.0", From f26dbeb79a3ffc7ccacf546b7501eda7749f0f06 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sat, 6 Jul 2024 09:47:28 +0800 Subject: [PATCH 015/327] Fix more cloaking business --- src/cloak-mode.css | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/cloak-mode.css b/src/cloak-mode.css index 4ca29ecc..2b9a0b0b 100644 --- a/src/cloak-mode.css +++ b/src/cloak-mode.css @@ -9,14 +9,17 @@ body.cloak, .status .content-container, .status .content-container *, .status .content-compact > *, + .account-container .actions small, .account-container :is(header, main > *:not(.actions)), .account-container :is(header, main > *:not(.actions)) *, - .header-double-lines, + .header-double-lines *, .account-block, .catchup-filters .filter-author *, .post-peek-html *, .post-peek-content > *, - .request-notifications-account * { + .request-notifications-account *, + .status.compact-thread *, + .status .content-compact { text-decoration-thickness: 1.1em; text-decoration-line: line-through; /* text-rendering: optimizeSpeed; */ @@ -50,10 +53,19 @@ body.cloak, body.cloak, .cloak { + .header-double-lines *, + .account-container .profile-metadata b, + .account-container .actions small, + .account-container .stats *, .media-container figcaption, .media-container figcaption > *, .catchup-filters .filter-author *, .request-notifications-account * { color: var(--text-color) !important; } + + .account-container .actions small, + .status .content-compact { + background-color: currentColor !important; + } } From 9ea7a1f4db8d189f5b2e3862875d4153bfb928f6 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sat, 6 Jul 2024 09:47:42 +0800 Subject: [PATCH 016/327] Use onClose for this --- src/components/compose.jsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/compose.jsx b/src/components/compose.jsx index de4cb698..77bd451d 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -2316,10 +2316,8 @@ function MediaAttachment({
{showModal && ( { - if (e.target === e.currentTarget) { - setShowModal(false); - } + onClose={() => { + setShowModal(false); }} >
From 180a23f1163e088dbdb929670b764fdd9528b40d Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 7 Jul 2024 22:56:24 +0800 Subject: [PATCH 017/327] Fix wrong exceeded chars highlighting --- src/components/compose.jsx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 77bd451d..545765c8 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -147,23 +147,22 @@ const SCAN_RE = new RegExp( ); const segmenter = new Intl.Segmenter(); -function highlightText(text, { maxCharacters = Infinity }) { - // Accept text string, return formatted HTML string - // Escape all HTML special characters - let html = text +function escapeHTML(text) { + return text .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); - +} +function highlightText(text, { maxCharacters = Infinity }) { // Exceeded characters limit const { composerCharacterCount } = states; if (composerCharacterCount > maxCharacters) { // Highlight exceeded characters let withinLimitHTML = '', exceedLimitHTML = ''; - const htmlSegments = segmenter.segment(html); + const htmlSegments = segmenter.segment(text); for (const { segment, index } of htmlSegments) { if (index < maxCharacters) { withinLimitHTML += segment; @@ -174,13 +173,13 @@ function highlightText(text, { maxCharacters = Infinity }) { if (exceedLimitHTML) { exceedLimitHTML = '' + - exceedLimitHTML + + escapeHTML(exceedLimitHTML) + ''; } - return withinLimitHTML + exceedLimitHTML; + return escapeHTML(withinLimitHTML) + exceedLimitHTML; } - return html + return escapeHTML(text) .replace(urlRegexObj, '$2$3') // URLs .replace(MENTION_RE, '$1$2') // Mentions .replace(HASHTAG_RE, '$1$2') // Hashtags From 418895e1c30472b13449e615e203983e24979f8e Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Mon, 8 Jul 2024 17:40:16 +0800 Subject: [PATCH 018/327] Another attempt: upgrade dependencies --- package-lock.json | 521 ++++++++++++++++++++++++---------------------- package.json | 10 +- vite.config.js | 9 +- 3 files changed, 286 insertions(+), 254 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4cc3cc0b..8adc0a03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.0", + "preact": "~10.22.1", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.10.3", @@ -47,12 +47,12 @@ }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.0", - "@preact/preset-vite": "~2.8.2", - "postcss": "~8.4.38", + "@preact/preset-vite": "~2.8.3", + "postcss": "~8.4.39", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~9.5.14", + "postcss-preset-env": "~9.6.0", "twitter-text": "~3.1.0", - "vite": "~5.3.1", + "vite": "~5.3.3", "vite-plugin-generate-file": "~0.1.1", "vite-plugin-html-config": "~1.0.11", "vite-plugin-pwa": "~0.20.0", @@ -1858,9 +1858,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", - "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.13.tgz", + "integrity": "sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng==", "dev": true, "funding": [ { @@ -1876,14 +1876,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/color-helpers": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.0.tgz", - "integrity": "sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.1.tgz", + "integrity": "sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw==", "dev": true, "funding": [ { @@ -1900,9 +1900,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", - "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.4.tgz", + "integrity": "sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q==", "dev": true, "funding": [ { @@ -1918,14 +1918,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-color-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", - "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.4.tgz", + "integrity": "sha512-yUb0mk/k2yVNcQvRmd9uikpu6D0aamFJGgU++5d0lng6ucaJkhKyhDCQCj9rVuQYntvFQKqyU6UfTPQWU2UkXQ==", "dev": true, "funding": [ { @@ -1938,21 +1938,21 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.2.0", - "@csstools/css-calc": "^1.2.2" + "@csstools/color-helpers": "^4.2.1", + "@csstools/css-calc": "^1.2.4" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -1968,13 +1968,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -1991,9 +1991,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -2009,8 +2009,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -2040,9 +2040,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", - "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.19.tgz", + "integrity": "sha512-d1OHEXyYGe21G3q88LezWWx31ImEDdmINNDy0LyLNN9ChgN2bPxoubUPiHf9KmwypBMaHmNcMuA/WZOKdZk/Lg==", "dev": true, "funding": [ { @@ -2055,10 +2055,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2069,9 +2069,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", - "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.19.tgz", + "integrity": "sha512-mLvQlMX+keRYr16AuvuV8WYKUwF+D0DiCqlBdvhQ0KYEtcQl9/is9Ssg7RcIys8x0jIn2h1zstS4izckdZj9wg==", "dev": true, "funding": [ { @@ -2084,10 +2084,38 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/utilities": "^1.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-1.0.0.tgz", + "integrity": "sha512-SkHdj7EMM/57GVvSxSELpUg7zb5eAndBeuvGwFzYtU06/QXJ/h9fuK7wO5suteJzGhm3GDF/EWPCdWV2h1IGHQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2098,9 +2126,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", - "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.9.tgz", + "integrity": "sha512-x1Avr15mMeuX7Z5RJUl7DmjhUtg+Amn5DZRD0fQ2TlTFTcJS8U1oxXQ9e5mA62S2RJgUU6db20CRoJyDvae2EQ==", "dev": true, "funding": [ { @@ -2113,9 +2141,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2151,9 +2179,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", - "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.11.tgz", + "integrity": "sha512-KrHGsUPXRYxboXmJ9wiU/RzDM7y/5uIefLWKFSc36Pok7fxiPyvkSHO51kh+RLZS1W5hbqw9qaa6+tKpTSxa5g==", "dev": true, "funding": [ { @@ -2166,9 +2194,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2178,9 +2206,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", - "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.20.tgz", + "integrity": "sha512-ZFl2JBHano6R20KB5ZrB8KdPM2pVK0u+/3cGQ2T8VubJq982I2LSOvQ4/VtxkAXjkPkk1rXt4AD1ni7UjTZ1Og==", "dev": true, "funding": [ { @@ -2193,10 +2221,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2207,9 +2235,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", - "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.18.tgz", + "integrity": "sha512-3ifnLltR5C7zrJ+g18caxkvSRnu9jBBXCYgnBznRjxm6gQJGnnCO9H6toHfywNdNr/qkiVf2dymERPQLDnjLRQ==", "dev": true, "funding": [ { @@ -2222,10 +2250,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2236,9 +2264,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.6.tgz", - "integrity": "sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.7.tgz", + "integrity": "sha512-YoaNHH2wNZD+c+rHV02l4xQuDpfR8MaL7hD45iJyr+USwvr0LOheeytJ6rq8FN6hXBmEeoJBeXXgGmM8fkhH4g==", "dev": true, "funding": [ { @@ -2251,7 +2279,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -2311,9 +2339,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", - "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.8.tgz", + "integrity": "sha512-x0UtpCyVnERsplUeoaY6nEtp1HxTf4lJjoK/ULEm40DraqFfUdUSt76yoOyX5rGY6eeOUOkurHyYlFHVKv/pew==", "dev": true, "funding": [ { @@ -2326,9 +2354,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2430,9 +2458,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", - "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.11.tgz", + "integrity": "sha512-ElITMOGcjQtvouxjd90WmJRIw1J7KMP+M+O87HaVtlgOOlDt1uEPeTeii8qKGe2AiedEp0XOGIo9lidbiU2Ogg==", "dev": true, "funding": [ { @@ -2445,7 +2473,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/css-tokenizer": "^2.4.1", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2456,9 +2484,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", - "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.8.tgz", + "integrity": "sha512-KYQCal2i7XPNtHAUxCECdrC7tuxIWQCW+s8eMYs5r5PaAiVTeKwlrkRS096PFgojdNCmHeG0Cb7njtuNswNf+w==", "dev": true, "funding": [ { @@ -2471,10 +2499,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11" + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2484,9 +2512,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", - "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.11.tgz", + "integrity": "sha512-YD6jrib20GRGQcnOu49VJjoAnQ/4249liuz7vTpy/JfgqQ1Dlc5eD4HPUMNLOw9CWey9E6Etxwf/xc/ZF8fECA==", "dev": true, "funding": [ { @@ -2499,9 +2527,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2562,9 +2590,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", - "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.19.tgz", + "integrity": "sha512-e3JxXmxjU3jpU7TzZrsNqSX4OHByRC3XjItV3Ieo/JEQmLg5rdOL4lkv/1vp27gXemzfNt44F42k/pn0FpE21Q==", "dev": true, "funding": [ { @@ -2577,10 +2605,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2591,9 +2619,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz", - "integrity": "sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.3.0.tgz", + "integrity": "sha512-W2oV01phnILaRGYPmGFlL2MT/OgYjQDrL9sFlbdikMFi6oQkFki9B86XqEWR7HCsTZFVq7dbzr/o71B75TKkGg==", "dev": true, "funding": [ { @@ -2616,9 +2644,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", - "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.19.tgz", + "integrity": "sha512-MxUMSNvio1WwuS6WRLlQuv6nNPXwIWUFzBBAvL/tBdWfiKjiJnAa6eSSN5gtaacSqUkQ/Ce5Z1OzLRfeaWhADA==", "dev": true, "funding": [ { @@ -2631,10 +2659,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2670,9 +2698,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", - "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.10.tgz", + "integrity": "sha512-MZwo0D0TYrQhT5FQzMqfy/nGZ28D1iFtpN7Su1ck5BPHS95+/Y5O9S4kEvo76f2YOsqwYcT8ZGehSI1TnzuX2g==", "dev": true, "funding": [ { @@ -2685,9 +2713,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2697,9 +2725,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz", - "integrity": "sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz", + "integrity": "sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA==", "dev": true, "funding": [ { @@ -2712,7 +2740,7 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.2.0", + "@csstools/color-helpers": "^4.2.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2723,9 +2751,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", - "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.10.tgz", + "integrity": "sha512-G9G8moTc2wiad61nY5HfvxLiM/myX0aYK4s1x8MQlPH29WDPxHQM7ghGgvv2qf2xH+rrXhztOmjGHJj4jsEqXw==", "dev": true, "funding": [ { @@ -2738,9 +2766,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-calc": "^1.2.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -3457,11 +3485,12 @@ } }, "node_modules/@preact/preset-vite": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz", - "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.3.tgz", + "integrity": "sha512-IT4+IV3D4lIyoDrp4FUfx4dT2yW/5KIl2MXAsqqItGTbz1xUhtSyP9nS2kLXNnhLG4I2Nku/X+vKFMmRG+oMDA==", "dev": true, "dependencies": { + "@babel/code-frame": "^7.22.13", "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@prefresh/vite": "^2.4.1", @@ -4195,9 +4224,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -4214,10 +4243,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -4275,9 +4304,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true, "funding": [ { @@ -4534,9 +4563,9 @@ } }, "node_modules/cssdb": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.0.0.tgz", - "integrity": "sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.1.0.tgz", + "integrity": "sha512-BQN57lfS4dYt2iL0LgyrlDbefZKEtUyrO8rbzrbGrqBk6OoyNTQLF+porY9DrpDBjLo4NEvj2IJttC7vf3x+Ew==", "dev": true, "funding": [ { @@ -4791,9 +4820,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.677", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz", - "integrity": "sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q==", + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", "dev": true }, "node_modules/entities": { @@ -4971,11 +5000,10 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -6381,11 +6409,10 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "license": "ISC" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -6410,9 +6437,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "funding": [ { @@ -6430,7 +6457,7 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -6479,9 +6506,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", - "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.14.tgz", + "integrity": "sha512-dNUX+UH4dAozZ8uMHZ3CtCNYw8fyFAmqqdcyxMr7PEdM9jLXV19YscoYO0F25KqZYhmtWKQ+4tKrIZQrwzwg7A==", "dev": true, "funding": [ { @@ -6494,10 +6521,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -6560,9 +6587,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", - "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.8.tgz", + "integrity": "sha512-V1KgPcmvlGdxTel4/CyQtBJEFhMVpEmRGFrnVtgfGIHj5PJX9vO36eFBxKBeJn+aCDTed70cc+98Mz3J/uVdGQ==", "dev": true, "funding": [ { @@ -6575,10 +6602,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.11", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/media-query-list-parser": "^2.1.11" + "@csstools/cascade-layer-name-parser": "^1.0.13", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6588,9 +6615,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.10", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", - "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", + "version": "13.3.12", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.12.tgz", + "integrity": "sha512-oPn/OVqONB2ZLNqN185LDyaVByELAA/u3l2CS2TS16x2j2XsmV4kd8U49+TMxmUsEU9d8fB/I10E6U7kB0L1BA==", "dev": true, "funding": [ { @@ -6603,9 +6630,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.11", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", + "@csstools/cascade-layer-name-parser": "^1.0.13", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -6617,9 +6644,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.10", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", - "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.12.tgz", + "integrity": "sha512-ctIoprBMJwByYMGjXG0F7IT2iMF2hnamQ+aWZETyBM0aAlyaYdVZTeUkk8RB+9h9wP+NdN3f01lfvKl2ZSqC0g==", "dev": true, "funding": [ { @@ -6632,10 +6659,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.11", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "postcss-selector-parser": "^6.0.13" + "@csstools/cascade-layer-name-parser": "^1.0.13", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "postcss-selector-parser": "^6.1.0" }, "engines": { "node": "^14 || ^16 || >=18" @@ -6695,9 +6722,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.6.tgz", - "integrity": "sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.7.tgz", + "integrity": "sha512-1xEhjV9u1s4l3iP5lRt1zvMjI/ya8492o9l/ivcxHhkO3nOz16moC4JpMxDUGrOs4R3hX+KWT7gKoV842cwRgg==", "dev": true, "funding": [ { @@ -6710,7 +6737,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -6830,9 +6857,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", - "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.19.tgz", + "integrity": "sha512-vwln/mgvFrotJuGV8GFhpAOu9iGf3pvTBr6dLPDmUcqVD5OsQpEFyQMAFTxSxWXGEzBj6ld4pZ/9GDfEpXvo0g==", "dev": true, "funding": [ { @@ -6845,10 +6872,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^2.0.2", - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/css-color-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -6994,9 +7021,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.5.14", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.14.tgz", - "integrity": "sha512-gTMi+3kENN/mN+K59aR+vEOjlkujTmmXJcM9rnAqGh9Y/euQ/ypdp9rd8mO1eoIjAD8vNS15+xbkBxoi+65BqQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.6.0.tgz", + "integrity": "sha512-Lxfk4RYjUdwPCYkc321QMdgtdCP34AeI94z+/8kVmqnTIlD4bMRQeGcMZgwz8BxHrzQiFXYIR5d7k/9JMs2MEA==", "dev": true, "funding": [ { @@ -7010,56 +7037,57 @@ ], "dependencies": { "@csstools/postcss-cascade-layers": "^4.0.6", - "@csstools/postcss-color-function": "^3.0.16", - "@csstools/postcss-color-mix-function": "^2.0.16", - "@csstools/postcss-exponential-functions": "^1.0.7", + "@csstools/postcss-color-function": "^3.0.19", + "@csstools/postcss-color-mix-function": "^2.0.19", + "@csstools/postcss-content-alt-text": "^1.0.0", + "@csstools/postcss-exponential-functions": "^1.0.9", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.9", - "@csstools/postcss-gradients-interpolation-method": "^4.0.17", - "@csstools/postcss-hwb-function": "^3.0.15", - "@csstools/postcss-ic-unit": "^3.0.6", + "@csstools/postcss-gamut-mapping": "^1.0.11", + "@csstools/postcss-gradients-interpolation-method": "^4.0.20", + "@csstools/postcss-hwb-function": "^3.0.18", + "@csstools/postcss-ic-unit": "^3.0.7", "@csstools/postcss-initial": "^1.0.1", "@csstools/postcss-is-pseudo-class": "^4.0.8", - "@csstools/postcss-light-dark-function": "^1.0.5", + "@csstools/postcss-light-dark-function": "^1.0.8", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.9", - "@csstools/postcss-media-minmax": "^1.1.6", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", + "@csstools/postcss-logical-viewport-units": "^2.0.11", + "@csstools/postcss-media-minmax": "^1.1.8", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.11", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.16", - "@csstools/postcss-progressive-custom-properties": "^3.2.0", - "@csstools/postcss-relative-color-syntax": "^2.0.16", + "@csstools/postcss-oklab-function": "^3.0.19", + "@csstools/postcss-progressive-custom-properties": "^3.3.0", + "@csstools/postcss-relative-color-syntax": "^2.0.19", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.8", - "@csstools/postcss-text-decoration-shorthand": "^3.0.6", - "@csstools/postcss-trigonometric-functions": "^3.0.8", + "@csstools/postcss-stepped-value-functions": "^3.0.10", + "@csstools/postcss-text-decoration-shorthand": "^3.0.7", + "@csstools/postcss-trigonometric-functions": "^3.0.10", "@csstools/postcss-unset-value": "^3.0.1", "autoprefixer": "^10.4.19", - "browserslist": "^4.22.3", + "browserslist": "^4.23.1", "css-blank-pseudo": "^6.0.2", "css-has-pseudo": "^6.0.5", "css-prefers-color-scheme": "^9.0.1", - "cssdb": "^8.0.0", + "cssdb": "^8.1.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.11", + "postcss-color-functional-notation": "^6.0.14", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.6", - "postcss-custom-properties": "^13.3.10", - "postcss-custom-selectors": "^7.1.10", + "postcss-custom-media": "^10.0.8", + "postcss-custom-properties": "^13.3.12", + "postcss-custom-selectors": "^7.1.12", "postcss-dir-pseudo-class": "^8.0.1", - "postcss-double-position-gradients": "^5.0.6", + "postcss-double-position-gradients": "^5.0.7", "postcss-focus-visible": "^9.0.1", "postcss-focus-within": "^8.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.16", + "postcss-lab-function": "^6.0.19", "postcss-logical": "^7.0.1", "postcss-nesting": "^12.1.5", "postcss-opacity-percentage": "^2.0.0", @@ -7158,9 +7186,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.22.0", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", - "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", + "version": "10.22.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz", + "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -8247,9 +8275,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -8265,10 +8293,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -8378,13 +8405,13 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dev": true, "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "rollup": "^4.13.0" }, "bin": { diff --git a/package.json b/package.json index e85bfc47..6a7a26cc 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.0", + "preact": "~10.22.1", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.10.3", @@ -50,12 +50,12 @@ }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.0", - "@preact/preset-vite": "~2.8.2", - "postcss": "~8.4.38", + "@preact/preset-vite": "~2.8.3", + "postcss": "~8.4.39", "postcss-dark-theme-class": "~1.3.0", - "postcss-preset-env": "~9.5.14", + "postcss-preset-env": "~9.6.0", "twitter-text": "~3.1.0", - "vite": "~5.3.1", + "vite": "~5.3.3", "vite-plugin-generate-file": "~0.1.1", "vite-plugin-html-config": "~1.0.11", "vite-plugin-pwa": "~0.20.0", diff --git a/vite.config.js b/vite.config.js index eb15508a..d9164dd2 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,7 +1,8 @@ -import preact from '@preact/preset-vite'; import { execSync } from 'child_process'; import fs from 'fs'; import { resolve } from 'path'; + +import preact from '@preact/preset-vite'; import { uid } from 'uid/single'; import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite'; import generateFile from 'vite-plugin-generate-file'; @@ -51,7 +52,11 @@ export default defineConfig({ preprocessorMaxWorkers: 1, }, plugins: [ - preact(), + preact({ + // Force use Babel instead of ESBuild due to this change: https://github.com/preactjs/preset-vite/pull/114 + // Else, a bug will happen with importing variables from import.meta.env + babel: {}, + }), splitVendorChunkPlugin(), removeConsole({ includes: ['log', 'debug', 'info', 'warn', 'error'], From 2a91c005a1f4ff671d06638704c665779b9c33ef Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 12 Jul 2024 13:34:57 +0800 Subject: [PATCH 019/327] Test fix self-recursive quote posts --- src/utils/states.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/utils/states.js b/src/utils/states.js index d7381a0f..2b80adb7 100644 --- a/src/utils/states.js +++ b/src/utils/states.js @@ -295,6 +295,16 @@ export function unfurlStatus(status, instance) { unfurlMastodonLink(currentInstance, a.href).then((result) => { if (!result) return; if (!sKey) return; + if (result?.id === status.id) { + // Unfurled post is the post itself??? + // Scenario: + // 1. Post with [URL] + // 2. Unfurl [URL], API returns the same post that contains [URL] + // 3. 💥 Recursive quote posts 💥 + // Note: Mastodon search doesn't return posts that contains [URL], it's actually used to *resolve* the URL + // But some non-Mastodon servers, their search API will eventually search posts that contains [URL] and return them + return; + } if (!Array.isArray(states.statusQuotes[sKey])) { states.statusQuotes[sKey] = []; } From 57d6889826a485371c007155d2dc1347757bd000 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 12 Jul 2024 13:35:43 +0800 Subject: [PATCH 020/327] Test memoize Media --- src/components/media.jsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/media.jsx b/src/components/media.jsx index 2e0db047..2ca4acc1 100644 --- a/src/components/media.jsx +++ b/src/components/media.jsx @@ -1,5 +1,6 @@ import { getBlurHashAverageColor } from 'fast-blurhash'; import { Fragment } from 'preact'; +import { memo } from 'preact/compat'; import { useCallback, useLayoutEffect, @@ -676,4 +677,14 @@ function getURLObj(url) { return URL.parse(url, location.origin); } -export default Media; +export default memo(Media, (oldProps, newProps) => { + const oldMedia = oldProps.media || {}; + const newMedia = newProps.media || {}; + + return ( + oldMedia?.id === newMedia?.id && + oldMedia.url === newMedia.url && + oldProps.to === newProps.to && + oldProps.class === newProps.class + ); +}); From a2f76382572d9dfdd18ef202273ecb8bf255ccad Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 12 Jul 2024 18:57:48 +0800 Subject: [PATCH 021/327] Experimental opt-in server-side grouped notifications --- src/components/notification.jsx | 74 +++++++++++++++++++++++-- src/data/features.json | 3 +- src/index.css | 8 ++- src/pages/home.jsx | 11 ++-- src/pages/notifications.jsx | 52 +++++++++++++++-- src/pages/settings.jsx | 22 ++++++++ src/utils/group-notifications.jsx | 92 ++++++++++++++++++++++++++++++- src/utils/states.js | 6 ++ 8 files changed, 246 insertions(+), 22 deletions(-) diff --git a/src/components/notification.jsx b/src/components/notification.jsx index cb2180c7..cfe25022 100644 --- a/src/components/notification.jsx +++ b/src/components/notification.jsx @@ -149,6 +149,9 @@ function Notification({ moderation_warning, _accounts, _statuses, + // Grouped notification + sampleAccounts, + notificationsCount, } = notification; let { type } = notification; @@ -167,12 +170,14 @@ function Notification({ let favsCount = 0; let reblogsCount = 0; if (type === 'favourite+reblog') { - for (const account of _accounts) { - if (account._types?.includes('favourite')) { - favsCount++; - } - if (account._types?.includes('reblog')) { - reblogsCount++; + if (_accounts) { + for (const account of _accounts) { + if (account._types?.includes('favourite')) { + favsCount++; + } + if (account._types?.includes('reblog')) { + reblogsCount++; + } } } if (!reblogsCount && favsCount) type = 'favourite'; @@ -296,6 +301,15 @@ function Notification({ people {' '} + ) : notificationsCount > 1 ? ( + <> + + + {shortenNumber(notificationsCount)} + {' '} + people + {' '} + ) : ( account && ( <> @@ -405,6 +419,54 @@ function Notification({

)} + {!_accounts?.length && sampleAccounts?.length > 1 && ( +

+ {sampleAccounts.map((account) => ( + +

{' '} + + ))} + {notificationsCount > sampleAccounts.length && ( + + +{notificationsCount - sampleAccounts.length} + + + )} +

+ )} {_statuses?.length > 1 && (
    {_statuses.map((status) => ( diff --git a/src/data/features.json b/src/data/features.json index bb8c2d37..6ff4bb1e 100644 --- a/src/data/features.json +++ b/src/data/features.json @@ -3,5 +3,6 @@ "@mastodon/list-exclusive": ">=4.2", "@mastodon/filtered-notifications": "~4.3 || >=4.3", "@mastodon/fetch-multiple-statuses": "~4.3 || >=4.3", - "@mastodon/trending-link-posts": "~4.3 || >=4.3" + "@mastodon/trending-link-posts": "~4.3 || >=4.3", + "@mastodon/grouped-notifications": "~4.3 || >=4.3" } diff --git a/src/index.css b/src/index.css index 35f75a4e..b40c06df 100644 --- a/src/index.css +++ b/src/index.css @@ -378,11 +378,17 @@ textarea:disabled { width: 100%; } -button.small { +:is(button, .button).small { font-size: 90%; padding: 4px 8px; } +.button.centered { + display: inline-flex; + justify-content: center; + align-items: center; +} + select.plain { border: 0; background-color: transparent; diff --git a/src/pages/home.jsx b/src/pages/home.jsx index 36a45352..75ac78c0 100644 --- a/src/pages/home.jsx +++ b/src/pages/home.jsx @@ -17,6 +17,10 @@ import states, { saveStatus } from '../utils/states'; import { getCurrentAccountNS } from '../utils/store-utils'; import Following from './following'; +import { + getGroupedNotifications, + mastoFetchNotifications, +} from './notifications'; function Home() { const snapStates = useSnapshot(states); @@ -84,16 +88,13 @@ function NotificationsLink() { ); } -const NOTIFICATIONS_LIMIT = 80; const NOTIFICATIONS_DISPLAY_LIMIT = 5; function NotificationsMenu({ anchorRef, state, onClose }) { const { masto, instance } = api(); const snapStates = useSnapshot(states); const [uiState, setUIState] = useState('default'); - const notificationsIterator = masto.v1.notifications.list({ - limit: NOTIFICATIONS_LIMIT, - }); + const notificationsIterator = mastoFetchNotifications(); async function fetchNotifications() { const allNotifications = await notificationsIterator.next(); @@ -106,7 +107,7 @@ function NotificationsMenu({ anchorRef, state, onClose }) { }); }); - const groupedNotifications = groupNotifications(notifications); + const groupedNotifications = getGroupedNotifications(notifications); states.notificationsLast = notifications[0]; states.notifications = groupedNotifications; diff --git a/src/pages/notifications.jsx b/src/pages/notifications.jsx index 4e03cd57..0ce78bcf 100644 --- a/src/pages/notifications.jsx +++ b/src/pages/notifications.jsx @@ -20,8 +20,11 @@ import Notification from '../components/notification'; import Status from '../components/status'; import { api } from '../utils/api'; import enhanceContent from '../utils/enhance-content'; -import groupNotifications from '../utils/group-notifications'; +import groupNotifications, { + groupNotifications2, +} from '../utils/group-notifications'; import handleContentLinks from '../utils/handle-content-links'; +import mem from '../utils/mem'; import niceDateTime from '../utils/nice-date-time'; import { getRegistration } from '../utils/push-notifications'; import shortenNumber from '../utils/shorten-number'; @@ -33,7 +36,8 @@ import usePageVisibility from '../utils/usePageVisibility'; import useScroll from '../utils/useScroll'; import useTitle from '../utils/useTitle'; -const LIMIT = 80; +const NOTIFICATIONS_LIMIT = 80; +const NOTIFICATIONS_GROUPED_LIMIT = 20; const emptySearchParams = new URLSearchParams(); const scrollIntoViewOptions = { @@ -42,6 +46,43 @@ const scrollIntoViewOptions = { behavior: 'smooth', }; +const memSupportsGroupedNotifications = mem( + () => supports('@mastodon/grouped-notifications'), + { + maxAge: 1000 * 60 * 5, // 5 minutes + }, +); + +export function mastoFetchNotifications(opts = {}) { + const { masto } = api(); + if ( + states.settings.groupedNotificationsAlpha && + memSupportsGroupedNotifications() + ) { + // https://github.com/mastodon/mastodon/pull/29889 + return masto.v2_alpha.notifications.list({ + limit: NOTIFICATIONS_GROUPED_LIMIT, + ...opts, + }); + } else { + return masto.v1.notifications.list({ + limit: NOTIFICATIONS_LIMIT, + ...opts, + }); + } +} + +export function getGroupedNotifications(notifications) { + if ( + states.settings.groupedNotificationsAlpha && + memSupportsGroupedNotifications() + ) { + return groupNotifications2(notifications); + } else { + return groupNotifications(notifications); + } +} + function Notifications({ columnMode }) { useTitle('Notifications', '/notifications'); const { masto, instance } = api(); @@ -67,8 +108,7 @@ function Notifications({ columnMode }) { async function fetchNotifications(firstLoad) { if (firstLoad || !notificationsIterator.current) { // Reset iterator - notificationsIterator.current = masto.v1.notifications.list({ - limit: LIMIT, + notificationsIterator.current = mastoFetchNotifications({ excludeTypes: ['follow_request'], }); } @@ -115,10 +155,10 @@ function Notifications({ columnMode }) { // console.log({ notifications }); - const groupedNotifications = groupNotifications(notifications); + const groupedNotifications = getGroupedNotifications(notifications); if (firstLoad) { - states.notificationsLast = notifications[0]; + states.notificationsLast = groupedNotifications[0]; states.notifications = groupedNotifications; // Update last read marker diff --git a/src/pages/settings.jsx b/src/pages/settings.jsx index bb6ff7f4..06f48695 100644 --- a/src/pages/settings.jsx +++ b/src/pages/settings.jsx @@ -21,6 +21,7 @@ import { import showToast from '../utils/show-toast'; import states from '../utils/states'; import store from '../utils/store'; +import supports from '../utils/supports'; const DEFAULT_TEXT_SIZE = 16; const TEXT_SIZES = [14, 15, 16, 17, 18, 19, 20]; @@ -496,6 +497,27 @@ function Settings({ onClose }) {
)} + {authenticated && supports('@mastodon/grouped-notifications') && ( +
  • + +
    + + Alpha-stage feature. Potentially improved grouping window + but basic grouping logic. + +
    +
  • + )} {authenticated && (
  • + ); + } + const actualStatusID = reblog?.id || statusID; const url = instance ? `/${instance}/s/${actualStatusID}` From f1822d54af546a8e4e2a56f5d50529e5b047862f Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 25 Jul 2024 18:39:14 +0800 Subject: [PATCH 030/327] Fix poll radio button position on Safari Plus a color --- src/components/status.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/status.css b/src/components/status.css index a2674093..82630d0b 100644 --- a/src/components/status.css +++ b/src/components/status.css @@ -2039,7 +2039,8 @@ a.card:is(:hover, :focus):visited { .poll-label input:is([type='radio'], [type='checkbox']) { flex-shrink: 0; margin: 0 3px; - min-height: 0.9em; + min-height: 1.15em; + accent-color: var(--link-color); } .poll-option-votes { flex-shrink: 0; From 631730f2f224a4ff1d224bd567b33b441e94418a Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 28 Jul 2024 16:07:22 +0800 Subject: [PATCH 031/327] Replace SWR with CacheFirst This SWR strategy is sometimes too stale, possibly a bug with Workbox --- public/sw.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/sw.js b/public/sw.js index cf945218..b1a95073 100644 --- a/public/sw.js +++ b/public/sw.js @@ -101,7 +101,7 @@ const apiIntermediateRoute = new RegExpRoute( // - trends/* // - timelines/link /^https?:\/\/[^\/]+\/api\/v\d+\/(trends|timelines\/link)/, - new StaleWhileRevalidate({ + new CacheFirst({ cacheName: 'api-intermediate', plugins: [ new ExpirationPlugin({ From fa3a0e23cc34de92f2dbebbe308d53132373fddd Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 28 Jul 2024 16:08:18 +0800 Subject: [PATCH 032/327] Unhide some text for posts inside Edit History Every char matters when looking at post edit history --- src/components/status.css | 45 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/components/status.css b/src/components/status.css index 82630d0b..ee529559 100644 --- a/src/components/status.css +++ b/src/components/status.css @@ -2472,24 +2472,39 @@ a.card:is(:hover, :focus):visited { #edit-history { min-height: 50vh; min-height: 50dvh; -} -#edit-history h2 { - margin: 0; - padding: 0; -} + h2 { + margin: 0; + padding: 0; + } -#edit-history ol, -#edit-history ol li { - list-style: none; - margin: 0; - padding: 0; -} + ol, + ol li { + list-style: none; + margin: 0; + padding: 0; + } -#edit-history .history-item .status { - border: 1px solid var(--outline-color); - border-radius: 8px; - pointer-events: none; + .history-item .status { + border: 1px solid var(--outline-color); + border-radius: 8px; + pointer-events: none; + } + + .status { + .invisible { + display: revert; + } + + .hashtag-stuffing { + white-space: normal; + opacity: 1; + } + + a { + color: var(--text-color); + } + } } /* EMBED */ From 2d23b15c8d807b611e51056f1875710f4c29a869 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 28 Jul 2024 16:09:03 +0800 Subject: [PATCH 033/327] Assume title is the author for .card-post --- src/components/status.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/status.css b/src/components/status.css index ee529559..3698c5d6 100644 --- a/src/components/status.css +++ b/src/components/status.css @@ -1949,6 +1949,10 @@ a.card:is(:hover, :focus):visited { .title { font-weight: 500; + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .meta { From 379ef7cc1133822e2353ff8c3cfbcdb341c8a7b5 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 28 Jul 2024 16:09:44 +0800 Subject: [PATCH 034/327] Random unused IntersectionView Keeping this for future use --- src/components/intersection-view.jsx | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/components/intersection-view.jsx diff --git a/src/components/intersection-view.jsx b/src/components/intersection-view.jsx new file mode 100644 index 00000000..0763e6b9 --- /dev/null +++ b/src/components/intersection-view.jsx @@ -0,0 +1,29 @@ +import { useLayoutEffect, useRef, useState } from 'preact/hooks'; + +const IntersectionView = ({ children, root = null, fallback = null }) => { + const ref = useRef(); + const [show, setShow] = useState(false); + useLayoutEffect(() => { + const observer = new IntersectionObserver( + (entries) => { + const entry = entries[0]; + if (entry.isIntersecting) { + setShow(true); + observer.unobserve(ref.current); + } + }, + { + root, + rootMargin: `${screen.height}px`, + }, + ); + if (ref.current) observer.observe(ref.current); + return () => { + if (ref.current) observer.unobserve(ref.current); + }; + }, []); + + return show ? children :
    {fallback}
    ; +}; + +export default IntersectionView; From 5be30e0c80854c6cb9c13b6ceee2ff61c256d783 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Mon, 29 Jul 2024 20:05:03 +0800 Subject: [PATCH 035/327] Upgrade dependencies --- package-lock.json | 329 ++++++++++------------------------------------ package.json | 14 +- 2 files changed, 75 insertions(+), 268 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0bc49def..06cde12b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@github/text-expander-element": "~2.7.1", "@iconify-icons/mingcute": "~1.2.9", "@justinribeiro/lite-youtube": "~1.5.0", - "@szhsin/react-menu": "~4.1.0", + "@szhsin/react-menu": "~4.2.0", "compare-versions": "~6.1.1", "dayjs": "~1.11.12", "dayjs-twitter": "~0.5.0", @@ -29,7 +29,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.1", + "preact": "~10.23.1", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.13.0", @@ -40,7 +40,7 @@ "tinyld": "~1.3.4", "toastify-js": "~1.12.0", "uid": "~2.0.2", - "use-debounce": "~10.0.1", + "use-debounce": "~10.0.2", "use-long-press": "~3.2.0", "use-resize-observer": "~9.1.0", "valtio": "1.13.2" @@ -48,14 +48,14 @@ "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.1", "@preact/preset-vite": "~2.9.0", - "postcss": "~8.4.39", + "postcss": "~8.4.40", "postcss-dark-theme-class": "~1.3.0", "postcss-preset-env": "~9.6.0", "twitter-text": "~3.1.0", - "vite": "~5.3.4", - "vite-plugin-generate-file": "~0.1.1", + "vite": "~5.3.5", + "vite-plugin-generate-file": "~0.2.0", "vite-plugin-html-config": "~1.0.11", - "vite-plugin-pwa": "~0.20.0", + "vite-plugin-pwa": "~0.20.1", "vite-plugin-remove-console": "~2.2.0", "workbox-cacheable-response": "~7.1.0", "workbox-expiration": "~7.1.0", @@ -3446,44 +3446,6 @@ "node": ">=8" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@preact/preset-vite": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.9.0.tgz", @@ -3839,10 +3801,9 @@ } }, "node_modules/@szhsin/react-menu": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.1.0.tgz", - "integrity": "sha512-lYYGUxqJxM2b/jD2Cn5a9RVOvHl9VBMX8qOnHZuX1w08cO2jslykpz5P75D7WnqudLnXsJ4k4+tI+q2U8XIFYw==", - "license": "MIT", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@szhsin/react-menu/-/react-menu-4.2.0.tgz", + "integrity": "sha512-cheovcsqOZonTi5aM5ApQjWRwXdReAHFITLyzyk0pAjMy+BiWk8bfl8PZT8VKC8Jacq9Shs3YArYtFMGW/sA4A==", "dependencies": { "prop-types": "^15.7.2", "react-transition-state": "^2.1.0" @@ -4210,19 +4171,6 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browserslist": { "version": "4.23.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", @@ -5058,39 +5006,12 @@ "node": ">=6.0.0" } }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -5124,19 +5045,6 @@ "node": ">=10" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -5310,19 +5218,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -5641,29 +5536,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -5694,16 +5566,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -6127,36 +5989,12 @@ "ws": "^8.17.0" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micro-memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.2.tgz", "integrity": "sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==", "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -6436,9 +6274,9 @@ } }, "node_modules/postcss": { - "version": "8.4.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", - "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "dev": true, "funding": [ { @@ -7185,9 +7023,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.22.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz", - "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==", + "version": "10.23.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.23.1.tgz", + "integrity": "sha512-O5UdRsNh4vdZaTieWe3XOgSpdMAmkIYBCT3VhQDlKrzyCm8lUYsk0fmVEvoQQifoOjFRTaHZO69ylrzTW2BH+A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -7247,27 +7085,6 @@ "node": ">=6" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7525,17 +7342,6 @@ "node": ">= 4" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rollup": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.1.tgz", @@ -7564,30 +7370,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", @@ -7996,6 +7778,45 @@ "node": ">=10" } }, + "node_modules/tinyglobby": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.0.tgz", + "integrity": "sha512-+clyYQfAnNlt5a1x7CCQ6RLuTIztDfDAl6mAANvqRUlz6sVy5znCzJOhais8G6oyUyoeeaorLopO3HptVP8niA==", + "dev": true, + "dependencies": { + "fdir": "^6.2.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.2.0.tgz", + "integrity": "sha512-9XaWcDl0riOX5j2kYfy0kKdg7skw3IY6kA4LFT8Tk2yF9UdrADUy8D6AJuBLtf7ISm/MksumwAHE3WVbMRyCLw==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tinyld": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/tinyld/-/tinyld-1.3.4.tgz", @@ -8021,19 +7842,6 @@ "node": ">=4" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/toastify-js": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", @@ -8331,9 +8139,9 @@ } }, "node_modules/use-debounce": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.1.tgz", - "integrity": "sha512-0uUXjOfm44e6z4LZ/woZvkM8FwV1wiuoB6xnrrOmeAEjRDDzTLQNRFtYHvqUsJdrz1X37j0rVGIVp144GLHGKg==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.2.tgz", + "integrity": "sha512-MwBiJK2dk+2qhMDVDCPRPeLuIekKfH2t1UYMnrW9pwcJJGFDbTLliSMBz2UKGmE1PJs8l3XoMqbIU1MemMAJ8g==", "engines": { "node": ">= 16.0.0" }, @@ -8404,9 +8212,9 @@ } }, "node_modules/vite": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz", - "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", + "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", "dev": true, "dependencies": { "esbuild": "^0.21.3", @@ -8459,11 +8267,10 @@ } }, "node_modules/vite-plugin-generate-file": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/vite-plugin-generate-file/-/vite-plugin-generate-file-0.1.1.tgz", - "integrity": "sha512-V1TsLEXlrRiMZognzZqE3cgAHTJwQ84aE45gTR0Hhel6ROTQQU1i7qRbuyBqZI7QC4fUYLhugdaLPpaDpkB2pA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-generate-file/-/vite-plugin-generate-file-0.2.0.tgz", + "integrity": "sha512-mAHqvyFWrqbYNmWmSjhfyxShEgVN9ZPSI/cRove86KEYQIJUZ74XajXpPMwIE1xll9piA5Cmhi8kt/ydQSzZ/Q==", "dev": true, - "license": "MIT", "dependencies": { "ejs": "^3.1.9", "js-yaml": "^4.1.0", @@ -8485,14 +8292,14 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.20.0.tgz", - "integrity": "sha512-/kDZyqF8KqoXRpMUQtR5Atri/7BWayW8Gp7Kz/4bfstsV6zSFTxjREbXZYL7zSuRL40HGA+o2hvUAFRmC+bL7g==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.20.1.tgz", + "integrity": "sha512-M6Pk4b18i5ryrhKgiIF8Zud0HGphYiCbEfLsCdlvmwn/CEnS6noVwfIDG/+3V7r6yxpPV/gLiKw+rIlCCiCCoQ==", "dev": true, "dependencies": { "debug": "^4.3.4", - "fast-glob": "^3.3.2", "pretty-bytes": "^6.1.1", + "tinyglobby": "^0.2.0", "workbox-build": "^7.1.0", "workbox-window": "^7.1.0" }, diff --git a/package.json b/package.json index 92a19dee..c21c07e1 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@github/text-expander-element": "~2.7.1", "@iconify-icons/mingcute": "~1.2.9", "@justinribeiro/lite-youtube": "~1.5.0", - "@szhsin/react-menu": "~4.1.0", + "@szhsin/react-menu": "~4.2.0", "compare-versions": "~6.1.1", "dayjs": "~1.11.12", "dayjs-twitter": "~0.5.0", @@ -32,7 +32,7 @@ "moize": "~6.1.6", "p-retry": "~6.2.0", "p-throttle": "~6.1.0", - "preact": "~10.22.1", + "preact": "~10.23.1", "punycode": "~2.3.1", "react-hotkeys-hook": "~4.5.0", "react-intersection-observer": "~9.13.0", @@ -43,7 +43,7 @@ "tinyld": "~1.3.4", "toastify-js": "~1.12.0", "uid": "~2.0.2", - "use-debounce": "~10.0.1", + "use-debounce": "~10.0.2", "use-long-press": "~3.2.0", "use-resize-observer": "~9.1.0", "valtio": "1.13.2" @@ -51,14 +51,14 @@ "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "~4.3.1", "@preact/preset-vite": "~2.9.0", - "postcss": "~8.4.39", + "postcss": "~8.4.40", "postcss-dark-theme-class": "~1.3.0", "postcss-preset-env": "~9.6.0", "twitter-text": "~3.1.0", - "vite": "~5.3.4", - "vite-plugin-generate-file": "~0.1.1", + "vite": "~5.3.5", + "vite-plugin-generate-file": "~0.2.0", "vite-plugin-html-config": "~1.0.11", - "vite-plugin-pwa": "~0.20.0", + "vite-plugin-pwa": "~0.20.1", "vite-plugin-remove-console": "~2.2.0", "workbox-cacheable-response": "~7.1.0", "workbox-expiration": "~7.1.0", From 522a324b0dd252913249a2d78664f06d65a0ccf1 Mon Sep 17 00:00:00 2001 From: Roman Komarov Date: Wed, 31 Jul 2024 13:59:35 +0200 Subject: [PATCH 036/327] Fix overflow for the columns wrapper --- src/app.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.css b/src/app.css index 47e04d6a..e675c4d1 100644 --- a/src/app.css +++ b/src/app.css @@ -2419,7 +2419,7 @@ ul.link-list li a .icon { display: flex; width: 100vw; overflow-y: hidden; - overflow-x: scroll; + overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; /* scrollbar-width: none; */ From 57db8778a4cd9cd933769bbef832e1bc14e478d3 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 1 Aug 2024 20:18:10 +0800 Subject: [PATCH 037/327] Adapt to new changes in group notifications API Reference: https://github.com/mastodon/mastodon/pull/31214 --- src/pages/home.jsx | 4 ++-- src/pages/notifications.jsx | 3 ++- src/utils/group-notifications.jsx | 20 +++++++++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/pages/home.jsx b/src/pages/home.jsx index 6cfcfa19..f10f633e 100644 --- a/src/pages/home.jsx +++ b/src/pages/home.jsx @@ -12,7 +12,7 @@ import Loader from '../components/loader'; import Notification from '../components/notification'; import { api } from '../utils/api'; import db from '../utils/db'; -import groupNotifications from '../utils/group-notifications'; +import { massageNotifications2 } from '../utils/group-notifications'; import states, { saveStatus } from '../utils/states'; import { getCurrentAccountNS } from '../utils/store-utils'; @@ -98,7 +98,7 @@ function NotificationsMenu({ anchorRef, state, onClose }) { async function fetchNotifications() { const allNotifications = await notificationsIterator.next(); - const notifications = allNotifications.value; + const notifications = massageNotifications2(allNotifications.value); if (notifications?.length) { notifications.forEach((notification) => { diff --git a/src/pages/notifications.jsx b/src/pages/notifications.jsx index 6fa606ae..a987528e 100644 --- a/src/pages/notifications.jsx +++ b/src/pages/notifications.jsx @@ -22,6 +22,7 @@ import { api } from '../utils/api'; import enhanceContent from '../utils/enhance-content'; import groupNotifications, { groupNotifications2, + massageNotifications2, } from '../utils/group-notifications'; import handleContentLinks from '../utils/handle-content-links'; import mem from '../utils/mem'; @@ -120,7 +121,7 @@ function Notifications({ columnMode }) { }; } const allNotifications = await notificationsIterator.current.next(); - const notifications = allNotifications.value; + const notifications = massageNotifications2(allNotifications.value); if (notifications?.length) { notifications.forEach((notification) => { diff --git a/src/utils/group-notifications.jsx b/src/utils/group-notifications.jsx index ee64ffef..f67d9d57 100644 --- a/src/utils/group-notifications.jsx +++ b/src/utils/group-notifications.jsx @@ -28,8 +28,26 @@ export function fixNotifications(notifications) { }); } +export function massageNotifications2(notifications) { + if (notifications?.accounts) { + const { accounts, notificationGroups, statuses } = notifications; + return notificationGroups.map((group) => { + const { sampleAccountIds, statusId } = group; + const sampleAccounts = + sampleAccountIds?.map((id) => accounts.find((a) => a.id === id)) || []; + const status = statuses?.find((s) => s.id === statusId) || null; + return { + ...group, + sampleAccounts, + status, + }; + }); + } + return notifications; +} + export function groupNotifications2(groupNotifications) { - // Massage grouped notifications to look like faux grouped notifications above + // Make grouped notifications to look like faux grouped notifications const newGroupNotifications = groupNotifications.map((gn) => { const { latestPageNotificationAt, From 818f58b4609496672515439bd453a4849caab8f5 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 1 Aug 2024 20:18:44 +0800 Subject: [PATCH 038/327] Fix profile URLs not working for http route --- src/pages/http-route.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/http-route.jsx b/src/pages/http-route.jsx index c2cf1865..e7617230 100644 --- a/src/pages/http-route.jsx +++ b/src/pages/http-route.jsx @@ -24,11 +24,13 @@ export default function HttpRoute() { // Check if status returns 200 try { const { instance, id } = statusObject; - const { masto } = api({ instance }); - const status = await masto.v1.statuses.$select(id).fetch(); - if (status) { - window.location.hash = statusURL + '?view=full'; - return; + if (id) { + const { masto } = api({ instance }); + const status = await masto.v1.statuses.$select(id).fetch(); + if (status) { + window.location.hash = statusURL + '?view=full'; + return; + } } } catch (e) {} From 0febcacb938f36946f80e34aadde0b391d67ea00 Mon Sep 17 00:00:00 2001 From: Frederic Hemberger Date: Sat, 3 Aug 2024 13:30:22 +0200 Subject: [PATCH 039/327] fix(shortcuts-settings): `settingsJSON` must be defined if note doesn't exist --- src/components/shortcuts-settings.jsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/shortcuts-settings.jsx b/src/components/shortcuts-settings.jsx index ad8aca57..de31c334 100644 --- a/src/components/shortcuts-settings.jsx +++ b/src/components/shortcuts-settings.jsx @@ -1055,16 +1055,16 @@ function ImportExport({ shortcuts, onClose }) { const { note = '' } = relationship; // const newNote = `${note}\n\n\n${shortcutsStr}`; let newNote = ''; + const settingsJSON = JSON.stringify({ + v: '1', // version + dt: Date.now(), // datetime stamp + data: shortcutsStr, // shortcuts settings string + }); if ( /(.*)<\/phanpy-shortcuts-settings>/.test( note, ) ) { - const settingsJSON = JSON.stringify({ - v: '1', // version - dt: Date.now(), // datetime stamp - data: shortcutsStr, // shortcuts settings string - }); newNote = note.replace( /(.*)<\/phanpy-shortcuts-settings>/, `${settingsJSON}`, From cf2461add52f7ff0f8f955291c154673499551a7 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Fri, 2 Aug 2024 13:42:43 +0800 Subject: [PATCH 040/327] Better checks --- src/utils/group-notifications.jsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/group-notifications.jsx b/src/utils/group-notifications.jsx index f67d9d57..1aeb0faf 100644 --- a/src/utils/group-notifications.jsx +++ b/src/utils/group-notifications.jsx @@ -29,8 +29,12 @@ export function fixNotifications(notifications) { } export function massageNotifications2(notifications) { - if (notifications?.accounts) { - const { accounts, notificationGroups, statuses } = notifications; + if (notifications?.notificationGroups) { + const { + accounts = [], + notificationGroups = [], + statuses = [], + } = notifications; return notificationGroups.map((group) => { const { sampleAccountIds, statusId } = group; const sampleAccounts = From 4ebfb544aa1aa476e660dd742ec8fe7aac3b7d67 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sat, 3 Aug 2024 19:14:04 +0800 Subject: [PATCH 041/327] This caching seems still buggy Revert to SWR with 1-min expiry --- public/sw.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/sw.js b/public/sw.js index b1a95073..71503729 100644 --- a/public/sw.js +++ b/public/sw.js @@ -101,11 +101,11 @@ const apiIntermediateRoute = new RegExpRoute( // - trends/* // - timelines/link /^https?:\/\/[^\/]+\/api\/v\d+\/(trends|timelines\/link)/, - new CacheFirst({ + new StaleWhileRevalidate({ cacheName: 'api-intermediate', plugins: [ new ExpirationPlugin({ - maxAgeSeconds: 10 * 60, // 10 minutes + maxAgeSeconds: 1 * 60, // 1min }), new CacheableResponsePlugin({ statuses: [0, 200], From 99ee6c3979e15cd3660c637780f96bd9f0b6d331 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 4 Aug 2024 10:06:55 +0800 Subject: [PATCH 042/327] Don't reuse var for both timeout and interval --- src/components/background-service.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/background-service.jsx b/src/components/background-service.jsx index 15647fe1..bcadd2a4 100644 --- a/src/components/background-service.jsx +++ b/src/components/background-service.jsx @@ -46,6 +46,7 @@ export default memo(function BackgroundService({ isLoggedIn }) { useEffect(() => { let sub; + let streamTimeout; let pollNotifications; if (isLoggedIn && visible) { const { masto, streaming, instance } = api(); @@ -56,7 +57,7 @@ export default memo(function BackgroundService({ isLoggedIn }) { let hasStreaming = false; // 2. Start streaming if (streaming) { - pollNotifications = setTimeout(() => { + streamTimeout = setTimeout(() => { (async () => { try { hasStreaming = true; @@ -94,7 +95,7 @@ export default memo(function BackgroundService({ isLoggedIn }) { return () => { sub?.unsubscribe?.(); sub = null; - clearTimeout(pollNotifications); + clearTimeout(streamTimeout); clearInterval(pollNotifications); }; }, [visible, isLoggedIn]); From 2aff1dc1fd98f40a5ce3efe6de1b3a13960d5aad Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 4 Aug 2024 10:09:33 +0800 Subject: [PATCH 043/327] Try switch to 20s interval --- src/components/background-service.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/background-service.jsx b/src/components/background-service.jsx index bcadd2a4..46b9c4cc 100644 --- a/src/components/background-service.jsx +++ b/src/components/background-service.jsx @@ -9,7 +9,7 @@ import useInterval from '../utils/useInterval'; import usePageVisibility from '../utils/usePageVisibility'; const STREAMING_TIMEOUT = 1000 * 3; // 3 seconds -const POLL_INTERVAL = 15_000; // 15 seconds +const POLL_INTERVAL = 20_000; // 20 seconds export default memo(function BackgroundService({ isLoggedIn }) { // Notifications service From f05e3012e390ba23486f4cf916a884055ff5dfef Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Sun, 4 Aug 2024 13:32:30 +0800 Subject: [PATCH 044/327] Preliminary step for RTL --- src/app.css | 321 +++++++++++++------------- src/app.jsx | 2 + src/components/ICONS.jsx | 117 +++++++--- src/components/account-block.css | 2 + src/components/account-block.jsx | 2 +- src/components/account-info.css | 32 ++- src/components/account-info.jsx | 11 +- src/components/compose.css | 28 +-- src/components/compose.jsx | 10 +- src/components/drafts.css | 2 +- src/components/generic-accounts.css | 6 +- src/components/icon.jsx | 10 +- src/components/links-bar.css | 13 +- src/components/media-modal.jsx | 20 +- src/components/media-post.css | 2 +- src/components/menu2.jsx | 14 +- src/components/modal.css | 19 +- src/components/name-text.jsx | 6 +- src/components/nav-menu.css | 12 +- src/components/poll.jsx | 3 - src/components/report-modal.css | 4 +- src/components/search-form.jsx | 1 + src/components/shortcuts-settings.css | 18 +- src/components/shortcuts-settings.jsx | 5 + src/components/shortcuts.css | 10 +- src/components/status.css | 172 ++++++++------ src/components/status.jsx | 20 +- src/components/timeline.jsx | 11 +- src/components/translation-block.css | 7 +- src/index.css | 16 ++ src/pages/accounts.css | 4 +- src/pages/catchup.css | 44 ++-- src/pages/filters.jsx | 1 + src/pages/hashtag.jsx | 5 +- src/pages/login.css | 5 +- src/pages/login.jsx | 1 + src/pages/notifications.css | 15 +- src/pages/search.css | 15 +- src/pages/settings.css | 10 +- src/pages/status.css | 4 +- src/pages/status.jsx | 2 + src/pages/trending.jsx | 2 +- src/pages/welcome.css | 7 +- src/utils/is-rtl.js | 26 +++ 44 files changed, 654 insertions(+), 383 deletions(-) create mode 100644 src/utils/is-rtl.js diff --git a/src/app.css b/src/app.css index e675c4d1..52245283 100644 --- a/src/app.css +++ b/src/app.css @@ -162,7 +162,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { white-space: nowrap; } .deck > header .header-grid > .header-side:last-of-type { - text-align: right; + text-align: end; grid-column: 3; } .deck > header .header-grid :is(button, .button).plain { @@ -181,8 +181,8 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { grid-template-columns: 1fr max-content; } .deck > header .header-grid-2 h1 { - text-align: left; - padding-left: 8px; + text-align: start; + padding-inline-start: 8px; } .deck > header .header-grid h1:has(.ancestors-indicator) { display: flex; @@ -217,6 +217,19 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { opacity: 0.25; } } +@keyframes indeterminate-bar-rtl { + 0% { + transform: translateX(50%); + opacity: 0.25; + } + 50% { + opacity: 1; + } + 100% { + transform: translateX(-50%); + opacity: 0.25; + } +} .deck > header.loading:after { pointer-events: none; content: ''; @@ -232,6 +245,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { transparent ); animation: indeterminate-bar 1s ease-in-out infinite alternate; + &:dir(rtl) { + animation-name: indeterminate-bar-rtl; + } } @media (min-width: 40em) { .deck > header.loading:after { @@ -268,6 +284,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { 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)); + } } } @@ -346,6 +365,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { margin: 0; padding: 0; border-bottom: var(--hairline-width) solid var(--divider-color); + --line-dir: var(--to-forward); } .timeline.flat > li { border-bottom: none; @@ -362,10 +382,14 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { --avatar-size: 50px; --avatar-margin-start: 16px; --avatar-margin-end: 12px; + --line-curve: 45deg; + :dir(rtl) & { + --line-curve: -45deg; + } } .timeline.contextual > li { background-image: linear-gradient( - to right, + var(--line-dir), transparent, transparent var(--line-start), var(--comment-line-color) var(--line-start), @@ -394,7 +418,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { .timeline.contextual > li.descendant:not(.thread) > :is(.status-link, .status-focus) { - padding-left: 40px; + padding-inline-start: 40px; } .timeline.contextual .replies[data-scroll-left]:not([data-scroll-left='0']) { background-color: var(--bg-color); @@ -408,7 +432,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline.contextual .replies[data-comments-level='4']:has(.replies) { overflow-x: auto; - mask-image: linear-gradient(to left, transparent, black 32px); + mask-image: linear-gradient(var(--to-backward), transparent, black 32px); } .timeline.contextual .replies[data-comments-level='4']:has(.replies) @@ -426,145 +450,61 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { > :is(.status-link, .status-focus) + .replies .replies-summary { - margin-left: calc( + margin-inline-start: calc( var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + (var(--line-margin-end) * (var(--comments-level) - 1)) ); } -/* .timeline.contextual - > li.descendant.thread - > .status-link - + .replies - .replies - > .replies-summary { - margin-left: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - var(--line-margin-end) - ); -} -.timeline.contextual - > li.descendant.thread - > .status-link - + .replies - .replies - .replies - > .replies-summary { - margin-left: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - (var(--line-margin-end) * 2) - ); -} */ .timeline.contextual > li.descendant.thread > :is(.status-link, .status-focus) + .replies :is(.status-link, .status-focus) { - padding-left: calc( + padding-inline-start: calc( var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + (var(--line-margin-end) * (var(--comments-level) - 1)) ); } -/* .timeline.contextual - > li.descendant.thread - > .status-link - + .replies - .replies - .status-link { - padding-left: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - var(--line-margin-end) - ); -} -.timeline.contextual - > li.descendant.thread - > .status-link - + .replies - .replies - .replies - .status-link { - padding-left: calc( - var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + - (var(--line-margin-end) * 2) - ); -} */ .timeline.contextual > li.descendant:not(.thread) > :is(.status-link, .status-focus) + .replies .replies-summary { - margin-left: calc( + margin-inline-start: calc( var(--thread-start) + var(--line-margin-end) * var(--comments-level) ); } -/* .timeline.contextual - > li.descendant:not(.thread) - > .status-link - + .replies - .replies - > .replies-summary { - margin-left: calc( - var(--thread-start) + var(--line-margin-end) + var(--line-margin-end) - ); -} -.timeline.contextual - > li.descendant:not(.thread) - > .status-link - + .replies - .replies - .replies - > .replies-summary { - margin-left: calc( - var(--thread-start) + var(--line-margin-end) + (var(--line-margin-end) * 2) - ); -} */ .timeline.contextual > li.descendant:not(.thread) > :is(.status-link, .status-focus) + .replies :is(.status-link, .status-focus) { - padding-left: calc( + padding-inline-start: calc( var(--thread-start) + var(--line-margin-end) * var(--comments-level) ); } -/* .timeline.contextual - > li.descendant:not(.thread) - > .status-link - + .replies - .replies - .status-link { - padding-left: calc(var(--thread-start) + (var(--line-margin-end) * 2)); -} -.timeline.contextual - > li.descendant:not(.thread) - > .status-link - + .replies - .replies - .replies - .status-link { - padding-left: calc(var(--thread-start) + (var(--line-margin-end) * 3)); -} */ .timeline.contextual > li.descendant:not(.thread):before { content: ''; position: absolute; top: 10px; - left: var(--line-start); + inset-inline-start: var(--line-start); width: var(--line-diameter); height: var(--line-diameter); border-radius: var(--line-radius); border-style: solid; border-width: var(--line-width); border-color: transparent transparent var(--comment-line-color) transparent; - transform: rotate(45deg); + transform: rotate(var(--line-curve)); } .timeline.contextual > li .replies-link { color: var(--text-insignificant-color); - margin-left: 16px; + margin-inline-start: 16px; margin-top: -12px; padding-bottom: 12px; font-size: 90%; } .timeline.contextual > li.ancestor .replies-link { - margin-left: calc( + margin-inline-start: calc( var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) ); } @@ -572,7 +512,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { > li.thread > :is(.status-link, .status-focus) .replies-link { - margin-left: calc( + margin-inline-start: calc( var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) ); } @@ -603,7 +543,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { list-style: none; gap: 8px; align-items: center; - margin-right: calc(44px + 8px); + margin-inline-end: calc(44px + 8px); b { font-weight: 500; @@ -618,7 +558,9 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { transition: transform 0.3s ease; &:not(:first-child) { - margin: 0 0 0 -4px; + transform: rotate(0deg); + margin: 0; + margin-inline-start: -4px; } } } @@ -637,7 +579,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { .replies-parent-link { position: absolute; - right: 4px; + inset-inline-end: 4px; height: 100%; z-index: 2; font-size: 16px; @@ -648,8 +590,11 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { align-items: center; padding: var(--summary-padding) calc(var(--summary-padding) * 2); transform: translateX(100%); - margin: calc(-1 * var(--summary-padding)) calc(-1 * var(--summary-padding)) - calc(-1 * var(--summary-padding)) 0; + &:dir(rtl) { + transform: translateX(-100%); + } + margin: calc(-1 * var(--summary-padding)) 0; + margin-inline-end: calc(-1 * var(--summary-padding)); border-radius: 8px; background-color: var(--link-bg-color); @@ -681,7 +626,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { color: var(--text-color); background-color: var(--comment-line-color); background-image: linear-gradient( - to top right, + to top var(--forward), var(--comment-line-color), var(--bg-faded-color) ); @@ -697,7 +642,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } } .timeline.contextual > li .replies[open] > .replies-summary { - border-bottom-left-radius: 0; + border-end-start-radius: 0; .avatars { opacity: 0.5; @@ -727,7 +672,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { ); --line-end: calc(var(--line-start) + var(--line-width)); background-image: linear-gradient( - to right, + var(--line-dir), transparent, transparent var(--line-start), var(--comment-line-color) var(--line-start), @@ -768,14 +713,14 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { content: ''; position: absolute; top: 10px; - left: var(--line-start); + inset-inline-start: var(--line-start); width: var(--line-diameter); height: var(--line-diameter); border-radius: var(--line-radius); border-style: solid; border-width: var(--line-width); border-color: transparent transparent var(--comment-line-color) transparent; - transform: rotate(45deg); + transform: rotate(var(--line-curve)); } /* .timeline.contextual > li .replies .replies li:before { --line-start: calc( @@ -814,8 +759,11 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { > ul > li:only-child { > .replies { > ul > li:only-child { - margin-left: calc(-1 * var(--line-margin-end)); - background-position: calc(16px) 0; + margin-inline-start: calc(-1 * var(--line-margin-end)); + background-position: 16px 0; + &:dir(rtl) { + background-position: -16px 0; + } background-size: 100% calc(20px + 8px); &:before { @@ -856,7 +804,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { --line-width: 3px; --line-end: calc(var(--line-start) + var(--line-width)); background-image: linear-gradient( - to right, + var(--line-dir), transparent, transparent var(--line-start), var(--comment-line-color) var(--line-start), @@ -868,8 +816,8 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline:not(.flat) > li.timeline-item-container-start { margin-bottom: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; + border-end-start-radius: 0; + border-end-end-radius: 0; border-bottom: 0; background-position: 0 calc(16px + var(--avatar-size)); } @@ -882,8 +830,8 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline:not(.flat) > li.timeline-item-container-end { margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; + border-start-start-radius: 0; + border-start-end-radius: 0; border-top: 0; background-size: 100% 16px; @@ -909,8 +857,10 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { } .timeline .show-more { - padding-left: calc(var(--line-end) + var(--line-margin-end)) !important; - text-align: left; + padding-inline-start: calc( + var(--line-end) + var(--line-margin-end) + ) !important; + text-align: start; background-color: transparent !important; backdrop-filter: none !important; position: relative; @@ -918,7 +868,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { padding-block: 16px !important; .avatars-bunch > .avatar:not(:first-child) { - margin-left: -4px; + margin-inline-start: -4px; } } .timeline .show-more:hover { @@ -930,14 +880,14 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { content: ''; position: absolute; top: 10px; - left: var(--line-start); + inset-inline-start: var(--line-start); width: var(--line-diameter); height: var(--line-diameter); border-radius: var(--line-radius); border-style: solid; border-width: var(--line-width); border-color: transparent transparent var(--comment-line-color) transparent; - transform: rotate(45deg); + transform: rotate(var(--line-curve)); } .status-loading { @@ -988,7 +938,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { .status-carousel { --carousel-faded-color: var(--bg-faded-color); background: linear-gradient( - to bottom right, + to bottom var(--forward), var(--carousel-faded-color), transparent ); @@ -1058,12 +1008,12 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { display: none; } .status-carousel .status-carousel-beacon { - margin-right: calc(-1 * var(--carousel-gap)); + margin-inline-end: calc(-1 * var(--carousel-gap)); pointer-events: none; opacity: 0; ~ .status-carousel-beacon { - margin-left: calc(-1 * var(--carousel-gap)); + margin-inline-start: calc(-1 * var(--carousel-gap)); } } /* @@ -1107,7 +1057,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { .status-carousel.boosts-carousel > ul > li:before { content: counter(index); position: absolute; - left: 0; + inset-inline-start: 0; font-size: 10px; color: var(--text-insignificant-color); padding: 6px; @@ -1147,11 +1097,11 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { box-shadow: 0 1px var(--bg-color); &:has(.status-badge:not(:empty)) { - border-top-right-radius: 8px; + border-start-end-radius: 8px; } - .status-carousel.boosts-carousel & { - border-top-left-radius: 8px; + .status-carousel.boosts-carousel &:not(.timeline-item-carousel-group &) { + border-start-start-radius: 8px; } } .status-carousel-link::focus { @@ -1189,14 +1139,29 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { transform: translate3d(0, 0, 0); } } +@keyframes slide-in-rtl { + 0% { + transform: translate3d(-100%, 0, 0); + } + 100% { + transform: translate3d(0, 0, 0); + } +} .deck-backdrop .deck { width: var(--main-width); max-width: 100vw; background-color: var(--bg-color); box-shadow: -1px 0 var(--bg-color); + &:dir(rtl) { + box-shadow: 1px 0 var(--bg-color); + } } .deck-backdrop .deck.slide-in:not(.deck-view-full) { animation: slide-in 0.5s var(--timing-function); + + &:dir(rtl) { + animation-name: slide-in-rtl; + } } .deck-backdrop .deck .status { max-width: var(--main-width); @@ -1240,7 +1205,7 @@ a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { content: ''; display: inline-block; position: absolute; - right: 10px; + inset-inline-end: 10px; width: 4px; height: 4px; border-radius: 50%; @@ -1519,7 +1484,7 @@ body:has(.media-modal-container + .status-deck) .media-post-link { .media-modal-container + .status-deck { /* display: none; */ position: absolute; - right: 0; + inset-inline-end: 0; z-index: -1; pointer-events: none; user-select: none; @@ -1547,8 +1512,8 @@ body:has(.media-modal-container + .status-deck) .media-post-link { ) #modal-container > div { - left: 0; - right: 350px; + inset-inline-start: 0; + inset-inline-end: 350px; width: auto; } /* ✨ New */ @@ -1579,8 +1544,8 @@ body:has(.media-modal-container + .status-deck) .media-post-link { position: fixed; bottom: 16px; bottom: max(16px, env(safe-area-inset-bottom)); - right: 16px; - right: max(16px, env(safe-area-inset-right)); + inset-inline-end: 16px; + inset-inline-end: max(16px, env(safe-area-inset-right)); padding: 16px; background-color: var(--button-bg-blur-color); /* backdrop-filter: blur(16px); */ @@ -1629,7 +1594,7 @@ body:has(.media-modal-container + .status-deck) .media-post-link { display: block; position: absolute; top: 0; - right: 0; + inset-inline-end: 0; width: 14px; height: 14px; border-radius: 50%; @@ -1696,6 +1661,10 @@ body:has(.media-modal-container + .status-deck) .media-post-link { border-radius: 0; padding: 0; right: env(safe-area-inset-right); + &:dir(rtl) { + right: auto; + left: env(safe-area-inset-left); + } width: 44px; height: 44px; display: inline-flex; @@ -1737,6 +1706,11 @@ body:has(.media-modal-container + .status-deck) .media-post-link { } .sheet .sheet-close:not(.outer) + header { padding-right: max(44px, env(safe-area-inset-right)); + + &:dir(rtl) { + padding-right: max(16px, env(safe-area-inset-right)); + padding-left: max(44px, env(safe-area-inset-left)); + } } .sheet header :is(h1, h2, h3) { margin: 0; @@ -1774,6 +1748,10 @@ body:has(.media-modal-container + .status-deck) .media-post-link { width: 100%; height: 100%; } + + :dir(rtl) &.rtl-flip { + transform: scaleX(-1); + } } /* TAG */ @@ -1839,7 +1817,7 @@ body > .szh-menu-container { border: 1px solid var(--outline-color); border-radius: 8px; box-shadow: 0 3px 16px -3px var(--drop-shadow-color); - text-align: left; + text-align: start; /* animation: appear-smooth 0.15s ease-in-out; */ width: 16em; max-width: 90vw; @@ -1975,7 +1953,7 @@ body > .szh-menu-container { } .szh-menu .menu-horizontal > .szh-menu__item:not(:only-child):first-child, .szh-menu .menu-horizontal > *:not(:only-child):first-child .szh-menu__item { - padding-right: 4px !important; + padding-inline-end: 4px !important; } .szh-menu .menu-horizontal @@ -1984,12 +1962,12 @@ body > .szh-menu-container { .menu-horizontal > *:not(:only-child):not(:first-child):not(:last-child) .szh-menu__item { - padding-left: 8px !important; - padding-right: 4px !important; + padding-inline-start: 8px !important; + padding-inline-end: 4px !important; } .szh-menu .menu-horizontal > .szh-menu__item:not(:only-child):last-child, .szh-menu .menu-horizontal > *:not(:only-child):last-child .szh-menu__item { - padding-left: 8px !important; + padding-inline-start: 8px !important; } .szh-menu .szh-menu__item .menu-shortcut { opacity: 0.5; @@ -2053,7 +2031,11 @@ body > .szh-menu-container { text-align: center; opacity: 0.5; text-overflow: clip; - mask-image: linear-gradient(to left, transparent, black 16px); + mask-image: linear-gradient( + var(--to-backward), + transparent, + black 16px + ); } } } @@ -2069,10 +2051,10 @@ body > .szh-menu-container { } > [class^='szh-menu']:first-child { - border-top-left-radius: 8px; + border-start-start-radius: 8px; } > [class^='szh-menu']:last-child { - border-top-right-radius: 8px; + border-start-end-radius: 8px; } } } @@ -2153,6 +2135,9 @@ body > .szh-menu-container { background-image: var(--middle-circle), conic-gradient(var(--color) var(--fill), var(--outline-color) 0); transform: scale(0.7); + &:dir(rtl) { + transform: scale(-0.7, 0.7); + } transition: transform 0.2s ease-in-out; &::-webkit-meter-inner-element, @@ -2362,12 +2347,12 @@ ul.link-list li a { } } ul.link-list li:first-child a { - border-top-left-radius: var(--radius); - border-top-right-radius: var(--radius); + border-start-start-radius: var(--radius); + border-start-end-radius: var(--radius); } ul.link-list li:last-child a { - border-bottom-left-radius: var(--radius); - border-bottom-right-radius: var(--radius); + border-end-start-radius: var(--radius); + border-end-end-radius: var(--radius); } ul.link-list li a:is(:hover, :focus) { color: var(--text-color); @@ -2404,8 +2389,8 @@ ul.link-list li a .icon { } .nav-menu-button.with-avatar .icon { position: absolute; - bottom: 4px; - right: 8px; + inset-block-end: 4px; + inset-inline-end: 8px; background-color: var(--bg-color); border-radius: 2px; } @@ -2433,13 +2418,17 @@ ul.link-list li a .icon { } */ #columns > * { overscroll-behavior: auto; - scroll-snap-align: left; + scroll-snap-align: start; scroll-snap-stop: always; overscroll-behavior: auto; flex-basis: min(100vw, 360px); flex-shrink: 0; box-shadow: -1px 0 var(--bg-color), -2px 0 var(--drop-shadow-color), -3px 0 var(--bg-color); + &:dir(rtl) { + box-shadow: 1px 0 var(--bg-color), 2px 0 var(--drop-shadow-color), + 3px 0 var(--bg-color); + } } #columns:has(> :nth-child(3)) > *:nth-child(even), #columns:has(> :nth-child(3)) @@ -2572,7 +2561,7 @@ ul.link-list li a .icon { gap: 8px; overflow-x: auto; mask-image: linear-gradient( - to right, + var(--to-forward), transparent, black 16px, black calc(100% - 16px), @@ -2586,6 +2575,9 @@ ul.link-list li a .icon { 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)); + } } } @@ -2704,7 +2696,8 @@ ul.link-list li a .icon { min-width: 16px; min-height: 16px; padding: 4px; - margin: -4px -8px -4px 0; + margin: -4px 0; + margin-inline-end: -8px; background-color: var(--bg-faded-color); border-radius: 999px; } @@ -2734,11 +2727,14 @@ ul.link-list li a .icon { .deck-container:has(~ .deck-backdrop .deck) { transition: transform 0.4s ease-out; transform: translate3d(-5vw, 0, 0); + &:dir(rtl) { + transform: translate3d(5vw, 0, 0); + } } .deck-backdrop .deck { /* width: 50%; min-width: var(--main-width); */ - border-left: 1px solid var(--divider-color); + border-inline-start: 1px solid var(--divider-color); } .timeline-deck { border: 0; @@ -2799,16 +2795,19 @@ ul.link-list li a .icon { > li:not(.timeline-item-container-end, .timeline-item-container-middle):has( .status-badge:not(:empty) ) { - border-top-right-radius: 8px; + border-start-end-radius: 8px; } .timeline:not(.flat) > li:has(.status-link.is-active) { transition: var(--back-transition); transform: translate3d(-2.5vw, 0, 0); + &:dir(rtl) { + transform: translate3d(2.5vw, 0, 0); + } } .timeline:not(.flat) > li.timeline-item-container:has(.status-link.is-active) { - border-top-left-radius: var(--item-radius); - border-bottom-left-radius: var(--item-radius); + border-start-start-radius: var(--item-radius); + border-end-start-radius: var(--item-radius); } .timeline:not(.flat) > li:not(:has(.status-carousel)):has(+ li .status-link.is-active), @@ -2817,19 +2816,22 @@ ul.link-list li a .icon { + li { transition: var(--back-transition); transform: translate3d(-1.25vw, 0, 0); + &:dir(rtl) { + transform: translate3d(1.25vw, 0, 0); + } } .timeline:not(.flat) > li.timeline-item-container:not(:has(.status-carousel)):has( + li .status-link.is-active ) { - border-top-left-radius: var(--item-radius); + border-start-start-radius: var(--item-radius); } .timeline:not(.flat) > li.timeline-item-container:not(:has(.status-carousel)):has( .status-link.is-active ) + li.timeline-item-container { - border-bottom-left-radius: var(--item-radius); + border-end-start-radius: var(--item-radius); } .box { padding: 32px; @@ -2841,5 +2843,8 @@ ul.link-list li a .icon { 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)); + } } } diff --git a/src/app.jsx b/src/app.jsx index d2d044c2..fd3ef5ed 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -132,6 +132,8 @@ setTimeout(() => { setTimeout(() => { if (Array.isArray(ICONS[icon])) { ICONS[icon][0]?.(); + } else if (typeof ICONS[icon] === 'object') { + ICONS[icon].module?.(); } else { ICONS[icon]?.(); } diff --git a/src/components/ICONS.jsx b/src/components/ICONS.jsx index 0fa7880f..cac8190b 100644 --- a/src/components/ICONS.jsx +++ b/src/components/ICONS.jsx @@ -6,8 +6,14 @@ export const ICONS = { 'x-circle': () => import('@iconify-icons/mingcute/close-circle-line'), transfer: () => import('@iconify-icons/mingcute/transfer-4-line'), rocket: () => import('@iconify-icons/mingcute/rocket-line'), - 'arrow-left': () => import('@iconify-icons/mingcute/arrow-left-line'), - 'arrow-right': () => import('@iconify-icons/mingcute/arrow-right-line'), + 'arrow-left': { + module: () => import('@iconify-icons/mingcute/arrow-left-line'), + rtl: true, + }, + 'arrow-right': { + module: () => import('@iconify-icons/mingcute/arrow-right-line'), + rtl: true, + }, 'arrow-up': () => import('@iconify-icons/mingcute/arrow-up-line'), 'arrow-down': () => import('@iconify-icons/mingcute/arrow-down-line'), earth: () => import('@iconify-icons/mingcute/earth-line'), @@ -16,8 +22,14 @@ export const ICONS = { 'eye-close': () => import('@iconify-icons/mingcute/eye-close-line'), 'eye-open': () => import('@iconify-icons/mingcute/eye-2-line'), message: () => import('@iconify-icons/mingcute/mail-line'), - comment: () => import('@iconify-icons/mingcute/chat-3-line'), - comment2: () => import('@iconify-icons/mingcute/comment-2-line'), + comment: { + module: () => import('@iconify-icons/mingcute/chat-3-line'), + rtl: true, + }, + comment2: { + module: () => import('@iconify-icons/mingcute/comment-2-line'), + rtl: true, + }, home: () => import('@iconify-icons/mingcute/home-3-line'), notification: () => import('@iconify-icons/mingcute/notification-line'), follow: () => import('@iconify-icons/mingcute/user-follow-line'), @@ -31,23 +43,46 @@ export const ICONS = { gear: () => import('@iconify-icons/mingcute/settings-3-line'), more: () => import('@iconify-icons/mingcute/more-3-line'), more2: () => import('@iconify-icons/mingcute/more-1-fill'), - external: () => import('@iconify-icons/mingcute/external-link-line'), - popout: () => import('@iconify-icons/mingcute/external-link-line'), - popin: [() => import('@iconify-icons/mingcute/external-link-line'), '180deg'], + external: { + module: () => import('@iconify-icons/mingcute/external-link-line'), + rtl: true, + }, + popout: { + module: () => import('@iconify-icons/mingcute/external-link-line'), + rtl: true, + }, + popin: { + module: () => import('@iconify-icons/mingcute/external-link-line'), + rotate: '180deg', + rtl: true, + }, plus: () => import('@iconify-icons/mingcute/add-circle-line'), - 'chevron-left': () => import('@iconify-icons/mingcute/left-line'), - 'chevron-right': () => import('@iconify-icons/mingcute/right-line'), + 'chevron-left': { + module: () => import('@iconify-icons/mingcute/left-line'), + rtl: true, + }, + 'chevron-right': { + module: () => import('@iconify-icons/mingcute/right-line'), + rtl: true, + }, 'chevron-down': () => import('@iconify-icons/mingcute/down-line'), - reply: [ - () => import('@iconify-icons/mingcute/share-forward-line'), - '180deg', - 'horizontal', - ], + reply: { + module: () => import('@iconify-icons/mingcute/share-forward-line'), + rotate: '180deg', + flip: 'horizontal', + rtl: true, + }, thread: () => import('@iconify-icons/mingcute/route-line'), - group: () => import('@iconify-icons/mingcute/group-line'), + group: { + module: () => import('@iconify-icons/mingcute/group-line'), + rtl: true, + }, bot: () => import('@iconify-icons/mingcute/android-2-line'), menu: () => import('@iconify-icons/mingcute/rows-4-line'), - list: () => import('@iconify-icons/mingcute/list-check-line'), + list: { + module: () => import('@iconify-icons/mingcute/list-check-line'), + rtl: true, + }, search: () => import('@iconify-icons/mingcute/search-2-line'), hashtag: () => import('@iconify-icons/mingcute/hashtag-line'), info: () => import('@iconify-icons/mingcute/information-line'), @@ -62,12 +97,21 @@ export const ICONS = { share: () => import('@iconify-icons/mingcute/share-2-line'), sparkles: () => import('@iconify-icons/mingcute/sparkles-line'), sparkles2: () => import('@iconify-icons/mingcute/sparkles-2-line'), - exit: () => import('@iconify-icons/mingcute/exit-line'), + exit: { + module: () => import('@iconify-icons/mingcute/exit-line'), + rtl: true, + }, translate: () => import('@iconify-icons/mingcute/translate-line'), play: () => import('@iconify-icons/mingcute/play-fill'), trash: () => import('@iconify-icons/mingcute/delete-2-line'), - mute: () => import('@iconify-icons/mingcute/volume-mute-line'), - unmute: () => import('@iconify-icons/mingcute/volume-line'), + mute: { + module: () => import('@iconify-icons/mingcute/volume-mute-line'), + rtl: true, + }, + unmute: { + module: () => import('@iconify-icons/mingcute/volume-line'), + rtl: true, + }, block: () => import('@iconify-icons/mingcute/forbid-circle-line'), unblock: [ () => import('@iconify-icons/mingcute/forbid-circle-line'), @@ -81,30 +125,51 @@ export const ICONS = { filters: () => import('@iconify-icons/mingcute/filter-line'), chart: () => import('@iconify-icons/mingcute/chart-line-line'), react: () => import('@iconify-icons/mingcute/react-line'), - layout4: () => import('@iconify-icons/mingcute/layout-4-line'), + layout4: { + module: () => import('@iconify-icons/mingcute/layout-4-line'), + rtl: true, + }, layout5: () => import('@iconify-icons/mingcute/layout-5-line'), - announce: () => import('@iconify-icons/mingcute/announcement-line'), + announce: { + module: () => import('@iconify-icons/mingcute/announcement-line'), + rtl: true, + }, alert: () => import('@iconify-icons/mingcute/alert-line'), round: () => import('@iconify-icons/mingcute/round-fill'), 'arrow-up-circle': () => import('@iconify-icons/mingcute/arrow-up-circle-line'), 'arrow-down-circle': () => import('@iconify-icons/mingcute/arrow-down-circle-line'), - clipboard: () => import('@iconify-icons/mingcute/clipboard-line'), + clipboard: { + module: () => import('@iconify-icons/mingcute/clipboard-line'), + rtl: true, + }, 'account-edit': () => import('@iconify-icons/mingcute/user-edit-line'), 'account-warning': () => import('@iconify-icons/mingcute/user-warning-line'), keyboard: () => import('@iconify-icons/mingcute/keyboard-line'), cloud: () => import('@iconify-icons/mingcute/cloud-line'), - month: () => import('@iconify-icons/mingcute/calendar-month-line'), + month: { + module: () => import('@iconify-icons/mingcute/calendar-month-line'), + rtl: true, + }, media: () => import('@iconify-icons/mingcute/photo-album-line'), speak: () => import('@iconify-icons/mingcute/radar-line'), building: () => import('@iconify-icons/mingcute/building-5-line'), - history2: () => import('@iconify-icons/mingcute/history-2-line'), + history2: { + module: () => import('@iconify-icons/mingcute/history-2-line'), + rtl: true, + }, document: () => import('@iconify-icons/mingcute/document-line'), - 'arrows-right': () => import('@iconify-icons/mingcute/arrows-right-line'), + 'arrows-right': { + module: () => import('@iconify-icons/mingcute/arrows-right-line'), + rtl: true, + }, code: () => import('@iconify-icons/mingcute/code-line'), copy: () => import('@iconify-icons/mingcute/copy-2-line'), - quote: () => import('@iconify-icons/mingcute/quote-left-line'), + quote: { + module: () => import('@iconify-icons/mingcute/quote-left-line'), + rtl: true, + }, settings: () => import('@iconify-icons/mingcute/settings-6-line'), 'heart-break': () => import('@iconify-icons/mingcute/heart-crack-line'), 'user-x': () => import('@iconify-icons/mingcute/user-x-line'), diff --git a/src/components/account-block.css b/src/components/account-block.css index 14309fb9..890e4968 100644 --- a/src/components/account-block.css +++ b/src/components/account-block.css @@ -29,6 +29,8 @@ line-clamp: 1; text-overflow: ellipsis; overflow: hidden; + unicode-bidi: isolate; + direction: initial; } a { diff --git a/src/components/account-block.jsx b/src/components/account-block.jsx index 326f415c..47b4e711 100644 --- a/src/components/account-block.jsx +++ b/src/components/account-block.jsx @@ -120,7 +120,7 @@ function AccountBlock({ )} )}{' '} -