This commit is contained in:
pa
2026-01-16 22:21:00 +09:00
committed by Natsumi
parent 093fe082f2
commit d55ee08a05
48 changed files with 264 additions and 473 deletions

View File

@@ -189,6 +189,7 @@
import InstanceActivityDetail from './InstanceActivityDetail.vue';
import * as echarts from 'echarts';
const appearanceSettingsStore = useAppearanceSettingsStore();

View File

@@ -166,6 +166,7 @@
import { database } from '../../../service/database';
import { userRequest } from '../../../api';
import configRepository from '../../../service/config';
import * as echarts from 'echarts';

View File

@@ -435,7 +435,7 @@
<div class="favorites-search-card__title">
<span class="name">{{ favorite.name }}</span>
</div>
<span class="extra">{{ favorite.authorName }}</span>
<span class="text-xs">{{ favorite.authorName }}</span>
</div>
</div>
</div>

View File

@@ -292,7 +292,7 @@
:traveling="favorite.travelingToLocation"
:link="false" />
</div>
<span v-else class="extra">{{ favorite.statusDescription }}</span>
<span v-else class="text-xs">{{ favorite.statusDescription }}</span>
</div>
</div>
</div>

View File

@@ -370,7 +370,7 @@
</div>
<div class="favorites-search-card__detail">
<span class="name">{{ favorite.name || favorite.id }}</span>
<span class="extra">
<span class="text-xs">
{{ favorite.authorName }}
<template v-if="favorite.occupants">
({{ favorite.occupants }})

View File

@@ -23,7 +23,7 @@
</TooltipWrapper>
</span>
</div>
<span class="extra">{{ localFavFakeRef.authorName }}</span>
<span class="text-xs">{{ localFavFakeRef.authorName }}</span>
</div>
</div>
<div class="favorites-search-card__actions">

View File

@@ -8,7 +8,7 @@
<div class="favorites-search-card__title">
<span class="name">{{ favorite.name }}</span>
</div>
<span class="extra">{{ favorite.authorName }}</span>
<span class="text-xs">{{ favorite.authorName }}</span>
</div>
</div>
<div class="favorites-search-card__actions">

View File

@@ -15,7 +15,7 @@
:traveling="favorite.ref.travelingToLocation"
:link="false" />
</div>
<span v-else class="extra">{{ favorite.ref.statusDescription }}</span>
<span v-else class="text-xs">{{ favorite.ref.statusDescription }}</span>
</div>
</div>
<div class="favorites-search-card__actions">

View File

@@ -29,7 +29,7 @@
class="h-4 w-4" />
</span>
</div>
<span class="extra">
<span class="text-xs">
{{ props.favorite.ref.authorName }}
<template v-if="props.favorite.ref.occupants"> ({{ props.favorite.ref.occupants }}) </template>
</span>

View File

@@ -14,7 +14,7 @@
<div class="favorites-search-card__title">
<span class="name">{{ props.favorite.name }}</span>
</div>
<span class="extra">
<span class="text-xs">
{{ props.favorite.authorName }}
<template v-if="props.favorite.occupants"> ({{ props.favorite.occupants }}) </template>
</span>

View File

@@ -135,9 +135,3 @@
table.setPageSize(size);
});
</script>
<style scoped>
.table-user {
color: var(--x-table-user-text-color) !important;
}
</style>

View File

@@ -210,9 +210,3 @@
table.setPageSize(size);
});
</script>
<style scoped>
.table-user {
color: var(--x-table-user-text-color);
}
</style>

View File

@@ -71,7 +71,7 @@
<template v-if="virtualRows[vRow.index]?.type === 'header'">
<header class="friend-view__instance-header">
<Location
class="extra"
class="text-xs"
:location="virtualRows[vRow.index].instanceId"
style="display: inline" />
<span class="friend-view__instance-count">{{ virtualRows[vRow.index].count }}</span>

View File

@@ -202,9 +202,3 @@
table.setPageSize(size);
});
</script>
<style scoped>
.table-user {
color: var(--x-table-user-text-color) !important;
}
</style>

View File

@@ -138,8 +138,8 @@
</div>
<div class="detail">
<span class="name" v-text="user.user.displayName"></span>
<span class="extra" v-text="user.user.username"></span>
<span class="extra" v-text="user.loginParams.endpoint"></span>
<span class="block truncate text-xs" v-text="user.user.username"></span>
<span class="block truncate text-xs" v-text="user.loginParams.endpoint"></span>
</div>
<Button
class="rounded-full"
@@ -310,3 +310,64 @@
{ deep: true }
);
</script>
<style scoped>
.x-login-container {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
}
.x-login {
display: grid;
grid-template-rows: repeat(2, auto);
align-items: center;
max-width: clamp(600px, 60svw, 800px);
}
.x-login-form-container {
display: grid;
gap: 8px;
height: 380px;
}
.x-login-form-container:has(> div:nth-child(3)) {
grid-template-columns: 1fr 1px 1fr;
}
.x-login-form-container > div {
display: flex;
flex-direction: column;
min-height: 0;
padding: 16px;
overflow-y: auto;
}
.x-scroll-wrapper {
width: 100%;
height: 100%;
overflow-y: auto;
}
hr.x-vertical-divider {
height: 100%;
width: 100%;
margin: 0;
border: 0;
}
.x-saved-account-list {
display: grid;
}
.x-saved-account-list > .x-friend-item {
width: 100%;
}
.x-legal-notice-container {
margin-top: 8px;
}
</style>

View File

@@ -507,7 +507,4 @@
border-radius: 4px;
object-fit: cover;
}
.table-user-text {
color: var(--x-table-user-text-color);
}
</style>

View File

@@ -78,11 +78,11 @@
</Badge>
</TooltipWrapper>
<TooltipWrapper v-if="currentInstanceWorld.isIos" side="top" content="iOS">
<Badge class="x-tag-platform-ios" variant="outline" style="margin-right: 5px"
><Apple class="h-4 w-4" />
<Badge class="text-[#8e8e93] border-[#8e8e93]" variant="outline" style="margin-right: 5px"
><Apple class="h-4 w-4 text-[#8e8e93]" />
<span
v-if="currentInstanceWorld.bundleSizes['ios']"
:class="['x-grey', 'x-tag-platform-ios', 'x-tag-border-left']"
:class="['x-grey', 'x-tag-border-left', 'text-[#8e8e93]', 'border-[#8e8e93]']"
>{{ currentInstanceWorld.bundleSizes['ios'].fileSize }}</span
>
</Badge>
@@ -110,7 +110,7 @@
<div style="margin-top: 5px">
<span
v-show="currentInstanceWorld.ref.name !== currentInstanceWorld.ref.description"
class="description"
class="inline-block max-w-full truncate align-middle text-xs"
v-text="currentInstanceWorld.ref.description"></span>
</div>
</div>
@@ -118,7 +118,7 @@
<div class="x-friend-item" style="cursor: default">
<div class="detail">
<span class="name">{{ t('dialog.world.info.capacity') }}</span>
<span class="extra"
<span class="block truncate text-xs"
>{{ commaNumber(currentInstanceWorld.ref.recommendedCapacity) }} ({{
commaNumber(currentInstanceWorld.ref.capacity)
}})</span
@@ -128,13 +128,13 @@
<div class="x-friend-item" style="cursor: default">
<div class="detail">
<span class="name">{{ t('dialog.world.info.last_updated') }}</span>
<span class="extra">{{ formatDateFilter(currentInstanceWorld.lastUpdated, 'long') }}</span>
<span class="block truncate text-xs">{{ formatDateFilter(currentInstanceWorld.lastUpdated, 'long') }}</span>
</div>
</div>
<div class="x-friend-item" style="cursor: default">
<div class="detail">
<span class="name">{{ t('dialog.world.info.created_at') }}</span>
<span class="extra">{{
<span class="block truncate text-xs">{{
formatDateFilter(currentInstanceWorld.ref.created_at, 'long')
}}</span>
</div>
@@ -309,15 +309,3 @@
getCurrentInstanceUserList();
});
</script>
<style>
.description {
font-size: 12px;
display: inline-block;
max-width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
}
</style>

View File

@@ -115,14 +115,7 @@ export const createColumns = ({
const style = randomUserColours?.value
? { color: userRef?.$userColour }
: null;
return (
<span
class="text-(--x-table-user-text-color)"
style={style}
>
{userRef?.displayName ?? ''}
</span>
);
return <span style={style}>{userRef?.displayName ?? ''}</span>;
}
},
{

View File

@@ -1,5 +1,5 @@
<template>
<div class="photon-event-table">
<div class="mt-5">
<div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px; flex-wrap: wrap">
<Select
:model-value="photonEventTableTypeFilter"

View File

@@ -43,12 +43,12 @@
<span class="name" v-text="user.displayName"></span>
<span
v-if="randomUserColours"
class="extra"
class="block truncate text-xs"
:class="user.$trustClass"
v-text="user.$trustLevel"></span>
<span
v-else
class="extra"
class="block truncate text-xs"
:style="{ color: user.$userColour }"
v-text="user.$trustLevel"></span>
</div>
@@ -111,10 +111,10 @@
</div>
<div class="detail">
<span class="name" v-text="world.name"></span>
<span v-if="world.occupants" class="extra"
<span v-if="world.occupants" class="block truncate text-xs"
>{{ world.authorName }} ({{ world.occupants }})</span
>
<span v-else class="extra" v-text="world.authorName"></span>
<span v-else class="block truncate text-xs" v-text="world.authorName"></span>
</div>
</div>
</div>
@@ -262,14 +262,14 @@
<span class="name" v-text="avatar.name"></span>
<span
v-if="avatar.releaseStatus === 'public'"
class="extra"
class="block truncate text-xs"
v-text="avatar.releaseStatus"></span>
<span
v-else-if="avatar.releaseStatus === 'private'"
class="extra"
class="block truncate text-xs"
v-text="avatar.releaseStatus"></span>
<span v-else class="extra" v-text="avatar.releaseStatus"></span>
<span class="extra" v-text="avatar.authorName"></span>
<span v-else class="block truncate text-xs" v-text="avatar.releaseStatus"></span>
<span class="block truncate text-xs" v-text="avatar.authorName"></span>
</div>
</div>
</div>
@@ -322,7 +322,7 @@
>{{ group.shortCode }}.{{ group.discriminator }}</span
>
</span>
<span class="extra" v-text="group.description"></span>
<span class="block truncate text-xs" v-text="group.description"></span>
</div>
</div>
</div>

View File

@@ -38,6 +38,7 @@
import { TabsUnderline } from '@/components/ui/tabs';
import { useI18n } from 'vue-i18n';
import AdvancedTab from './components/Tabs/AdvancedTab.vue';
import AppearanceTab from './components/Tabs/AppearanceTab.vue';
import DiscordPresenceTab from './components/Tabs/DiscordPresenceTab.vue';

View File

@@ -90,10 +90,10 @@
<div class="x-friend-item">
<div class="detail" @click="getVisits">
<span class="name">{{ t('view.profile.game_info.online_users') }}</span>
<span v-if="visits" class="extra">{{
<span v-if="visits" class="block truncate text-xs">{{
t('view.profile.game_info.user_online', { count: visits })
}}</span>
<span v-else class="extra">{{ t('view.profile.game_info.refresh') }}</span>
<span v-else class="block truncate text-xs">{{ t('view.profile.game_info.refresh') }}</span>
</div>
</div>
</div>

View File

@@ -356,49 +356,49 @@
:model-value="trustColor.untrusted"
:presets="['#CCCCCC']"
@change="updateTrustColor('untrusted', $event)" />
<span class="color-picker x-tag-untrusted">Visitor</span>
<span class="text-[18px] align-top x-tag-untrusted">Visitor</span>
</div>
<div>
<PresetColorPicker
:model-value="trustColor.basic"
:presets="['#1778ff']"
@change="updateTrustColor('basic', $event)" />
<span class="color-picker x-tag-basic">New User</span>
<span class="text-[18px] align-top x-tag-basic">New User</span>
</div>
<div>
<PresetColorPicker
:model-value="trustColor.known"
:presets="['#2bcf5c']"
@change="updateTrustColor('known', $event)" />
<span class="color-picker x-tag-known">User</span>
<span class="text-[18px] align-top x-tag-known">User</span>
</div>
<div>
<PresetColorPicker
:model-value="trustColor.trusted"
:presets="['#ff7b42']"
@change="updateTrustColor('trusted', $event)" />
<span class="color-picker x-tag-trusted">Known User</span>
<span class="text-[18px] align-top x-tag-trusted">Known User</span>
</div>
<div>
<PresetColorPicker
:model-value="trustColor.veteran"
:presets="['#b18fff', '#8143e6', '#ff69b4', '#b52626', '#ffd000', '#abcdef']"
@change="updateTrustColor('veteran', $event)" />
<span class="color-picker x-tag-veteran">Trusted User</span>
<span class="text-[18px] align-top x-tag-veteran">Trusted User</span>
</div>
<div>
<PresetColorPicker
:model-value="trustColor.vip"
:presets="['#ff2626']"
@change="updateTrustColor('vip', $event)" />
<span class="color-picker x-tag-vip">VRChat Team</span>
<span class="text-[18px] align-top x-tag-vip">VRChat Team</span>
</div>
<div>
<PresetColorPicker
:model-value="trustColor.troll"
:presets="['#782f2f']"
@change="updateTrustColor('troll', $event)" />
<span class="color-picker x-tag-troll">Nuisance</span>
<span class="text-[18px] align-top x-tag-troll">Nuisance</span>
</div>
</div>
</div>

View File

@@ -6,14 +6,14 @@
<div class="x-friend-item" style="cursor: default">
<div class="detail">
<span class="name">{{ t('view.settings.general.general.version') }}</span>
<span class="extra" v-text="appVersion"></span>
<span class="block truncate text-xs" v-text="appVersion"></span>
</div>
</div>
<div class="x-friend-item" @click="checkForVRCXUpdate">
<div class="detail">
<span class="name">{{ t('view.settings.general.general.latest_app_version') }}</span>
<span v-if="latestAppVersion" class="extra" v-text="latestAppVersion"></span>
<span v-else class="extra">{{
<span v-if="latestAppVersion" class="block truncate text-xs" v-text="latestAppVersion"></span>
<span v-else class="block truncate text-xs">{{
t('view.settings.general.general.latest_app_version_refresh')
}}</span>
</div>
@@ -21,13 +21,13 @@
<div class="x-friend-item" @click="openExternalLink(links.github)">
<div class="detail">
<span class="name">{{ t('view.settings.general.general.repository_url') }}</span>
<span v-once class="extra">{{ links.github }}</span>
<span v-once class="block truncate text-xs">{{ links.github }}</span>
</div>
</div>
<div class="x-friend-item" @click="openExternalLink(links.discord)">
<div class="detail">
<span class="name">{{ t('view.settings.general.general.support') }}</span>
<span v-once class="extra">{{ links.discord }}</span>
<span v-once class="block truncate text-xs">{{ links.discord }}</span>
</div>
</div>
</div>

View File

@@ -4,9 +4,9 @@
<DialogHeader>
<DialogTitle>{{ dialogTitle }}</DialogTitle>
</DialogHeader>
<div class="toggle-list" style="height: 75vh; overflow-y: auto">
<div v-for="setting in currentOptions" :key="setting.key" class="toggle-item">
<span class="toggle-name"
<div class="text-[15px] h-[75vh] overflow-y-auto">
<div v-for="setting in currentOptions" :key="setting.key" class="mb-[5px] flex items-center">
<span class="inline-block min-w-[190px] pr-2.5 text-right"
>{{ setting.name
}}<TooltipWrapper
v-if="setting.tooltip"
@@ -38,11 +38,14 @@
<template v-if="photonLoggingEnabled">
<br />
<div class="toggle-item">
<span class="toggle-name">Photon Event Logging</span>
<div class="mb-[5px] flex items-center">
<span class="inline-block min-w-[190px] pr-2.5 text-right">Photon Event Logging</span>
</div>
<div v-for="setting in photonFeedFiltersOptions" :key="setting.key" class="toggle-item">
<span class="toggle-name">{{ setting.name }}</span>
<div
v-for="setting in photonFeedFiltersOptions"
:key="setting.key"
class="mb-[5px] flex items-center">
<span class="inline-block min-w-[190px] pr-2.5 text-right">{{ setting.name }}</span>
<ToggleGroup
type="single"
required
@@ -154,11 +157,3 @@
emit('update:feedFiltersDialogMode', '');
}
</script>
<style scoped>
.toggle-list .toggle-item {
display: flex;
align-items: center;
margin-bottom: 8px;
}
</style>

View File

@@ -26,16 +26,16 @@
<span class="name" :style="{ color: item.ref.$userColour }">{{
item.ref.displayName
}}</span>
<span v-if="!item.ref.isFriend" class="extra"></span>
<span v-else-if="item.ref.state === 'offline'" class="extra">{{
<span v-if="!item.ref.isFriend" class="block truncate text-xs"></span>
<span v-else-if="item.ref.state === 'offline'" class="block truncate text-xs">{{
t('side_panel.search_result_active')
}}</span>
<span v-else-if="item.ref.state === 'active'" class="extra">{{
<span v-else-if="item.ref.state === 'active'" class="block truncate text-xs">{{
t('side_panel.search_result_offline')
}}</span>
<Location
v-else
class="extra"
class="text-xs"
:location="item.ref.location"
:traveling="item.ref.travelingToLocation"
:link="false" />
@@ -178,6 +178,16 @@
</script>
<style scoped>
.x-aside-container {
display: flex;
flex: none;
flex-direction: column;
padding: 13px 5px 5px 5px;
order: 99;
height: 100%;
box-sizing: border-box;
}
.sidebar-tab-count {
font-size: 12px;
margin-left: 10px;

View File

@@ -14,23 +14,23 @@
>{{ friend.ref.displayName }}{{ isGroupByInstance && friend.isVIP ? ' ⭐' : '' }}</span
>
<span v-if="isFriendActiveOrOffline" class="extra">{{ friend.ref.statusDescription }}</span>
<span v-if="isFriendActiveOrOffline" class="block truncate text-xs">{{ friend.ref.statusDescription }}</span>
<template v-else>
<div v-if="friend.pendingOffline" class="extra">
<div v-if="friend.pendingOffline" class="text-xs">
<AlertTriangle class="inline-block" /> {{ t('side_panel.pending_offline') }}
</div>
<template v-else-if="isGroupByInstance">
<div class="flex items-center">
<Loader2 v-if="isFriendTraveling" class="is-loading" style="margin-right: 3px" />
<Timer
class="extra"
class="text-xs"
:epoch="epoch"
:style="
isFriendTraveling ? { display: 'inline-block', overflow: 'unset' } : undefined
" />
</div>
</template>
<Location v-else class="extra" :location="locationProp" :traveling="travelingProp" :link="false" />
<Location v-else class="text-xs" :location="locationProp" :traveling="travelingProp" :link="false" />
</template>
</div>
</template>
@@ -89,23 +89,3 @@
const locationProp = computed(() => props.friend.ref?.location || '');
const travelingProp = computed(() => props.friend.ref?.travelingToLocation || '');
</script>
<style>
.skeleton {
height: 40px;
width: 100%;
& > div {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
& > div {
width: calc(100% - 48px);
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
}
}
}
</style>

View File

@@ -19,7 +19,7 @@
<span class="name" :style="{ color: currentUser.$userColour }">{{ currentUser.displayName }}</span>
<Location
v-if="isGameRunning && !gameLogDisabled"
class="extra"
class="text-xs"
:location="lastLocation.location"
:traveling="lastLocationDestination"
:link="false" />
@@ -27,12 +27,12 @@
v-else-if="
isRealInstance(currentUser.$locationTag) || isRealInstance(currentUser.$travelingToLocation)
"
class="extra"
class="text-xs"
:location="currentUser.$locationTag"
:traveling="currentUser.$travelingToLocation"
:link="false" />
<span v-else class="extra">{{ currentUser.statusDescription }}</span>
<span v-else class="text-xs">{{ currentUser.statusDescription }}</span>
</div>
</div>
</div>
@@ -54,8 +54,8 @@
<div v-for="group in vipFriendsDivideByGroup" :key="group[0].key">
<transition name="el-fade-in-linear">
<div v-show="group[0].groupName !== ''" style="margin-bottom: 3px">
<span class="extra">{{ group[0].groupName }}</span>
<span class="extra" style="margin-left: 5px">{{ `(${group.length})` }}</span>
<span class="text-xs">{{ group[0].groupName }}</span>
<span class="text-xs" style="margin-left: 5px">{{ `(${group.length})` }}</span>
</div>
</transition>
<div v-if="group.length" style="margin-bottom: 10px">
@@ -91,10 +91,10 @@
<div v-for="friendArr in friendsInSameInstance" :key="friendArr[0].ref.$location.tag">
<div class="mb-1 flex items-center">
<Location
class="extra text-muted-foreground!"
class="text-xs text-muted-foreground"
:location="getFriendsLocations(friendArr)"
style="display: inline" />
<span class="extra" style="margin-left: 5px">{{ `(${friendArr.length})` }}</span>
<span class="text-xs" style="margin-left: 5px">{{ `(${friendArr.length})` }}</span>
</div>
<div v-if="friendArr && friendArr.length">
<friend-item

View File

@@ -27,7 +27,7 @@
>({{ ref.instance.userCount }}/{{ ref.instance.capacity }})</span
>
</span>
<Location class="extra" :location="ref.instance.location" :link="false" />
<Location class="text-xs" :location="ref.instance.location" :link="false" />
</div>
</template>
</div>

View File

@@ -90,12 +90,12 @@
style="display: inline-block; margin-top: 10px; width: unset; cursor: default">
<template v-if="image.versions && image.versions.length > 0">
<div
class="vrcplus-icon"
class="h-[200px] w-[200px] rounded-[20px] overflow-hidden"
v-if="image.versions[image.versions.length - 1].file.url"
@click="setProfilePicOverride(image.id)"
:class="{ 'current-vrcplus-icon': compareCurrentProfilePic(image.id) }">
:class="compareCurrentProfilePic(image.id) ? 'cursor-default' : 'cursor-pointer'">
<img
class="avatar"
class="h-full w-full rounded-[15px] object-cover"
:src="image.versions[image.versions.length - 1].file.url"
loading="lazy" />
</div>
@@ -163,12 +163,12 @@
style="display: inline-block; margin-top: 10px; width: unset; cursor: default">
<template v-if="image.versions && image.versions.length > 0"
><div
class="vrcplus-icon"
class="h-[200px] w-[200px] rounded-[20px] overflow-hidden"
v-if="image.versions[image.versions.length - 1].file.url"
@click="setVRCPlusIcon(image.id)"
:class="{ 'current-vrcplus-icon': compareCurrentVRCPlusIcon(image.id) }">
:class="compareCurrentVRCPlusIcon(image.id) ? 'cursor-default' : 'cursor-pointer'">
<img
class="avatar"
class="h-full w-full rounded-[15px] object-cover"
:src="image.versions[image.versions.length - 1].file.url"
loading="lazy" />
</div>
@@ -301,9 +301,8 @@
style="display: inline-block; margin-top: 10px; width: unset; cursor: default">
<template v-if="image.versions && image.versions.length > 0">
<div
class="vrcplus-icon"
class="h-[200px] w-[200px] rounded-[20px] overflow-hidden cursor-pointer"
v-if="image.versions[image.versions.length - 1].file.url"
style="overflow: hidden"
@click="
showFullscreenImageDialog(
image.versions[image.versions.length - 1].file.url,
@@ -383,12 +382,11 @@
style="display: inline-block; margin-top: 10px; width: unset; cursor: default">
<template v-if="image.versions && image.versions.length > 0">
<div
class="vrcplus-icon"
class="h-[200px] w-[200px] rounded-[20px] overflow-hidden cursor-pointer"
v-if="image.versions[image.versions.length - 1].file.url"
style="overflow: hidden"
@click="showFullscreenImageDialog(image.versions[image.versions.length - 1].file.url)">
<img
class="avatar"
class="h-full w-full rounded-[15px] object-cover"
:src="image.versions[image.versions.length - 1].file.url"
loading="lazy" />
</div>
@@ -459,35 +457,30 @@
:key="image.id"
style="display: inline-block; margin-top: 10px; width: unset; cursor: default">
<div
class="vrcplus-icon"
style="overflow: hidden"
class="h-[200px] w-[200px] rounded-[20px] overflow-hidden cursor-pointer"
@click="showFullscreenImageDialog(image.files.image, getPrintFileName(image))">
<img class="avatar" :src="image.files.image" loading="lazy" />
<img class="h-full w-full rounded-[15px] object-cover" :src="image.files.image" loading="lazy" />
</div>
<div style="margin-top: 5px; width: 208px">
<span
class="x-ellipsis"
v-if="image.note"
v-text="image.note"
style="display: block"></span>
<span v-else style="display: block">&nbsp;</span>
<span class="block truncate" v-if="image.note" v-text="image.note"></span>
<span v-else class="block">&nbsp;</span>
<Location
class="x-ellipsis"
class="block truncate"
v-if="image.worldId"
:location="image.worldId"
:hint="image.worldName"
style="display: block" />
<span v-else style="display: block">&nbsp;</span>
/>
<span v-else class="block">&nbsp;</span>
<DisplayName
class="x-ellipsis gallery-meta"
class="block truncate gallery-meta"
v-if="image.authorId"
:userid="image.authorId"
:hint="image.authorName" />
<span v-else class="gallery-meta">&nbsp;</span>
<span v-if="image.createdAt" class="x-ellipsis gallery-meta gallery-meta--small">
<span v-if="image.createdAt" class="block truncate gallery-meta gallery-meta--small">
{{ formatDateFilter(image.createdAt, 'long') }}
</span>
<span v-else style="display: block">&nbsp;</span>
<span v-else class="block">&nbsp;</span>
</div>
<div class="float-right">
<Button
@@ -531,18 +524,18 @@
v-for="item in inventoryTable"
:key="item.id"
style="display: inline-block; margin-top: 10px; width: unset; cursor: default">
<div class="vrcplus-icon" style="overflow: hidden; cursor: default">
<img class="avatar" :src="item.imageUrl" loading="lazy" />
<div class="h-[200px] w-[200px] rounded-[20px] overflow-hidden cursor-default">
<img class="h-full w-full rounded-[15px] object-cover" :src="item.imageUrl" loading="lazy" />
</div>
<div style="margin-top: 5px; width: 208px">
<span class="x-ellipsis" v-text="item.name" style="display: block"></span>
<span class="block truncate" v-text="item.name"></span>
<span
v-if="item.description"
class="x-ellipsis"
class="block truncate"
v-text="item.description"
style="display: block"></span>
<span v-else style="display: block">&nbsp;</span>
<span class="x-ellipsis gallery-meta gallery-meta--small">
></span>
<span v-else class="block">&nbsp;</span>
<span class="block truncate gallery-meta gallery-meta--small">
{{ formatDateFilter(item.created_at, 'long') }}
</span>
<span v-if="item.itemType === 'prop'">{{ t('dialog.gallery_icons.item') }}</span>

View File

@@ -220,6 +220,7 @@
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
import { useFriendStore, useGalleryStore } from '../../stores';
const GroupCalendarDialog = defineAsyncComponent(() => import('./dialogs/GroupCalendarDialog.vue'));