This commit is contained in:
pa
2026-02-05 16:59:16 +09:00
parent 1959497071
commit 2d4d6816d3
16 changed files with 92 additions and 80 deletions

View File

@@ -421,7 +421,7 @@
<Button
class="rounded-full text-xs"
size="icon-sm"
variant="outline"
variant="ghost"
@click.stop
><Copy class="h-4 w-4" />
</Button>
@@ -498,14 +498,14 @@
<Button
class="rounded-full mr-2"
size="icon-sm"
variant="outline"
variant="ghost"
@click="refreshAvatarDialogTreeData()">
<RefreshCw />
</Button>
<Button
class="rounded-full"
size="icon-sm"
variant="outline"
variant="ghost"
@click="downloadAndSaveJson(avatarDialog.id, avatarDialog.ref)">
<Download />
</Button>

View File

@@ -627,7 +627,7 @@
<Button
class="rounded-full ml-1 text-xs"
size="icon-sm"
variant="outline"
variant="ghost"
@click="copyToClipboard(groupDialog.ref.$url)"
><Copy class="h-4 w-4" />
</Button> </TooltipWrapper
@@ -643,7 +643,7 @@
<Button
class="rounded-full ml-1 text-xs"
size="icon-sm"
variant="outline"
variant="ghost"
@click="copyToClipboard(groupDialog.id)"
><Copy class="h-4 w-4" />
</Button> </TooltipWrapper
@@ -840,7 +840,7 @@
<div style="margin-top: 10px">
<Button
class="rounded-full h-6 w-6"
variant="outline"
variant="ghost"
size="icon-sm"
:loading="isGroupMembersLoading"
circle
@@ -850,7 +850,7 @@
<Button
class="rounded-full h-6 w-6 ml-2"
size="icon-sm"
variant="outline"
variant="ghost"
style="margin-left: 5px"
@click="downloadAndSaveJson(`${groupDialog.id}_members`, groupDialog.members)">
<Download class="h-4 w-4" />
@@ -1044,7 +1044,7 @@
<template #Photos>
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="isGroupGalleryLoading"
@click="getGroupGalleries">
@@ -1098,14 +1098,14 @@
<Button
class="rounded-full mr-2"
size="icon-sm"
variant="outline"
variant="ghost"
@click="refreshGroupDialogTreeData()">
<RefreshCw />
</Button>
<Button
class="rounded-full"
size="icon-sm"
variant="outline"
variant="ghost"
@click="downloadAndSaveJson(groupDialog.id, groupDialog.ref)">
<Download />
</Button>

View File

@@ -432,7 +432,7 @@
<Button
class="rounded-full ml-1 text-xs"
size="icon-sm"
variant="outline"
variant="ghost"
@click.stop="resetHome()"
><Trash2 class="h-4 w-4" />
</Button>
@@ -450,7 +450,7 @@
<Button
class="rounded-full ml-1 text-xs"
size="icon-sm"
variant="outline"
variant="ghost"
@click.stop
><Copy class="h-4 w-4" />
</Button>
@@ -479,7 +479,7 @@
<div style="display: flex; align-items: center">
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="userDialog.isMutualFriendsLoading"
@click="getUserMutualFriends(userDialog.id)">
@@ -545,7 +545,7 @@
<div style="display: flex; align-items: center">
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="userDialog.isGroupsLoading"
@click="getUserGroups(userDialog.id)">
@@ -667,7 +667,7 @@
<div style="margin-right: 3px; margin-left: 5px" @click.stop>
<Button
size="icon-sm"
variant="outline"
variant="ghost"
style="
display: block;
padding: 7px;
@@ -680,7 +680,7 @@
</Button>
<Button
size="icon-sm"
variant="outline"
variant="ghost"
style="display: block; padding: 7px; font-size: 9px; margin-left: 0"
@click="moveGroupBottom(group.id)">
<DownloadIcon />
@@ -932,7 +932,7 @@
<div style="display: flex; align-items: center">
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="userDialog.isWorldsLoading"
@click="refreshUserDialogWorlds()">
@@ -1082,7 +1082,7 @@
<Button
v-if="userDialog.ref.id === currentUser.id"
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="userDialog.isAvatarsLoading"
@click="refreshUserDialogAvatars()">
@@ -1092,7 +1092,7 @@
<Button
v-else
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="userDialog.isAvatarsLoading"
@click="setUserDialogAvatarsRemote(userDialog.id)">
@@ -1188,13 +1188,13 @@
</template>
<template #JSON>
<Button class="rounded-full mr-2" size="icon-sm" variant="outline" @click="refreshUserDialogTreeData()">
<Button class="rounded-full mr-2" size="icon-sm" variant="ghost" @click="refreshUserDialogTreeData()">
<RefreshCw />
</Button>
<Button
class="rounded-full"
size="icon-sm"
variant="outline"
variant="ghost"
@click="downloadAndSaveJson(userDialog.id, userDialog.ref)">
<Download />
</Button>

View File

@@ -455,7 +455,7 @@
<Button
class="rounded-full text-xs"
size="icon-sm"
variant="outline"
variant="ghost"
@click.stop
><Copy class="h-4 w-4" />
</Button>
@@ -704,14 +704,14 @@
<Button
class="rounded-full mr-2"
size="icon-sm"
variant="outline"
variant="ghost"
@click="refreshWorldDialogTreeData()">
<RefreshCw />
</Button>
<Button
class="rounded-full"
size="icon-sm"
variant="outline"
variant="ghost"
@click="downloadAndSaveJson(worldDialog.id, worldDialog.ref)">
<Download />
</Button>

View File

@@ -39,7 +39,7 @@
});
function onUpdateModelValue(value) {
if (!value || (Array.isArray(value) && !value.length)) {
if (props.type === 'single' && !value) {
return;
}
emits('update:modelValue', value);

View File

@@ -94,6 +94,11 @@
},
"friends_locations": {
"online_friends": "Online Friends",
"online": "Online",
"favorite": "Favorites",
"same_instance": "Same instance",
"active": "Active",
"offline": "Offline",
"spacing": "Spacing",
"scale": "Scale",
"separate_same_instance_friends": "Separate Same Instance Friends",

View File

@@ -94,6 +94,11 @@
},
"friends_locations": {
"online_friends": "オンラインのフレンド",
"online": "オンライン",
"favorite": "お気に入り",
"same_instance": "同じインスタンス",
"active": "アクティブ",
"offline": "オフライン",
"spacing": "表示間隔",
"scale": "サイズ",
"separate_same_instance_friends": "同じインスタンスのフレンドを分けて表示",

View File

@@ -94,6 +94,11 @@
},
"friends_locations": {
"online_friends": "在线好友",
"online": "在线",
"favorite": "星标好友",
"same_instance": "同一房间",
"active": "活跃中(仅登录网页端)",
"offline": "离线",
"spacing": "卡片间距",
"scale": "缩放",
"separate_same_instance_friends": "分开显示处于同一房间的好友",

View File

@@ -91,6 +91,11 @@
},
"friends_locations": {
"online_friends": "在線好友",
"online": "上線",
"favorite": "收藏",
"same_instance": "Same Instance",
"active": "活躍",
"offline": "離線",
"spacing": "間距",
"scale": "縮放",
"separate_same_instance_friends": "分開顯示同房好友",

View File

@@ -89,7 +89,7 @@
<ButtonGroup class="mr-2">
<TooltipWrapper :content="t('view.charts.instance_activity.previous_day')" side="top">
<Button
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="isPrevDayBtnDisabled"
@click="changeSelectedDateFromBtn(false)">
@@ -98,7 +98,7 @@
</TooltipWrapper>
<TooltipWrapper :content="t('view.charts.instance_activity.next_day')" side="top">
<Button
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="isNextDayBtnDisabled"
@click="changeSelectedDateFromBtn(true)">

View File

@@ -95,7 +95,7 @@
<TooltipWrapper side="bottom" :content="t('view.favorite.refresh_favorites_tooltip')">
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="isFavoriteLoading"
@click.stop="handleRefreshFavorites">
@@ -203,7 +203,7 @@
<Button
class="rounded-full"
size="icon"
variant="outline"
variant="ghost"
@click.stop="refreshLocalAvatarFavorites"
><RefreshCcw
/></Button>

View File

@@ -97,7 +97,7 @@
<TooltipWrapper side="bottom" :content="t('view.favorite.refresh_favorites_tooltip')">
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="isFavoriteLoading"
@click.stop="handleRefreshFavorites">

View File

@@ -97,7 +97,7 @@
<TooltipWrapper side="bottom" :content="t('view.favorite.refresh_favorites_tooltip')">
<Button
class="rounded-full"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="isFavoriteLoading"
@click.stop="handleRefreshFavorites">
@@ -204,7 +204,7 @@
<Button
class="rounded-full"
size="icon-sm"
variant="outline"
variant="ghost"
v-if="!refreshingLocalFavorites"
@click.stop="refreshLocalWorldFavorites"
><RefreshCcw

View File

@@ -16,24 +16,18 @@
</span>
</TooltipWrapper>
</div>
<Select
multiple
<ToggleGroup
type="multiple"
variant="outline"
size="sm"
:model-value="Array.isArray(feedTable.filter) ? feedTable.filter : []"
@update:modelValue="handleFeedFilterChange">
<SelectTrigger class="w-full" style="flex: 1">
<SelectValue :placeholder="t('view.feed.filter_placeholder')" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectItem
v-for="type in ['GPS', 'Online', 'Offline', 'Status', 'Avatar', 'Bio']"
:key="type"
:value="type">
{{ t('view.feed.filters.' + type) }}
</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
@update:model-value="handleFeedFilterChange"
class="w-full justify-start"
style="flex: 1">
<ToggleGroupItem v-for="type in feedFilterTypes" :key="type" :value="type">
{{ t('view.feed.filters.' + type) }}
</ToggleGroupItem>
</ToggleGroup>
<InputGroupField
v-model="feedTable.search"
:placeholder="t('view.feed.search_placeholder')"
@@ -52,15 +46,8 @@
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import {
Select,
SelectContent,
SelectGroup,
SelectItem,
SelectTrigger,
SelectValue
} from '../../components/ui/select';
import { useAppearanceSettingsStore, useFeedStore, useVrcxStore } from '../../stores';
import { ToggleGroup, ToggleGroupItem } from '../../components/ui/toggle-group';
import { DataTableLayout } from '../../components/ui/data-table';
import { InputGroupField } from '../../components/ui/input-group';
import { Switch } from '../../components/ui/switch';
@@ -74,6 +61,7 @@
const vrcxStore = useVrcxStore();
const { t } = useI18n();
const feedFilterTypes = ['GPS', 'Online', 'Offline', 'Status', 'Avatar', 'Bio'];
const feedRef = ref(null);
@@ -121,7 +109,8 @@
};
function handleFeedFilterChange(value) {
feedTable.value.filter = Array.isArray(value) ? value : [];
const selected = Array.isArray(value) ? value : [];
feedTable.value.filter = selected.length === feedFilterTypes.length ? [] : selected;
feedTableLookup();
}

View File

@@ -150,11 +150,11 @@
storeToRefs(friendStore);
const SEGMENTED_BASE_OPTIONS = [
{ label: t('side_panel.online'), value: 'online' },
{ label: t('side_panel.favorite'), value: 'favorite' },
{ label: t('side_panel.same_instance'), value: 'same-instance' },
{ label: t('side_panel.active'), value: 'active' },
{ label: t('side_panel.offline'), value: 'offline' }
{ label: t('view.friends_locations.online'), value: 'online' },
{ label: t('view.friends_locations.favorite'), value: 'favorite' },
{ label: t('view.friends_locations.same_instance'), value: 'same-instance' },
{ label: t('view.friends_locations.active'), value: 'active' },
{ label: t('view.friends_locations.offline'), value: 'offline' }
];
const segmentedOptions = computed(() =>

View File

@@ -164,7 +164,7 @@
<TooltipWrapper side="bottom" :content="t('view.search.avatar.refresh_tooltip')">
<Button
class="rounded-full ml-1"
variant="outline"
variant="ghost"
size="icon-sm"
:disabled="userDialog.isAvatarsLoading"
@click="refreshUserDialogAvatars">
@@ -227,26 +227,29 @@
</RadioGroup>
</div>
</div>
<div style="display: flex; justify-content: end">
<RadioGroup
<div style="display: flex; justify-content: end" class="mt-2">
<Select
:model-value="searchAvatarSort"
:disabled="searchAvatarFilterRemote !== 'local'"
class="flex items-center gap-4"
style="margin: 5px"
@update:modelValue="handleSearchAvatarSortChange">
<div class="flex items-center space-x-2">
<RadioGroupItem id="searchAvatarSort-name" value="name" />
<label for="searchAvatarSort-name">{{ t('view.search.avatar.sort_name') }}</label>
</div>
<div class="flex items-center space-x-2">
<RadioGroupItem id="searchAvatarSort-update" value="update" />
<label for="searchAvatarSort-update">{{ t('view.search.avatar.sort_update') }}</label>
</div>
<div class="flex items-center space-x-2">
<RadioGroupItem id="searchAvatarSort-created" value="created" />
<label for="searchAvatarSort-created">{{ t('view.search.avatar.sort_created') }}</label>
</div>
</RadioGroup>
<SelectTrigger size="sm">
<SelectValue :placeholder="t('view.search.avatar.sort_name')" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectItem value="name">
{{ t('view.search.avatar.sort_name') }}
</SelectItem>
<SelectItem value="update">
{{ t('view.search.avatar.sort_update') }}
</SelectItem>
<SelectItem value="created">
{{ t('view.search.avatar.sort_created') }}
</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
</div>
<div class="x-friend-list" style="margin-top: 20px; min-height: 500px">
<div