This commit is contained in:
pa
2026-01-19 11:04:36 +09:00
parent cacbf742d1
commit 7303cd0b33
22 changed files with 107 additions and 178 deletions

View File

@@ -61,14 +61,7 @@
<History class="h-4 w-4" />
</Button>
</TooltipWrapper>
<span v-if="showLastJoinIndicator" class="inline-block ml-2">
<TooltipWrapper side="top" class="ml-5">
<template #content>
<span>{{ t('dialog.user.info.last_join') }} <Timer :epoch="lastJoin" /></span>
</template>
<MapPin class="h-4 w-4 text-muted-foreground" />
</TooltipWrapper>
</span>
<div v-if="showInstanceInfo" class="flex items-center ml-2">
<TooltipWrapper v-if="instanceInfoState.isValidInstance" side="top">
<template #content>
@@ -79,7 +72,8 @@
<template v-if="instanceInfoState.canCloseInstance">
<Button
class="mt-1"
size="sm"
size="xs"
variant="outline"
:disabled="!!instance?.closedAt"
@click="closeInstance(resolvedInstanceLocation)">
{{ t('dialog.user.info.close_instance') }}
@@ -113,17 +107,29 @@
</template>
</div>
</template>
<div class="mr-2 text-muted-foreground">
<div class="mr-1 text-muted-foreground">
<span v-if="resolvedInstanceLocation === locationStore.lastLocation.location">
{{ locationStore.lastLocation.playerList.size }}/{{ instance?.capacity }}
</span>
<span v-else-if="instance?.userCount"> {{ instance.userCount }}/{{ instance?.capacity }} </span>
</div>
</TooltipWrapper>
<span v-if="friendcount" class="ml-1 flex items-center text-muted-foreground"
><UsersRound />{{ friendcount }}</span
>
<TooltipWrapper v-if="friendcount" side="top" :content="t('dialog.user.info.instance_friends_tooltip')">
<span class="ml-1 flex items-center text-muted-foreground"><UsersRound />{{ friendcount }}</span>
</TooltipWrapper>
<span v-if="showLastJoinIndicator" class="inline-block ml-1">
<TooltipWrapper side="top">
<template #content>
<span>{{ t('dialog.user.info.last_join') }} </span>
</template>
<span class="flex items-center ml-1">
<MapPin class="h-4 w-4 text-muted-foreground" />
<Timer class="text-muted-foreground" :epoch="lastJoin" />
</span>
</TooltipWrapper>
</span>
<span v-if="instanceInfoState.isValidInstance && !instance?.hasCapacityForYou" class="ml-1">
{{ t('dialog.user.info.instance_full') }}
</span>

View File

@@ -674,54 +674,29 @@
const groupInvitesModerationTable = reactive({
data: [],
tableProps: { stripe: true, size: 'small' },
pageSize: 15,
paginationProps: {
layout: 'sizes,prev,pager,next,total'
}
pageSize: 15
});
const groupJoinRequestsModerationTable = reactive({
data: [],
tableProps: { stripe: true, size: 'small' },
pageSize: 15,
paginationProps: {
layout: 'sizes,prev,pager,next,total'
}
pageSize: 15
});
const groupBlockedModerationTable = reactive({
data: [],
tableProps: { stripe: true, size: 'small' },
pageSize: 15,
paginationProps: {
small: true,
layout: 'sizes,prev,pager,next,total'
}
pageSize: 15
});
const groupLogsModerationTable = reactive({
data: [],
filters: [{ prop: ['description'], value: '' }],
tableProps: { stripe: true, size: 'small' },
pageSize: 15,
paginationProps: {
layout: 'sizes,prev,pager,next,total'
}
pageSize: 15
});
const groupBansModerationTable = reactive({
data: [],
filters: [{ prop: ['$displayName'], value: '' }],
tableProps: { stripe: true, size: 'small' },
pageSize: 15,
paginationProps: {
layout: 'sizes,prev,pager,next,total'
}
pageSize: 15
});
const groupMemberModerationTable = reactive({
data: [],
tableProps: { stripe: true, size: 'small' },
pageSize: 15,
paginationProps: {
layout: 'sizes,prev,pager,next,total'
}
pageSize: 15
});
const rolesText = (roleIds) => {

View File

@@ -67,8 +67,7 @@
previousInstances: [],
previousInstancesTable: {
data: [],
filters: [{ prop: 'displayName', value: '' }],
tableProps: { stripe: true, size: 'small', height: '400px' }
filters: [{ prop: 'displayName', value: '' }]
}
})
}

View File

@@ -65,7 +65,6 @@
<Pencil class="size-4" />
{{ t('dialog.user.actions.edit_pronouns') }}
</DropdownMenuItem>
<DropdownMenuSeparator />
</template>
<template v-else>
<template v-if="userDialog.isFriend">

View File

@@ -47,6 +47,7 @@
:on-refresh="() => refreshInstancePlayerCount(userDialog.$location.tag)" />
</template>
<Location
class="text-sm"
:location="userDialog.ref.location"
:traveling="userDialog.ref.travelingToLocation" />
</div>
@@ -212,7 +213,7 @@
<div class="detail">
<span class="name">{{ t('dialog.user.info.bio') }}</span>
<pre
class="extra"
class="extra truncate"
style="
font-family: inherit;
font-size: 12px;
@@ -1504,10 +1505,7 @@
});
const socialStatusHistoryTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table'
});

View File

@@ -1009,8 +1009,9 @@
"refresh_instance_info": "Refresh Instance Info",
"instance_queue": "Queue:",
"instance_users": "Users:",
"instance_friends_tooltip": "Friends in this instance",
"instance_game_version": "Game Version:",
"last_join": "Last Join:",
"last_join": "Last Join",
"instance_queuing_enabled": "Queuing Enabled",
"instance_disabled_content": "Disabled Content:",
"instance_creator": "Instance Creator",

View File

@@ -977,7 +977,7 @@
"instance_queue": "在排队等待的玩家:",
"instance_users": "房间玩家:",
"instance_game_version": "服务器版本:",
"last_join": "距离上次加入房间",
"last_join": "距离上次加入房间",
"instance_queuing_enabled": "允许排队加入",
"instance_disabled_content": "禁用的内容:",
"instance_creator": "房间建立者",

View File

@@ -18,40 +18,24 @@ export const useInviteStore = defineStore('Invite', () => {
const inviteMessageTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table',
visible: false
});
const inviteResponseMessageTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table',
visible: false
});
const inviteRequestMessageTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table',
visible: false
});
const inviteRequestResponseMessageTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table',
visible: false
});

View File

@@ -66,11 +66,6 @@ export const useNotificationStore = defineStore('Notification', () => {
value: ''
}
],
tableProps: {
stripe: true,
size: 'small',
defaultSort: null
},
pageSize: 20,
pageSizeLinked: true,
paginationProps: {

View File

@@ -103,10 +103,6 @@ export const usePhotonStore = defineStore('Photon', () => {
value: []
}
],
tableProps: {
stripe: true,
size: 'small'
},
pageSize: 10,
paginationProps: {
layout: 'sizes,prev,pager,next,total'
@@ -124,10 +120,6 @@ export const usePhotonStore = defineStore('Photon', () => {
value: []
}
],
tableProps: {
stripe: true,
size: 'small'
},
pageSize: 10,
paginationProps: {
layout: 'sizes,prev,pager,next,total'

View File

@@ -159,10 +159,6 @@
const avatarImportTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table'
});

View File

@@ -139,10 +139,6 @@
const friendImportTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table'
});

View File

@@ -165,10 +165,6 @@
const worldImportTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table'
});

View File

@@ -170,7 +170,7 @@
persistKey: 'gameLog',
data: gameLogDisplayData,
columns,
getRowId: (row) => `${row.type}:${row.rowId ?? row.displayName + row.location + row.time}`,
getRowId: (row, index) => `${row.type}:${row.rowId ?? index}`,
initialSorting: [],
initialPagination: {
pageIndex: 0,

View File

@@ -13,7 +13,7 @@
@click="showFullscreenImageDialog(currentInstanceWorld.ref.imageUrl)"
loading="lazy" />
<div style="margin-left: 10px; display: flex; flex-direction: column; min-width: 320px; width: 100%">
<div>
<div class="flex items-center">
<span
class="cursor-pointer"
style="
@@ -25,14 +25,15 @@
line-clamp: 1;
"
@click="showWorldDialog(currentInstanceWorld.ref.id)">
<Home
v-if="
currentUser.$homeLocation &&
currentUser.$homeLocation.worldId === currentInstanceWorld.ref.id
"
style="margin-right: 5px" />
{{ currentInstanceWorld.ref.name }}
</span>
{{ currentInstanceWorld.ref.name }}
<Home
v-if="
currentUser.$homeLocation &&
currentUser.$homeLocation.worldId === currentInstanceWorld.ref.id
"
class="ml-1" />
</div>
<div>
<span

View File

@@ -86,6 +86,14 @@
setHideNicknames();
saveOpenVROption();
" />
<simple-switch
:label="t('view.settings.appearance.appearance.striped_data_table_mode')"
:value="isDataTableStriped"
@change="toggleStripedDataTable" />
<simple-switch
:label="t('view.settings.appearance.appearance.toggle_pointer_on_hover')"
:value="showPointerOnHover"
@change="togglePointerOnHover" />
<simple-switch
:label="t('view.settings.appearance.appearance.age_gated_instances')"
:value="isAgeGatedInstancesVisible"
@@ -180,19 +188,12 @@
</ListboxRoot>
</Popover>
</div>
<simple-switch
:label="t('view.settings.appearance.appearance.striped_data_table_mode')"
:value="isDataTableStriped"
@change="toggleStripedDataTable" />
<div class="options-container-item">
<Button size="sm" variant="outline" @click="promptMaxTableSizeDialog">{{
t('view.settings.appearance.appearance.table_max_size')
}}</Button>
</div>
<simple-switch
:label="t('view.settings.appearance.appearance.toggle_pointer_on_hover')"
:value="showPointerOnHover"
@change="togglePointerOnHover" />
</div>
<div class="options-container">
<span class="header">{{ t('view.settings.appearance.timedate.header') }}</span>
@@ -451,15 +452,15 @@
import { ArrowRight, CheckIcon, ChevronDown, Info } from 'lucide-vue-next';
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { computed, onBeforeUnmount, ref, watch } from 'vue';
import { useAppearanceSettingsStore, useFavoriteStore, useVrStore } from '@/stores';
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';
import { getLanguageName, languageCodes } from '@/localization';
import { APP_FONT_FAMILIES } from '@/shared/constants';
import { Button } from '@/components/ui/button';
import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
import { useAppearanceSettingsStore, useFavoriteStore, useVrStore } from '@/stores';
import { getLanguageName, languageCodes } from '@/localization';
import { APP_FONT_FAMILIES } from '@/shared/constants';
import PresetColorPicker from '@/components/PresetColorPicker.vue';
import SimpleSwitch from '../SimpleSwitch.vue';

View File

@@ -42,9 +42,8 @@
t('view.settings.general.vrcx_updater.change_build')
}}</Button>
</div>
<div v-if="!noUpdater" class="options-container-item">
<div v-if="!noUpdater" class="text-sm mt-2 flex flex-col align-baseline">
<span class="name">{{ t('view.settings.general.vrcx_updater.update_action') }}</span>
<br />
<ToggleGroup
type="single"
required

View File

@@ -74,14 +74,6 @@
const registryBackupTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small',
defaultSort: {
prop: 'date',
order: 'descending'
}
},
layout: 'table'
});

View File

@@ -4,7 +4,10 @@
<div style="flex: 1; padding: 10px; padding-left: 0">
<Popover v-model:open="isQuickSearchOpen">
<PopoverTrigger as-child>
<Input v-model="quickSearchQuery" :placeholder="t('side_panel.search_placeholder')" />
<Input
v-model="quickSearchQuery"
:placeholder="t('side_panel.search_placeholder')"
autocomplete="off" />
</PopoverTrigger>
<PopoverContent
side="bottom"

View File

@@ -93,10 +93,6 @@
const noteExportTable = ref({
data: [],
tableProps: {
stripe: true,
size: 'small'
},
layout: 'table'
});