mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-02 13:06:08 +02:00
replace remixicon
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<Select :model-value="sortFavorites" @update:modelValue="handleSortFavoritesChange">
|
||||
<SelectTrigger size="sm" class="favorites-toolbar__select">
|
||||
<span class="flex items-center gap-2">
|
||||
<i class="ri-sort-asc"></i>
|
||||
<ArrowUpDown class="h-4 w-4" />
|
||||
<SelectValue
|
||||
:placeholder="t('view.settings.appearance.appearance.sort_favorite_by_name')" />
|
||||
</span>
|
||||
@@ -166,7 +166,7 @@
|
||||
<span
|
||||
v-if="group.visibility === visibility"
|
||||
class="group-visibility-menu__check">
|
||||
<i class="ri-check-line"></i>
|
||||
<Check class="h-3 w-3" />
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
@@ -526,7 +526,7 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, markRaw, nextTick, onBeforeMount, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue';
|
||||
import { Ellipsis, Loader, MoreHorizontal, Plus, RefreshCcw, RefreshCw } from 'lucide-vue-next';
|
||||
import { ArrowUpDown, Check, 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';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<Select :model-value="sortFavorites" @update:modelValue="handleSortFavoritesChange">
|
||||
<SelectTrigger size="sm" class="favorites-toolbar__select">
|
||||
<span class="flex items-center gap-2">
|
||||
<i class="ri-sort-asc"></i>
|
||||
<ArrowUpDown class="h-4 w-4" />
|
||||
<SelectValue
|
||||
:placeholder="t('view.settings.appearance.appearance.sort_favorite_by_name')" />
|
||||
</span>
|
||||
@@ -106,7 +106,10 @@
|
||||
<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>
|
||||
@@ -149,7 +152,13 @@
|
||||
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)
|
||||
">
|
||||
@@ -157,7 +166,7 @@
|
||||
<span
|
||||
v-if="group.visibility === visibility"
|
||||
class="group-visibility-menu__check">
|
||||
<i class="ri-check-line"></i>
|
||||
<Check class="h-3 w-3" />
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
@@ -301,10 +310,9 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, nextTick, onBeforeMount, onMounted, onUnmounted, ref, watch } from 'vue';
|
||||
import { MoreHorizontal, RefreshCw } from 'lucide-vue-next';
|
||||
import { ArrowUpDown, Check, Ellipsis, MoreHorizontal, RefreshCw } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { ElMessageBox } from 'element-plus';
|
||||
import { Ellipsis } from 'lucide-vue-next';
|
||||
import { InputGroupSearch } from '@/components/ui/input-group';
|
||||
import { Spinner } from '@/components/ui/spinner';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<Select :model-value="sortFavorites" @update:modelValue="handleSortFavoritesChange">
|
||||
<SelectTrigger size="sm" class="favorites-toolbar__select">
|
||||
<span class="flex items-center gap-2">
|
||||
<i class="ri-sort-asc"></i>
|
||||
<ArrowUpDown class="h-4 w-4" />
|
||||
<SelectValue
|
||||
:placeholder="t('view.settings.appearance.appearance.sort_favorite_by_name')" />
|
||||
</span>
|
||||
@@ -437,7 +437,7 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, nextTick, onBeforeMount, onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||
import { Ellipsis, MoreHorizontal, Plus, RefreshCcw, RefreshCw } from 'lucide-vue-next';
|
||||
import { ArrowUpDown, 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';
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
v-if="favorite.deleted"
|
||||
side="top"
|
||||
:content="t('view.favorite.unavailable_tooltip')">
|
||||
<i class="ri-error-warning-line"></i>
|
||||
<AlertTriangle class="h-4 w-4" />
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper
|
||||
v-if="!isLocalFavorite && favorite.ref?.releaseStatus === 'private'"
|
||||
side="top"
|
||||
:content="t('view.favorite.private')">
|
||||
<i class="ri-lock-line"></i>
|
||||
<Lock class="h-4 w-4" />
|
||||
</TooltipWrapper>
|
||||
</span>
|
||||
</div>
|
||||
@@ -57,7 +57,7 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handlePrimaryDeleteAction">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
@@ -73,8 +73,8 @@
|
||||
:disabled="currentUser.currentAvatar === favorite.id"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="selectAvatarWithConfirmation(favorite.id)"
|
||||
><i class="ri-check-line"></i
|
||||
></Button>
|
||||
><Check class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
<div class="favorites-search-card__action">
|
||||
@@ -87,8 +87,8 @@
|
||||
variant="destructive"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handlePrimaryDeleteAction"
|
||||
><i class="ri-delete-bin-line"></i
|
||||
></Button>
|
||||
><Trash2 class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper v-else side="bottom" :content="t('view.favorite.edit_favorite_tooltip')">
|
||||
<Button
|
||||
@@ -96,8 +96,8 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="showFavoriteDialog('avatar', favorite.id)"
|
||||
><i class="ri-star-line"></i
|
||||
></Button>
|
||||
><Star class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
</div>
|
||||
@@ -118,7 +118,7 @@
|
||||
size="icon-sm"
|
||||
variant="outline"
|
||||
@click.stop="handlePrimaryDeleteAction">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -127,6 +127,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { AlertTriangle, Check, Lock, Star, Trash2 } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Checkbox } from '@/components/ui/checkbox';
|
||||
import { computed } from 'vue';
|
||||
|
||||
@@ -21,8 +21,9 @@
|
||||
:disabled="currentUser.currentAvatar === favorite.id"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="selectAvatarWithConfirmation(favorite.id)">
|
||||
<i class="ri-check-line"></i
|
||||
></Button>
|
||||
<Check class="h-4 w-4" />
|
||||
></Button
|
||||
>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
<div class="favorites-search-card__action">
|
||||
@@ -33,14 +34,14 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="showFavoriteDialog('avatar', favorite.id)">
|
||||
<i class="ri-star-line"></i>
|
||||
<Star class="h-4 w-4" />
|
||||
</Button>
|
||||
<Button
|
||||
v-else
|
||||
size="icon-sm"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="showFavoriteDialog('avatar', favorite.id)">
|
||||
<i class="ri-star-line"></i>
|
||||
<Star class="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handleDeleteFavorite">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
@@ -53,8 +53,8 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="showFavoriteDialog('friend', favorite.id)"
|
||||
><i class="ri-star-line"></i
|
||||
></Button>
|
||||
><Star class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
</template>
|
||||
@@ -74,7 +74,7 @@
|
||||
size="icon-sm"
|
||||
variant="outline"
|
||||
@click.stop="handleDeleteFavorite">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -83,6 +83,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Star, Trash2 } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Checkbox } from '@/components/ui/checkbox';
|
||||
import { computed } from 'vue';
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<DropdownMenu v-model:open="moveDropdownOpen" style="margin-left: 5px">
|
||||
<DropdownMenuTrigger as-child>
|
||||
<Button class="rounded-full w-6 h-6 text-xs" size="icon-sm" variant="ghost"
|
||||
><i class="ri-arrow-left-line"></i
|
||||
></Button>
|
||||
><ArrowLeft class="h-4 w-4"
|
||||
/></Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent class="favorites-dropdown">
|
||||
<span style="font-weight: bold; display: block; text-align: center">
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, ref } from 'vue';
|
||||
import { ArrowLeft } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { toast } from 'vue-sonner';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
<span
|
||||
v-if="favorite.deleted || favorite.ref.releaseStatus === 'private'"
|
||||
class="favorites-search-card__badges">
|
||||
<i
|
||||
<AlertTriangle
|
||||
v-if="favorite.deleted"
|
||||
:title="t('view.favorite.unavailable_tooltip')"
|
||||
class="ri-error-warning-line"></i>
|
||||
<i
|
||||
class="h-4 w-4" />
|
||||
<Lock
|
||||
v-if="favorite.ref.releaseStatus === 'private'"
|
||||
:title="t('view.favorite.private')"
|
||||
class="ri-lock-line"></i>
|
||||
class="h-4 w-4" />
|
||||
</span>
|
||||
</div>
|
||||
<span class="extra">
|
||||
@@ -55,7 +55,7 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handleDeleteFavorite">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -69,8 +69,8 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="newInstanceSelfInvite(favorite.id)"
|
||||
><i class="ri-mail-line"></i
|
||||
></Button>
|
||||
><Mail class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
<div class="favorites-search-card__action">
|
||||
@@ -83,8 +83,8 @@
|
||||
variant="destructive"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handleDeleteFavorite"
|
||||
><i class="ri-delete-bin-line"></i
|
||||
></Button>
|
||||
><Trash2 class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper v-else side="top" :content="t('view.favorite.edit_favorite_tooltip')">
|
||||
<Button
|
||||
@@ -92,8 +92,8 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="showFavoriteDialog('world', favorite.id)"
|
||||
><i class="ri-star-line"></i
|
||||
></Button>
|
||||
><Star class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
</div>
|
||||
@@ -105,10 +105,10 @@
|
||||
<div class="favorites-search-card__avatar is-empty"></div>
|
||||
<div class="favorites-search-card__detail" v-once>
|
||||
<span>{{ favorite.name || favorite.id }}</span>
|
||||
<i
|
||||
<AlertTriangle
|
||||
v-if="favorite.deleted"
|
||||
:title="t('view.favorite.unavailable_tooltip')"
|
||||
class="ri-error-warning-line"></i>
|
||||
class="h-4 w-4" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="favorites-search-card__actions">
|
||||
@@ -118,7 +118,7 @@
|
||||
size="icon-sm"
|
||||
variant="outline"
|
||||
@click.stop="handleDeleteFavorite">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -127,6 +127,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { AlertTriangle, Lock, Mail, Star, Trash2 } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Checkbox } from '@/components/ui/checkbox';
|
||||
import { computed } from 'vue';
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
:variant="shiftHeld ? 'destructive' : 'outline'"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handlePrimaryDeleteAction">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -51,8 +51,8 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="newInstanceSelfInvite(favorite.id)"
|
||||
><i class="ri-mail-line"></i
|
||||
></Button>
|
||||
><Mail class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
<div class="favorites-search-card__action">
|
||||
@@ -65,8 +65,8 @@
|
||||
variant="destructive"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="handleDeleteFavorite"
|
||||
><i class="ri-delete-bin-line"></i
|
||||
></Button>
|
||||
><Trash2 class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper v-else side="top" :content="t('view.favorite.edit_favorite_tooltip')">
|
||||
<Button
|
||||
@@ -74,8 +74,8 @@
|
||||
variant="outline"
|
||||
class="favorites-search-card__action-btn rounded-full text-xs h-6 w-6"
|
||||
@click.stop="showFavoriteDialog('world', favorite.id)"
|
||||
><i class="ri-star-line"></i
|
||||
></Button>
|
||||
><Star class="h-4 w-4"
|
||||
/></Button>
|
||||
</TooltipWrapper>
|
||||
</div>
|
||||
</div>
|
||||
@@ -96,7 +96,7 @@
|
||||
size="icon-sm"
|
||||
variant="outline"
|
||||
@click.stop="handleDeleteFavorite">
|
||||
<i class="ri-delete-bin-line"></i>
|
||||
<Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -105,6 +105,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Mail, Star, Trash2 } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { computed } from 'vue';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ArrowUpDown } from 'lucide-vue-next';
|
||||
import { ArrowUpDown, UserMinus } from 'lucide-vue-next';
|
||||
|
||||
import { Button } from '../../components/ui/button';
|
||||
import { Checkbox } from '../../components/ui/checkbox';
|
||||
@@ -154,9 +154,7 @@ export const createColumns = ({
|
||||
}),
|
||||
size: 100,
|
||||
sortingFn: sortByNumber((row) => row?.$friendNumber ?? 0),
|
||||
cell: ({ row }) => (
|
||||
<span>{row.original?.$friendNumber || ''}</span>
|
||||
)
|
||||
cell: ({ row }) => <span>{row.original?.$friendNumber || ''}</span>
|
||||
},
|
||||
{
|
||||
id: 'avatar',
|
||||
@@ -292,10 +290,7 @@ export const createColumns = ({
|
||||
{(row.original?.bioLinks ?? [])
|
||||
.filter(Boolean)
|
||||
.map((link, index) => (
|
||||
<TooltipWrapper
|
||||
key={index}
|
||||
content={String(link)}
|
||||
>
|
||||
<TooltipWrapper key={index} content={String(link)}>
|
||||
<img
|
||||
src={getFaviconUrl(link)}
|
||||
class="h-4 w-4 mr-1 align-middle cursor-pointer"
|
||||
@@ -425,13 +420,14 @@ export const createColumns = ({
|
||||
class: 'text-center'
|
||||
},
|
||||
cell: ({ row }) => (
|
||||
<i
|
||||
class="ri-user-unfollow-line text-destructive"
|
||||
// TODO(icon): verify unfollow icon replacement
|
||||
<UserMinus
|
||||
class="h-4 w-4 text-destructive inline-block"
|
||||
onClick={(event) => {
|
||||
event.stopPropagation();
|
||||
onConfirmDeleteFriend?.(row.original?.id);
|
||||
}}
|
||||
></i>
|
||||
/>
|
||||
)
|
||||
}
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
TooltipProvider,
|
||||
TooltipTrigger
|
||||
} from '../../components/ui/tooltip';
|
||||
import { ArrowRight, ArrowUpDown } from 'lucide-vue-next';
|
||||
import { ArrowRight, ArrowUpDown, Trash2, X } from 'lucide-vue-next';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
import { formatDateFilter } from '../../shared/utils';
|
||||
@@ -136,13 +136,11 @@ export const createColumns = ({ onDelete, onDeletePrompt }) => {
|
||||
: onDeletePrompt(original)
|
||||
}
|
||||
>
|
||||
<i
|
||||
class={
|
||||
shiftHeld.value
|
||||
? 'ri-close-line text-red-600'
|
||||
: 'ri-delete-bin-line'
|
||||
}
|
||||
/>
|
||||
{shiftHeld.value ? (
|
||||
<X class="h-4 w-4 text-red-600" />
|
||||
) : (
|
||||
<Trash2 class="h-4 w-4" />
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</div>
|
||||
<div class="friend-card__body">
|
||||
<div class="friend-card__signature" :title="friend.ref?.statusDescription">
|
||||
<i v-if="friend.ref?.statusDescription" class="ri-pencil-line mr-0.5" style="opacity: 0.7"></i>
|
||||
<Pencil v-if="friend.ref?.statusDescription" class="h-3.5 w-3.5 mr-0.5" style="opacity: 0.7" />
|
||||
{{ friend.ref?.statusDescription || ' ' }}
|
||||
</div>
|
||||
<div v-if="displayInstanceInfo" @click.stop class="friend-card__world" :title="friend.worldName">
|
||||
@@ -26,8 +26,9 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
import { Card } from '@/components/ui/card';
|
||||
import { Pencil } from 'lucide-vue-next';
|
||||
import { computed } from 'vue';
|
||||
|
||||
import { userImage, userStatusClass } from '../../../shared/utils';
|
||||
import { useUserStore } from '../../../stores';
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
TooltipProvider,
|
||||
TooltipTrigger
|
||||
} from '../../components/ui/tooltip';
|
||||
import { ArrowUpDown } from 'lucide-vue-next';
|
||||
import { ArrowUpDown, FileText, Trash2, X } from 'lucide-vue-next';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
import { formatDateFilter, openExternalLink } from '../../shared/utils';
|
||||
@@ -268,13 +268,11 @@ export const createColumns = ({ getCreatedAt, onDelete, onDeletePrompt }) => {
|
||||
: onDeletePrompt(original)
|
||||
}
|
||||
>
|
||||
<i
|
||||
class={
|
||||
shiftHeld.value
|
||||
? 'ri-close-line text-red-600'
|
||||
: 'ri-delete-bin-line'
|
||||
}
|
||||
/>
|
||||
{shiftHeld.value ? (
|
||||
<X class="h-4 w-4 text-red-600" />
|
||||
) : (
|
||||
<Trash2 class="h-4 w-4" />
|
||||
)}
|
||||
</button>
|
||||
) : null}
|
||||
{canShowPrevious ? (
|
||||
@@ -290,7 +288,7 @@ export const createColumns = ({ getCreatedAt, onDelete, onDeletePrompt }) => {
|
||||
)
|
||||
}
|
||||
>
|
||||
<i class="ri-file-list-2-line" />
|
||||
<FileText class="h-4 w-4" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
|
||||
@@ -147,8 +147,8 @@
|
||||
variant="ghost"
|
||||
style="margin-left: 10px"
|
||||
@click.stop="clickDeleteSavedLogin(user.user.id)"
|
||||
><i class="ri-delete-bin-line h-3 w-3"></i
|
||||
></Button>
|
||||
><Trash2 class="h-3 w-3"
|
||||
/></Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -179,7 +179,7 @@
|
||||
<script setup>
|
||||
import { Field, FieldContent, FieldError, FieldGroup, FieldLabel } from '@/components/ui/field';
|
||||
import { onBeforeMount, onBeforeUnmount, ref, watch } from 'vue';
|
||||
import { CircleArrowDown, Route } from 'lucide-vue-next';
|
||||
import { CircleArrowDown, Route, Trash2 } from 'lucide-vue-next';
|
||||
import { Field as VeeField, useForm } from 'vee-validate';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { Button } from '@/components/ui/button';
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
TooltipProvider,
|
||||
TooltipTrigger
|
||||
} from '../../components/ui/tooltip';
|
||||
import { ArrowUpDown } from 'lucide-vue-next';
|
||||
import { ArrowUpDown, Trash2, X } from 'lucide-vue-next';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
import { formatDateFilter } from '../../shared/utils';
|
||||
@@ -143,13 +143,11 @@ export const createColumns = ({ onDelete, onDeletePrompt }) => {
|
||||
: onDeletePrompt(original)
|
||||
}
|
||||
>
|
||||
<i
|
||||
class={
|
||||
shiftHeld.value
|
||||
? 'ri-close-line text-red-600'
|
||||
: 'ri-delete-bin-line'
|
||||
}
|
||||
/>
|
||||
{shiftHeld.value ? (
|
||||
<X class="h-4 w-4 text-red-600" />
|
||||
) : (
|
||||
<Trash2 class="h-4 w-4" />
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -7,7 +7,18 @@ import {
|
||||
TooltipProvider,
|
||||
TooltipTrigger
|
||||
} from '../../components/ui/tooltip';
|
||||
import { ArrowUpDown } from 'lucide-vue-next';
|
||||
import {
|
||||
ArrowUpDown,
|
||||
Ban,
|
||||
BellOff,
|
||||
Check,
|
||||
Link,
|
||||
MessageCircle,
|
||||
Reply,
|
||||
Tag,
|
||||
Trash2,
|
||||
X
|
||||
} from 'lucide-vue-next';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
import { checkCanInvite, formatDateFilter } from '../../shared/utils';
|
||||
@@ -58,25 +69,23 @@ export const createColumns = ({
|
||||
);
|
||||
};
|
||||
|
||||
const getResponseIconClass = (response, notificationType) => {
|
||||
const getResponseIcon = (response, notificationType) => {
|
||||
if (response?.type === 'link') {
|
||||
return 'ri-link-m';
|
||||
return Link;
|
||||
}
|
||||
switch (response?.icon) {
|
||||
case 'check':
|
||||
return 'ri-check-line';
|
||||
return Check;
|
||||
case 'cancel':
|
||||
return 'ri-close-line';
|
||||
return X;
|
||||
case 'ban':
|
||||
return 'ri-forbid-2-line';
|
||||
return Ban;
|
||||
case 'bell-slash':
|
||||
return 'ri-notification-off-line';
|
||||
return BellOff;
|
||||
case 'reply':
|
||||
return notificationType === 'boop'
|
||||
? 'ri-chat-1-line'
|
||||
: 'ri-reply-line';
|
||||
return notificationType === 'boop' ? MessageCircle : Reply;
|
||||
default:
|
||||
return 'ri-price-tag-3-line';
|
||||
return Tag;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -532,7 +541,7 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i class="ri-check-line" />
|
||||
<Check class="h-4 w-4" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
@@ -555,7 +564,7 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i class="ri-chat-1-line" />
|
||||
<MessageCircle class="h-4 w-4" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
@@ -582,7 +591,7 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i class="ri-check-line" />
|
||||
<Check class="h-4 w-4" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
@@ -603,7 +612,7 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i class="ri-chat-1-line" />
|
||||
<MessageCircle class="h-4 w-4" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
@@ -641,11 +650,10 @@ export const createColumns = ({
|
||||
);
|
||||
};
|
||||
|
||||
const iconClass =
|
||||
getResponseIconClass(
|
||||
response,
|
||||
original.type
|
||||
);
|
||||
const ResponseIcon = getResponseIcon(
|
||||
response,
|
||||
original.type
|
||||
);
|
||||
|
||||
return (
|
||||
<TooltipProvider
|
||||
@@ -658,11 +666,7 @@ export const createColumns = ({
|
||||
class="inline-flex h-6 ml-1 items-center justify-center text-muted-foreground hover:text-foreground"
|
||||
onClick={onClick}
|
||||
>
|
||||
<i
|
||||
class={
|
||||
iconClass
|
||||
}
|
||||
/>
|
||||
<ResponseIcon class="h-4 w-4" />
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
@@ -693,11 +697,11 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i
|
||||
<X
|
||||
class={
|
||||
shiftHeld.value
|
||||
? 'ri-close-line text-red-600'
|
||||
: 'ri-close-line'
|
||||
? 'h-4 w-4 text-red-600'
|
||||
: 'h-4 w-4'
|
||||
}
|
||||
/>
|
||||
</button>
|
||||
@@ -726,13 +730,11 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i
|
||||
class={
|
||||
shiftHeld.value
|
||||
? 'ri-close-line text-red-600'
|
||||
: 'ri-delete-bin-line'
|
||||
}
|
||||
/>
|
||||
{shiftHeld.value ? (
|
||||
<X class="h-4 w-4 text-red-600" />
|
||||
) : (
|
||||
<Trash2 class="h-4 w-4" />
|
||||
)}
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
@@ -759,13 +761,11 @@ export const createColumns = ({
|
||||
)
|
||||
}
|
||||
>
|
||||
<i
|
||||
class={
|
||||
shiftHeld.value
|
||||
? 'ri-close-line text-red-600'
|
||||
: 'ri-delete-bin-line'
|
||||
}
|
||||
/>
|
||||
{shiftHeld.value ? (
|
||||
<X class="h-4 w-4 text-red-600" />
|
||||
) : (
|
||||
<Trash2 class="h-4 w-4" />
|
||||
)}
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="top">
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
</Badge>
|
||||
<TooltipWrapper v-if="currentInstanceWorld.isPC" side="top" content="PC">
|
||||
<Badge class="x-tag-platform-pc" variant="outline" style="margin-right: 5px"
|
||||
><i class="ri-computer-line"></i>
|
||||
><Monitor class="h-4 w-4" />
|
||||
<span
|
||||
v-if="currentInstanceWorld.bundleSizes['standalonewindows']"
|
||||
:class="['x-grey', 'x-tag-platform-pc', 'x-tag-border-left']"
|
||||
@@ -69,7 +69,7 @@
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper v-if="currentInstanceWorld.isQuest" side="top" content="Android">
|
||||
<Badge class="x-tag-platform-quest" variant="outline" style="margin-right: 5px"
|
||||
><i class="ri-android-line"></i>
|
||||
><Smartphone class="h-4 w-4" />
|
||||
<span
|
||||
v-if="currentInstanceWorld.bundleSizes['android']"
|
||||
:class="['x-grey', 'x-tag-platform-quest', 'x-tag-border-left']"
|
||||
@@ -79,7 +79,7 @@
|
||||
</TooltipWrapper>
|
||||
<TooltipWrapper v-if="currentInstanceWorld.isIos" side="top" content="iOS">
|
||||
<Badge class="x-tag-platform-ios" variant="outline" style="margin-right: 5px"
|
||||
><i class="ri-apple-line"></i>
|
||||
><Apple class="h-4 w-4" />
|
||||
<span
|
||||
v-if="currentInstanceWorld.bundleSizes['ios']"
|
||||
:class="['x-grey', 'x-tag-platform-ios', 'x-tag-border-left']"
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, defineAsyncComponent, onActivated, onMounted, ref, watch } from 'vue';
|
||||
import { Home } from 'lucide-vue-next';
|
||||
import { Apple, Home, Monitor, Smartphone } from 'lucide-vue-next';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
import Timer from '../../components/Timer.vue';
|
||||
import { Button } from '../../components/ui/button';
|
||||
import { TooltipWrapper } from '../../components/ui/tooltip';
|
||||
import { ArrowUpDown } from 'lucide-vue-next';
|
||||
import {
|
||||
Apple,
|
||||
ArrowUpDown,
|
||||
IdCard,
|
||||
Monitor,
|
||||
Smartphone
|
||||
} from 'lucide-vue-next';
|
||||
|
||||
import {
|
||||
getFaviconUrl,
|
||||
@@ -285,7 +291,7 @@ export const createColumns = ({
|
||||
) : null}
|
||||
{r?.ageVerified ? (
|
||||
<TooltipWrapper side="left" content="18+ Verified">
|
||||
<i class="ri-id-card-line x-tag-age-verification"></i>
|
||||
<IdCard class="h-4 w-4 x-tag-age-verification" />
|
||||
</TooltipWrapper>
|
||||
) : null}
|
||||
</div>
|
||||
@@ -304,11 +310,11 @@ export const createColumns = ({
|
||||
|
||||
const platformIcon =
|
||||
platform === 'standalonewindows' ? (
|
||||
<i class="ri-computer-line x-tag-platform-pc" />
|
||||
<Monitor class="h-4 w-4 x-tag-platform-pc" />
|
||||
) : platform === 'android' ? (
|
||||
<i class="ri-android-line x-tag-platform-quest" />
|
||||
<Smartphone class="h-4 w-4 x-tag-platform-quest" />
|
||||
) : platform === 'ios' ? (
|
||||
<i class="ri-apple-line x-tag-platform-ios" />
|
||||
<Apple class="h-4 w-4 x-tag-platform-ios" />
|
||||
) : platform ? (
|
||||
<span>{String(platform)}</span>
|
||||
) : null;
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
cursor: pointer;
|
||||
"
|
||||
@click="deleteChatboxUserBlacklist(user[0])">
|
||||
<i class="ri-close-line" style="font-size: 12px; line-height: 1"></i>
|
||||
<X class="h-3 w-3" style="line-height: 1" />
|
||||
</button>
|
||||
</Badge>
|
||||
</div>
|
||||
@@ -57,6 +57,7 @@
|
||||
<script setup>
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { InputGroupAction } from '@/components/ui/input-group';
|
||||
import { X } from 'lucide-vue-next';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
|
||||
@@ -159,10 +159,10 @@
|
||||
:long-label="true"
|
||||
@change="changeTranslationAPI('VRCX_translationAPI')" />
|
||||
<div class="options-container-item">
|
||||
<Button size="sm" variant="outline" @click="showTranslationApiDialog"
|
||||
><i class="ri-translate-2" style="margin-right: 5px"></i
|
||||
>{{ t('view.settings.advanced.advanced.translation_api.translation_api_key') }}</Button
|
||||
>
|
||||
<Button size="sm" variant="outline" @click="showTranslationApiDialog">
|
||||
<Languages class="h-4 w-4" style="margin-right: 5px" />
|
||||
{{ t('view.settings.advanced.advanced.translation_api.translation_api_key') }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="options-container">
|
||||
@@ -384,7 +384,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Folder, Package, RefreshCcw, Settings, Trash2 } from 'lucide-vue-next';
|
||||
import { Folder, Languages, Package, RefreshCcw, Settings, Trash2 } from 'lucide-vue-next';
|
||||
import { computed, reactive, ref } from 'vue';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { ButtonGroup } from '@/components/ui/button-group';
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
variant="ghost"
|
||||
class="mr-1 w-6 h-6 text-xs"
|
||||
@click.stop="$emit('confirm-delete-friend', friend.id)"
|
||||
><i class="ri-delete-bin-2-line"></i>
|
||||
><Trash2 class="h-4 w-4" />
|
||||
</Button>
|
||||
</template>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Loader2, AlertTriangle } from 'lucide-vue-next';
|
||||
import { AlertTriangle, Loader2, Trash2 } from 'lucide-vue-next';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { computed } from 'vue';
|
||||
import { storeToRefs } from 'pinia';
|
||||
|
||||
+29
-14
@@ -6,14 +6,16 @@
|
||||
<div class="tool-categories">
|
||||
<div class="tool-category">
|
||||
<div class="category-header" @click="toggleCategory('group')">
|
||||
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['group'] }" />
|
||||
<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']">
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showGroupCalendarDialog">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-calendar-event-line"></i>
|
||||
<CalendarDays />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.group.calendar') }}</div>
|
||||
@@ -26,14 +28,16 @@
|
||||
|
||||
<div class="tool-category">
|
||||
<div class="category-header" @click="toggleCategory('image')">
|
||||
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['image'] }" />
|
||||
<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']">
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showScreenshotMetadataPage">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-screenshot-2-line"></i>
|
||||
<Camera />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.pictures.screenshot') }}</div>
|
||||
@@ -46,7 +50,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showGalleryPage">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-multi-image-line"></i>
|
||||
<Images />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.pictures.inventory') }}</div>
|
||||
@@ -59,7 +63,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="openVrcPhotosFolder">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-folder-image-line"></i>
|
||||
<FolderOpen />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.pictures.pictures.vrc_photos') }}</div>
|
||||
@@ -72,7 +76,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="openVrcScreenshotsFolder">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-folder-image-line"></i>
|
||||
<FolderOpen />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">
|
||||
@@ -97,7 +101,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showExportDiscordNamesDialog">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-discord-line"></i>
|
||||
<MessageSquare />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.export.discord_names') }}</div>
|
||||
@@ -110,7 +114,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showNoteExportDialog">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-user-shared-line"></i>
|
||||
<UserCheck />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.export.export_notes') }}</div>
|
||||
@@ -124,7 +128,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showExportFriendsListDialog">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-user-shared-line"></i>
|
||||
<UserCheck />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.export.export_friend_list') }}</div>
|
||||
@@ -137,7 +141,7 @@
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showExportAvatarsListDialog">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-user-shared-line"></i>
|
||||
<UserCheck />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.export.export_own_avatars') }}</div>
|
||||
@@ -152,14 +156,16 @@
|
||||
|
||||
<div class="tool-category">
|
||||
<div class="category-header" @click="toggleCategory('other')">
|
||||
<ArrowRight class="rotation-transition" :class="{ 'is-rotated': !categoryCollapsed['other'] }" />
|
||||
<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']">
|
||||
<Card class="tool-card p-0 gap-0">
|
||||
<div class="tool-content" @click="showEditInviteMessageDialog">
|
||||
<div class="tool-icon">
|
||||
<i class="ri-edit-box-line"></i>
|
||||
<SquarePen />
|
||||
</div>
|
||||
<div class="tool-info">
|
||||
<div class="tool-name">{{ t('view.tools.other.edit_invite_message') }}</div>
|
||||
@@ -195,9 +201,18 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
ArrowRight,
|
||||
CalendarDays,
|
||||
Camera,
|
||||
FolderOpen,
|
||||
Images,
|
||||
MessageSquare,
|
||||
SquarePen,
|
||||
UserCheck
|
||||
} from 'lucide-vue-next';
|
||||
import { computed, defineAsyncComponent, ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { ArrowRight } from 'lucide-vue-next';
|
||||
import { Card } from '@/components/ui/card';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { toast } from 'vue-sonner';
|
||||
|
||||
Reference in New Issue
Block a user