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
+8 -12
View File
@@ -18,25 +18,21 @@
@load="handleImageLoad"
@close="closeDialog">
<template #toolbar="{ actions }">
<el-icon @click="copyImageToClipboard(fullscreenImageDialog.imageUrl)" class="toolbar-icon">
<CopyDocument />
</el-icon>
<el-icon
<Copy @click="copyImageToClipboard(fullscreenImageDialog.imageUrl)" class="toolbar-icon" />
<Download
@click="downloadAndSaveImage(fullscreenImageDialog.imageUrl, fullscreenImageDialog.fileName)"
class="toolbar-icon">
<Download />
</el-icon>
<el-icon @click="actions('zoomOut')" class="toolbar-icon"><ZoomOut /></el-icon>
<el-icon @click="actions('zoomIn')" class="toolbar-icon"><ZoomIn /></el-icon>
<el-icon @click="actions('clockwise')" class="toolbar-icon"><RefreshRight /></el-icon>
<el-icon @click="actions('anticlockwise')" class="toolbar-icon"><RefreshLeft /></el-icon>
class="toolbar-icon" />
<ZoomOut @click="actions('zoomOut')" class="toolbar-icon" />
<ZoomIn @click="actions('zoomIn')" class="toolbar-icon" />
<RotateCw @click="actions('clockwise')" class="toolbar-icon" />
<RotateCcw @click="actions('anticlockwise')" class="toolbar-icon" />
</template>
</el-image>
</div>
</template>
<script setup>
import { CopyDocument, Download, RefreshLeft, RefreshRight, ZoomIn, ZoomOut } from '@element-plus/icons-vue';
import { Copy, Download, RotateCcw, RotateCw, ZoomIn, ZoomOut } from 'lucide-vue-next';
import { nextTick, ref, watch } from 'vue';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
+3 -3
View File
@@ -40,7 +40,7 @@
</template>
</div>
</template>
<el-icon><CaretBottom /></el-icon>
<ChevronDown />
</TooltipWrapper>
<span v-if="props.location === locationStore.lastLocation.location" style="margin-left: 5px"
>{{ locationStore.lastLocation.playerList.size }}/{{ props.instance.capacity }}</span
@@ -66,7 +66,7 @@
<script setup>
import { reactive, watch } from 'vue';
import { Button } from '@/components/ui/button';
import { CaretBottom } from '@element-plus/icons-vue';
import { ChevronDown } from 'lucide-vue-next';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
@@ -128,7 +128,7 @@
function closeInstance(location) {
modalStore
.confirm({
description: 'Continue? Close Instance, nobody will be able to join',
description: 'Continue? X Instance, nobody will be able to join',
title: 'Confirm'
})
.then(async ({ ok }) => {
+5 -4
View File
@@ -2,18 +2,19 @@
<div v-if="isVisible" class="inline-block">
<TooltipWrapper side="top" :content="t('dialog.user.info.launch_invite_tooltip')"
><Button
class="rounded-full w-6 h-6 text-xs text-muted-foreground hover:text-foreground"
size="icon"
class="rounded-full w-6 h-6 text-muted-foreground hover:text-foreground"
size="icon-sm"
variant="outline"
@click="confirm"
><i class="ri-login-box-line"></i
></Button>
><Star />
</Button>
</TooltipWrapper>
</div>
</template>
<script setup>
import { Button } from '@/components/ui/button';
import { Star } from 'lucide-vue-next';
import { computed } from 'vue';
import { useI18n } from 'vue-i18n';
+4 -4
View File
@@ -12,7 +12,7 @@
:class="['x-location', { 'x-link': link && location !== 'private' && location !== 'offline' }]"
class="inline-flex min-w-0 flex-nowrap items-center overflow-hidden"
@click="handleShowWorldDialog">
<el-icon :class="['is-loading']" class="mr-1" v-if="isTraveling"><Loading /></el-icon>
<Loader2 :class="['is-loading']" class="mr-1" v-if="isTraveling" />
<span class="min-w-0 truncate">{{ text }}</span>
<span v-if="showInstanceIdInLocation && instanceName" class="ml-1 whitespace-nowrap">{{
` · #${instanceName}`
@@ -23,15 +23,15 @@
</div>
</TooltipWrapper>
<TooltipWrapper v-if="isClosed" :content="t('dialog.user.info.instance_closed')">
<el-icon :class="['inline-block', 'ml-5']" style="color: lightcoral"><WarnTriangleFilled /></el-icon>
<AlertTriangle :class="['inline-block', 'ml-5']" style="color: lightcoral" />
</TooltipWrapper>
<el-icon v-if="strict" :class="['inline-block', 'ml-5']"><Lock /></el-icon>
<Lock v-if="strict" :class="['inline-block', 'ml-5']" />
</div>
</div>
</template>
<script setup>
import { Loading, Lock, WarnTriangleFilled } from '@element-plus/icons-vue';
import { Loader2, Lock, AlertTriangle } from 'lucide-vue-next';
import { onBeforeUnmount, ref, watch } from 'vue';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
+4 -4
View File
@@ -2,19 +2,19 @@
<span class="x-location-world">
<span v-if="region" :class="['flags', 'inline-block', 'mr-1.25', region]"></span>
<span @click="showLaunchDialog" class="x-link">
<el-icon v-if="isUnlocked" :class="['inline-block', 'mr-1.25']"><Unlock /></el-icon>
<Unlock v-if="isUnlocked" :class="['inline-block', 'mr-1.25']" />
<span> {{ accessTypeName }} #{{ instanceName }}</span>
</span>
<span v-if="groupName" @click="showGroupDialog" class="x-link">({{ groupName }})</span>
<TooltipWrapper v-if="isClosed" :content="t('dialog.user.info.instance_closed')">
<el-icon :class="['inline-block', 'ml-5']" style="color: lightcoral"><WarnTriangleFilled /></el-icon>
<AlertTriangle :class="['inline-block', 'ml-5']" style="color: lightcoral" />
</TooltipWrapper>
<el-icon v-if="strict" style="display: inline-block; margin-left: 5px"><Lock /></el-icon>
<Lock v-if="strict" style="display: inline-block; margin-left: 5px" />
</span>
</template>
<script setup>
import { Lock, Unlock, WarnTriangleFilled } from '@element-plus/icons-vue';
import { Lock, Unlock, AlertTriangle } from 'lucide-vue-next';
import { ref, watch } from 'vue';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -219,7 +219,7 @@
variant="outline"
:disabled="currentUser.currentAvatar === avatarDialog.id"
@click="selectAvatarWithoutConfirmation(avatarDialog.id)">
<CircleCheck
<CheckCircle
/></Button>
</TooltipWrapper>
<DropdownMenu>
@@ -232,12 +232,12 @@
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem @click="avatarDialogCommand('Refresh')">
<Refresh class="size-4" />
<DropdownMenuItem @click="avatarDialogCommand('RefreshCw')">
<RefreshCw class="size-4" />
{{ t('dialog.avatar.actions.refresh') }}
</DropdownMenuItem>
<DropdownMenuItem @click="avatarDialogCommand('Share')">
<Share class="size-4" />
<DropdownMenuItem @click="avatarDialogCommand('Share2')">
<Share2 class="size-4" />
{{ t('dialog.avatar.actions.share') }}
</DropdownMenuItem>
<DropdownMenuSeparator />
@@ -245,11 +245,11 @@
v-if="avatarDialog.isBlocked"
variant="destructive"
@click="avatarDialogCommand('Unblock Avatar')">
<CircleCheck class="size-4" />
<CheckCircle class="size-4" />
{{ t('dialog.avatar.actions.unblock') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="avatarDialogCommand('Block Avatar')">
<CircleClose class="size-4" />
<XCircle class="size-4" />
{{ t('dialog.avatar.actions.block') }}
</DropdownMenuItem>
<DropdownMenuItem
@@ -271,23 +271,23 @@
{{ t('dialog.avatar.actions.make_public') }}
</DropdownMenuItem>
<DropdownMenuItem @click="avatarDialogCommand('Rename')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.avatar.actions.rename') }}
</DropdownMenuItem>
<DropdownMenuItem @click="avatarDialogCommand('Change Description')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.avatar.actions.change_description') }}
</DropdownMenuItem>
<DropdownMenuItem @click="avatarDialogCommand('Change Content Tags')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.avatar.actions.change_content_tags') }}
</DropdownMenuItem>
<DropdownMenuItem @click="avatarDialogCommand('Change Styles and Author Tags')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.avatar.actions.change_styles_author_tags') }}
</DropdownMenuItem>
<DropdownMenuItem @click="avatarDialogCommand('Change Image')">
<Picture class="size-4" />
<Image class="size-4" />
{{ t('dialog.avatar.actions.change_image') }}
</DropdownMenuItem>
<DropdownMenuItem
@@ -301,22 +301,22 @@
v-if="avatarDialog.hasImposter"
variant="destructive"
@click="avatarDialogCommand('Regenerate Imposter')">
<Refresh class="size-4" />
<RefreshCw class="size-4" />
{{ t('dialog.avatar.actions.regenerate_impostor') }}
</DropdownMenuItem>
<DropdownMenuItem
v-if="avatarDialog.hasImposter"
variant="destructive"
@click="avatarDialogCommand('Delete Imposter')">
<Delete class="size-4" />
@click="avatarDialogCommand('Trash2 Imposter')">
<Trash2 class="size-4" />
{{ t('dialog.avatar.actions.delete_impostor') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="avatarDialogCommand('Create Imposter')">
<User class="size-4" />
{{ t('dialog.avatar.actions.create_impostor') }}
</DropdownMenuItem>
<DropdownMenuItem variant="destructive" @click="avatarDialogCommand('Delete')">
<Delete class="size-4" />
<DropdownMenuItem variant="destructive" @click="avatarDialogCommand('Trash2')">
<Trash2 class="size-4" />
{{ t('dialog.avatar.actions.delete') }}
</DropdownMenuItem>
</template>
@@ -468,7 +468,7 @@
<span class="name"
>{{ t('dialog.avatar.info.time_spent')
}}<TooltipWrapper side="top" :content="t('dialog.world.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon> </TooltipWrapper
<AlertTriangle style="margin-left: 3px" /> </TooltipWrapper
></span>
<span v-if="timeSpent === 0" class="extra">-</span>
@@ -522,18 +522,22 @@
<script setup>
import {
CircleClose,
Delete,
AlertTriangle,
Check,
CheckCircle,
Download,
Edit,
Picture,
Refresh,
Share,
Ellipsis,
Image,
Pencil,
RefreshCcw,
RefreshCw,
Share2,
Star,
Trash2,
Upload,
User,
Warning
} from '@element-plus/icons-vue';
import { Check, CircleCheck, Ellipsis, RefreshCcw, Star, Trash2 } from 'lucide-vue-next';
XCircle
} from 'lucide-vue-next';
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from '@/components/ui/carousel';
import { computed, defineAsyncComponent, nextTick, ref, watch } from 'vue';
import { Button } from '@/components/ui/button';
@@ -734,10 +738,10 @@
function avatarDialogCommand(command) {
const D = avatarDialog.value;
switch (command) {
case 'Refresh':
case 'RefreshCw':
showAvatarDialog(D.id);
break;
case 'Share':
case 'Share2':
copyAvatarUrl(D.id);
break;
case 'Rename':
@@ -770,7 +774,7 @@
.then(({ ok }) => {
if (!ok) return;
switch (command) {
case 'Delete Favorite':
case 'Trash2 Favorite':
favoriteRequest.deleteFavorite({
objectId: D.id
});
@@ -839,7 +843,7 @@
return args;
});
break;
case 'Delete':
case 'Trash2':
avatarRequest
.deleteAvatar({
avatarId: D.id
@@ -863,7 +867,7 @@
return args;
});
break;
case 'Delete Imposter':
case 'Trash2 Imposter':
avatarRequest
.deleteImposter({
avatarId: D.id
@@ -33,7 +33,7 @@
<script setup>
import { Button } from '@/components/ui/button';
import { Upload } from '@element-plus/icons-vue';
import { Upload } from 'lucide-vue-next';
import { ref } from 'vue';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
@@ -53,9 +53,7 @@
>{{ props.setAvatarTagsDialog.selectedAvatarIds.length }} /
{{ setAvatarTagsDialog.ownAvatars.length }}</span
>
<el-icon v-if="setAvatarTagsDialog.loading" class="is-loading" style="margin-left: 5px"
><Loading
/></el-icon>
<Loader2 v-if="setAvatarTagsDialog.loading" class="is-loading" style="margin-left: 5px" />
<br />
<div class="x-friend-list" style="margin-top: 10px; min-height: 60px; max-height: 280px">
<div
@@ -102,7 +100,7 @@
import { Button } from '@/components/ui/button';
import { Checkbox } from '@/components/ui/checkbox';
import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loading } from '@element-plus/icons-vue';
import { Loader2 } from 'lucide-vue-next';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
import { watch } from 'vue';
@@ -17,11 +17,11 @@
@change="onFileChangeGallery" />
<ButtonGroup>
<Button variant="outline" size="sm" @click="selectImageGallerySelect('', '')">
<Close />
<X />
{{ t('dialog.gallery_select.none') }}
</Button>
<Button variant="outline" size="sm" @click="refreshGalleryTable">
<Refresh />
<RefreshCw />
{{ t('dialog.gallery_select.refresh') }}
</Button>
<Button
@@ -55,7 +55,7 @@
</template>
<script setup>
import { Close, Refresh, Upload } from '@element-plus/icons-vue';
import { X, RefreshCw, Upload } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ButtonGroup } from '@/components/ui/button-group';
import { storeToRefs } from 'pinia';
@@ -161,7 +161,7 @@
size="icon-lg"
:disabled="groupDialog.ref.privacy === 'private'"
@click="setGroupRepresentation(groupDialog.id)">
<StarFilled />
<Star />
</Button>
</span>
</TooltipWrapper>
@@ -174,7 +174,7 @@
variant="outline"
size="icon-lg"
@click="cancelGroupRequest(groupDialog.id)">
<Close />
<X />
</Button>
</span>
</TooltipWrapper>
@@ -202,7 +202,7 @@
variant="outline"
size="icon-lg"
@click="joinGroup(groupDialog.id)">
<Message />
<MessageSquare />
</Button>
</TooltipWrapper>
<TooltipWrapper
@@ -211,7 +211,7 @@
:content="t('dialog.group.actions.invite_required_tooltip')">
<span>
<Button class="rounded-full mr-2" variant="outline" size="icon-lg" disabled>
<Message />
<MessageSquare />
</Button>
</span>
</TooltipWrapper>
@@ -236,16 +236,16 @@
groupDialog.ref.membershipStatus === 'userblocked' ? 'destructive' : 'outline'
"
size="icon-lg">
<MoreFilled />
<MoreHorizontal />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem @click="groupDialogCommand('Refresh')">
<Refresh class="size-4" />
<DropdownMenuItem @click="groupDialogCommand('RefreshCw')">
<RefreshCw class="size-4" />
{{ t('dialog.group.actions.refresh') }}
</DropdownMenuItem>
<DropdownMenuItem @click="groupDialogCommand('Share')">
<Share class="size-4" />
<DropdownMenuItem @click="groupDialogCommand('Share2')">
<Share2 class="size-4" />
{{ t('dialog.group.actions.share') }}
</DropdownMenuItem>
<template v-if="groupDialog.inGroup">
@@ -254,7 +254,7 @@
<DropdownMenuItem
v-if="groupDialog.ref.myMember.isSubscribedToAnnouncements"
@click="groupDialogCommand('Unsubscribe To Announcements')">
<MuteNotification class="size-4" />
<BellOff class="size-4" />
{{ t('dialog.group.actions.unsubscribe') }}
</DropdownMenuItem>
<DropdownMenuItem
@@ -266,41 +266,41 @@
<DropdownMenuItem
v-if="hasGroupPermission(groupDialog.ref, 'group-invites-manage')"
@click="groupDialogCommand('Invite To Group')">
<Message class="size-4" />
<MessageSquare class="size-4" />
{{ t('dialog.group.actions.invite_to_group') }}
</DropdownMenuItem>
<template
v-if="hasGroupPermission(groupDialog.ref, 'group-announcement-manage')">
<DropdownMenuItem @click="groupDialogCommand('Create Post')">
<Tickets class="size-4" />
<Ticket class="size-4" />
{{ t('dialog.group.actions.create_post') }}
</DropdownMenuItem>
</template>
<DropdownMenuItem
:disabled="!hasGroupModerationPermission(groupDialog.ref)"
@click="groupDialogCommand('Moderation Tools')">
<Operation class="size-4" />
<Settings class="size-4" />
{{ t('dialog.group.actions.moderation_tools') }}
</DropdownMenuItem>
<template
v-if="groupDialog.ref.myMember && groupDialog.ref.privacy === 'default'">
<DropdownMenuSeparator />
<DropdownMenuItem @click="groupDialogCommand('Visibility Everyone')">
<View class="size-4" />
<Eye class="size-4" />
<Check
v-if="groupDialog.ref.myMember.visibility === 'visible'"
class="size-4" />
{{ t('dialog.group.actions.visibility_everyone') }}
</DropdownMenuItem>
<DropdownMenuItem @click="groupDialogCommand('Visibility Friends')">
<View class="size-4" />
<Eye class="size-4" />
<Check
v-if="groupDialog.ref.myMember.visibility === 'friends'"
class="size-4" />
{{ t('dialog.group.actions.visibility_friends') }}
</DropdownMenuItem>
<DropdownMenuItem @click="groupDialogCommand('Visibility Hidden')">
<View class="size-4" />
<Eye class="size-4" />
<Check
v-if="groupDialog.ref.myMember.visibility === 'hidden'"
class="size-4" />
@@ -311,7 +311,7 @@
<DropdownMenuItem
variant="destructive"
@click="groupDialogCommand('Leave Group')">
<Delete class="size-4" />
<Trash2 class="size-4" />
{{ t('dialog.group.actions.leave') }}
</DropdownMenuItem>
</template>
@@ -322,11 +322,11 @@
v-if="groupDialog.ref.membershipStatus === 'userblocked'"
variant="destructive"
@click="groupDialogCommand('Unblock Group')">
<CircleCheck class="size-4" />
<CheckCircle class="size-4" />
{{ t('dialog.group.actions.unblock') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="groupDialogCommand('Block Group')">
<CircleClose class="size-4" />
<XCircle class="size-4" />
{{ t('dialog.group.actions.block') }}
</DropdownMenuItem>
</template>
@@ -359,7 +359,7 @@
<div style="margin: 5px 0">
<Location :location="room.tag" style="display: inline-block" />
<InviteYourself :location="room.tag" style="margin-left: 5px" />
<TooltipWrapper side="top" content="Refresh player count">
<TooltipWrapper side="top" content="RefreshCw player count">
<Button
class="rounded-full ml-1 w-6 h-6 text-xs text-muted-foreground hover:text-foreground"
size="icon"
@@ -392,7 +392,7 @@
:style="{ color: user.$userColour }"
v-text="user.displayName" />
<span v-if="user.location === 'traveling'" class="extra">
<el-icon class="is-loading" style="margin-right: 3px"><Loading /></el-icon>
<Loader2 class="is-loading" style="margin-right: 3px" />
<Timer :epoch="user.$travelingToTime" />
</span>
<span v-else class="extra">
@@ -456,7 +456,7 @@
</span>
</template>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<DisplayName
:userid="groupDialog.announcement.authorId"
@@ -581,7 +581,7 @@
<span class="name">
{{ t('dialog.group.info.last_visited') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span class="extra">{{ formatDateFilter(groupDialog.lastVisit, 'long') }}</span>
@@ -775,7 +775,7 @@
>
</template>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<DisplayName :userid="post.authorId" style="margin-right: 5px" />
<span v-if="post.editorId" style="margin-right: 5px"
@@ -934,7 +934,7 @@
v-if="user.isRepresenting"
side="top"
:content="t('dialog.group.members.representing')">
<el-icon style="margin-right: 5px"><CollectionTag /></el-icon>
<Tag style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="user.visibility !== 'visible'" side="top">
<template #content>
@@ -943,13 +943,13 @@
{{ user.visibility }}</span
>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper
v-if="!user.isSubscribedToAnnouncements"
side="top"
:content="t('dialog.group.members.unsubscribed_announcements')">
<el-icon style="margin-right: 5px"><ChatLineSquare /></el-icon>
<MessageSquare style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="user.managerNotes" side="top">
<template #content>
@@ -957,7 +957,7 @@
<br />
<span>{{ user.managerNotes }}</span>
</template>
<el-icon style="margin-right: 5px"><Edit /></el-icon>
<Pencil style="margin-right: 5px" />
</TooltipWrapper>
</template>
<template v-for="roleId in user.roleIds" :key="roleId">
@@ -995,7 +995,7 @@
v-if="user.isRepresenting"
side="top"
:content="t('dialog.group.members.representing')">
<el-icon style="margin-right: 5px"><CollectionTag /></el-icon>
<Tag style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="user.visibility !== 'visible'" side="top">
<template #content>
@@ -1004,13 +1004,13 @@
{{ user.visibility }}</span
>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper
v-if="!user.isSubscribedToAnnouncements"
side="top"
:content="t('dialog.group.members.unsubscribed_announcements')">
<el-icon style="margin-right: 5px"><ChatLineSquare /></el-icon>
<MessageSquare style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="user.managerNotes" side="top">
<template #content>
@@ -1018,7 +1018,7 @@
<br />
<span>{{ user.managerNotes }}</span>
</template>
<el-icon style="margin-right: 5px"><Edit /></el-icon>
<Pencil style="margin-right: 5px" />
</TooltipWrapper>
</template>
<template v-for="roleId in user.roleIds" :key="roleId">
@@ -1052,7 +1052,7 @@
:disabled="isGroupGalleryLoading"
@click="getGroupGalleries">
<Spinner v-if="isGroupGalleryLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<TabsUnderline
v-model="groupDialogGalleryCurrentName"
@@ -1130,29 +1130,27 @@
<script setup>
import {
AlertTriangle,
Bell,
ChatLineSquare,
BellOff,
Check,
CircleCheck,
CircleClose,
Close,
CollectionTag,
Delete,
CheckCircle,
Download,
Edit,
Loading,
Message,
MoreFilled,
MuteNotification,
Operation,
Refresh,
Share,
Eye,
Loader2,
MessageSquare,
MoreHorizontal,
Pencil,
RefreshCw,
Settings,
Share2,
Star,
StarFilled,
Tickets,
View,
Warning
} from '@element-plus/icons-vue';
Tag,
Ticket,
Trash2,
X,
XCircle
} from 'lucide-vue-next';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { computed, nextTick, reactive, ref, watch } from 'vue';
import { Button } from '@/components/ui/button';
@@ -1550,7 +1548,7 @@
return;
}
switch (command) {
case 'Share':
case 'Share2':
copyToClipboard(groupDialog.value.ref.$url);
break;
case 'Create Post':
@@ -1562,7 +1560,7 @@
case 'Invite To Group':
showInviteGroupDialog(D.id, '');
break;
case 'Refresh':
case 'RefreshCw':
showGroupDialog(D.id);
break;
case 'Leave Group':
@@ -21,7 +21,7 @@
:disabled="isGroupMembersLoading"
@click="loadAllGroupMembers">
<Spinner v-if="isGroupMembersLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="font-size: 14px; margin-left: 5px; margin-right: 5px">
{{ groupMemberModerationTable.data.length }}/{{
@@ -53,7 +53,7 @@
@click.stop>
<span>
{{ t(memberSortOrder.name) }}
<el-icon style="margin-left: 5px"><ArrowDown /></el-icon>
<ArrowDown style="margin-left: 5px" />
</span>
</Button>
</DropdownMenuTrigger>
@@ -90,7 +90,7 @@
@click.stop>
<span>
{{ t(memberFilter.name) }}
<el-icon style="margin-left: 5px"><ArrowDown /></el-icon>
<ArrowDown style="margin-left: 5px" />
</span>
</Button>
</DropdownMenuTrigger>
@@ -139,7 +139,7 @@
:disabled="isGroupMembersLoading"
@click="getAllGroupBans(groupMemberModeration.id)">
<Spinner v-if="isGroupMembersLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="font-size: 14px; margin-left: 5px; margin-right: 5px">{{
groupBansModerationTable.data.length
@@ -172,7 +172,7 @@
:disabled="isGroupMembersLoading"
@click="getAllGroupInvitesAndJoinRequests(groupMemberModeration.id)">
<Spinner v-if="isGroupMembersLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<br />
<TabsUnderline default-value="sent" :items="groupInvitesTabs" :unmount-on-hide="false">
@@ -308,7 +308,7 @@
:disabled="isGroupMembersLoading"
@click="getAllGroupLogs(groupMemberModeration.id)">
<Spinner v-if="isGroupMembersLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="font-size: 14px; margin-left: 5px; margin-right: 5px">{{
groupLogsModerationTable.data.length
@@ -392,7 +392,7 @@
<template #content>
<span>{{ t('dialog.group_member_moderation.user_isnt_in_group') }}</span>
</template>
<el-icon style="margin-left: 3px; display: inline-block"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px; display: inline-block" />
</TooltipWrapper>
<span v-text="user.user?.displayName || user.userId" style="font-weight: bold; margin-left: 5px"></span>
<button
@@ -507,7 +507,7 @@
>{{ t('dialog.group_member_moderation.unban') }}</Button
>
<span v-if="progressCurrent" style="margin-top: 10px">
<el-icon class="is-loading" style="margin-left: 5px; margin-right: 5px"><Loading /></el-icon>
<Loader2 class="is-loading" style="margin-left: 5px; margin-right: 5px" />
{{ t('dialog.group_member_moderation.progress') }} {{ progressCurrent }}/{{ progressTotal }}
</span>
<Button
@@ -526,13 +526,12 @@
</template>
<script setup>
import { ArrowDown, Loading, Refresh, Warning } from '@element-plus/icons-vue';
import { AlertTriangle, ArrowDown, Loader2, RefreshCw, Trash2 } from 'lucide-vue-next';
import { computed, reactive, ref, watch } from 'vue';
import { InputGroupField, InputGroupTextareaField } from '@/components/ui/input-group';
import { Button } from '@/components/ui/button';
import { Spinner } from '@/components/ui/spinner';
import { TabsUnderline } from '@/components/ui/tabs';
import { Trash2 } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
+2 -4
View File
@@ -24,7 +24,7 @@
<span class="flex items-center gap-1">
<span>{{ t('dialog.launch.short_url') }}</span>
<TooltipWrapper side="top" :content="t('dialog.launch.short_url_notice')">
<el-icon><Warning /></el-icon>
<AlertTriangle />
</TooltipWrapper>
</span>
</FieldLabel>
@@ -132,12 +132,10 @@
DropdownMenuTrigger
} from '@/components/ui/dropdown-menu';
import { Field, FieldContent, FieldGroup, FieldLabel } from '@/components/ui/field';
import { AlertTriangle, Copy, MoreHorizontal } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ButtonGroup } from '@/components/ui/button-group';
import { Copy } from 'lucide-vue-next';
import { InputGroupField } from '@/components/ui/input-group';
import { MoreHorizontal } from 'lucide-vue-next';
import { Warning } from '@element-plus/icons-vue';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
@@ -17,7 +17,7 @@
<DropdownMenuTrigger as-child>
<div class="ml-2">
<Button variant="outline" size="icon-lg" class="rounded-full">
<Ellipsis />
<MoreHorizontal />
<span
v-if="dotClass"
class="absolute -right-0.5 -top-0.5 h-2.5 w-2.5 rounded-full ring-2 ring-background"
@@ -26,43 +26,43 @@
</div>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem @click="onCommand('Refresh')">
<Refresh class="size-4" />
<DropdownMenuItem @click="onCommand('RefreshCw')">
<RefreshCw class="size-4" />
{{ t('dialog.user.actions.refresh') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Share')">
<Share class="size-4" />
<DropdownMenuItem @click="onCommand('Share2')">
<Share2 class="size-4" />
{{ t('dialog.user.actions.share') }}
</DropdownMenuItem>
<template v-if="userDialog.ref.id === currentUser.id">
<DropdownMenuItem @click="onCommand('Show Avatar Author')">
<UserFilled class="size-4" />
<User class="size-4" />
{{ t('dialog.user.actions.show_avatar_author') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Show Fallback Avatar Details')">
<UserFilled class="size-4" />
<User class="size-4" />
{{ t('dialog.user.actions.show_fallback_avatar') }}
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem @click="onCommand('Edit Social Status')">
<Edit class="size-4" />
<DropdownMenuItem @click="onCommand('Pencil Social Status')">
<Pencil class="size-4" />
{{ t('dialog.user.actions.edit_status') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Edit Language')">
<Edit class="size-4" />
<DropdownMenuItem @click="onCommand('Pencil Language')">
<Pencil class="size-4" />
{{ t('dialog.user.actions.edit_language') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Edit Bio')">
<Edit class="size-4" />
<DropdownMenuItem @click="onCommand('Pencil Bio')">
<Pencil class="size-4" />
{{ t('dialog.user.actions.edit_bio') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Edit Pronouns')">
<Edit class="size-4" />
<DropdownMenuItem @click="onCommand('Pencil Pronouns')">
<Pencil class="size-4" />
{{ t('dialog.user.actions.edit_pronouns') }}
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem @click="onCommand('Logout')">
<SwitchButton class="size-4" />
<Power class="size-4" />
{{ t('dialog.user.actions.logout') }}
</DropdownMenuItem>
</template>
@@ -70,29 +70,29 @@
<template v-if="userDialog.isFriend">
<DropdownMenuSeparator />
<DropdownMenuItem @click="onCommand('Request Invite')">
<Postcard class="size-4" />
<Mail class="size-4" />
{{ t('dialog.user.actions.request_invite') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Request Invite Message')">
<Postcard class="size-4" />
<DropdownMenuItem @click="onCommand('Request Invite MessageSquare')">
<Mail class="size-4" />
{{ t('dialog.user.actions.request_invite_with_message') }}
</DropdownMenuItem>
<template v-if="isGameRunning">
<DropdownMenuItem
:disabled="!checkCanInvite(lastLocation.location)"
@click="onCommand('Invite')">
<Message class="size-4" />
<MessageSquare class="size-4" />
{{ t('dialog.user.actions.invite') }}
</DropdownMenuItem>
<DropdownMenuItem
:disabled="!checkCanInvite(lastLocation.location)"
@click="onCommand('Invite Message')">
<Message class="size-4" />
@click="onCommand('Invite MessageSquare')">
<MessageSquare class="size-4" />
{{ t('dialog.user.actions.invite_with_message') }}
</DropdownMenuItem>
</template>
<DropdownMenuItem :disabled="!currentUser.isBoopingEnabled" @click="onCommand('Send Boop')">
<Pointer class="size-4" />
<MousePointer class="size-4" />
{{ t('dialog.user.actions.send_boop') }}
</DropdownMenuItem>
</template>
@@ -102,14 +102,14 @@
{{ t('dialog.user.actions.accept_friend_request') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Decline Friend Request')">
<Close class="size-4" />
<X class="size-4" />
{{ t('dialog.user.actions.decline_friend_request') }}
</DropdownMenuItem>
</template>
<DropdownMenuItem
v-else-if="userDialog.outgoingRequest"
@click="onCommand('Cancel Friend Request')">
<Close class="size-4" />
<X class="size-4" />
{{ t('dialog.user.actions.cancel_friend_request') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="onCommand('Send Friend Request')">
@@ -117,28 +117,28 @@
{{ t('dialog.user.actions.send_friend_request') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Invite To Group')">
<Message class="size-4" />
<MessageSquare class="size-4" />
{{ t('dialog.user.actions.invite_to_group') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Group Moderation')">
<Operation class="size-4" />
<Settings class="size-4" />
{{ t('dialog.user.actions.group_moderation') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Edit Note Memo')">
<Edit class="size-4" />
Edit Note and Memo
<DropdownMenuItem @click="onCommand('Pencil Note Memo')">
<Pencil class="size-4" />
Pencil Note and Memo
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem @click="onCommand('Show Avatar Author')">
<UserFilled class="size-4" />
<User class="size-4" />
{{ t('dialog.user.actions.show_avatar_author') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Show Fallback Avatar Details')">
<UserFilled class="size-4" />
<User class="size-4" />
{{ t('dialog.user.actions.show_fallback_avatar') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Previous Instances')">
<DataLine class="size-4" />
<LineChart class="size-4" />
{{ t('dialog.user.actions.show_previous_instances') }}
</DropdownMenuItem>
<DropdownMenuSeparator />
@@ -146,39 +146,39 @@
v-if="userDialog.isBlock"
variant="destructive"
@click="onCommand('Moderation Unblock')">
<CircleCheck class="size-4" />
<CheckCircle class="size-4" />
{{ t('dialog.user.actions.moderation_unblock') }}
</DropdownMenuItem>
<DropdownMenuItem
v-else
:disabled="userDialog.ref.$isModerator"
@click="onCommand('Moderation Block')">
<CircleClose class="size-4" />
<XCircle class="size-4" />
{{ t('dialog.user.actions.moderation_block') }}
</DropdownMenuItem>
<DropdownMenuItem
v-if="userDialog.isMute"
variant="destructive"
@click="onCommand('Moderation Unmute')">
<Microphone class="size-4" />
<Mic class="size-4" />
{{ t('dialog.user.actions.moderation_unmute') }}
</DropdownMenuItem>
<DropdownMenuItem
v-else
:disabled="userDialog.ref.$isModerator"
@click="onCommand('Moderation Mute')">
<Mute class="size-4" />
@click="onCommand('Moderation VolumeX')">
<VolumeX class="size-4" />
{{ t('dialog.user.actions.moderation_mute') }}
</DropdownMenuItem>
<DropdownMenuItem
v-if="userDialog.isMuteChat"
variant="destructive"
@click="onCommand('Moderation Enable Chatbox')">
<ChatLineRound class="size-4" />
<MessageCircle class="size-4" />
{{ t('dialog.user.actions.moderation_enable_chatbox') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="onCommand('Moderation Disable Chatbox')">
<ChatDotRound class="size-4" />
<MessageCircle class="size-4" />
{{ t('dialog.user.actions.moderation_disable_chatbox') }}
</DropdownMenuItem>
<DropdownMenuItem @click="onCommand('Show Avatar')">
@@ -195,11 +195,11 @@
v-if="userDialog.isInteractOff"
variant="destructive"
@click="onCommand('Moderation Enable Avatar Interaction')">
<Pointer class="size-4" />
<MousePointer class="size-4" />
{{ t('dialog.user.actions.moderation_enable_avatar_interaction') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="onCommand('Moderation Disable Avatar Interaction')">
<CircleClose class="size-4" />
<XCircle class="size-4" />
{{ t('dialog.user.actions.moderation_disable_avatar_interaction') }}
</DropdownMenuItem>
<DropdownMenuItem :disabled="userDialog.ref.$isModerator" @click="onCommand('Report Hacking')">
@@ -209,7 +209,7 @@
<template v-if="userDialog.isFriend">
<DropdownMenuSeparator />
<DropdownMenuItem variant="destructive" @click="onCommand('Unfriend')">
<Delete class="size-4" />
<Trash2 class="size-4" />
{{ t('dialog.user.actions.unfriend') }}
</DropdownMenuItem>
</template>
@@ -221,30 +221,29 @@
<script setup>
import {
ChatDotRound,
ChatLineRound,
Check,
CircleCheck,
CircleClose,
Close,
DataLine,
Delete,
Edit,
CheckCircle,
Flag,
Message,
Microphone,
Mute,
Operation,
LineChart,
Mail,
MessageCircle,
MessageSquare,
Mic,
MoreHorizontal,
MousePointer,
Pencil,
Plus,
Pointer,
Postcard,
Refresh,
Share,
SwitchButton,
Power,
RefreshCw,
Settings,
Share2,
Star,
Trash2,
User,
UserFilled
} from '@element-plus/icons-vue';
import { MoreHorizontal as Ellipsis, Star } from 'lucide-vue-next';
VolumeX,
X,
XCircle
} from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { computed } from 'vue';
import { storeToRefs } from 'pinia';
@@ -96,7 +96,7 @@
:style="{ color: user.$userColour }"
v-text="user.displayName"></span>
<span v-if="user.location === 'traveling'" class="extra">
<el-icon class="is-loading" style="margin-right: 3px"><Loading /></el-icon>
<Loader2 class="is-loading" style="margin-right: 3px" />
<Timer :epoch="user.$travelingToTime" />
</span>
<span v-else class="extra">
@@ -173,7 +173,7 @@
"
side="top"
:content="t('dialog.user.info.vrcplus_hides_avatar')">
<el-icon><Warning /></el-icon>
<AlertTriangle />
</TooltipWrapper>
</div>
</div>
@@ -289,7 +289,7 @@
<span class="name">
{{ t('dialog.user.info.last_seen') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span class="extra">{{ formatDateFilter(userDialog.lastSeen, 'long') }}</span>
@@ -304,14 +304,14 @@
<div>
{{ t('dialog.user.info.join_count') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</div>
<TooltipWrapper
side="top"
:content="t('dialog.user.info.open_previous_instance')">
<el-icon style="margin-right: 16px"><MoreFilled /></el-icon>
<MoreHorizontal style="margin-right: 16px" />
</TooltipWrapper>
</div>
<span v-if="userDialog.joinCount === 0" class="extra">-</span>
@@ -324,7 +324,7 @@
<span class="name">
{{ t('dialog.user.info.time_together') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span v-if="userDialog.timeSpent === 0" class="extra">-</span>
@@ -342,7 +342,7 @@
<span class="name">
{{ t('dialog.user.info.play_time') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span v-if="userDialog.timeSpent === 0" class="extra">-</span>
@@ -362,13 +362,13 @@
class="name">
{{ t('dialog.user.info.online_for') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span v-else class="name">
{{ t('dialog.user.info.offline_for') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span class="extra">{{ userOnlineFor(userDialog.ref) }}</span>
@@ -415,13 +415,13 @@
<span v-if="userDialog.unFriended" class="name">
{{ t('dialog.user.info.unfriended') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span v-else class="name">
{{ t('dialog.user.info.friended') }}
<TooltipWrapper side="top" :content="t('dialog.user.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
<AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span class="extra">{{ formatDateFilter(userDialog.dateFriended, 'long') }}</span>
@@ -562,7 +562,7 @@
:disabled="userDialog.isMutualFriendsLoading"
@click="getUserMutualFriends(userDialog.id)">
<Spinner v-if="userDialog.isMutualFriendsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="margin-left: 5px">{{
t('dialog.user.groups.total_count', { count: userDialog.mutualFriends.length })
@@ -599,7 +599,7 @@
color: #f56c6c;
cursor: pointer;
">
<el-icon style="margin-right: 5px"><Warning /></el-icon>
<AlertTriangle style="margin-right: 5px" />
<span>Mutual Friends unavailable due to VRChat staged rollout, click for more info</span>
</div>
<ul
@@ -633,7 +633,7 @@
:disabled="userDialog.isGroupsLoading"
@click="getUserGroups(userDialog.id)">
<Spinner v-if="userDialog.isGroupsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="margin-left: 5px">{{
t('dialog.user.groups.total_count', { count: userGroups.groups.length })
@@ -771,14 +771,14 @@
variant="outline"
style="display: block; padding: 7px; font-size: 9px; margin-left: 0"
@click="moveGroupUp(group.id)">
<Top />
<ArrowUp />
</Button>
<Button
size="icon-sm"
variant="outline"
style="display: block; padding: 7px; font-size: 9px; margin-left: 0"
@click="moveGroupDown(group.id)">
<Bottom />
<ArrowDown />
</Button>
</div>
<div class="avatar">
@@ -791,7 +791,7 @@
v-if="group.isRepresenting"
side="top"
:content="t('dialog.group.members.representing')">
<el-icon style="margin-right: 5px"><CollectionTag /></el-icon>
<Tag style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="group.myMember?.visibility !== 'visible'" side="top">
<template #content>
@@ -800,7 +800,7 @@
{{ group.myMember.visibility }}</span
>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<span>({{ group.memberCount }})</span>
</span>
@@ -840,11 +840,11 @@
setGroupSubscription(group.id, !group.myMember.isSubscribedToAnnouncements)
">
<span v-if="group.myMember.isSubscribedToAnnouncements"
><el-icon style="margin-left: 5px"><MuteNotification /></el-icon>
><BellOff style="margin-left: 5px" />
{{ t('dialog.group.tags.subscribed') }}</span
>
<span v-else
><el-icon style="margin-left: 5px"><Bell /></el-icon>
><Bell style="margin-left: 5px" />
{{ t('dialog.group.tags.unsubscribed') }}</span
>
</Button> -->
@@ -899,7 +899,7 @@
v-if="group.isRepresenting"
side="top"
:content="t('dialog.group.members.representing')">
<el-icon style="margin-right: 5px"><CollectionTag /></el-icon>
<Tag style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="group.memberVisibility !== 'visible'" side="top">
<template #content>
@@ -908,7 +908,7 @@
{{ group.memberVisibility }}</span
>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<span>({{ group.memberCount }})</span>
</span>
@@ -942,7 +942,7 @@
v-if="group.isRepresenting"
side="top"
:content="t('dialog.group.members.representing')">
<el-icon style="margin-right: 5px"><CollectionTag /></el-icon>
<Tag style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="group.memberVisibility !== 'visible'" side="top">
<template #content>
@@ -951,7 +951,7 @@
{{ group.memberVisibility }}</span
>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<span>({{ group.memberCount }})</span>
</span>
@@ -993,7 +993,7 @@
v-if="group.isRepresenting"
side="top"
:content="t('dialog.group.members.representing')">
<el-icon style="margin-right: 5px"><CollectionTag /></el-icon>
<Tag style="margin-right: 5px" />
</TooltipWrapper>
<TooltipWrapper v-if="group.memberVisibility !== 'visible'" side="top">
<template #content>
@@ -1002,7 +1002,7 @@
{{ group.memberVisibility }}</span
>
</template>
<el-icon style="margin-right: 5px"><View /></el-icon>
<Eye style="margin-right: 5px" />
</TooltipWrapper>
<span>({{ group.memberCount }})</span>
</span>
@@ -1024,7 +1024,7 @@
:disabled="userDialog.isWorldsLoading"
@click="refreshUserDialogWorlds()">
<Spinner v-if="userDialog.isWorldsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="margin-left: 5px">{{
t('dialog.user.worlds.total_count', { count: userDialog.worlds.length })
@@ -1094,7 +1094,7 @@
type="default"
:loading="userDialog.isFavoriteWorldsLoading"
size="small"
:icon="Refresh"
:icon="RefreshCw"
circle
style="position: absolute; right: 15px; bottom: 15px; z-index: 99"
@click="getUserFavoriteWorlds(userDialog.id)">
@@ -1166,7 +1166,7 @@
:disabled="userDialog.isAvatarsLoading"
@click="refreshUserDialogAvatars()">
<Spinner v-if="userDialog.isAvatarsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<Button
v-else
@@ -1176,7 +1176,7 @@
:disabled="userDialog.isAvatarsLoading"
@click="setUserDialogAvatarsRemote(userDialog.id)">
<Spinner v-if="userDialog.isAvatarsLoading" />
<Refresh v-else />
<RefreshCw v-else />
</Button>
<span style="margin-left: 5px">{{
t('dialog.user.avatars.total_count', { count: userDialogAvatars.length })
@@ -1299,16 +1299,18 @@
<script setup>
import {
Bottom,
CollectionTag,
Download as DownloadIcon,
Loading,
MoreFilled,
Refresh,
Top,
View,
Warning
} from '@element-plus/icons-vue';
AlertTriangle,
ArrowDown,
ArrowUp,
Download,
Eye,
Loader2,
LogOut,
MoreHorizontal,
RefreshCcw,
RefreshCw,
Tag
} from 'lucide-vue-next';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { computed, defineAsyncComponent, nextTick, ref, watch } from 'vue';
import {
@@ -1317,7 +1319,6 @@
DropdownMenuItem,
DropdownMenuTrigger
} from '@/components/ui/dropdown-menu';
import { Download, LogOut, RefreshCcw } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { Checkbox } from '@/components/ui/checkbox';
import { Spinner } from '@/components/ui/spinner';
@@ -1800,19 +1801,19 @@
if (D.visible === false) {
return;
}
if (command === 'Refresh') {
if (command === 'RefreshCw') {
showUserDialog(D.id);
} else if (command === 'Share') {
} else if (command === 'Share2') {
copyUserURL(D.id);
} else if (command === 'Add Favorite') {
showFavoriteDialog('friend', D.id);
} else if (command === 'Edit Social Status') {
} else if (command === 'Pencil Social Status') {
showSocialStatusDialog();
} else if (command === 'Edit Language') {
} else if (command === 'Pencil Language') {
showLanguageDialog();
} else if (command === 'Edit Bio') {
} else if (command === 'Pencil Bio') {
showBioDialog();
} else if (command === 'Edit Pronouns') {
} else if (command === 'Pencil Pronouns') {
showPronounsDialog();
} else if (command === 'Logout') {
logout();
@@ -1828,7 +1829,7 @@
toast('Request invite sent');
return args;
});
} else if (command === 'Invite Message') {
} else if (command === 'Invite MessageSquare') {
L = parseLocation(lastLocation.value.location);
worldRequest
.getCachedWorld({
@@ -1844,7 +1845,7 @@
D.id
);
});
} else if (command === 'Request Invite Message') {
} else if (command === 'Request Invite MessageSquare') {
showSendInviteRequestDialog(
{
platform: 'standalonewindows'
@@ -1909,7 +1910,7 @@
} else {
setPlayerModeration(D.id, 5);
}
} else if (command === 'Edit Note Memo') {
} else if (command === 'Pencil Note Memo') {
isEditNoteAndMemoDialogVisible.value = true;
} else {
const i18nPreFix = 'dialog.user.actions.';
@@ -2003,7 +2004,7 @@
let args;
let key;
switch (command) {
case 'Delete Favorite':
case 'Trash2 Favorite':
favoriteRequest.deleteFavorite({
objectId: userId
});
@@ -2070,7 +2071,7 @@
});
handlePlayerModerationDelete(args);
break;
case 'Moderation Mute': {
case 'Moderation VolumeX': {
args = await playerModerationRequest.sendPlayerModeration({
moderated: userId,
type: 'mute'
@@ -40,7 +40,7 @@
>
</div>
</template>
<el-icon><CaretBottom /></el-icon>
<ChevronDown />
</TooltipWrapper>
</template>
<span
@@ -260,7 +260,7 @@
</template>
<script setup>
import { CaretBottom } from '@element-plus/icons-vue';
import { ChevronDown } from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
@@ -29,7 +29,7 @@
<script setup>
import { Button } from '@/components/ui/button';
import { Upload } from '@element-plus/icons-vue';
import { Upload } from 'lucide-vue-next';
import { ref } from 'vue';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
@@ -21,14 +21,12 @@
class="dialog-title"
style="margin-right: 5px; cursor: pointer"
@click="copyWorldName">
<el-icon
<Home
v-if="
currentUser.$homeLocation &&
currentUser.$homeLocation.worldId === worldDialog.id
"
style="margin-right: 5px"
><HomeFilled
/></el-icon>
style="margin-right: 5px" />
{{ worldDialog.ref.name }}
</span>
</div>
@@ -198,12 +196,12 @@
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem @click="worldDialogCommand('Refresh')">
<Refresh class="size-4" />
<DropdownMenuItem @click="worldDialogCommand('RefreshCw')">
<RefreshCw class="size-4" />
{{ t('dialog.world.actions.refresh') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Share')">
<Share class="size-4" />
<DropdownMenuItem @click="worldDialogCommand('Share2')">
<Share2 class="size-4" />
{{ t('dialog.world.actions.share') }}
</DropdownMenuItem>
<DropdownMenuSeparator />
@@ -212,7 +210,7 @@
{{ t('dialog.world.actions.new_instance') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('New Instance and Self Invite')">
<Message class="size-4" />
<MessageSquare class="size-4" />
{{
canOpenInstanceInGame
? t('dialog.world.actions.new_instance_and_open_ingame')
@@ -226,56 +224,56 @@
currentUser.$homeLocation.worldId === worldDialog.id
"
@click="worldDialogCommand('Reset Home')">
<MagicStick class="size-4" />
<Wand2 class="size-4" />
{{ t('dialog.world.actions.reset_home') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="worldDialogCommand('Make Home')">
<HomeFilled class="size-4" />
<Home class="size-4" />
{{ t('dialog.world.actions.make_home') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Previous Instances')">
<DataLine class="size-4" />
<LineChart class="size-4" />
{{ t('dialog.world.actions.show_previous_instances') }}
</DropdownMenuItem>
<template v-if="currentUser.id !== worldDialog.ref.authorId">
<DropdownMenuItem
:disabled="!worldDialog.hasPersistData"
@click="worldDialogCommand('Delete Persistent Data')">
@click="worldDialogCommand('Trash2 Persistent Data')">
<Upload class="size-4" />
{{ t('dialog.world.actions.delete_persistent_data') }}
</DropdownMenuItem>
</template>
<template v-else>
<DropdownMenuItem @click="worldDialogCommand('Rename')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.rename') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Change Description')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.change_description') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Change Capacity')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.change_capacity') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Change Recommended Capacity')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.change_recommended_capacity') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Change YouTube Preview')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.change_preview') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Change Tags')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.change_warnings_settings_tags') }}
</DropdownMenuItem>
<DropdownMenuItem @click="worldDialogCommand('Change Allowed Domains')">
<Edit class="size-4" />
<Pencil class="size-4" />
{{ t('dialog.world.actions.change_allowed_video_player_domains') }}
</DropdownMenuItem>
<DropdownMenuItem v-if="isWindows" @click="worldDialogCommand('Change Image')">
<Picture class="size-4" />
<Image class="size-4" />
{{ t('dialog.world.actions.change_image') }}
</DropdownMenuItem>
<DropdownMenuItem
@@ -291,21 +289,21 @@
worldDialog.ref?.tags?.includes('system_labs')
"
@click="worldDialogCommand('Unpublish')">
<View class="size-4" />
<Eye class="size-4" />
{{ t('dialog.world.actions.unpublish') }}
</DropdownMenuItem>
<DropdownMenuItem v-else @click="worldDialogCommand('Publish')">
<View class="size-4" />
<Eye class="size-4" />
{{ t('dialog.world.actions.publish_to_labs') }}
</DropdownMenuItem>
<DropdownMenuItem
:disabled="!worldDialog.hasPersistData"
@click="worldDialogCommand('Delete Persistent Data')">
@click="worldDialogCommand('Trash2 Persistent Data')">
<Upload class="size-4" />
{{ t('dialog.world.actions.delete_persistent_data') }}
</DropdownMenuItem>
<DropdownMenuItem variant="destructive" @click="worldDialogCommand('Delete')">
<Delete class="size-4" />
<DropdownMenuItem variant="destructive" @click="worldDialogCommand('Trash2')">
<Trash2 class="size-4" />
{{ t('dialog.world.actions.delete') }}
</DropdownMenuItem>
</template>
@@ -320,16 +318,16 @@
:unmount-on-hide="false"
@update:modelValue="worldDialogTabClick">
<template #Instances>
<div class="">
<el-icon><User /></el-icon>
<div>
<User />
{{ t('dialog.world.instances.public_count', { count: worldDialog.ref.publicOccupants }) }}
<el-icon style="margin-left: 10px"><UserFilled /></el-icon>
<User style="margin-left: 10px" />
{{
t('dialog.world.instances.private_count', {
count: worldDialog.ref.privateOccupants
})
}}
<el-icon style="margin-left: 10px"><Check /></el-icon>
<Check style="margin-left: 10px" />
{{
t('dialog.world.instances.capacity_count', {
count: worldDialog.ref.recommendedCapacity,
@@ -419,9 +417,7 @@
:style="{ color: user.$userColour }"
v-text="user.displayName" />
<span v-if="user.location === 'traveling'" class="extra">
<el-icon class="is-loading" style="margin-right: 3px"
><Loading
/></el-icon>
<Loader2 class="is-loading" style="margin-right: 3px" />
<Timer :epoch="user.$travelingToTime" />
</span>
<span v-else class="extra">
@@ -615,7 +611,7 @@
{{ timeInLab }}
</span>
</template>
<el-icon><ArrowDown /></el-icon>
<ArrowDown />
</TooltipWrapper>
<span class="extra">
{{ formatDateFilter(worldDialog.ref.publicationDate, 'long') }}
@@ -664,33 +660,7 @@
<span class="name">
{{ t('dialog.world.info.last_visited') }}
<TooltipWrapper side="top" :content="t('dialog.world.info.accuracy_notice')"
><el-icon style="margin-left: 3px"><Warning /></el-icon
></TooltipWrapper>
</span>
<span class="extra">{{ formatDateFilter(worldDialog.lastVisit, 'long') }}</span>
</div>
</div>
<TooltipWrapper side="top" :content="t('dialog.user.info.open_previous_instance')">
<div class="x-friend-item" @click="showPreviousInstancesWorldDialog(worldDialog.ref)">
<div class="detail">
<span class="name">
{{ t('dialog.world.info.visit_count') }}
<TooltipWrapper side="top" :content="t('dialog.world.info.accuracy_notice')"
><el-icon style="margin-left: 3px"><Warning /></el-icon
></TooltipWrapper>
</span>
<span class="extra">
{{ worldDialog.visitCount }}
</span>
</div>
</div>
</TooltipWrapper>
<div class="x-friend-item" style="cursor: default">
<div class="detail">
<span class="name"
>{{ t('dialog.world.info.time_spent') }}
<TooltipWrapper side="top" :content="t('dialog.world.info.accuracy_notice')">
<el-icon style="margin-left: 3px"><Warning /></el-icon>
><AlertTriangle style="margin-left: 3px" />
</TooltipWrapper>
</span>
<span class="extra">
@@ -747,28 +717,29 @@
<script setup>
import {
AlertTriangle,
ArrowDown,
Check,
DataLine,
Delete,
Download,
Edit,
Ellipsis,
Eye,
Flag,
HomeFilled,
Loading,
MagicStick,
Message,
Picture,
Refresh,
Share,
Home,
Image,
LineChart,
Loader2,
MessageSquare,
Pencil,
RefreshCcw,
RefreshCw,
Share2,
Star,
Trash2,
Upload,
User,
UserFilled,
View,
Warning
} from '@element-plus/icons-vue';
Wand2
} from 'lucide-vue-next';
import { computed, defineAsyncComponent, nextTick, ref, watch } from 'vue';
import { Ellipsis, RefreshCcw, Star, Trash2 } from 'lucide-vue-next';
import { Button } from '@/components/ui/button';
import { ElMessageBox } from 'element-plus';
import { InputGroupTextareaField } from '@/components/ui/input-group';
@@ -993,13 +964,13 @@
return;
}
switch (command) {
case 'Delete Favorite':
case 'Trash2 Favorite':
case 'Make Home':
case 'Reset Home':
case 'Publish':
case 'Unpublish':
case 'Delete Persistent Data':
case 'Delete':
case 'Trash2 Persistent Data':
case 'Trash2':
modalStore
.confirm({
description: `Continue? ${command}`,
@@ -1008,7 +979,7 @@
.then(({ ok }) => {
if (!ok) return;
switch (command) {
case 'Delete Favorite':
case 'Trash2 Favorite':
favoriteRequest.deleteFavorite({
objectId: D.id
});
@@ -1053,7 +1024,7 @@
return args;
});
break;
case 'Delete Persistent Data':
case 'Trash2 Persistent Data':
miscRequest
.deleteWorldPersistData({
worldId: D.id
@@ -1066,7 +1037,7 @@
return args;
});
break;
case 'Delete':
case 'Trash2':
worldRequest
.deleteWorld({
worldId: D.id
@@ -1096,7 +1067,7 @@
case 'Previous Instances':
showPreviousInstancesWorldDialog(D.ref);
break;
case 'Share':
case 'Share2':
copyWorldUrl();
break;
case 'Change Allowed Domains':
@@ -1111,7 +1082,7 @@
case 'Change Image':
showChangeWorldImageDialog();
break;
case 'Refresh':
case 'RefreshCw':
showWorldDialog(D.id);
break;
case 'New Instance':