From 6c88b212d2b95a82c91f455309894aed57b6a3a7 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 26 Jun 2026 15:28:53 +0300 Subject: [PATCH 01/53] not using port 5050 anymore --- .gitlab-ci.yml | 2 +- docker-compose.e2e.yml | 2 +- tools/e2e/run.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 247218091..4c8d0fb27 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -157,7 +157,7 @@ e2e-pleroma: variables: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" FF_NETWORK_PER_BUILD: "true" - PLEROMA_IMAGE: git.pleroma.social:5050/pleroma/pleroma:stable + PLEROMA_IMAGE: git.pleroma.social/pleroma/pleroma:stable POSTGRES_USER: pleroma POSTGRES_PASSWORD: pleroma POSTGRES_DB: pleroma diff --git a/docker-compose.e2e.yml b/docker-compose.e2e.yml index 75a4979a1..114c22f7f 100644 --- a/docker-compose.e2e.yml +++ b/docker-compose.e2e.yml @@ -12,7 +12,7 @@ services: retries: 30 pleroma: - image: ${PLEROMA_IMAGE:-git.pleroma.social:5050/pleroma/pleroma:stable} + image: ${PLEROMA_IMAGE:-git.pleroma.social/pleroma/pleroma:stable} environment: DB_USER: pleroma DB_PASS: pleroma diff --git a/tools/e2e/run.sh b/tools/e2e/run.sh index 3c0ba8a36..452302cbd 100644 --- a/tools/e2e/run.sh +++ b/tools/e2e/run.sh @@ -5,7 +5,7 @@ set -u COMPOSE_FILE="docker-compose.e2e.yml" : "${COMPOSE_MENU:=false}" -: "${PLEROMA_IMAGE:=git.pleroma.social:5050/pleroma/pleroma:stable}" +: "${PLEROMA_IMAGE:=git.pleroma.social/pleroma/pleroma:stable}" : "${E2E_ADMIN_USERNAME:=admin}" : "${E2E_ADMIN_PASSWORD:=adminadmin}" : "${E2E_ADMIN_EMAIL:=admin@example.com}" From 89d3bc3cce820132129b56368d4194bd0c31d615 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 26 Jun 2026 15:53:34 +0300 Subject: [PATCH 02/53] missing follow button is just weird --- src/components/user_card/user_card.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index 31a513130..f3e2b8f85 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -15,6 +15,7 @@ import ProgressButton from 'src/components/progress_button/progress_button.vue' import Select from 'src/components/select/select.vue' import UserAvatar from 'src/components/user_avatar/user_avatar.vue' import UserLink from 'src/components/user_link/user_link.vue' +import FollowButton from 'src/components/follow_button/follow_button.vue' import { useEmojiStore } from 'src/stores/emoji.js' import { useInstanceStore } from 'src/stores/instance.js' @@ -138,9 +139,7 @@ export default { () => import('src/components/account_actions/account_actions.vue'), ), ProgressButton, - FollowButton: defineAsyncComponent( - () => import('src/components/follow_button/follow_button.vue'), - ), + FollowButton, Select, UserLink, UserNote: defineAsyncComponent( From ac538da1d82716fb5368bc146b347253b39c75e2 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 26 Jun 2026 16:01:30 +0300 Subject: [PATCH 03/53] testing global error handling --- src/boot/after_store.js | 5 +++++ src/stores/interface.js | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 0b4825ca0..bc86cb1e4 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -467,6 +467,11 @@ const afterStoreSetup = async ({ pinia, store, storageError, i18n }) => { // "Plugins are only applied to stores created after the plugins themselves, and after pinia is passed to the app, otherwise they won't be applied." app.use(pinia) + app.config.errorHandler = (error, instance, info) => { + console.error('GLOBAL ERROR HANDLER', error, instance, info) + useInterfaceStore().setGlobalError({ error, instance, info }) + } + const waitForAllStoresToLoad = async () => { // the stores that do not persist technically do not need to be awaited here, // but that involves either hard-coding the stores in some place (prone to errors) diff --git a/src/stores/interface.js b/src/stores/interface.js index 21c1e9f8a..4d5d2a8e4 100644 --- a/src/stores/interface.js +++ b/src/stores/interface.js @@ -58,6 +58,7 @@ export const useInterfaceStore = defineStore('interface', { }, layoutType: 'normal', globalNotices: [], + globalError: null, layoutHeight: 0, lastTimeline: null, foreignProfileBackground: null, @@ -176,6 +177,9 @@ export const useInterfaceStore = defineStore('interface', { removeGlobalNotice(notice) { this.globalNotices = this.globalNotices.filter((n) => n !== notice) }, + setGlobalError(data) { + this.globalError = data + }, pushGlobalNotice({ messageKey, messageArgs = {}, From c898d9b70285df887cf00e551eada1c1f68a103d Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 26 Jun 2026 16:05:32 +0300 Subject: [PATCH 04/53] stop loading auth form async --- src/components/user_panel/user_panel.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/user_panel/user_panel.js b/src/components/user_panel/user_panel.js index ac6bc669c..dd1da869e 100644 --- a/src/components/user_panel/user_panel.js +++ b/src/components/user_panel/user_panel.js @@ -3,6 +3,7 @@ import { mapState } from 'vuex' import PostStatusForm from 'src/components/post_status_form/post_status_form.vue' import UserCard from 'src/components/user_card/user_card.vue' +import AuthForm from 'src/components/auth_form/auth_form.js' const UserPanel = { computed: { @@ -12,9 +13,6 @@ const UserPanel = { ...mapState({ user: (state) => state.users.currentUser }), }, components: { - AuthForm: defineAsyncComponent( - () => import('src/components/auth_form/auth_form.js'), - ), PostStatusForm, UserCard, }, From 670edf3006bd77ba1c7a708b5fd3ac6cd4b62637 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 26 Jun 2026 17:43:57 +0300 Subject: [PATCH 05/53] Added error handling and handle async component failing --- src/App.js | 2 + src/App.scss | 13 +++ src/App.vue | 1 + src/components/error_modal/error_modal.js | 36 +++++++ src/components/error_modal/error_modal.vue | 100 +++++++++++++++++++ src/components/global_error/global_error.js | 52 ++++++++++ src/components/global_error/global_error.vue | 23 +++++ src/i18n/en.json | 4 + src/stores/interface.js | 25 ++++- 9 files changed, 254 insertions(+), 2 deletions(-) create mode 100644 src/components/error_modal/error_modal.js create mode 100644 src/components/error_modal/error_modal.vue create mode 100644 src/components/global_error/global_error.js create mode 100644 src/components/global_error/global_error.vue diff --git a/src/App.js b/src/App.js index 7de7a0696..934b96713 100644 --- a/src/App.js +++ b/src/App.js @@ -4,6 +4,7 @@ import { defineAsyncComponent } from 'vue' import DesktopNav from 'src/components/desktop_nav/desktop_nav.vue' import FeaturesPanel from 'src/components/features_panel/features_panel.vue' +import GlobalError from 'src/components/global_error/global_error.vue' import GlobalNoticeList from 'src/components/global_notice_list/global_notice_list.vue' import InstanceSpecificPanel from 'src/components/instance_specific_panel/instance_specific_panel.vue' import MobileNav from 'src/components/mobile_nav/mobile_nav.vue' @@ -68,6 +69,7 @@ export default { () => import('src/components/status_history_modal/status_history_modal.vue'), ), + GlobalError, GlobalNoticeList, }, data: () => ({ diff --git a/src/App.scss b/src/App.scss index 9618a2ac4..02db8f531 100644 --- a/src/App.scss +++ b/src/App.scss @@ -144,6 +144,19 @@ h4 { margin: 0; } +code { + background: var(--bg); + border: 1px solid var(--fg); + border-radius: var(--roundness); + margin: 0.2em; + padding: 0 0.2em; + + &.pre { + white-space: pre; + display: block; + } +} + .iconLetter { display: inline-block; text-align: center; diff --git a/src/App.vue b/src/App.vue index c1a7199d7..84a6f7d3d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -73,6 +73,7 @@ + diff --git a/src/components/error_modal/error_modal.js b/src/components/error_modal/error_modal.js new file mode 100644 index 000000000..aaa9f99ec --- /dev/null +++ b/src/components/error_modal/error_modal.js @@ -0,0 +1,36 @@ +import DialogModal from 'src/components/dialog_modal/dialog_modal.vue' + +import { library } from '@fortawesome/fontawesome-svg-core' +import { faCircleXmark } from '@fortawesome/free-solid-svg-icons' + +library.add(faCircleXmark) + +/** + * This component emits the following events: + * cancelled, emitted when the action should not be performed; + * accepted, emitted when the action should be performed; + * + * The caller should close this dialog after receiving any of the two events. + */ +const ErrorModal = { + components: { + DialogModal, + }, + props: { + title: { + type: String, + }, + clearText: { + type: String, + }, + recoverText: { + type: String, + }, + error: { + type: Error, + }, + }, + emits: ['clear', 'recover'] +} + +export default ErrorModal diff --git a/src/components/error_modal/error_modal.vue b/src/components/error_modal/error_modal.vue new file mode 100644 index 000000000..7429e8bdc --- /dev/null +++ b/src/components/error_modal/error_modal.vue @@ -0,0 +1,100 @@ + + + + diff --git a/src/components/global_error/global_error.js b/src/components/global_error/global_error.js new file mode 100644 index 000000000..0f826f4c4 --- /dev/null +++ b/src/components/global_error/global_error.js @@ -0,0 +1,52 @@ +import ErrorModal from 'src/components/error_modal/error_modal.vue' + +import { useInterfaceStore } from 'src/stores/interface.js' + +import { mapState, mapActions } from 'pinia' + +const GlobalError = { + components: { + ErrorModal, + }, + computed: { + title() { + if (this.globalError == null) return null + return this.globalError.title && this.$t(this.globalError.title) + }, + content() { + if (this.globalError == null) return null + if (this.globalError.content) { + return this.$t(this.globalError.content, [this.globalError.error]) + } else { + return null + } + }, + details() { + if (this.globalError == null) return null + if (this.globalError.error != null) { + return this.globalError.error.toString() + '\n\n' + this.globalError.error.stack + } else { + return this.globalError.details + } + }, + recoverText() { + if (this.globalError == null) return null + if (this.globalError.recoverText == null) return null + return this.$t(this.globalError.recoverText) + }, + ...mapState(useInterfaceStore, ['globalError']), + }, + methods: { + clear() { + this.globalError.clear?.() + this.clearGlobalError() + }, + recover() { + this.globalError.recover?.() + this.clearGlobalError() + }, + ...mapActions(useInterfaceStore, ['clearGlobalError']), + }, +} + +export default GlobalError diff --git a/src/components/global_error/global_error.vue b/src/components/global_error/global_error.vue new file mode 100644 index 000000000..3c3901d4f --- /dev/null +++ b/src/components/global_error/global_error.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/i18n/en.json b/src/i18n/en.json index 10ce5704b..62cce21e8 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -90,7 +90,11 @@ "loading": "Loading…", "generic_error": "An error occured", "generic_error_message": "An error occured: {0}", + "generic_error_details": "Technical info:", "error_retry": "Please try again", + "refresh_required": "Refresh required", + "refresh_required_content": "Frontend was updated on server, you need to refresh the page.", + "refresh_required_refresh": "Refresh", "retry": "Try again", "optional": "optional", "show_more": "Show more", diff --git a/src/stores/interface.js b/src/stores/interface.js index 4d5d2a8e4..e76a23cc2 100644 --- a/src/stores/interface.js +++ b/src/stores/interface.js @@ -177,8 +177,29 @@ export const useInterfaceStore = defineStore('interface', { removeGlobalNotice(notice) { this.globalNotices = this.globalNotices.filter((n) => n !== notice) }, - setGlobalError(data) { - this.globalError = data + setGlobalError({ error, instance, info }) { + console.log(info) + switch (info) { + case 'https://vuejs.org/error-reference/#runtime-13': { + this.globalError = { + title: 'general.refresh_required', + content: 'general.refresh_required_content', + // `true` disables cache on Firefox (non-standard) + recover: () => window.location.reload(true), + recoverText: 'general.refresh_required_refresh', + error, + } + break + } + default: { + this.globalError = { error } + break + } + } + console.log(this.globalError) + }, + clearGlobalError() { + this.globalError = null; }, pushGlobalNotice({ messageKey, From 7966b0b97fb77bf6804dabe84edf476d7e9d5388 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 26 Jun 2026 17:48:35 +0300 Subject: [PATCH 06/53] better wording --- src/i18n/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/en.json b/src/i18n/en.json index 62cce21e8..7da5524db 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -93,8 +93,8 @@ "generic_error_details": "Technical info:", "error_retry": "Please try again", "refresh_required": "Refresh required", - "refresh_required_content": "Frontend was updated on server, you need to refresh the page.", - "refresh_required_refresh": "Refresh", + "refresh_required_content": "Failed to load UI code. Most likely frontend was updated on server, you'll need to refresh the page.", + "refresh_required_refresh": "Refresh page", "retry": "Try again", "optional": "optional", "show_more": "Show more", From 142e8cbf2f88247e6d60a35e79e68077c28673c4 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 30 Jun 2026 03:22:20 +0300 Subject: [PATCH 07/53] fix crash in mobile nav --- src/components/mobile_nav/mobile_nav.js | 3 --- src/components/mobile_nav/mobile_nav.vue | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/mobile_nav/mobile_nav.js b/src/components/mobile_nav/mobile_nav.js index 41cc4f457..b47376d53 100644 --- a/src/components/mobile_nav/mobile_nav.js +++ b/src/components/mobile_nav/mobile_nav.js @@ -152,9 +152,6 @@ const MobileNav = { }, onScroll({ target: { scrollTop, clientHeight, scrollHeight } }) { this.notificationsAtTop = scrollTop > 0 - if (scrollTop + clientHeight >= scrollHeight) { - this.$refs.notifications.fetchOlderNotifications() - } }, }, watch: { diff --git a/src/components/mobile_nav/mobile_nav.vue b/src/components/mobile_nav/mobile_nav.vue index 09009782a..743b7deb0 100644 --- a/src/components/mobile_nav/mobile_nav.vue +++ b/src/components/mobile_nav/mobile_nav.vue @@ -94,6 +94,7 @@ /> +
Date: Tue, 30 Jun 2026 03:27:58 +0300 Subject: [PATCH 08/53] improve code display styles --- src/App.scss | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/App.scss b/src/App.scss index 02db8f531..be3f0df22 100644 --- a/src/App.scss +++ b/src/App.scss @@ -148,9 +148,15 @@ code { background: var(--bg); border: 1px solid var(--fg); border-radius: var(--roundness); - margin: 0.2em; padding: 0 0.2em; + & pre, + pre & { + display: block; + overflow-x: auto; + padding: 0.2em; + } + &.pre { white-space: pre; display: block; From cc594440116231c48731d1276f50078fbcc092d2 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 30 Jun 2026 03:37:56 +0300 Subject: [PATCH 09/53] fix registration reason --- .../basic_user_card/basic_user_card.vue | 3 ++- .../admin_tabs/admin_user_card.scss | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/components/basic_user_card/basic_user_card.vue b/src/components/basic_user_card/basic_user_card.vue index 2de8b7b36..49786bf1b 100644 --- a/src/components/basic_user_card/basic_user_card.vue +++ b/src/components/basic_user_card/basic_user_card.vue @@ -54,7 +54,8 @@ From 832dad842aac061fee9ac8f2c8147e8e25238085 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 7 Jul 2026 21:21:07 +0300 Subject: [PATCH 46/53] fix chat, lint --- src/components/chat/chat.js | 3 ++- src/components/palette_editor/palette_editor.vue | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js index 16a03ab1d..273d9d85d 100644 --- a/src/components/chat/chat.js +++ b/src/components/chat/chat.js @@ -16,6 +16,7 @@ import { } from './chat_layout_utils.js' import { useInterfaceStore } from 'src/stores/interface.js' +import { useMergedConfigStore } from 'src/stores/merged_config.js' import { useOAuthStore } from 'src/stores/oauth.js' import { @@ -116,8 +117,8 @@ const Chat = { 'currentChat', 'currentChatMessageService', 'findOpenedChatByRecipientId', - 'mergedConfig', ]), + ...mapPiniaState(useMergedConfigStore, ['mergedConfig']), ...mapPiniaState(useInterfaceStore, { mobileLayout: (store) => store.layoutType === 'mobile', }), diff --git a/src/components/palette_editor/palette_editor.vue b/src/components/palette_editor/palette_editor.vue index b27b21f00..1a73d5fdb 100644 --- a/src/components/palette_editor/palette_editor.vue +++ b/src/components/palette_editor/palette_editor.vue @@ -59,10 +59,12 @@ import { computed } from 'vue' import ColorInput from 'src/components/color_input/color_input.vue' import ContrastRatio from 'src/components/contrast_ratio/contrast_ratio.vue' -import { getContrastRatio, hex2rgb } from 'src/services/color_convert/color_convert.js' - import { useInterfaceStore } from 'src/stores/interface.js' +import { + getContrastRatio, + hex2rgb, +} from 'src/services/color_convert/color_convert.js' import { newExporter, newImporter, From bb4eb33c853d0f0e4298fcb1860a8875775c0844 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 8 Jul 2026 17:49:43 +0300 Subject: [PATCH 47/53] fix chat message sending not working --- src/api/chats.js | 2 +- src/api/helpers.js | 3 ++- src/components/chat/chat.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/api/chats.js b/src/api/chats.js index 51e83c74f..114038e52 100644 --- a/src/api/chats.js +++ b/src/api/chats.js @@ -4,7 +4,7 @@ import { parseChat } from 'src/services/entity_normalizer/entity_normalizer.serv const PLEROMA_CHATS_URL = '/api/v1/pleroma/chats' const PLEROMA_CHAT_URL = (id) => `/api/v1/pleroma/chats/by-account-id/${id}` -const PLEROMA_CHAT_MESSAGES_URL = (id, { maxId, sinceId, limit }) => +const PLEROMA_CHAT_MESSAGES_URL = (id, { maxId, sinceId, limit } = {}) => `/api/v1/pleroma/chats/${id}/messages${paramsString({ maxId, sinceId, limit })}` const PLEROMA_CHAT_READ_URL = (id) => `/api/v1/pleroma/chats/${id}/read` const PLEROMA_DELETE_CHAT_MESSAGE_URL = (chatId, messageId) => diff --git a/src/api/helpers.js b/src/api/helpers.js index f965750c5..ce41eca77 100644 --- a/src/api/helpers.js +++ b/src/api/helpers.js @@ -17,7 +17,6 @@ export const paramsString = (params = {}) => { } })() - if (entries.length === 0) return '' const arrays = [] const nonArrays = [] @@ -48,6 +47,8 @@ export const paramsString = (params = {}) => { }) }) + if (nonArrays.length + arrays.length === 0) return '' + return ( '?' + [ diff --git a/src/components/chat/chat.js b/src/components/chat/chat.js index 273d9d85d..ca7a025ec 100644 --- a/src/components/chat/chat.js +++ b/src/components/chat/chat.js @@ -382,7 +382,7 @@ const Chat = { if (retriesLeft <= 0) return sendChatMessage({ - params, + ...params, credentials: useOAuthStore().token, }) .then(({ data }) => { From ce032ace4c426394d99351ee0b737037fba6cab7 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 8 Jul 2026 19:37:52 +0300 Subject: [PATCH 48/53] fix new chat --- src/components/chat_new/chat_new.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/chat_new/chat_new.js b/src/components/chat_new/chat_new.js index 0ee4e292b..ccfe2df50 100644 --- a/src/components/chat_new/chat_new.js +++ b/src/components/chat_new/chat_new.js @@ -5,6 +5,8 @@ import UserAvatar from 'src/components/user_avatar/user_avatar.vue' import { useOAuthStore } from 'src/stores/oauth.js' +import { chats } from 'src/api/chats.js' + import { library } from '@fortawesome/fontawesome-svg-core' import { faChevronLeft, faSearch } from '@fortawesome/free-solid-svg-icons' @@ -24,10 +26,10 @@ const chatNew = { } }, async created() { - const { chats } = await chats({ + const { chatList } = await chats({ credentials: useOAuthStore().token, }) - chats.forEach((chat) => this.suggestions.push(chat.account)) + chatList.forEach((chat) => this.suggestions.push(chat.account)) }, computed: { users() { From 7bc74083d0ff6fca1ac752ba81b3fc8dd776257e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 8 Jul 2026 20:31:17 +0300 Subject: [PATCH 49/53] fix post status for error handling --- .../post_status_form/post_status_form.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index bb4051628..bd2b44e54 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -596,16 +596,18 @@ const PostStatusForm = { ? this.postHandler : statusPoster.postStatus - postHandler(postingOptions).then((data) => { - if (!data.error) { + postHandler(postingOptions) + .then((data) => { this.abandonDraft() this.clearStatus() this.$emit('posted', data) - } else { - this.error = data.error - } - this.posting = false - }) + }) + .catch((error) => { + this.error = error + }) + .finally(() => { + this.posting = false + }) }, previewStatus() { if (this.emptyStatus && this.newStatus.spoilerText.trim() === '') { From a724458fccb6a193f794e0871b9bee99d762688e Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 10 Jul 2026 12:28:50 +0300 Subject: [PATCH 50/53] consistency for post/notification transparency --- src/components/notification/notification.scss | 5 ----- src/components/notification/notification.style.js | 10 ++++++++-- src/components/notifications/notifications.vue | 1 - 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/notification/notification.scss b/src/components/notification/notification.scss index 934d3e58d..3e2fa54a5 100644 --- a/src/components/notification/notification.scss +++ b/src/components/notification/notification.scss @@ -10,11 +10,6 @@ cursor: pointer; } - &.Status { - /* stylelint-disable-next-line declaration-no-important */ - background-color: transparent !important; - } - --emoji-size: 1em; &:hover { diff --git a/src/components/notification/notification.style.js b/src/components/notification/notification.style.js index 49e28cf2e..db5fc5b94 100644 --- a/src/components/notification/notification.style.js +++ b/src/components/notification/notification.style.js @@ -1,6 +1,6 @@ export default { name: 'Notification', - selector: '.Notification', + selector: '.NotificationParent', validInnerComponents: [ 'Text', 'Link', @@ -9,5 +9,11 @@ export default { 'Avatar', 'PollGraph', ], - defaultRules: [], + defaultRules: [ + { + directives: { + background: '--bg', + }, + }, + ], } diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue index 387c3a847..66819317b 100644 --- a/src/components/notifications/notifications.vue +++ b/src/components/notifications/notifications.vue @@ -51,7 +51,6 @@
Date: Fri, 10 Jul 2026 12:35:29 +0300 Subject: [PATCH 51/53] fix remainder of inefficient imports --- src/boot/routes.js | 5 ++--- src/components/global_error/global_error.js | 7 ++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/boot/routes.js b/src/boot/routes.js index 9b00a8004..4e62f5761 100644 --- a/src/boot/routes.js +++ b/src/boot/routes.js @@ -11,6 +11,7 @@ import PublicTimeline from 'src/components/public_timeline/public_timeline.vue' import QuotesTimeline from 'src/components/quotes_timeline/quotes_timeline.vue' import RemoteUserResolver from 'src/components/remote_user_resolver/remote_user_resolver.vue' import TagTimeline from 'src/components/tag_timeline/tag_timeline.vue' +import AuthForm from 'src/components/auth_form/auth_form.js' import { useInstanceStore } from 'src/stores/instance.js' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' @@ -147,9 +148,7 @@ export default (store) => { { name: 'login', path: '/login', - component: defineAsyncComponent( - () => import('src/components/auth_form/auth_form.js'), - ), + component: AuthForm, }, { name: 'shout-panel', diff --git a/src/components/global_error/global_error.js b/src/components/global_error/global_error.js index cd4593521..92edec2ba 100644 --- a/src/components/global_error/global_error.js +++ b/src/components/global_error/global_error.js @@ -1,12 +1,13 @@ import { mapActions, mapState } from 'pinia' - -import ErrorModal from 'src/components/error_modal/error_modal.vue' +import { defineAsyncComponent } from 'vue' import { useInterfaceStore } from 'src/stores/interface.js' const GlobalError = { components: { - ErrorModal, + ErrorModal: defineAsyncComponent( + () => import('src/components/error_modal/error_modal.vue') + ), }, computed: { title() { From 3a3d56c67045d2f193b621af0ea3dd94c38af1b8 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 10 Jul 2026 12:41:11 +0300 Subject: [PATCH 52/53] lint --- src/api/helpers.js | 1 - src/boot/routes.js | 2 +- src/components/global_error/global_error.js | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/api/helpers.js b/src/api/helpers.js index ce41eca77..4bf16e0cc 100644 --- a/src/api/helpers.js +++ b/src/api/helpers.js @@ -17,7 +17,6 @@ export const paramsString = (params = {}) => { } })() - const arrays = [] const nonArrays = [] diff --git a/src/boot/routes.js b/src/boot/routes.js index 4e62f5761..d50baab04 100644 --- a/src/boot/routes.js +++ b/src/boot/routes.js @@ -1,5 +1,6 @@ import { defineAsyncComponent } from 'vue' +import AuthForm from 'src/components/auth_form/auth_form.js' import BookmarkTimeline from 'src/components/bookmark_timeline/bookmark_timeline.vue' import BubbleTimeline from 'src/components/bubble_timeline/bubble_timeline.vue' import ConversationPage from 'src/components/conversation-page/conversation-page.vue' @@ -11,7 +12,6 @@ import PublicTimeline from 'src/components/public_timeline/public_timeline.vue' import QuotesTimeline from 'src/components/quotes_timeline/quotes_timeline.vue' import RemoteUserResolver from 'src/components/remote_user_resolver/remote_user_resolver.vue' import TagTimeline from 'src/components/tag_timeline/tag_timeline.vue' -import AuthForm from 'src/components/auth_form/auth_form.js' import { useInstanceStore } from 'src/stores/instance.js' import { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js' diff --git a/src/components/global_error/global_error.js b/src/components/global_error/global_error.js index 92edec2ba..b4768b8ad 100644 --- a/src/components/global_error/global_error.js +++ b/src/components/global_error/global_error.js @@ -6,7 +6,7 @@ import { useInterfaceStore } from 'src/stores/interface.js' const GlobalError = { components: { ErrorModal: defineAsyncComponent( - () => import('src/components/error_modal/error_modal.vue') + () => import('src/components/error_modal/error_modal.vue'), ), }, computed: { From 0ae83433df4f6f0e9e1c6d1130e2e8b3b429e62d Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Fri, 10 Jul 2026 15:45:43 +0300 Subject: [PATCH 53/53] fix blur on notifs column --- src/components/notification/notification.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue index 39bd15426..381aef788 100644 --- a/src/components/notification/notification.vue +++ b/src/components/notification/notification.vue @@ -13,7 +13,7 @@