mirror of
https://github.com/vrcx-team/VRCX.git
synced 2026-04-06 00:32:02 +02:00
style
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
});
|
||||
|
||||
function onUpdateModelValue(value) {
|
||||
if (!value || (Array.isArray(value) && !value.length)) {
|
||||
if (props.type === 'single' && !value) {
|
||||
return;
|
||||
}
|
||||
emits('update:modelValue', value);
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -94,6 +94,11 @@
|
||||
},
|
||||
"friends_locations": {
|
||||
"online_friends": "オンラインのフレンド",
|
||||
"online": "オンライン",
|
||||
"favorite": "お気に入り",
|
||||
"same_instance": "同じインスタンス",
|
||||
"active": "アクティブ",
|
||||
"offline": "オフライン",
|
||||
"spacing": "表示間隔",
|
||||
"scale": "サイズ",
|
||||
"separate_same_instance_friends": "同じインスタンスのフレンドを分けて表示",
|
||||
|
||||
@@ -94,6 +94,11 @@
|
||||
},
|
||||
"friends_locations": {
|
||||
"online_friends": "在线好友",
|
||||
"online": "在线",
|
||||
"favorite": "星标好友",
|
||||
"same_instance": "同一房间",
|
||||
"active": "活跃中(仅登录网页端)",
|
||||
"offline": "离线",
|
||||
"spacing": "卡片间距",
|
||||
"scale": "缩放",
|
||||
"separate_same_instance_friends": "分开显示处于同一房间的好友",
|
||||
|
||||
@@ -91,6 +91,11 @@
|
||||
},
|
||||
"friends_locations": {
|
||||
"online_friends": "在線好友",
|
||||
"online": "上線",
|
||||
"favorite": "收藏",
|
||||
"same_instance": "Same Instance",
|
||||
"active": "活躍",
|
||||
"offline": "離線",
|
||||
"spacing": "間距",
|
||||
"scale": "縮放",
|
||||
"separate_same_instance_friends": "分開顯示同房好友",
|
||||
|
||||
@@ -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)">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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(() =>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user