replace @element-plus/icons-vue

This commit is contained in:
pa
2026-01-14 23:22:23 +09:00
committed by Natsumi
parent b7f3d91a03
commit 889302104a
50 changed files with 461 additions and 561 deletions
@@ -5,7 +5,7 @@
<span>{{ t('view.charts.instance_activity.header') }}</span>
<HoverCard>
<HoverCardTrigger as-child>
<el-icon style="margin-left: 5px; font-size: 12px; opacity: 0.7"><InfoFilled /></el-icon>
<Info style="margin-left: 5px; font-size: 12px; opacity: 0.7" />
</HoverCardTrigger>
<HoverCardContent side="bottom" align="start" class="w-[300px]">
<div class="tips-popover">
@@ -13,8 +13,8 @@
<div>{{ t('view.charts.instance_activity.tips.click_Y_axis') }}</div>
<div>{{ t('view.charts.instance_activity.tips.click_instance_name') }}</div>
<div>
<el-icon><WarningFilled /></el-icon
><i>{{ t('view.charts.instance_activity.tips.accuracy_notice') }}</i>
<AlertTriangle />
<i>{{ t('view.charts.instance_activity.tips.accuracy_notice') }}</i>
</div>
</div>
</HoverCardContent>
@@ -145,9 +145,8 @@
<script setup>
import { computed, nextTick, onBeforeMount, onBeforeUnmount, onMounted, ref, watch } from 'vue';
import { ArrowLeft, ArrowRight, InfoFilled, WarningFilled } from '@element-plus/icons-vue';
import { AlertTriangle, ArrowLeft, ArrowRight, Info, RefreshCcw, Settings } from 'lucide-vue-next';
import { HoverCard, HoverCardContent, HoverCardTrigger } from '@/components/ui/hover-card';
import { RefreshCcw, Settings } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ButtonGroup } from '@/components/ui/button-group';
import { storeToRefs } from 'pinia';
@@ -671,9 +670,6 @@
margin-right: 3px;
}
}
& .el-icon-warning-outline {
font-size: 12px;
}
}
.settings {
& > div {
+6 -7
View File
@@ -97,7 +97,7 @@
:disabled="isFavoriteLoading"
@click.stop="handleRefreshFavorites">
<Spinner v-if="isFavoriteLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
</div>
@@ -126,7 +126,7 @@
">
<DropdownMenuTrigger asChild>
<Button class="rounded-full" variant="ghost" size="icon-sm" @click.stop>
<MoreFilled />
<MoreHorizontal />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side="right" class="w-55 p-1 rounded-lg">
@@ -290,7 +290,7 @@
{ 'is-disabled': !isLocalUserVrcPlusSupporter }
]"
@click="startLocalGroupCreation">
<el-icon><Plus /></el-icon>
<Plus />
<span>{{ t('view.favorite.avatars.new_group') }}</span>
</div>
</TooltipWrapper>
@@ -526,8 +526,7 @@
<script setup>
import { computed, markRaw, nextTick, onBeforeMount, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue';
import { Ellipsis, Loader, RefreshCcw } from 'lucide-vue-next';
import { MoreFilled, Plus, Refresh } from '@element-plus/icons-vue';
import { Ellipsis, Loader, MoreHorizontal, Plus, RefreshCcw, RefreshCw } from 'lucide-vue-next';
import { InputGroupField, InputGroupSearch } from '@/components/ui/input-group';
import { Button } from '@/components/ui/button';
import { ElMessageBox } from 'element-plus';
@@ -1194,7 +1193,7 @@
const result = await modalStore.confirm({
description: `Are you sure you want to unfavorite ${total} favorites?\nThis action cannot be undone.`,
title: `Delete ${total} favorites?`
title: `Trash2 ${total} favorites?`
});
if (!result.ok) {
@@ -1448,7 +1447,7 @@
function promptLocalAvatarFavoriteGroupDelete(group) {
modalStore
.confirm({
description: `Delete Group? ${group}`,
description: `Trash2 Group? ${group}`,
title: 'Confirm'
})
.then(() => deleteLocalAvatarFavoriteGroup(group))
+6 -15
View File
@@ -97,7 +97,7 @@
:disabled="isFavoriteLoading"
@click.stop="handleRefreshFavorites">
<Spinner v-if="isFavoriteLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
</div>
@@ -106,10 +106,7 @@
<div
v-for="group in favoriteFriendGroups"
:key="group.key"
:class="[
'group-item',
{ 'is-active': !hasSearchInput && isGroupActive('remote', group.key) }
]"
:class="[ 'group-item', { 'is-active': !hasSearchInput && isGroupActive('remote', group.key) } ]"
@click="handleGroupClick('remote', group.key)">
<div class="group-item__top">
<span class="group-item__name">{{ group.displayName }}</span>
@@ -126,7 +123,7 @@
">
<DropdownMenuTrigger asChild>
<Button class="rounded-full" variant="ghost" size="icon-sm" @click.stop>
<MoreFilled />
<MoreHorizontal />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side="right" class="w-55 p-1 rounded-lg">
@@ -152,13 +149,7 @@
v-for="visibility in friendGroupVisibilityOptions"
:key="visibility"
type="button"
:class="[
'group-visibility-menu__item',
{
'is-active':
group.visibility === visibility
}
]"
:class="[ 'group-visibility-menu__item', { 'is-active': group.visibility === visibility } ]"
@click="
handleVisibilitySelection(group, visibility)
">
@@ -310,7 +301,7 @@
<script setup>
import { computed, nextTick, onBeforeMount, onMounted, onUnmounted, ref, watch } from 'vue';
import { MoreFilled, Refresh } from '@element-plus/icons-vue';
import { MoreHorizontal, RefreshCw } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ElMessageBox } from 'element-plus';
import { Ellipsis } from 'lucide-vue-next';
@@ -762,7 +753,7 @@
modalStore
.confirm({
description: `Are you sure you want to unfavorite ${total} favorites?\n This action cannot be undone.`,
title: `Delete ${total} favorites?`
title: `Trash2 ${total} favorites?`
})
.then(({ ok }) => ok && bulkUnfavoriteSelectedFriends([...selectedFavoriteFriends.value]))
.catch(() => {});
+6 -7
View File
@@ -97,7 +97,7 @@
:disabled="isFavoriteLoading"
@click.stop="handleRefreshFavorites">
<Spinner v-if="isFavoriteLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
</div>
@@ -126,7 +126,7 @@
">
<DropdownMenuTrigger asChild>
<Button class="rounded-full" variant="ghost" size="icon-sm" @click.stop>
<MoreFilled />
<MoreHorizontal />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side="right" class="w-50 p-1 rounded-lg">
@@ -274,7 +274,7 @@
v-if="!isCreatingLocalGroup"
class="group-item group-item--new"
@click="startLocalGroupCreation">
<el-icon><Plus /></el-icon>
<Plus />
<span>{{ t('view.favorite.worlds.new_group') }}</span>
</div>
<InputGroupField
@@ -437,8 +437,7 @@
<script setup>
import { computed, nextTick, onBeforeMount, onBeforeUnmount, onMounted, ref, watch } from 'vue';
import { MoreFilled, Plus, Refresh } from '@element-plus/icons-vue';
import { Ellipsis, RefreshCcw } from 'lucide-vue-next';
import { Ellipsis, MoreHorizontal, Plus, RefreshCcw, RefreshCw } from 'lucide-vue-next';
import { InputGroupField, InputGroupSearch } from '@/components/ui/input-group';
import { Button } from '@/components/ui/button';
import { ElMessageBox } from 'element-plus';
@@ -1063,7 +1062,7 @@
.confirm({
description: `Are you sure you want to unfavorite ${total} favorites?
This action cannot be undone.`,
title: `Delete ${total} favorites?`
title: `Trash2 ${total} favorites?`
})
.then(() => bulkUnfavoriteSelectedWorlds([...selectedFavoriteWorlds.value]))
.catch(() => {});
@@ -1174,7 +1173,7 @@
function promptLocalWorldFavoriteGroupDelete(group) {
modalStore
.confirm({
description: `Delete Group? ${group}`,
description: `Trash2 Group? ${group}`,
title: 'Confirm'
})
.then(() => deleteLocalWorldFavoriteGroup(group))
@@ -10,7 +10,7 @@
<div v-if="avatarImportDialog.progress">
{{ t('dialog.avatar_import.process_progress') }} {{ avatarImportDialog.progress }} /
{{ avatarImportDialog.progressTotal }}
<el-icon style="margin: 0 5px"><Loading /></el-icon>
<Loader2 style="margin: 0 5px" />
</div>
<Button v-if="avatarImportDialog.loading" size="sm" variant="secondary" @click="cancelAvatarImport">
{{ t('dialog.avatar_import.cancel') }}
@@ -89,7 +89,7 @@
</div>
</div>
<span v-if="avatarImportDialog.importProgress" style="margin: 10px">
<el-icon style="margin-right: 5px"><Loading /></el-icon>
<Loader2 style="margin-right: 5px" />
{{ t('dialog.avatar_import.import_progress') }}
{{ avatarImportDialog.importProgress }}/{{ avatarImportDialog.importProgressTotal }}
</span>
@@ -119,7 +119,7 @@
import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table';
import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loading } from '@element-plus/icons-vue';
import { Loader2 } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
@@ -10,7 +10,7 @@
<div v-if="friendImportDialog.progress">
{{ t('dialog.friend_import.process_progress') }} {{ friendImportDialog.progress }} /
{{ friendImportDialog.progressTotal }}
<el-icon style="margin: 0 5px"><Loading /></el-icon>
<Loader2 style="margin: 0 5px" />
</div>
<Button v-if="friendImportDialog.loading" size="sm" variant="secondary" @click="cancelFriendImport">
{{ t('dialog.friend_import.cancel') }}
@@ -71,7 +71,7 @@
</div>
</div>
<span v-if="friendImportDialog.importProgress" style="margin: 10px">
<el-icon style="margin-right: 5px"><Loading /></el-icon>
<Loader2 style="margin-right: 5px" />
{{ t('dialog.friend_import.import_progress') }} {{ friendImportDialog.importProgress }}/{{
friendImportDialog.importProgressTotal
}}
@@ -100,7 +100,7 @@
import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table';
import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loading } from '@element-plus/icons-vue';
import { Loader2 } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
@@ -11,7 +11,7 @@
<div v-if="worldImportDialog.progress">
{{ t('dialog.world_import.process_progress') }}
{{ worldImportDialog.progress }} / {{ worldImportDialog.progressTotal }}
<el-icon style="margin: 0 5px"><Loading /></el-icon>
<Loader2 style="margin: 0 5px" />
</div>
<Button v-if="worldImportDialog.loading" size="sm" variant="outline" @click="cancelWorldImport">
{{ t('dialog.world_import.cancel') }}
@@ -94,7 +94,7 @@
</div>
</div>
<span v-if="worldImportDialog.importProgress" style="margin: 10px">
<el-icon style="margin-right: 5px"><Loading /></el-icon>
<Loader2 style="margin-right: 5px" />
{{ t('dialog.world_import.import_progress') }}
{{ worldImportDialog.importProgress }}/{{ worldImportDialog.importProgressTotal }}
</span>
@@ -124,7 +124,7 @@
import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table';
import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loading } from '@element-plus/icons-vue';
import { Loader2 } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
@@ -148,16 +148,12 @@
<div v-else class="friend-view__empty">{{ t('view.friends_locations.no_matching_friends') }}</div>
</template>
<div v-if="isLoadingMore" class="friend-view__loading">
<el-icon class="friend-view__loading-icon" :size="18">
<Loading />
</el-icon>
<Loader2 class="friend-view__loading-icon" :size="18" />
<span>{{ t('view.friends_locations.loading_more') }}</span>
</div>
</el-scrollbar>
<div v-else class="friend-view__initial-loading">
<el-icon class="friend-view__loading-icon" :size="22">
<Loading />
</el-icon>
<Loader2 class="friend-view__loading-icon" :size="22" />
</div>
</div>
</template>
@@ -165,10 +161,9 @@
<script setup>
import { computed, nextTick, onBeforeMount, onBeforeUnmount, onMounted, ref, watch } from 'vue';
import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { Loader2, Settings } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { InputGroupSearch } from '@/components/ui/input-group';
import { Loading } from '@element-plus/icons-vue';
import { Settings } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
+3 -3
View File
@@ -32,7 +32,7 @@
:disabled="playerModerationTable.loading"
@click="refreshPlayerModerations()">
<Spinner v-if="playerModerationTable.loading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
</div>
@@ -52,7 +52,7 @@
import { computed, ref, watch } from 'vue';
import { Button } from '@/components/ui/button';
import { InputGroupField } from '@/components/ui/input-group';
import { Refresh } from '@element-plus/icons-vue';
import { RefreshCw } from 'lucide-vue-next';
import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -112,7 +112,7 @@
function deletePlayerModerationPrompt(row) {
modalStore
.confirm({
description: `Continue? Delete Moderation ${row.type}`,
description: `Continue? Trash2 Moderation ${row.type}`,
title: 'Confirm'
})
.then(({ ok }) => ok && deletePlayerModeration(row))
+3 -3
View File
@@ -66,7 +66,7 @@
style="flex: none"
@click="refreshNotifications()">
<Spinner v-if="isNotificationsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
</div>
@@ -86,7 +86,7 @@
import { computed, ref, watch } from 'vue';
import { Button } from '@/components/ui/button';
import { InputGroupField } from '@/components/ui/input-group';
import { Refresh } from '@element-plus/icons-vue';
import { RefreshCw } from 'lucide-vue-next';
import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
@@ -483,7 +483,7 @@
function deleteNotificationLogPrompt(row) {
modalStore
.confirm({
description: `Continue? Delete ${row.type}`,
description: `Continue? Trash2 ${row.type}`,
title: 'Confirm'
})
.then(({ ok }) => {
+3 -5
View File
@@ -25,14 +25,12 @@
line-clamp: 1;
"
@click="showWorldDialog(currentInstanceWorld.ref.id)">
<el-icon
<Home
v-if="
currentUser.$homeLocation &&
currentUser.$homeLocation.worldId === currentInstanceWorld.ref.id
"
style="margin-right: 5px"
><HomeFilled
/></el-icon>
style="margin-right: 5px" />
{{ currentInstanceWorld.ref.name }}
</span>
</div>
@@ -169,7 +167,7 @@
<script setup>
import { computed, defineAsyncComponent, onActivated, onMounted, ref, watch } from 'vue';
import { HomeFilled } from '@element-plus/icons-vue';
import { Home } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -1,4 +1,4 @@
import { ArrowRight, Download } from '@element-plus/icons-vue';
import { ArrowRight, Download } from 'lucide-vue-next';
import Location from '@/components/Location.vue';
import { TooltipWrapper } from '@/components/ui/tooltip';
@@ -46,9 +46,7 @@ function DetailCell({ row, isPrevious, onShowAvatar, onShowGroup, onShowWorld, o
&nbsp;
{!r.inCache ? (
<span style="color: #aaa">
<el-icon>
<Download />
</el-icon>
<Download />
&nbsp;
</span>
) : null}
@@ -90,9 +88,7 @@ function DetailCell({ row, isPrevious, onShowAvatar, onShowGroup, onShowWorld, o
></i>
</TooltipWrapper>
<span>
<el-icon>
<ArrowRight />
</el-icon>
<ArrowRight / />
</span>
<TooltipWrapper
side="top"
@@ -130,9 +126,7 @@ function DetailCell({ row, isPrevious, onShowAvatar, onShowGroup, onShowWorld, o
{r.previousGroupName || r.previousGroupId}
</span>
<span>
<el-icon>
<ArrowRight />
</el-icon>
<ArrowRight / />
</span>
<span
class="x-link"
@@ -198,9 +192,7 @@ function DetailCell({ row, isPrevious, onShowAvatar, onShowGroup, onShowWorld, o
&nbsp;
{!r.inCache ? (
<span style="color: #aaa">
<el-icon>
<Download />
</el-icon>
<Download / />
&nbsp;
</span>
) : null}
+10 -11
View File
@@ -60,7 +60,7 @@
size="sm"
:disabled="!searchUserParams.offset"
@click="handleMoreSearchUser(-1)">
<Back />
<ArrowLeft />
{{ t('view.search.prev_page') }}
</Button>
<Button
@@ -68,7 +68,7 @@
size="sm"
:disabled="searchUserResults.length < 10"
@click="handleMoreSearchUser(1)">
<Right />
<ArrowRight />
{{ t('view.search.next_page') }}
</Button>
</ButtonGroup>
@@ -124,7 +124,7 @@
size="sm"
:disabled="!searchWorldParams.offset"
@click="moreSearchWorld(-1)">
<Back />
<ArrowLeft />
{{ t('view.search.prev_page') }}
</Button>
<Button
@@ -132,7 +132,7 @@
size="sm"
:disabled="searchWorldResults.length < 10"
@click="moreSearchWorld(1)">
<Right />
<ArrowRight />
{{ t('view.search.next_page') }}
</Button>
</ButtonGroup>
@@ -169,7 +169,7 @@
:disabled="userDialog.isAvatarsLoading"
@click="refreshUserDialogAvatars">
<Spinner v-if="userDialog.isAvatarsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
<span style="font-size: 14px; margin-left: 5px; margin-right: 5px">{{
@@ -281,7 +281,7 @@
size="sm"
:disabled="!searchAvatarPageNum"
@click="moreSearchAvatar(-1)">
<Back />
<ArrowLeft />
{{ t('view.search.prev_page') }}
</Button>
<Button
@@ -292,7 +292,7 @@
(searchAvatarPageNum + 1) * 10 >= searchAvatarResults.length
"
@click="moreSearchAvatar(1)">
<Right />
<ArrowRight />
{{ t('view.search.next_page') }}
</Button>
</ButtonGroup>
@@ -334,7 +334,7 @@
size="sm"
:disabled="!searchGroupParams.offset"
@click="moreSearchGroup(-1)">
<Back />
<ArrowLeft />
{{ t('view.search.prev_page') }}
</Button>
<Button
@@ -342,7 +342,7 @@
size="sm"
:disabled="searchGroupResults.length < 10"
@click="moreSearchGroup(1)">
<Right />
<ArrowRight />
{{ t('view.search.next_page') }}
</Button>
</ButtonGroup>
@@ -354,7 +354,7 @@
<script setup>
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Back, Refresh, Right } from '@element-plus/icons-vue';
import { ArrowLeft, ArrowRight, RefreshCw, Trash2 } from 'lucide-vue-next';
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';
import { computed, ref } from 'vue';
import { Button } from '@/components/ui/button';
@@ -363,7 +363,6 @@
import { InputGroupField } from '@/components/ui/input-group';
import { Spinner } from '@/components/ui/spinner';
import { TabsUnderline } from '@/components/ui/tabs';
import { Trash2 } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -2,9 +2,9 @@
<div class="simple-switch">
<div class="name" :style="{ width: longLabel ? '300px' : undefined }">
{{ label }}
<TooltipWrapper v-if="tooltip" side="top" :content="tooltip"
><el-icon size="small" class="tooltip"><InfoFilled /></el-icon
></TooltipWrapper>
<TooltipWrapper v-if="tooltip" side="top" :content="tooltip">
<Info size="small" class="tooltip" />
</TooltipWrapper>
</div>
<Switch class="switch" :model-value="value" @update:modelValue="change" :disabled="disabled" />
@@ -12,7 +12,7 @@
</template>
<script setup>
import { InfoFilled } from '@element-plus/icons-vue';
import { Info } from 'lucide-vue-next';
import { Switch } from '../../../components/ui/switch';
defineProps({
@@ -5,15 +5,15 @@
<div class="options-container-item" style="margin-top: 15px">
<ButtonGroup>
<Button variant="outline" size="sm" @click="showVRChatConfig()">
<Operation />
<Settings />
VRChat config.json
</Button>
<Button variant="outline" size="sm" @click="showLaunchOptions()">
<Operation />
<Settings />
{{ t('view.settings.advanced.advanced.launch_options') }}
</Button>
<Button variant="outline" size="sm" @click="showRegistryBackupDialog()">
<Goods />
<Package />
{{ t('view.settings.advanced.advanced.vrc_registry_backup') }}
</Button>
</ButtonGroup>
@@ -384,9 +384,8 @@
</template>
<script setup>
import { Folder, Goods, Operation } from '@element-plus/icons-vue';
import { Folder, Package, RefreshCcw, Settings, Trash2 } from 'lucide-vue-next';
import { computed, reactive, ref } from 'vue';
import { RefreshCcw, Trash2 } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ButtonGroup } from '@/components/ui/button-group';
import { storeToRefs } from 'pinia';
@@ -220,7 +220,7 @@
<SelectItem value="Sort by Status">{{
t('view.settings.appearance.side_panel.sorting.status')
}}</SelectItem>
<SelectItem value="Sort Private to Bottom">{{
<SelectItem value="Sort Private to ArrowDown">{{
t('view.settings.appearance.side_panel.sorting.private_to_bottom')
}}</SelectItem>
<SelectItem value="Sort by Last Active">{{
@@ -237,7 +237,7 @@
}}</SelectItem>
</SelectContent>
</Select>
<el-icon style="margin: 5px"><ArrowRight /></el-icon>
<ArrowRight style="margin: 5px" />
<Select
:model-value="sidebarSortMethod2"
:disabled="!sidebarSortMethod1"
@@ -253,7 +253,7 @@
<SelectItem value="Sort by Status">{{
t('view.settings.appearance.side_panel.sorting.status')
}}</SelectItem>
<SelectItem value="Sort Private to Bottom">{{
<SelectItem value="Sort Private to ArrowDown">{{
t('view.settings.appearance.side_panel.sorting.private_to_bottom')
}}</SelectItem>
<SelectItem value="Sort by Last Active">{{
@@ -270,7 +270,7 @@
}}</SelectItem>
</SelectContent>
</Select>
<el-icon style="margin: 5px"><ArrowRight /></el-icon>
<ArrowRight style="margin: 5px" />
<Select
:model-value="sidebarSortMethod3"
:disabled="!sidebarSortMethod2"
@@ -286,7 +286,7 @@
<SelectItem value="Sort by Status">{{
t('view.settings.appearance.side_panel.sorting.status')
}}</SelectItem>
<SelectItem value="Sort Private to Bottom">{{
<SelectItem value="Sort Private to ArrowDown">{{
t('view.settings.appearance.side_panel.sorting.private_to_bottom')
}}</SelectItem>
<SelectItem value="Sort by Last Active">{{
@@ -438,9 +438,8 @@
} from '@/components/ui/tags-input';
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { computed, onBeforeUnmount, ref, watch } from 'vue';
import { CheckIcon, ChevronDown } from 'lucide-vue-next';
import { ArrowRight, CheckIcon, ChevronDown } from 'lucide-vue-next';
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';
import { ArrowRight } from '@element-plus/icons-vue';
import { Button } from '@/components/ui/button';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
@@ -244,7 +244,7 @@
side="top"
style="margin-left: 5px"
:content="t('view.settings.general.automation.auto_invite_request_accept_tooltip')">
<el-icon><InfoFilled /></el-icon>
<Info />
</TooltipWrapper>
</span>
<br />
@@ -303,7 +303,7 @@
<script setup>
import { computed, defineAsyncComponent, ref } from 'vue';
import { Button } from '@/components/ui/button';
import { InfoFilled } from '@element-plus/icons-vue';
import { Info } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -67,7 +67,7 @@
<TooltipWrapper
side="top"
:content="t('view.settings.advanced.advanced.save_instance_prints_to_file.header_tooltip')">
<el-icon><InfoFilled /></el-icon>
<Info />
</TooltipWrapper>
<simple-switch
:label="t('view.settings.advanced.advanced.save_instance_prints_to_file.description')"
@@ -93,7 +93,7 @@
<TooltipWrapper
side="top"
:content="t('view.settings.advanced.advanced.save_instance_prints_to_file.header_tooltip')">
<el-icon><InfoFilled /></el-icon>
<Info />
</TooltipWrapper>
<simple-switch
:label="t('view.settings.advanced.advanced.save_instance_emoji_to_file.description')"
@@ -105,7 +105,7 @@
<script setup>
import { Button } from '@/components/ui/button';
import { InfoFilled } from '@element-plus/icons-vue';
import { Info } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -14,8 +14,8 @@
side="top"
style="margin-left: 5px"
:content="setting.tooltip">
<el-icon v-if="setting.tooltipWarning"><Warning /></el-icon>
<el-icon v-else><InfoFilled /></el-icon>
<AlertTriangle v-if="setting.tooltipWarning" />
<Info v-else />
</TooltipWrapper>
</span>
@@ -76,7 +76,7 @@
</template>
<script setup>
import { InfoFilled, Warning } from '@element-plus/icons-vue';
import { Info, AlertTriangle } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { computed } from 'vue';
import { storeToRefs } from 'pinia';
@@ -25,7 +25,7 @@
style="margin-left: 5px"
@click="getVRChatCacheSize">
<Spinner v-if="VRChatCacheSizeLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
@@ -175,7 +175,7 @@
import { Button } from '@/components/ui/button';
import { Checkbox } from '@/components/ui/checkbox';
import { InputGroupAction } from '@/components/ui/input-group';
import { Refresh } from '@element-plus/icons-vue';
import { RefreshCw } from 'lucide-vue-next';
import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
@@ -324,7 +324,7 @@
function showDeleteAllVRChatCacheConfirm() {
modalStore
.confirm({
description: 'Continue? Delete all VRChat cache',
description: 'Continue? Trash2 all VRChat cache',
title: 'Confirm'
})
.then(({ ok }) => {
+2 -2
View File
@@ -68,7 +68,7 @@
style="margin-right: 10px"
@click="refreshFriendsList">
<Spinner v-if="isRefreshFriendsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
</TooltipWrapper>
</div>
@@ -108,7 +108,7 @@
import { computed, ref, watch } from 'vue';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Refresh } from '@element-plus/icons-vue';
import { RefreshCw } from 'lucide-vue-next';
import { Spinner } from '@/components/ui/spinner';
import { TabsUnderline } from '@/components/ui/tabs';
import { storeToRefs } from 'pinia';
+3 -5
View File
@@ -17,13 +17,11 @@
<span v-if="isFriendActiveOrOffline" class="extra">{{ friend.ref.statusDescription }}</span>
<template v-else>
<div v-if="friend.pendingOffline" class="extra">
<el-icon><WarningFilled /></el-icon> {{ t('side_panel.pending_offline') }}
<AlertTriangle /> {{ t('side_panel.pending_offline') }}
</div>
<template v-else-if="isGroupByInstance">
<div class="flex items-center">
<el-icon v-if="isFriendTraveling" class="is-loading" style="margin-right: 3px"
><Loading
/></el-icon>
<Loader2 v-if="isFriendTraveling" class="is-loading" style="margin-right: 3px" />
<Timer
class="extra"
:epoch="epoch"
@@ -62,7 +60,7 @@
</template>
<script setup>
import { Loading, WarningFilled } from '@element-plus/icons-vue';
import { Loader2, AlertTriangle } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { computed } from 'vue';
import { storeToRefs } from 'pinia';
@@ -7,7 +7,7 @@
isFriendsGroupMe = !isFriendsGroupMe;
saveFriendsGroupStates();
">
<el-icon class="rotation-transition" :class="{ 'is-rotated': isFriendsGroupMe }"><ArrowRight /></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': isFriendsGroupMe }" />
<span style="margin-left: 5px">{{ t('side_panel.me') }}</span>
</div>
<div v-show="isFriendsGroupMe">
@@ -43,7 +43,7 @@
isVIPFriends = !isVIPFriends;
saveFriendsGroupStates();
">
<el-icon class="rotation-transition" :class="{ 'is-rotated': isVIPFriends }"><ArrowRight /></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': isVIPFriends }" />
<span style="margin-left: 5px">
{{ t('side_panel.favorite') }} &horbar;
{{ vipFriendsDisplayNumber }}
@@ -79,9 +79,9 @@
<template v-if="isSidebarGroupByInstance && friendsInSameInstance.length">
<div class="x-friend-group x-link" @click="toggleSwitchGroupByInstanceCollapsed">
<el-icon class="rotation-transition" :class="{ 'is-rotated': !isSidebarGroupByInstanceCollapsed }"
><ArrowRight
/></el-icon>
<ArrowRight
class="rotation-transition"
:class="{ 'is-rotated': !isSidebarGroupByInstanceCollapsed }" />
<span style="margin-left: 5px"
>{{ t('side_panel.same_instance') }} &horbar; {{ friendsInSameInstance.length }}</span
>
@@ -116,7 +116,7 @@
isOnlineFriends = !isOnlineFriends;
saveFriendsGroupStates();
">
<el-icon class="rotation-transition" :class="{ 'is-rotated': isOnlineFriends }"><ArrowRight /></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': isOnlineFriends }" />
<span style="margin-left: 5px"
>{{ t('side_panel.online') }} &horbar; {{ onlineFriendsByGroupStatus.length }}</span
>
@@ -135,7 +135,7 @@
isActiveFriends = !isActiveFriends;
saveFriendsGroupStates();
">
<el-icon class="rotation-transition" :class="{ 'is-rotated': isActiveFriends }"><ArrowRight /></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': isActiveFriends }" />
<span style="margin-left: 5px">{{ t('side_panel.active') }} &horbar; {{ activeFriends.length }}</span>
</div>
<div v-if="isActiveFriends">
@@ -152,7 +152,7 @@
isOfflineFriends = !isOfflineFriends;
saveFriendsGroupStates();
">
<el-icon class="rotation-transition" :class="{ 'is-rotated': isOfflineFriends }"><ArrowRight /></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': isOfflineFriends }" />
<span style="margin-left: 5px">{{ t('side_panel.offline') }} &horbar; {{ offlineFriends.length }}</span>
</div>
<div v-if="isOfflineFriends">
@@ -167,7 +167,7 @@
<script setup>
import { computed, ref, watch } from 'vue';
import { ArrowRight } from '@element-plus/icons-vue';
import { ArrowRight } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -3,13 +3,9 @@
<template v-for="(group, index) in groupedGroupInstances" :key="getGroupId(group)">
<div class="x-friend-group x-link" :style="{ paddingTop: index === 0 ? '0px' : '10px' }">
<div @click="toggleGroupSidebarCollapse(getGroupId(group))" style="display: flex; align-items: center">
<el-icon
<ArrowRight
class="rotation-transition"
:class="{
'is-rotated': !groupInstancesCfg[getGroupId(group)]?.isCollapsed
}"
><ArrowRight
/></el-icon>
:class="{ 'is-rotated': !groupInstancesCfg[getGroupId(group)]?.isCollapsed }" />
<span style="margin-left: 5px">{{ group[0].group.name }} {{ group.length }}</span>
</div>
</div>
@@ -42,7 +38,7 @@
<script setup>
import { computed, ref } from 'vue';
import { ArrowRight } from '@element-plus/icons-vue';
import { ArrowRight } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useAppearanceSettingsStore, useGroupStore } from '../../../stores';
+11 -12
View File
@@ -62,7 +62,7 @@
<br />
<ButtonGroup>
<Button variant="outline" size="sm" @click="refreshGalleryTable">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_icons.refresh') }}
</Button>
<Button
@@ -78,7 +78,7 @@
size="sm"
:disabled="!currentUser.profilePicOverride"
@click="setProfilePicOverride('')">
<Close />
<X />
{{ t('dialog.gallery_icons.clear') }}
</Button>
</ButtonGroup>
@@ -135,7 +135,7 @@
<br />
<ButtonGroup>
<Button variant="outline" size="sm" @click="refreshVRCPlusIconsTable">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_icons.refresh') }}
</Button>
<Button
@@ -151,7 +151,7 @@
size="sm"
:disabled="!currentUser.userIcon"
@click="setVRCPlusIcon('')">
<Close />
<X />
{{ t('dialog.gallery_icons.clear') }}
</Button>
</ButtonGroup>
@@ -208,7 +208,7 @@
<div>
<ButtonGroup style="margin-right: 10px">
<Button variant="outline" size="sm" @click="refreshEmojiTable">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_icons.refresh') }}
</Button>
<Button
@@ -316,7 +316,7 @@
</div>
<div style="display: inline-block; margin: 5px">
<span v-if="image.loopStyle === 'pingpong'">
<el-icon style="margin-right: 5px"><Refresh /></el-icon>
<RefreshCw style="margin-right: 5px" />
</span>
<span style="margin-right: 5px">{{ image.animationStyle }}</span>
<span v-if="image.framesOverTime" style="margin-right: 5px"
@@ -363,7 +363,7 @@
<br />
<ButtonGroup>
<Button variant="outline" size="sm" @click="refreshStickerTable">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_icons.refresh') }}
</Button>
<Button
@@ -428,7 +428,7 @@
<div style="display: flex; align-items: center">
<ButtonGroup>
<Button variant="outline" size="sm" @click="refreshPrintTable">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_icons.refresh') }}
</Button>
<Button
@@ -516,11 +516,11 @@
<div style="display: flex; align-items: center">
<ButtonGroup>
<Button variant="outline" size="sm" @click="getInventory">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_icons.refresh') }}
</Button>
<Button variant="outline" size="sm" @click="redeemReward">
<Present />
<Gift />
{{ t('dialog.gallery_icons.redeem') }}
</Button>
</ButtonGroup>
@@ -568,6 +568,7 @@
</template>
<script setup>
import { Gift, Maximize2, RefreshCw, Trash2, Upload, X } from 'lucide-vue-next';
import {
NumberField,
NumberFieldContent,
@@ -575,9 +576,7 @@
NumberFieldIncrement,
NumberFieldInput
} from '@/components/ui/number-field';
import { Close, Present, Refresh, Upload } from '@element-plus/icons-vue';
import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
import { Maximize2, Trash2 } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ButtonGroup } from '@/components/ui/button-group';
import { Checkbox } from '@/components/ui/checkbox';
+6 -14
View File
@@ -6,9 +6,7 @@
<div class="tool-categories">
<div class="tool-category">
<div class="category-header" @click="toggleCategory('group')">
<el-icon class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['group'] }"
><ArrowRight
/></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['group'] }" />
<span class="category-title">{{ t('view.tools.group.header') }}</span>
</div>
<div class="tools-grid" v-show="!categoryCollapsed['group']">
@@ -28,9 +26,7 @@
<div class="tool-category">
<div class="category-header" @click="toggleCategory('image')">
<el-icon class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['image'] }"
><ArrowRight
/></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['image'] }" />
<span class="category-title">{{ t('view.tools.pictures.header') }}</span>
</div>
<div class="tools-grid" v-show="!categoryCollapsed['image']">
@@ -93,9 +89,7 @@
<div class="tool-category">
<div class="category-header" @click="toggleCategory('user')">
<el-icon class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['user'] }"
><ArrowRight
/></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['user'] }" />
<span class="category-title">{{ t('view.tools.export.header') }}</span>
</div>
@@ -158,9 +152,7 @@
<div class="tool-category">
<div class="category-header" @click="toggleCategory('other')">
<el-icon class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['other'] }"
><ArrowRight
/></el-icon>
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['other'] }" />
<span class="category-title">{{ t('view.tools.other.header') }}</span>
</div>
<div class="tools-grid" v-show="!categoryCollapsed['other']">
@@ -205,7 +197,7 @@
<script setup>
import { computed, defineAsyncComponent, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { ArrowRight } from '@element-plus/icons-vue';
import { ArrowRight } from 'lucide-vue-next';
import { Card } from '@/components/ui/card';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
@@ -317,7 +309,7 @@
background-color: var(--el-color-primary-light-9);
}
.el-icon-arrow-right {
.rotation-transition {
font-size: 14px;
margin-right: 8px;
transition: transform 0.3s;
@@ -92,20 +92,20 @@
</div>
<div class="badges">
<div @click="copyEventLink(event)" class="share-badge">
<el-icon><Share /></el-icon>
<Share2 />
</div>
<div v-if="isFollowing" @click="toggleEventFollow(event)" class="following-badge is-following">
<el-icon><Star /></el-icon>
<Star />
</div>
<div v-else @click="toggleEventFollow(event)" class="following-badge">
<el-icon><StarFilled /></el-icon>
<Star />
</div>
</div>
</Card>
</template>
<script setup>
import { Calendar, Download, Share, Star, StarFilled } from '@element-plus/icons-vue';
import { Calendar, Download, Share2, Star } from 'lucide-vue-next';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { computed, ref } from 'vue';
import { Button } from '@/components/ui/button';
@@ -54,18 +54,12 @@
<div class="date">
<div
class="calendar-date-content"
:class="{
'has-events': filteredCalendar[formatDateKey(data.date)]?.length
}">
:class="{ 'has-events': filteredCalendar[formatDateKey(data.date)]?.length }">
{{ dayjs(data.date).format('D') }}
<div
v-if="filteredCalendar[formatDateKey(data.date)]?.length"
class="calendar-event-badge"
:class="
followingCalendarDate[formatDateKey(data.date)]
? 'has-following'
: 'no-following'
">
:class="followingCalendarDate[formatDateKey(data.date)] ? 'has-following' : 'no-following'">
{{ filteredCalendar[formatDateKey(data.date)]?.length }}
</div>
</div>
@@ -87,11 +81,9 @@
<div v-if="filteredGroupEvents.length" class="groups-container">
<div v-for="group in filteredGroupEvents" :key="group.groupId" class="group-row">
<div class="group-header" @click="toggleGroup(group.groupId)">
<el-icon
class="el-icon-arrow-right rotation-transition"
:class="{ rotate: !groupCollapsed[group.groupId] }"
><ArrowRight
/></el-icon>
<ArrowRight
class="rotation-transition"
:class="{ rotate: !groupCollapsed[group.groupId] }" />
{{ group.groupName }}
</div>
<div class="events-row" v-show="!groupCollapsed[group.groupId]">
@@ -123,7 +115,7 @@
<script setup>
import { computed, onMounted, ref, watch } from 'vue';
import { ArrowRight } from '@element-plus/icons-vue';
import { ArrowRight } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { InputGroupSearch } from '@/components/ui/input-group';
import { useI18n } from 'vue-i18n';
@@ -638,7 +630,7 @@
display: flex;
align-items: center;
.el-icon-arrow-right {
.rotation-transition {
font-size: 14px;
margin-right: 8px;
transition: transform 0.3s;
+2 -2
View File
@@ -38,7 +38,7 @@
{{ t('dialog.note_export.cancel') }}
</Button>
<span v-if="loading" style="margin: 10px">
<el-icon style="margin-right: 5px"><Loading /></el-icon>
<Loader2 style="margin-right: 5px" />
{{ t('dialog.note_export.progress') }} {{ progress }}/{{ progressTotal }}
</span>
@@ -66,7 +66,7 @@
import { computed, ref, watch } from 'vue';
import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table';
import { Loading } from '@element-plus/icons-vue';
import { Loader2 } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';