mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-05 06:16:05 +02:00
replace @element-plus/icons-vue
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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(() => {});
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 }) => {
|
||||
|
||||
@@ -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
|
||||
|
||||
{!r.inCache ? (
|
||||
<span style="color: #aaa">
|
||||
<el-icon>
|
||||
<Download />
|
||||
</el-icon>
|
||||
<Download />
|
||||
|
||||
</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
|
||||
|
||||
{!r.inCache ? (
|
||||
<span style="color: #aaa">
|
||||
<el-icon>
|
||||
<Download />
|
||||
</el-icon>
|
||||
<Download / />
|
||||
|
||||
</span>
|
||||
) : null}
|
||||
|
||||
+10
-11
@@ -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 }) => {
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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') }} ―
|
||||
{{ 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') }} ― {{ 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') }} ― {{ 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') }} ― {{ 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') }} ― {{ 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
@@ -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,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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user