From aea442d559a091c89fde40ad27d015db553afdba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Fri, 30 Jan 2026 12:03:10 +0100 Subject: [PATCH 01/13] pl-fe: conditionally display subscription button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/features/account/components/header.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pl-fe/src/features/account/components/header.tsx b/packages/pl-fe/src/features/account/components/header.tsx index fc3658500..34dddae53 100644 --- a/packages/pl-fe/src/features/account/components/header.tsx +++ b/packages/pl-fe/src/features/account/components/header.tsx @@ -773,7 +773,7 @@ const Header: React.FC = ({ account }) => {
- + {(ownAccount && account.id !== ownAccount.id) && } {renderMessageButton()} {renderShareButton()} From 2a709fbc2d0757bd1535ad4d8910122a6efba634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sat, 31 Jan 2026 16:53:07 +0100 Subject: [PATCH 02/13] pl-fe: don't trigger the compose modal several times in /share route MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/pages/utils/share.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pl-fe/src/pages/utils/share.tsx b/packages/pl-fe/src/pages/utils/share.tsx index 31ee00857..7085fd9f7 100644 --- a/packages/pl-fe/src/pages/utils/share.tsx +++ b/packages/pl-fe/src/pages/utils/share.tsx @@ -21,7 +21,7 @@ const SharePage: React.FC = () => { if (text) { dispatch(openComposeWithText('compose-modal', text)); } - }); + }, []); return null; }; From 1b0e4a77e07c114ca6955cd4bac8257ea2eec293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sat, 31 Jan 2026 20:53:34 +0100 Subject: [PATCH 03/13] pl-fe: important hotfix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/features/compose/editor/index.tsx | 7 +------ packages/pl-fe/src/styles/new/compose.scss | 5 +++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/pl-fe/src/features/compose/editor/index.tsx b/packages/pl-fe/src/features/compose/editor/index.tsx index 5786bbcde..994cdeb9d 100644 --- a/packages/pl-fe/src/features/compose/editor/index.tsx +++ b/packages/pl-fe/src/features/compose/editor/index.tsx @@ -200,12 +200,7 @@ const ComposeEditor = React.forwardRef(({
} placeholder={( -
+
{textareaPlaceholder}
)} diff --git a/packages/pl-fe/src/styles/new/compose.scss b/packages/pl-fe/src/styles/new/compose.scss index 6bfc2adc6..3d594c99a 100644 --- a/packages/pl-fe/src/styles/new/compose.scss +++ b/packages/pl-fe/src/styles/new/compose.scss @@ -30,6 +30,11 @@ background-color: transparent !important; } + &__editor__placeholder { + @apply pointer-events-none absolute top-0 select-none text-[1rem] text-gray-600 dark:placeholder:text-gray-600; + visibility: visible !important; + } + &:not(&--transparent) &__editor { @apply rounded-md border-gray-400 px-3 py-2 ring-2 focus-within:border-primary-500 focus-within:ring-primary-500 dark:border-gray-800 dark:ring-gray-800 dark:focus-within:border-primary-500 dark:focus-within:ring-primary-500; From 99dfb7136aa4f7a2e55c6cb12344f8c0f487417f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 11:43:23 +0100 Subject: [PATCH 04/13] pl-fe: Invalidate router context on log out MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/reducers/me.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/pl-fe/src/reducers/me.ts b/packages/pl-fe/src/reducers/me.ts index 97686ce74..37848b486 100644 --- a/packages/pl-fe/src/reducers/me.ts +++ b/packages/pl-fe/src/reducers/me.ts @@ -1,3 +1,5 @@ +import { router } from 'pl-fe/features/ui/router'; + import { AUTH_LOGGED_OUT, AUTH_ACCOUNT_REMEMBER_SUCCESS, @@ -19,6 +21,7 @@ const initialState: Me = null; const handleForbidden = (state: Me, error: { response: PlfeResponse }) => { if (([401, 403] as any[]).includes(error.response?.status)) { + router.invalidate(); return false; } else { return state; @@ -29,12 +32,15 @@ const me = (state: Me = initialState, action: AuthAction | MeAction): Me => { switch (action.type) { case ME_FETCH_SUCCESS: case ME_PATCH_SUCCESS: + router.invalidate(); return action.me.id; case VERIFY_CREDENTIALS_SUCCESS: case AUTH_ACCOUNT_REMEMBER_SUCCESS: + router.invalidate(); return state || action.account.id; case ME_FETCH_SKIP: case AUTH_LOGGED_OUT: + router.invalidate(); return false; case ME_FETCH_FAIL: return handleForbidden(state, action.error as any); From f7a6e7fe468e105993ac0a4344a31ca02154f5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 11:50:54 +0100 Subject: [PATCH 05/13] pl-fe: update lexical dep MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/package.json | 20 +- pnpm-lock.yaml | 354 ++++++++++++++++++------------------ 2 files changed, 184 insertions(+), 190 deletions(-) diff --git a/packages/pl-fe/package.json b/packages/pl-fe/package.json index 0fd3d5c39..6f9950f10 100644 --- a/packages/pl-fe/package.json +++ b/packages/pl-fe/package.json @@ -44,15 +44,15 @@ "@fontsource/noto-sans-javanese": "^5.2.8", "@fontsource/roboto-mono": "^5.2.8", "@fontsource/tajawal": "^5.2.7", - "@lexical/code": "^0.38.2", - "@lexical/hashtag": "^0.38.2", - "@lexical/link": "^0.38.2", - "@lexical/list": "^0.38.2", - "@lexical/markdown": "^0.38.2", - "@lexical/react": "^0.38.2", - "@lexical/rich-text": "^0.38.2", - "@lexical/selection": "^0.38.2", - "@lexical/utils": "^0.38.2", + "@lexical/code": "^0.39.0", + "@lexical/hashtag": "^0.39.0", + "@lexical/link": "^0.39.0", + "@lexical/list": "^0.39.0", + "@lexical/markdown": "^0.39.0", + "@lexical/react": "^0.39.0", + "@lexical/rich-text": "^0.39.0", + "@lexical/selection": "^0.39.0", + "@lexical/utils": "^0.39.0", "@mkljczk/url-purify": "^0.0.5", "@phosphor-icons/core": "^2.1.1", "@reach/combobox": "^0.18.0", @@ -100,7 +100,7 @@ "intl-pluralrules": "^2.0.1", "isomorphic-dompurify": "^2.35.0", "leaflet": "^1.8.0", - "lexical": "^0.38.2", + "lexical": "^0.39.0", "line-awesome": "^1.3.0", "localforage": "^1.10.0", "lodash": "^4.17.23", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af0961e80..b81c114d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,32 +134,32 @@ importers: specifier: ^5.2.7 version: 5.2.7 '@lexical/code': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/hashtag': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/link': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/list': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/markdown': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/react': - specifier: ^0.38.2 - version: 0.38.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.27) + specifier: ^0.39.0 + version: 0.39.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.27) '@lexical/rich-text': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/selection': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@lexical/utils': - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 '@mkljczk/url-purify': specifier: ^0.0.5 version: 0.0.5 @@ -302,8 +302,8 @@ importers: specifier: ^1.8.0 version: 1.9.4 lexical: - specifier: ^0.38.2 - version: 0.38.2 + specifier: ^0.39.0 + version: 0.39.0 line-awesome: specifier: ^1.3.0 version: 1.3.0 @@ -1219,10 +1219,6 @@ packages: resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.6': resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} @@ -1858,77 +1854,77 @@ packages: '@keyv/serialize@1.1.0': resolution: {integrity: sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==} - '@lexical/clipboard@0.38.2': - resolution: {integrity: sha512-dDShUplCu8/o6BB9ousr3uFZ9bltR+HtleF/Tl8FXFNPpZ4AXhbLKUoJuucRuIr+zqT7RxEv/3M6pk/HEoE6NQ==} + '@lexical/clipboard@0.39.0': + resolution: {integrity: sha512-ylrHy8M+I5EH4utwqivslugqQhvgLTz9VEJdrb2RjbhKQEXwMcqKCRWh6cRfkYx64onE2YQE0nRIdzHhExEpLQ==} - '@lexical/code@0.38.2': - resolution: {integrity: sha512-wpqgbmPsfi/+8SYP0zI2kml09fGPRhzO5litR9DIbbSGvcbawMbRNcKLO81DaTbsJRnBJiQvbBBBJAwZKRqgBw==} + '@lexical/code@0.39.0': + resolution: {integrity: sha512-3tqFOOzP5Z9nRkZPHZYmIyLXd28gMMrlAD3k2zxiH5vGnAqiYTezR24CpRDw1BaF2c8vCgY/9CNobZzjXivpIA==} - '@lexical/devtools-core@0.38.2': - resolution: {integrity: sha512-hlN0q7taHNzG47xKynQLCAFEPOL8l6IP79C2M18/FE1+htqNP35q4rWhYhsptGlKo4me4PtiME7mskvr7T4yqA==} + '@lexical/devtools-core@0.39.0': + resolution: {integrity: sha512-2ET2nFeRhcc2YMrn184wxoEOTLl3UOlugi8ozuZFa6F4UDMXPq7nZRhiQNgYzhE6Z7NLMFrcmghvx652JbEowg==} peerDependencies: react: '>=17.x' react-dom: '>=17.x' - '@lexical/dragon@0.38.2': - resolution: {integrity: sha512-riOhgo+l4oN50RnLGhcqeUokVlMZRc+NDrxRNs2lyKSUdC4vAhAmAVUHDqYPyb4K4ZSw4ebZ3j8hI2zO4O3BbA==} + '@lexical/dragon@0.39.0': + resolution: {integrity: sha512-JkcBAYPZGzfs29gtkePeJG9US1uwKW6PkUt8G4QZkMTt4QMDnadqXauFE+30rbpvRdeNcR7s+/jOuRHd5SurDQ==} - '@lexical/extension@0.38.2': - resolution: {integrity: sha512-qbUNxEVjAC0kxp7hEMTzktj0/51SyJoIJWK6Gm790b4yNBq82fEPkksfuLkRg9VQUteD0RT1Nkjy8pho8nNamw==} + '@lexical/extension@0.39.0': + resolution: {integrity: sha512-mp/WcF8E53FWPiUHgHQz382J7u7C4+cELYNkC00dKaymf8NhS6M65Y8tyDikNGNUcLXSzaluwK0HkiKjTYGhVQ==} - '@lexical/hashtag@0.38.2': - resolution: {integrity: sha512-jNI4Pv+plth39bjOeeQegMypkjDmoMWBMZtV0lCynBpkkPFlfMnyL9uzW/IxkZnX8LXWSw5mbWk07nqOUNTCrA==} + '@lexical/hashtag@0.39.0': + resolution: {integrity: sha512-CFLNB74a607nC2GGcjKNPbo/ZnehnR3zz9+S5bfUg5dblSGKdCfxHiyr2cDwHY3dfOTu+qtimfh2Zqxz4dfghA==} - '@lexical/history@0.38.2': - resolution: {integrity: sha512-QWPwoVDMe/oJ0+TFhy78TDi7TWU/8bcDRFUNk1nWgbq7+2m+5MMoj90LmOFwakQHnCVovgba2qj+atZrab1dsQ==} + '@lexical/history@0.39.0': + resolution: {integrity: sha512-kuctleDime0tRDxQNDW8i5d6D/ys5Npp2yoCBmdKS8HfS/jz7uPumfZcX7wvUvNAEVExh+bY9IxqIexyGkNUtA==} - '@lexical/html@0.38.2': - resolution: {integrity: sha512-pC5AV+07bmHistRwgG3NJzBMlIzSdxYO6rJU4eBNzyR4becdiLsI4iuv+aY7PhfSv+SCs7QJ9oc4i5caq48Pkg==} + '@lexical/html@0.39.0': + resolution: {integrity: sha512-7VLWP5DpzBg3kKctpNK6PbhymKAtU6NAnKieopCfCIWlMW+EqpldteiIXGqSqrMRK0JWTmF1gKgr9nnQyOOsXw==} - '@lexical/link@0.38.2': - resolution: {integrity: sha512-UOKTyYqrdCR9+7GmH6ZVqJTmqYefKGMUHMGljyGks+OjOGZAQs78S1QgcPEqltDy+SSdPSYK7wAo6gjxZfEq9g==} + '@lexical/link@0.39.0': + resolution: {integrity: sha512-L1jSF2BVRHDqIQbKYFcQt3CqtVIphRA3QAW2VooYPNlKeaAb/yfFS+C60GX1cj96b0rMlHKrNC17ik2aEBZKLQ==} - '@lexical/list@0.38.2': - resolution: {integrity: sha512-OQm9TzatlMrDZGxMxbozZEHzMJhKxAbH1TOnOGyFfzpfjbnFK2y8oLeVsfQZfZRmiqQS4Qc/rpFnRP2Ax5dsbA==} + '@lexical/list@0.39.0': + resolution: {integrity: sha512-mxgSxUrakTCHtC+gF30BChQBJTsCMiMgfC2H5VvhcFwXMgsKE/aK9+a+C/sSvvzCmPXqzYsuAcGkJcrY3e5xlw==} - '@lexical/mark@0.38.2': - resolution: {integrity: sha512-U+8KGwc3cP5DxSs15HfkP2YZJDs5wMbWQAwpGqep9bKphgxUgjPViKhdi+PxIt2QEzk7WcoZWUsK1d2ty/vSmg==} + '@lexical/mark@0.39.0': + resolution: {integrity: sha512-wVs5498dWYOQ07FAHaFW6oYgNG3moBargf6es7+gHPzjlaoZ6Hd8sbvJtlT8F2RRlw+U+kUh4s8SjFuMSEJp0w==} - '@lexical/markdown@0.38.2': - resolution: {integrity: sha512-ykQJ9KUpCs1+Ak6ZhQMP6Slai4/CxfLEGg/rSHNVGbcd7OaH/ICtZN5jOmIe9ExfXMWy1o8PyMu+oAM3+AWFgA==} + '@lexical/markdown@0.39.0': + resolution: {integrity: sha512-mPaKH2FSwRwU2bDbMiMtdOridaEvSLU3Q5l7bqYE+TW799C/1EEtiv4xSkI01SjV9YOxNf24VNOipAMymPueKA==} - '@lexical/offset@0.38.2': - resolution: {integrity: sha512-uDky2palcY+gE6WTv6q2umm2ioTUnVqcaWlEcchP6A310rI08n6rbpmkaLSIh3mT2GJQN2QcN2x0ct5BQmKIpA==} + '@lexical/offset@0.39.0': + resolution: {integrity: sha512-8p+16AgFsG8ecZVQlFO6TQ+zHHHg7LKPNdm9BkklkJux41Y1+9rlPO12Mgbi4x2Hy2pRA8Gd/Su3hySGqEEVlA==} - '@lexical/overflow@0.38.2': - resolution: {integrity: sha512-f6vkTf+YZF0EuKvUK3goh4jrnF+Z0koiNMO+7rhSMLooc5IlD/4XXix4ZLiIktUWq4BhO84b82qtrO+6oPUxtw==} + '@lexical/overflow@0.39.0': + resolution: {integrity: sha512-BLtF4MNDrTNQFgryw6MPWh2Fj4GMjqC/6p9bbnZ9fdwMWKGSbsSNcK9PLlBwg3IzEK3XiibFDHUbsETwUd/bfw==} - '@lexical/plain-text@0.38.2': - resolution: {integrity: sha512-xRYNHJJFCbaQgr0uErW8Im2Phv1nWHIT4VSoAlBYqLuVGZBD4p61dqheBwqXWlGGJFk+MY5C5URLiMicgpol7A==} + '@lexical/plain-text@0.39.0': + resolution: {integrity: sha512-Ep0PGF7GlBNgiJJh/DBEPLt1WXyHUb7bCYZ4MUbD31AiJdG0p5a/g9dVTUr4QtNlCIXBCZjuatHyp6e2mzMacg==} - '@lexical/react@0.38.2': - resolution: {integrity: sha512-M3z3MkWyw3Msg4Hojr5TnO4TzL71NVPVNGoavESjdgJbTdv1ezcQqjE4feq+qs7H9jytZeuK8wsEOJfSPmNd8w==} + '@lexical/react@0.39.0': + resolution: {integrity: sha512-6ySVb5xv99GIkVzio4qqOBxkPgOSSeFAB4o9bVqtg72JbCoEKZPnWq5VVurGe1uiRJM8jvqTseM9mo2zTvUfXQ==} peerDependencies: react: '>=17.x' react-dom: '>=17.x' - '@lexical/rich-text@0.38.2': - resolution: {integrity: sha512-eFjeOT7YnDZYpty7Zlwlct0UxUSaYu53uLYG+Prs3NoKzsfEK7e7nYsy/BbQFfk5HoM1pYuYxFR2iIX62+YHGw==} + '@lexical/rich-text@0.39.0': + resolution: {integrity: sha512-UoSgRi09nLP/mmD3ijdZycr9icnqlb761rzHC1gicuPDdTu0ruxAFbGanSE2h36ihSu0IUHwkpf4gBpgPPqWBw==} - '@lexical/selection@0.38.2': - resolution: {integrity: sha512-eMFiWlBH6bEX9U9sMJ6PXPxVXTrihQfFeiIlWLuTpEIDF2HRz7Uo1KFRC/yN6q0DQaj7d9NZYA6Mei5DoQuz5w==} + '@lexical/selection@0.39.0': + resolution: {integrity: sha512-j0cgNuTKDCdf/4MzRnAUwEqG6C/WQp18k2WKmX5KIVZJlhnGIJmlgSBrxjo8AuZ16DIHxTm2XNB4cUDCgZNuPA==} - '@lexical/table@0.38.2': - resolution: {integrity: sha512-uu0i7yz0nbClmHOO5ZFsinRJE6vQnFz2YPblYHAlNigiBedhqMwSv5bedrzDq8nTTHwych3mC63tcyKIrM+I1g==} + '@lexical/table@0.39.0': + resolution: {integrity: sha512-1eH11kV4bJ0fufCYl8DpE19kHwqUI8Ev5CZwivfAtC3ntwyNkeEpjCc0pqeYYIWN/4rTZ5jgB3IJV4FntyfCzw==} - '@lexical/text@0.38.2': - resolution: {integrity: sha512-+juZxUugtC4T37aE3P0l4I9tsWbogDUnTI/mgYk4Ht9g+gLJnhQkzSA8chIyfTxbj5i0A8yWrUUSw+/xA7lKUQ==} + '@lexical/text@0.39.0': + resolution: {integrity: sha512-fcIgejtIgfMAkxio6BO1eLA2eb4oRIFoUVA2jAXdCaLVHrG/cizitbygPrgWnWd8nt1WlMuS4lxa0PJl7h7Lqg==} - '@lexical/utils@0.38.2': - resolution: {integrity: sha512-y+3rw15r4oAWIEXicUdNjfk8018dbKl7dWHqGHVEtqzAYefnEYdfD2FJ5KOTXfeoYfxi8yOW7FvzS4NZDi8Bfw==} + '@lexical/utils@0.39.0': + resolution: {integrity: sha512-8YChidpMJpwQc4nex29FKUeuZzC++QCS/Jt46lPuy1GS/BZQoPHFKQ5hyVvM9QVhc5CEs4WGNoaCZvZIVN8bQw==} - '@lexical/yjs@0.38.2': - resolution: {integrity: sha512-fg6ZHNrVQmy1AAxaTs8HrFbeNTJCaCoEDPi6pqypHQU3QVfqr4nq0L0EcHU/TRlR1CeduEPvZZIjUUxWTZ0u8g==} + '@lexical/yjs@0.39.0': + resolution: {integrity: sha512-peBrzIDoRWeyX9XTilKVdeJua6A+RZ24CG7lgGLEhmNSGCqpj9FqlC1Wtrul4wTSh85KlDeI1Nq30gnyeNKWYA==} peerDependencies: yjs: '>=13.5.22' @@ -4797,8 +4793,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lexical@0.38.2: - resolution: {integrity: sha512-JJmfsG3c4gwBHzUGffbV7ifMNkKAWMCnYE3xJl87gty7hjyV5f3xq7eqTjP5HFYvO4XpjJvvWO2/djHp5S10tw==} + lexical@0.39.0: + resolution: {integrity: sha512-lpLv7MEJH5QDujEDlYqettL3ATVtNYjqyimzqgrm0RvCm3AO9WXSdsgTxuN7IAZRu88xkxCDeYubeUf4mNZVdg==} lib0@0.2.117: resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==} @@ -7849,8 +7845,6 @@ snapshots: '@babel/runtime@7.28.2': {} - '@babel/runtime@7.28.4': {} - '@babel/runtime@7.28.6': {} '@babel/template@7.27.2': @@ -8383,165 +8377,165 @@ snapshots: '@keyv/serialize@1.1.0': {} - '@lexical/clipboard@0.38.2': + '@lexical/clipboard@0.39.0': dependencies: - '@lexical/html': 0.38.2 - '@lexical/list': 0.38.2 - '@lexical/selection': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/html': 0.39.0 + '@lexical/list': 0.39.0 + '@lexical/selection': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/code@0.38.2': + '@lexical/code@0.39.0': dependencies: - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 prismjs: 1.30.0 - '@lexical/devtools-core@0.38.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@lexical/devtools-core@0.39.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: - '@lexical/html': 0.38.2 - '@lexical/link': 0.38.2 - '@lexical/mark': 0.38.2 - '@lexical/table': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/html': 0.39.0 + '@lexical/link': 0.39.0 + '@lexical/mark': 0.39.0 + '@lexical/table': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@lexical/dragon@0.38.2': + '@lexical/dragon@0.39.0': dependencies: - '@lexical/extension': 0.38.2 - lexical: 0.38.2 + '@lexical/extension': 0.39.0 + lexical: 0.39.0 - '@lexical/extension@0.38.2': + '@lexical/extension@0.39.0': dependencies: - '@lexical/utils': 0.38.2 + '@lexical/utils': 0.39.0 '@preact/signals-core': 1.12.1 - lexical: 0.38.2 + lexical: 0.39.0 - '@lexical/hashtag@0.38.2': + '@lexical/hashtag@0.39.0': dependencies: - '@lexical/text': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/text': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/history@0.38.2': + '@lexical/history@0.39.0': dependencies: - '@lexical/extension': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/extension': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/html@0.38.2': + '@lexical/html@0.39.0': dependencies: - '@lexical/selection': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/selection': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/link@0.38.2': + '@lexical/link@0.39.0': dependencies: - '@lexical/extension': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/extension': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/list@0.38.2': + '@lexical/list@0.39.0': dependencies: - '@lexical/extension': 0.38.2 - '@lexical/selection': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/extension': 0.39.0 + '@lexical/selection': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/mark@0.38.2': + '@lexical/mark@0.39.0': dependencies: - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/markdown@0.38.2': + '@lexical/markdown@0.39.0': dependencies: - '@lexical/code': 0.38.2 - '@lexical/link': 0.38.2 - '@lexical/list': 0.38.2 - '@lexical/rich-text': 0.38.2 - '@lexical/text': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/code': 0.39.0 + '@lexical/link': 0.39.0 + '@lexical/list': 0.39.0 + '@lexical/rich-text': 0.39.0 + '@lexical/text': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/offset@0.38.2': + '@lexical/offset@0.39.0': dependencies: - lexical: 0.38.2 + lexical: 0.39.0 - '@lexical/overflow@0.38.2': + '@lexical/overflow@0.39.0': dependencies: - lexical: 0.38.2 + lexical: 0.39.0 - '@lexical/plain-text@0.38.2': + '@lexical/plain-text@0.39.0': dependencies: - '@lexical/clipboard': 0.38.2 - '@lexical/dragon': 0.38.2 - '@lexical/selection': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/clipboard': 0.39.0 + '@lexical/dragon': 0.39.0 + '@lexical/selection': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/react@0.38.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.27)': + '@lexical/react@0.39.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(yjs@13.6.27)': dependencies: '@floating-ui/react': 0.27.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@lexical/devtools-core': 0.38.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@lexical/dragon': 0.38.2 - '@lexical/extension': 0.38.2 - '@lexical/hashtag': 0.38.2 - '@lexical/history': 0.38.2 - '@lexical/link': 0.38.2 - '@lexical/list': 0.38.2 - '@lexical/mark': 0.38.2 - '@lexical/markdown': 0.38.2 - '@lexical/overflow': 0.38.2 - '@lexical/plain-text': 0.38.2 - '@lexical/rich-text': 0.38.2 - '@lexical/table': 0.38.2 - '@lexical/text': 0.38.2 - '@lexical/utils': 0.38.2 - '@lexical/yjs': 0.38.2(yjs@13.6.27) - lexical: 0.38.2 + '@lexical/devtools-core': 0.39.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@lexical/dragon': 0.39.0 + '@lexical/extension': 0.39.0 + '@lexical/hashtag': 0.39.0 + '@lexical/history': 0.39.0 + '@lexical/link': 0.39.0 + '@lexical/list': 0.39.0 + '@lexical/mark': 0.39.0 + '@lexical/markdown': 0.39.0 + '@lexical/overflow': 0.39.0 + '@lexical/plain-text': 0.39.0 + '@lexical/rich-text': 0.39.0 + '@lexical/table': 0.39.0 + '@lexical/text': 0.39.0 + '@lexical/utils': 0.39.0 + '@lexical/yjs': 0.39.0(yjs@13.6.27) + lexical: 0.39.0 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) react-error-boundary: 6.0.0(react@19.2.3) transitivePeerDependencies: - yjs - '@lexical/rich-text@0.38.2': + '@lexical/rich-text@0.39.0': dependencies: - '@lexical/clipboard': 0.38.2 - '@lexical/dragon': 0.38.2 - '@lexical/selection': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/clipboard': 0.39.0 + '@lexical/dragon': 0.39.0 + '@lexical/selection': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/selection@0.38.2': + '@lexical/selection@0.39.0': dependencies: - lexical: 0.38.2 + lexical: 0.39.0 - '@lexical/table@0.38.2': + '@lexical/table@0.39.0': dependencies: - '@lexical/clipboard': 0.38.2 - '@lexical/extension': 0.38.2 - '@lexical/utils': 0.38.2 - lexical: 0.38.2 + '@lexical/clipboard': 0.39.0 + '@lexical/extension': 0.39.0 + '@lexical/utils': 0.39.0 + lexical: 0.39.0 - '@lexical/text@0.38.2': + '@lexical/text@0.39.0': dependencies: - lexical: 0.38.2 + lexical: 0.39.0 - '@lexical/utils@0.38.2': + '@lexical/utils@0.39.0': dependencies: - '@lexical/list': 0.38.2 - '@lexical/selection': 0.38.2 - '@lexical/table': 0.38.2 - lexical: 0.38.2 + '@lexical/list': 0.39.0 + '@lexical/selection': 0.39.0 + '@lexical/table': 0.39.0 + lexical: 0.39.0 - '@lexical/yjs@0.38.2(yjs@13.6.27)': + '@lexical/yjs@0.39.0(yjs@13.6.27)': dependencies: - '@lexical/offset': 0.38.2 - '@lexical/selection': 0.38.2 - lexical: 0.38.2 + '@lexical/offset': 0.39.0 + '@lexical/selection': 0.39.0 + lexical: 0.39.0 yjs: 13.6.27 '@material/material-color-utilities@0.3.0': {} @@ -11986,7 +11980,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lexical@0.38.2: {} + lexical@0.39.0: {} lib0@0.2.117: dependencies: @@ -12740,7 +12734,7 @@ snapshots: react-error-boundary@6.0.0(react@19.2.3): dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.6 react: 19.2.3 react-event-listener@0.6.6(react@19.2.3): From a9cbe9e8817ad0dd721b25b4c2235a69848e1a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 13:54:08 +0100 Subject: [PATCH 06/13] pl-fe: fix styling regression MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx b/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx index 8adc571fc..5c672d5e6 100644 --- a/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx +++ b/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx @@ -207,7 +207,7 @@ const EditEvent: React.FC = ({ statusId }) => { Date: Sun, 1 Feb 2026 14:03:15 +0100 Subject: [PATCH 07/13] pl-fe: styles works MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../chats/components/chat-list-item.tsx | 6 ++---- .../chats/components/chat-list-shoutbox.tsx | 2 +- .../compose-event/tabs/edit-event.tsx | 9 ++++----- packages/pl-fe/src/styles/new/chats.scss | 20 +++++++++++++++++++ packages/pl-fe/src/styles/new/events.scss | 20 +++++++++++++++++++ 5 files changed, 47 insertions(+), 10 deletions(-) diff --git a/packages/pl-fe/src/features/chats/components/chat-list-item.tsx b/packages/pl-fe/src/features/chats/components/chat-list-item.tsx index 74c324e0b..4db458bf6 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list-item.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list-item.tsx @@ -81,7 +81,7 @@ const ChatListItem: React.FC = ({ chat, onClick }) => { key={chat.id} onClick={() => onClick(chat)} onKeyDown={handleKeyDown} - className='group flex w-full flex-col rounded-lg px-2 py-3 hover:bg-gray-100 focus:shadow-inset-ring dark:hover:bg-gray-800' + className='⁂-chat-list-item' data-testid='chat-list-item' tabIndex={0} > @@ -138,13 +138,11 @@ const ChatListItem: React.FC = ({ chat, onClick }) => { {features.chatsDelete && ( -
+
diff --git a/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx b/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx index 1fd6f8e84..2807f0f2a 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx @@ -37,7 +37,7 @@ const ChatListShoutbox: React.FC = ({ onClick }) => key='shoutbox' onClick={() => onClick('shoutbox')} onKeyDown={handleKeyDown} - className='group flex w-full flex-col rounded-lg px-2 py-3 hover:bg-gray-100 focus:shadow-inset-ring dark:hover:bg-gray-800' + className='⁂-chat-list-item' data-testid='chat-list-item' tabIndex={0} > diff --git a/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx b/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx index 5c672d5e6..d73fd64fa 100644 --- a/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx +++ b/packages/pl-fe/src/features/compose-event/tabs/edit-event.tsx @@ -178,11 +178,11 @@ const EditEvent: React.FC = ({ statusId }) => { labelText={} hintText={} > -
+
{banner ? ( <> - - + + ) : ( @@ -206,8 +206,7 @@ const EditEvent: React.FC = ({ statusId }) => { Date: Sun, 1 Feb 2026 21:33:35 +0100 Subject: [PATCH 08/13] pl-fe: chats styles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../chats/components/chat-list-item.tsx | 78 ++++++++----------- .../chats/components/chat-list-shoutbox.tsx | 60 ++++++-------- packages/pl-fe/src/styles/new/chats.scss | 61 +++++++++++++++ 3 files changed, 117 insertions(+), 82 deletions(-) diff --git a/packages/pl-fe/src/features/chats/components/chat-list-item.tsx b/packages/pl-fe/src/features/chats/components/chat-list-item.tsx index 4db458bf6..215c7e02a 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list-item.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list-item.tsx @@ -1,4 +1,5 @@ import { useNavigate } from '@tanstack/react-router'; +import clsx from 'clsx'; import React, { useMemo } from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; @@ -6,10 +7,7 @@ import DropdownMenu from 'pl-fe/components/dropdown-menu'; import { ParsedContent } from 'pl-fe/components/parsed-content'; import RelativeTimestamp from 'pl-fe/components/relative-timestamp'; import Avatar from 'pl-fe/components/ui/avatar'; -import HStack from 'pl-fe/components/ui/hstack'; import IconButton from 'pl-fe/components/ui/icon-button'; -import Stack from 'pl-fe/components/ui/stack'; -import Text from 'pl-fe/components/ui/text'; import VerificationBadge from 'pl-fe/components/verification-badge'; import { useChatContext } from 'pl-fe/contexts/chat-context'; import { useFeatures } from 'pl-fe/hooks/use-features'; @@ -85,58 +83,46 @@ const ChatListItem: React.FC = ({ chat, onClick }) => { data-testid='chat-list-item' tabIndex={0} > - - +
+
- -
- {chat.account?.display_name || `@${chat.account.username}`} +
+
+

{chat.account?.display_name || `@${chat.account.username}`}

{chat.account?.verified && }
- {(isBlocked || isBlocking) ? ( - - {isBlocked - ? - : } - - ) : ( - <> - {chat.last_message?.content && ( - - - - )} - - )} - - +

+ {isBlocked ? ( + + ) : isBlocking ? ( + + ) : ( + chat.last_message?.content && ( + + ) + )} +

+
+
- +
{features.chatsDelete && (
@@ -152,7 +138,7 @@ const ChatListItem: React.FC = ({ chat, onClick }) => { <> {chat.last_message.unread && (
)} @@ -166,8 +152,8 @@ const ChatListItem: React.FC = ({ chat, onClick }) => { /> )} - - +
+
); }; diff --git a/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx b/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx index 2807f0f2a..ce30aa903 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx @@ -4,9 +4,6 @@ import { FormattedMessage } from 'react-intl'; import { useAccount } from 'pl-fe/api/hooks/accounts/use-account'; import { ParsedContent } from 'pl-fe/components/parsed-content'; import Avatar from 'pl-fe/components/ui/avatar'; -import HStack from 'pl-fe/components/ui/hstack'; -import Stack from 'pl-fe/components/ui/stack'; -import Text from 'pl-fe/components/ui/text'; import { useInstance } from 'pl-fe/hooks/use-instance'; import { usePlFeConfig } from 'pl-fe/hooks/use-pl-fe-config'; import { useShoutboxMessages } from 'pl-fe/stores/shoutbox'; @@ -37,43 +34,34 @@ const ChatListShoutbox: React.FC = ({ onClick }) => key='shoutbox' onClick={() => onClick('shoutbox')} onKeyDown={handleKeyDown} - className='⁂-chat-list-item' + className='⁂-chat-list-item ⁂-chat-list-item--shoutbox' data-testid='chat-list-item' tabIndex={0} > - - - - -
- - - -
+
+ +
+
+

+ +

+
- {lastMessage && ( - <> - - {lastMessageAuthor && ( - - {lastMessageAuthor.display_name || `@${lastMessageAuthor.username}`}: - {' '} - - )} - - - - )} - - - + {lastMessage && ( + <> +

+ {lastMessageAuthor && ( + + {lastMessageAuthor.display_name || `@${lastMessageAuthor.username}`}: + {' '} + + )} + +

+ + )} +
+
); }; diff --git a/packages/pl-fe/src/styles/new/chats.scss b/packages/pl-fe/src/styles/new/chats.scss index caa0a66f6..41f7811a0 100644 --- a/packages/pl-fe/src/styles/new/chats.scss +++ b/packages/pl-fe/src/styles/new/chats.scss @@ -131,6 +131,55 @@ .⁂-chat-list-item { @apply flex w-full flex-col rounded-lg px-2 py-3 hover:bg-gray-100 focus:shadow-inset-ring dark:hover:bg-gray-800; + > div { + @apply flex items-center justify-between gap-2 w-full; + } + + &--shoutbox > div { + @apply justify-normal; + } + + &__info { + @apply flex items-center gap-2 overflow-hidden; + } + + &__avatar { + @apply flex-none; + } + + &__content { + @apply flex flex-col items-start overflow-hidden; + } + + &__name { + @apply flex w-full grow items-center space-x-1; + + p { + @include mixins.text($weight: bold, $size: sm, $align: left, $truncate: true); + } + } + + &__message { + @include mixins.text($theme: muted, $size: sm, $align: left, $truncate: true); + @apply truncate-child pointer-events-none h-5 w-full; + + &--unread { + @apply text-gray-900 dark:text-gray-100; + } + + &:not(&--blocking) > * { + @apply truncate; + } + + &__author { + @include mixins.text($weight: bold, $size: sm, $align: left, $theme: muted, $truncate: true); + } + } + + &__actions { + @apply flex items-center gap-2; + } + &__menu { @apply max-w-0 overflow-hidden text-gray-600 hover:text-gray-100; @@ -146,4 +195,16 @@ &:hover .⁂-chat-list-item__menu { @apply max-w-full; } + + &__unread { + @apply size-2 rounded-full bg-secondary-500; + } + + &__timestamp { + @include mixins.text($theme: muted, $size: xs, $align: right, $truncate: true); + } + + &__unread + &__timestamp { + @apply text-gray-900 dark:text-gray-100; + } } \ No newline at end of file From 5e295a3accda40de9526f4b107a8a72f7c222ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 23:21:54 +0100 Subject: [PATCH 09/13] pl-fe: emojify chat display name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../pl-fe/src/features/chats/components/chat-list-item.tsx | 5 ++++- .../src/features/chats/components/chat-list-shoutbox.tsx | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/pl-fe/src/features/chats/components/chat-list-item.tsx b/packages/pl-fe/src/features/chats/components/chat-list-item.tsx index 215c7e02a..f213fc7fa 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list-item.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list-item.tsx @@ -10,6 +10,7 @@ import Avatar from 'pl-fe/components/ui/avatar'; import IconButton from 'pl-fe/components/ui/icon-button'; import VerificationBadge from 'pl-fe/components/verification-badge'; import { useChatContext } from 'pl-fe/contexts/chat-context'; +import Emojify from 'pl-fe/features/emoji/emojify'; import { useFeatures } from 'pl-fe/hooks/use-features'; import { useRelationshipQuery } from 'pl-fe/queries/accounts/use-relationship'; import { useChatActions } from 'pl-fe/queries/chats'; @@ -96,7 +97,9 @@ const ChatListItem: React.FC = ({ chat, onClick }) => {
-

{chat.account?.display_name || `@${chat.account.username}`}

+

+ +

{chat.account?.verified && }
diff --git a/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx b/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx index ce30aa903..b44f7c209 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list-shoutbox.tsx @@ -4,6 +4,7 @@ import { FormattedMessage } from 'react-intl'; import { useAccount } from 'pl-fe/api/hooks/accounts/use-account'; import { ParsedContent } from 'pl-fe/components/parsed-content'; import Avatar from 'pl-fe/components/ui/avatar'; +import Emojify from 'pl-fe/features/emoji/emojify'; import { useInstance } from 'pl-fe/hooks/use-instance'; import { usePlFeConfig } from 'pl-fe/hooks/use-pl-fe-config'; import { useShoutboxMessages } from 'pl-fe/stores/shoutbox'; @@ -52,8 +53,7 @@ const ChatListShoutbox: React.FC = ({ onClick }) =>

{lastMessageAuthor && ( - {lastMessageAuthor.display_name || `@${lastMessageAuthor.username}`}: - {' '} + {': '} )} From d65234de8b6fd236853b32b28ca7bd0447b8ab86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 23:25:26 +0100 Subject: [PATCH 10/13] pl-fe: style migrations, fix chat list gradient MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/features/chats/components/chat-list.tsx | 4 ++-- packages/pl-fe/src/styles/new/chats.scss | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/pl-fe/src/features/chats/components/chat-list.tsx b/packages/pl-fe/src/features/chats/components/chat-list.tsx index 83d2d0f80..a2851feca 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list.tsx @@ -52,7 +52,7 @@ const ChatList: React.FC = ({ onClickChat, useWindowScroll = false }) }; return ( -

+
setNearTop(atTop)} @@ -75,7 +75,7 @@ const ChatList: React.FC = ({ onClickChat, useWindowScroll = false }) <>
div { + position: relative; + height: 100%; + } } &__blankslate { From bb602176c475631d451161039c40fb36e9acfb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 23:44:16 +0100 Subject: [PATCH 11/13] pl-fe: style migrations, fix chat list gradient MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../features/chats/components/chat-list.tsx | 61 ++++++++----------- packages/pl-fe/src/styles/new/chats.scss | 21 ++++++- packages/pl-fe/src/styles/new/events.scss | 31 +++++++++- 3 files changed, 72 insertions(+), 41 deletions(-) diff --git a/packages/pl-fe/src/features/chats/components/chat-list.tsx b/packages/pl-fe/src/features/chats/components/chat-list.tsx index a2851feca..6e55c8e03 100644 --- a/packages/pl-fe/src/features/chats/components/chat-list.tsx +++ b/packages/pl-fe/src/features/chats/components/chat-list.tsx @@ -52,42 +52,31 @@ const ChatList: React.FC = ({ onClickChat, useWindowScroll = false }) }; return ( -
- - setNearTop(atTop)} - atBottomStateChange={(atBottom) => setNearBottom(atBottom)} - useWindowScroll={useWindowScroll} - data={allChats} - endReached={handleLoadMore} - itemContent={(_index, chat) => ( -
- {chat === 'shoutbox' ? : } -
- )} - components={{ - ScrollSeekPlaceholder: () => , - Footer: () => hasNextPage ? : null, - EmptyPlaceholder: renderEmpty, - }} - /> -
- - <> -
-
- -
+ + setNearTop(atTop)} + atBottomStateChange={(atBottom) => setNearBottom(atBottom)} + useWindowScroll={useWindowScroll} + data={allChats} + endReached={handleLoadMore} + itemContent={(_index, chat) => ( +
+ {chat === 'shoutbox' ? : } +
+ )} + components={{ + ScrollSeekPlaceholder: () => , + Footer: () => hasNextPage ? : null, + EmptyPlaceholder: renderEmpty, + }} + /> +
); }; diff --git a/packages/pl-fe/src/styles/new/chats.scss b/packages/pl-fe/src/styles/new/chats.scss index 938c6871f..16593a2bd 100644 --- a/packages/pl-fe/src/styles/new/chats.scss +++ b/packages/pl-fe/src/styles/new/chats.scss @@ -97,8 +97,25 @@ flex-grow: 1; > div { - position: relative; - height: 100%; + &::before, + &::after { + @apply pointer-events-none absolute inset-x-0 flex justify-center from-white to-transparent pb-12 pt-8 transition-opacity duration-500 black:from-black dark:from-gray-900 opacity-100 black:opacity-50; + content: ''; + z-index: 2; + } + + &::before { + @apply top-0 rounded-t-lg bg-gradient-to-b; + } + + &::after { + @apply bottom-0 rounded-b-lg bg-gradient-to-t; + } + + &.⁂-chat-widget__list--near-top::before, + &.⁂-chat-widget__list--near-bottom::after { + @apply opacity-0 black:opacity-0; + } } } diff --git a/packages/pl-fe/src/styles/new/events.scss b/packages/pl-fe/src/styles/new/events.scss index 638b19dc1..f5ba6848d 100644 --- a/packages/pl-fe/src/styles/new/events.scss +++ b/packages/pl-fe/src/styles/new/events.scss @@ -20,16 +20,41 @@ @apply dark:sm:shadow-inset relative flex h-24 items-center justify-center overflow-hidden rounded-lg bg-primary-100 text-primary-500 dark:bg-gray-800 dark:text-white sm:h-32 sm:shadow; img { - @apply size-full object-cover; + height: 100%; + width: 100%; + object-fit: cover; } .⁂-icon-button { - @apply absolute right-2 top-2; + position: absolute; + top: 0.5rem; + right: 0.5rem; } } .lexical { - @apply block w-full rounded-md border border-gray-400 bg-white px-3 py-2 text-base text-gray-900 ring-1 placeholder:text-gray-600 focus-within:border-primary-500 focus-within:ring-primary-500 black:bg-black dark:border-gray-800 dark:bg-gray-900 dark:text-gray-100 dark:ring-gray-800 dark:placeholder:text-gray-600 dark:focus-within:border-primary-500 dark:focus-within:ring-primary-500 sm:text-sm; + display: block; + width: 100%; + border-radius: 0.375rem; + border: 1px solid rgb(var(--color-gray-400)); + background-color: rgb(var(--color-white)); + padding: 0.5rem 0.75rem; + font-size: 0.9375rem; + color: rgb(var(--color-gray-900)); + outline: 1px solid transparent; + @apply placeholder:text-gray-600 focus-within:border-primary-500 black:bg-black dark:border-gray-800 dark:bg-gray-900 dark:text-gray-100 dark:placeholder:text-gray-600 dark:focus-within:border-primary-500 sm:text-sm; + + &:focus-within { + outline-color: rgb(var(--color-primary-500)); + } + + &:is(.dark *) { + outline-color: rgb(var(--color-gray-800)); + + &:focus-within { + outline-color: rgb(var(--color-primary-500)); + } + } } .⁂-compose-form__editor__placeholder { From f913db1b17afa54aed9c5eafe0fa3ef425a9ab80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 1 Feb 2026 23:44:36 +0100 Subject: [PATCH 12/13] pl-fe: fix regression MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/reducers/me.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/pl-fe/src/reducers/me.ts b/packages/pl-fe/src/reducers/me.ts index 37848b486..97686ce74 100644 --- a/packages/pl-fe/src/reducers/me.ts +++ b/packages/pl-fe/src/reducers/me.ts @@ -1,5 +1,3 @@ -import { router } from 'pl-fe/features/ui/router'; - import { AUTH_LOGGED_OUT, AUTH_ACCOUNT_REMEMBER_SUCCESS, @@ -21,7 +19,6 @@ const initialState: Me = null; const handleForbidden = (state: Me, error: { response: PlfeResponse }) => { if (([401, 403] as any[]).includes(error.response?.status)) { - router.invalidate(); return false; } else { return state; @@ -32,15 +29,12 @@ const me = (state: Me = initialState, action: AuthAction | MeAction): Me => { switch (action.type) { case ME_FETCH_SUCCESS: case ME_PATCH_SUCCESS: - router.invalidate(); return action.me.id; case VERIFY_CREDENTIALS_SUCCESS: case AUTH_ACCOUNT_REMEMBER_SUCCESS: - router.invalidate(); return state || action.account.id; case ME_FETCH_SKIP: case AUTH_LOGGED_OUT: - router.invalidate(); return false; case ME_FETCH_FAIL: return handleForbidden(state, action.error as any); From 0259d58706265912bb08013d3f69557e11e34e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Tue, 3 Feb 2026 20:18:40 +0100 Subject: [PATCH 13/13] pl-api: update feature definitions for hollo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-api/lib/features.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/pl-api/lib/features.ts b/packages/pl-api/lib/features.ts index 97f256af0..cb3632631 100644 --- a/packages/pl-api/lib/features.ts +++ b/packages/pl-api/lib/features.ts @@ -966,7 +966,10 @@ const getFeatures = (instance: Instance) => { * @see GET /api/v2/notifications/:group_key/accounts * @see GET /api/v2/notifications/unread_count */ - groupedNotifications: instance.api_versions.mastodon >= 2, + groupedNotifications: any([ + instance.api_versions.mastodon >= 2, + v.software === HOLLO && gte(v.version, '0.7.0'), + ]), /** * Groups.