-
+
@@ -274,6 +274,7 @@ const hardMuted = ref(props.withHardMute && checkMute(appearNote.value, $i?.hard
const translation = ref(null);
const translating = ref(false);
const showTicker = (defaultStore.state.instanceTicker === 'always') || (defaultStore.state.instanceTicker === 'remote' && appearNote.value.user.instance);
+const showInstanceIcon = (defaultStore.state.instanceTicker === 'alwaysIcon') || (defaultStore.state.instanceTicker === 'remoteIcon' && appearNote.value.user.instance);
const canRenote = computed(() => ['public', 'home'].includes(appearNote.value.visibility) || (appearNote.value.visibility === 'followers' && appearNote.value.userId === $i?.id));
const renoteCollapsed = ref(
defaultStore.state.collapseRenotes && isRenote && (
diff --git a/packages/frontend/src/components/global/MkAvatar.vue b/packages/frontend/src/components/global/MkAvatar.vue
index 35c07bc80c..b4aba8fa7f 100644
--- a/packages/frontend/src/components/global/MkAvatar.vue
+++ b/packages/frontend/src/components/global/MkAvatar.vue
@@ -36,6 +36,7 @@ SPDX-License-Identifier: AGPL-3.0-only
alt=""
>
+
@@ -49,6 +50,7 @@ import { getStaticImageUrl } from '@/scripts/media-proxy.js';
import { acct, userPage } from '@/filters/user.js';
import MkUserOnlineIndicator from '@/components/MkUserOnlineIndicator.vue';
import { defaultStore } from '@/store.js';
+import MkInstanceIcon from '@/components/MkInstanceIcon.vue';
const animation = ref(defaultStore.state.animation);
const squareAvatars = ref(defaultStore.state.squareAvatars);
@@ -62,6 +64,7 @@ const props = withDefaults(defineProps<{
indicator?: boolean;
decorations?: (Omit & { blink?: boolean; })[];
forceShowDecoration?: boolean;
+ showInstance?: boolean;
}>(), {
target: null,
link: false,
@@ -69,6 +72,7 @@ const props = withDefaults(defineProps<{
indicator: false,
decorations: undefined,
forceShowDecoration: false,
+ showInstance: false,
});
const emit = defineEmits<{
@@ -343,4 +347,30 @@ watch(() => props.user.avatarBlurhash, () => {
filter: brightness(1);
}
}
+
+.instanceicon {
+ height: 25px;
+ z-index: 2;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+}
+
+@container (max-width: 580px) {
+ .instanceicon {
+ height: 21px;
+ }
+}
+
+@container (max-width: 450px) {
+ .instanceicon {
+ height: 19px;
+ }
+}
+
+@container (max-width: 300px) {
+ .instanceicon {
+ height: 17px;
+ }
+}
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index 1bfdfd0e76..617b6968f8 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -69,6 +69,8 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index 911a463636..6d241dbdbc 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -295,7 +295,7 @@ export const defaultStore = markRaw(new Storage('base', {
},
instanceTicker: {
where: 'device',
- default: 'remote' as 'none' | 'remote' | 'always',
+ default: 'remote' as 'none' | 'remote' | 'always' | 'remoteIcon' | 'alwaysIcon',
},
emojiPickerScale: {
where: 'device',