@@ -57,13 +54,14 @@
-
+
diff --git a/src/components/dialogs/SendBoopDialog.vue b/src/components/dialogs/SendBoopDialog.vue
new file mode 100644
index 00000000..df9b1f1c
--- /dev/null
+++ b/src/components/dialogs/SendBoopDialog.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/dialogs/UserDialog/BioDialog.vue b/src/components/dialogs/UserDialog/BioDialog.vue
new file mode 100644
index 00000000..f9aa99a1
--- /dev/null
+++ b/src/components/dialogs/UserDialog/BioDialog.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.bio.add_link') }}
+
+
+
+
+
+ {{ t('dialog.bio.update') }}
+
+
+
+
+
+
diff --git a/src/components/dialogs/UserDialog/GalleryDialog.vue b/src/components/dialogs/UserDialog/GalleryDialog.vue
new file mode 100644
index 00000000..c452186e
--- /dev/null
+++ b/src/components/dialogs/UserDialog/GalleryDialog.vue
@@ -0,0 +1,1024 @@
+
+
+
+
+
+ {{ t('dialog.gallery_icons.gallery') }}
+
+ {{ galleryTable.length }}/64
+
+
+
+ {{ t('dialog.gallery_icons.recommended_image_size') }}: 1200x900px (4:3)
+
+
+
+
+ {{ t('dialog.gallery_icons.refresh') }}
+
+
+ {{ t('dialog.gallery_icons.upload') }}
+
+
+ {{ t('dialog.gallery_icons.clear') }}
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.gallery_icons.icons') }}
+
+ {{ VRCPlusIconsTable.length }}/64
+
+
+
+ {{ t('dialog.gallery_icons.recommended_image_size') }}: 2048x2048px (1:1)
+
+
+
+
+ {{ t('dialog.gallery_icons.refresh') }}
+
+
+ {{ t('dialog.gallery_icons.upload') }}
+
+
+ {{ t('dialog.gallery_icons.clear') }}
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.gallery_icons.emojis') }}
+ {{ emojiTable.length }}/9
+
+
+ {{ t('dialog.gallery_icons.recommended_image_size') }}: 1024x1024px (1:1)
+
+
+
+
+
+ {{ t('dialog.gallery_icons.refresh') }}
+
+
+ {{ t('dialog.gallery_icons.upload') }}
+
+
+
+
+ {{ t('dialog.gallery_icons.emoji_animation_styles') }}
+
+
+
![]()
+
+
+
+
+
+
+
+
+ {{ t('dialog.gallery_icons.emoji_animation_type') }}
+
+
+ {{ t('dialog.gallery_icons.emoji_animation_fps') }}
+
+ {{
+ t('dialog.gallery_icons.emoji_animation_frame_count')
+ }}
+
+
+ {{ t('dialog.gallery_icons.emoji_loop_pingpong') }}
+
+
+
+ {{ t('dialog.gallery_icons.flipbook_info') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ image.animationStyle }}
+ {{ image.framesOverTime }}fps
+ {{ image.frames }}frames
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.gallery_icons.stickers') }}
+ {{ stickerTable.length }}/9
+
+
+ {{ t('dialog.gallery_icons.recommended_image_size') }}: 1024x1024px (1:1)
+
+
+
+
+ {{ t('dialog.gallery_icons.refresh') }}
+
+
+ {{ t('dialog.gallery_icons.upload') }}
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.gallery_icons.prints') }}
+ {{ printTable.length }}/64
+
+
+ {{ t('dialog.gallery_icons.recommended_image_size') }}: 1920x1080px (16:9)
+
+
+
+
+
+ {{ t('dialog.gallery_icons.refresh') }}
+
+
+ {{ t('dialog.gallery_icons.upload') }}
+
+
+
+
+ {{ t('dialog.gallery_icons.crop_print_border') }}
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+ {{ image.createdAt | formatDate('long') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/dialogs/UserDialog/LanguageDialog.vue b/src/components/dialogs/UserDialog/LanguageDialog.vue
new file mode 100644
index 00000000..3a9ece90
--- /dev/null
+++ b/src/components/dialogs/UserDialog/LanguageDialog.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+ {{ item.value }} ({{ item.key.toUpperCase() }})
+
+
+
+
+
+ {{ item.value }} ({{ item.key.toUpperCase() }})
+
+
+
+
+
+
+
diff --git a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesUserDialog.vue b/src/components/dialogs/UserDialog/PreviousInstancesUserDialog.vue
similarity index 94%
rename from src/components/dialogs/PreviousInstancesDialog/PreviousInstancesUserDialog.vue
rename to src/components/dialogs/UserDialog/PreviousInstancesUserDialog.vue
index fa8f5365..f5d03f25 100644
--- a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesUserDialog.vue
+++ b/src/components/dialogs/UserDialog/PreviousInstancesUserDialog.vue
@@ -1,12 +1,10 @@
-
+ append-to-body>
-
+
diff --git a/src/components/dialogs/UserDialog/SendInviteRequestDialog.vue b/src/components/dialogs/UserDialog/SendInviteRequestDialog.vue
new file mode 100644
index 00000000..eb6243f5
--- /dev/null
+++ b/src/components/dialogs/UserDialog/SendInviteRequestDialog.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.invite_request_message.cancel')
+ }}
+ {{
+ t('dialog.invite_request_message.refresh')
+ }}
+
+
+
+
+
+
+
diff --git a/src/components/dialogs/UserDialog/SocialStatusDialog.vue b/src/components/dialogs/UserDialog/SocialStatusDialog.vue
new file mode 100644
index 00000000..99cde856
--- /dev/null
+++ b/src/components/dialogs/UserDialog/SocialStatusDialog.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ {{ t('dialog.social_status.history') }}
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.status.join_me') }}
+
+
+ {{ t('dialog.user.status.online') }}
+
+
+ {{ t('dialog.user.status.ask_me') }}
+
+
+ {{ t('dialog.user.status.busy') }}
+
+
+ {{ t('dialog.user.status.offline') }}
+
+
+
+
+
+
+
+
+ {{ t('dialog.social_status.update') }}
+
+
+
+
+
+
diff --git a/src/components/dialogs/UserDialog/UserDialog.vue b/src/components/dialogs/UserDialog/UserDialog.vue
new file mode 100644
index 00000000..e00f820e
--- /dev/null
+++ b/src/components/dialogs/UserDialog/UserDialog.vue
@@ -0,0 +1,3179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.status.active')
+ }}
+ {{
+ t('dialog.user.status.offline')
+ }}
+ {{
+ t('dialog.user.status.online')
+ }}
+ {{
+ t('dialog.user.status.join_me')
+ }}
+ {{
+ t('dialog.user.status.ask_me')
+ }}
+ {{
+ t('dialog.user.status.busy')
+ }}
+ {{ t('dialog.user.status.offline') }}
+
+
+
+
+
+
+ {{ t('dialog.user.previous_display_names') }}
+
+
+
+
+
+
+
+
+
+ {{
+ userDialog.ref.displayName | textToHex
+ }}
+
+
+
+
+
+
+ {{ item.value }} ({{ item.key }})
+
+
+
+
+
+
+
+ {{
+ API.currentUser.username | textToHex
+ }}
+
+
+
+
+
+
+ {{
+ t('dialog.user.tags.friend_no', {
+ number: userDialog.ref.$friendNumber ? userDialog.ref.$friendNumber : ''
+ })
+ }}
+
+
+ Nuisance
+
+
+ Almost Nuisance
+
+
+ {{ t('dialog.user.tags.vrchat_team') }}
+
+
+ PC
+
+
+ Android
+
+
iOS
+
+ {{ userDialog.ref.last_platform }}
+
+
+ {{ userDialog.ref.ageVerificationStatus }}
+
+
+
+
+
+
+ {{ badge.badgeName }}
+ (Hidden)
+
+
+
+
+
+
+ {{ badge.badgeName }}
+
+ {{
+ badge.badgeDescription
+ }}
+
+
+ {{ t('dialog.user.badges.assigned') }}:
+ {{ badge.assignedAt | formatDate('long') }}
+
+
+
+
+ {{ t('dialog.user.badges.hidden') }}
+
+
+
+ {{ t('dialog.user.badges.showcased') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.actions.refresh')
+ }}
+ {{
+ t('dialog.user.actions.share')
+ }}
+
+ {{
+ t('dialog.user.actions.manage_gallery_icon')
+ }}
+ {{
+ t('dialog.user.actions.show_avatar_author')
+ }}
+ {{
+ t('dialog.user.actions.show_fallback_avatar')
+ }}
+ {{
+ t('dialog.user.actions.edit_status')
+ }}
+ {{
+ t('dialog.user.actions.edit_language')
+ }}
+ {{
+ t('dialog.user.actions.edit_bio')
+ }}
+ {{
+ t('dialog.user.actions.edit_pronouns')
+ }}
+ {{
+ t('dialog.user.actions.logout')
+ }}
+
+
+
+ {{
+ t('dialog.user.actions.request_invite')
+ }}
+ {{
+ t('dialog.user.actions.request_invite_with_message')
+ }}
+
+ {{
+ t('dialog.user.actions.invite')
+ }}
+ {{
+ t('dialog.user.actions.invite_with_message')
+ }}
+
+
+
+ {{
+ t('dialog.user.actions.accept_friend_request')
+ }}
+ {{
+ t('dialog.user.actions.decline_friend_request')
+ }}
+
+
+ {{ t('dialog.user.actions.cancel_friend_request') }}
+
+ {{
+ t('dialog.user.actions.send_friend_request')
+ }}
+ {{
+ t('dialog.user.actions.invite_to_group')
+ }}
+
+ {{
+ t('dialog.user.actions.show_avatar_author')
+ }}
+ {{
+ t('dialog.user.actions.show_fallback_avatar')
+ }}
+ {{
+ t('dialog.user.actions.show_previous_instances')
+ }}
+
+ {{ t('dialog.user.actions.show_previous_images') }}
+
+
+ {{ t('dialog.user.actions.moderation_unblock') }}
+
+
+ {{ t('dialog.user.actions.moderation_block') }}
+
+
+ {{ t('dialog.user.actions.moderation_unmute') }}
+
+
+ {{ t('dialog.user.actions.moderation_mute') }}
+
+
+ {{ t('dialog.user.actions.moderation_enable_chatbox') }}
+
+
+ {{ t('dialog.user.actions.moderation_disable_chatbox') }}
+
+
+
+ {{ t('dialog.user.actions.moderation_show_avatar') }}
+
+
+
+ {{ t('dialog.user.actions.moderation_hide_avatar') }}
+
+
+ {{ t('dialog.user.actions.moderation_enable_avatar_interaction') }}
+
+
+ {{ t('dialog.user.actions.moderation_disable_avatar_interaction') }}
+
+
+ {{ t('dialog.user.actions.report_hacking') }}
+
+
+
+ {{ t('dialog.user.actions.unfriend') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('dialog.user.info.note') }}
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.memo') }}
+
+
+
+
+
+
+ {{ t('dialog.user.info.avatar_info_last_seen') }}
+
+ {{ t('dialog.user.info.avatar_info') }}
+
+
+
+
+
+ {{
+ t('dialog.user.info.represented_group')
+ }}
+
+
+
+
+
+
+
{{ t('dialog.user.info.bio') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.last_seen') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.join_count') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.time_together') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.play_time') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ userOnlineForTimestamp(userDialog) | formatDate('short') }}
+
+
+
+ {{ t('dialog.user.info.online_for') }}
+
+
+
+
+
+ {{ t('dialog.user.info.offline_for') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.last_login') }}
+ {{ userDialog.ref.last_login | formatDate('short') }}
+
+
+ {{ t('dialog.user.info.last_activity') }}
+
+
+
+
+
+
+ {{ t('dialog.user.info.date_joined') }}
+
+
+
+
+
+
+
+ {{ ref.type }}: {{ ref.created_at | formatDate('long') }}
+
+
+
+
+ {{ t('dialog.user.info.unfriended') }}
+
+
+
+
+
+ {{ t('dialog.user.info.friended') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.avatar_cloning') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.avatar_cloning') }}
+
+
+
+
+
+
+
+ {{ t('dialog.user.info.home_location') }}
+
+
+
+
+
+ {{ t('dialog.user.info.id') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.groups.total_count', { count: userGroups.groups.length })
+ }}
+
+ {{
+ t('dialog.user.groups.hold_shift')
+ }}
+
+
+
+
+ {{ t('dialog.user.groups.sort_by') }}
+
+
+ {{ t(userDialog.groupSorting.name) }}
+
+
+
+ {{ t(item.name) }}
+
+
+
+
+
+ {{ t('dialog.user.groups.exit_edit_mode') }}
+
+
+ {{ t('dialog.user.groups.edit_mode') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+ {{
+ t('dialog.group.tags.visible')
+ }}
+ {{
+ t('dialog.group.tags.friends')
+ }}
+ {{
+ t('dialog.group.tags.hidden')
+ }}
+ {{ group.myMember.visibility }}
+
+
+
+
+ {{ t('dialog.group.actions.visibility_everyone') }}
+
+ {{ t('dialog.group.actions.visibility_friends') }}
+
+ {{ t('dialog.group.actions.visibility_hidden') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.groups.own_groups')
+ }}
+ {{ userGroups.ownGroups.length }}/{{
+ API.cachedConfig?.constants?.GROUPS?.MAX_OWNED
+ }}
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.groups.mutual_groups')
+ }}
+ {{
+ userGroups.mutualGroups.length
+ }}
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.groups.groups')
+ }}
+
+ {{ userGroups.remainingGroups.length }}
+
+ /
+
+ {{ API.cachedConfig?.constants?.GROUPS?.MAX_JOINED_PLUS }}
+
+
+ {{ API.cachedConfig?.constants?.GROUPS?.MAX_JOINED }}
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.worlds.total_count', { count: userDialog.worlds.length })
+ }}
+
+
+ {{ t('dialog.user.worlds.sort_by') }}
+
+
+ {{ userDialog.worldSorting.name }}
+
+
+
+
+
+
+
+ {{ t('dialog.user.worlds.order_by') }}
+
+
+ {{ userDialog.worldOrder.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ list[2].length }}/{{ API.favoriteLimits.maxFavoritesPerGroup.world }}
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+ No favorite worlds found.
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.avatars.total_count', { count: userDialogAvatars.length })
+ }}
+
+
+
+ {{ t('dialog.user.avatars.sort_by') }}
+
+
+ {{ t(`dialog.user.avatars.sort_by_${userDialog.avatarSorting}`) }}
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.avatars.group_by')
+ }}
+
+
+ {{ t(`dialog.user.avatars.${userDialog.avatarReleaseStatus}`) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/dialogs/VRCXUpdateDialog.vue b/src/components/dialogs/VRCXUpdateDialog.vue
index 8a280d03..1af439a6 100644
--- a/src/components/dialogs/VRCXUpdateDialog.vue
+++ b/src/components/dialogs/VRCXUpdateDialog.vue
@@ -1,13 +1,10 @@
-
+ width="400px">
@@ -62,7 +59,7 @@
{{ t('dialog.vrcx_updater.install') }}
-
+
diff --git a/src/components/dialogs/WorldDialog/SetWorldTagsDialog.vue b/src/components/dialogs/WorldDialog/SetWorldTagsDialog.vue
index 32f76715..4a64f75a 100644
--- a/src/components/dialogs/WorldDialog/SetWorldTagsDialog.vue
+++ b/src/components/dialogs/WorldDialog/SetWorldTagsDialog.vue
@@ -1,13 +1,10 @@
-
+ append-to-body>
{{ $t('dialog.set_world_tags.avatar_scaling_disabled') }}
@@ -80,7 +77,7 @@
-
+
+
+
diff --git a/src/views/FriendList/FriendList.vue b/src/views/FriendList/FriendList.vue
index f04bf76f..bcdcafcb 100644
--- a/src/views/FriendList/FriendList.vue
+++ b/src/views/FriendList/FriendList.vue
@@ -270,9 +270,11 @@
+
+
diff --git a/src/views/GameLog/GameLog.vue b/src/views/GameLog/GameLog.vue
new file mode 100644
index 00000000..0081e5f0
--- /dev/null
+++ b/src/views/GameLog/GameLog.vue
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.created_at | formatDate('long') }}
+
+ {{ scope.row.created_at | formatDate('short') }}
+
+
+
+
+
+
+
+
+ {{ t('view.game_log.filters.' + scope.row.type) }}
+
+
+
+
+
+
+
+
+
+
+
+ ⭐
+
+
+ 💚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.videoId }}:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Login/Login.vue b/src/views/Login/Login.vue
new file mode 100644
index 00000000..9d73e522
--- /dev/null
+++ b/src/views/Login/Login.vue
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('view.login.forgotPassword')
+ }}
+
+
+ © 2019-2025
+ pypy &
+ Natsumi
+
+
{{ t('view.settings.general.legal_notice.info') }}
+
{{ t('view.settings.general.legal_notice.disclaimer1') }}
+
{{ t('view.settings.general.legal_notice.disclaimer2') }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Notifications/Notification.vue b/src/views/Notifications/Notification.vue
new file mode 100644
index 00000000..c1ef35c3
--- /dev/null
+++ b/src/views/Notifications/Notification.vue
@@ -0,0 +1,670 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.created_at | formatDate('long') }}
+
+ {{ scope.row.created_at | formatDate('short') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue b/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue
new file mode 100644
index 00000000..a5feb348
--- /dev/null
+++ b/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue
@@ -0,0 +1,133 @@
+
+
+
+ {{ t('dialog.edit_send_invite_response_message.description') }}
+
+
+
+
+ {{
+ t('dialog.edit_send_invite_response_message.cancel')
+ }}
+ {{
+ t('dialog.edit_send_invite_response_message.send')
+ }}
+
+
+
+
+
diff --git a/src/views/Notifications/dialogs/SendInviteRequestResponseDialog.vue b/src/views/Notifications/dialogs/SendInviteRequestResponseDialog.vue
new file mode 100644
index 00000000..b1971573
--- /dev/null
+++ b/src/views/Notifications/dialogs/SendInviteRequestResponseDialog.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.invite_request_response_message.cancel') }}
+
+
+ {{ t('dialog.invite_request_response_message.refresh') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/Notifications/dialogs/SendInviteResponseConfirmDialog.vue b/src/views/Notifications/dialogs/SendInviteResponseConfirmDialog.vue
new file mode 100644
index 00000000..012325a0
--- /dev/null
+++ b/src/views/Notifications/dialogs/SendInviteResponseConfirmDialog.vue
@@ -0,0 +1,95 @@
+
+
+
+ {{ t('dialog.invite_response_message.confirmation') }}
+
+
+
+ {{
+ t('dialog.invite_response_message.cancel')
+ }}
+ {{
+ t('dialog.invite_response_message.confirm')
+ }}
+
+
+
+
+
diff --git a/src/views/Notifications/dialogs/SendInviteResponseDialog.vue b/src/views/Notifications/dialogs/SendInviteResponseDialog.vue
new file mode 100644
index 00000000..76cd7ff0
--- /dev/null
+++ b/src/views/Notifications/dialogs/SendInviteResponseDialog.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.invite_response_message.cancel')
+ }}
+ {{
+ t('dialog.invite_response_message.refresh')
+ }}
+
+
+
+
+
+
+
diff --git a/src/views/PlayerList/PlayerList.vue b/src/views/PlayerList/PlayerList.vue
new file mode 100644
index 00000000..c59dc724
--- /dev/null
+++ b/src/views/PlayerList/PlayerList.vue
@@ -0,0 +1,984 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentInstanceWorld.ref.name }}
+
+
+
+
+
+
+ {{ t('dialog.world.tags.labs') }}
+ {{ t('dialog.world.tags.public') }}
+ {{ t('dialog.world.tags.private') }}
+ PC
+ {{ currentInstanceWorld.bundleSizes['standalonewindows'].fileSize }}
+
+ Android
+ {{ currentInstanceWorld.bundleSizes['android'].fileSize }}
+
+ iOS
+ {{ currentInstanceWorld.bundleSizes['ios'].fileSize }}
+
+ {{ t('dialog.world.tags.avatar_scaling_disabled') }}
+
+ {{ currentInstanceWorld.cacheSize }} {{ t('dialog.world.tags.cache') }}
+
+
+
+
+
+ {{ lastLocation.playerList.size }}
+ ({{ lastLocation.friendList.size }})
+ ―
+
+
+
+
+
+ {{ !currentInstanceWorldDescriptionExpanded && 'Show more' }}
+
+
+
+
+
+
+ {{ t('dialog.world.info.capacity') }}
+
+
+
+
+
+ {{ t('dialog.world.info.last_updated') }}
+
+
+
+
+
+ {{ t('dialog.world.info.created_at') }}
+
+
+
+
+
+
+
+
+
+
+
+
{{
+ t('view.player_list.photon.chatbox_blacklist')
+ }}
+
+
+ 🟢
+ ⚪
+ 🔴
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.created_at | formatDate('long') }}
+
+ {{ scope.row.created_at | formatDate('short') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.avatar.labels.public') }}
+ {{ t('dialog.avatar.labels.private') }}
+
+ - {{ scope.row.avatar.description }}
+
+
+
+
+
+
+ {{
+ t('dialog.user.status.active')
+ }}
+ {{
+ t('dialog.user.status.join_me')
+ }}
+ {{
+ t('dialog.user.status.ask_me')
+ }}
+ {{
+ t('dialog.user.status.busy')
+ }}
+ {{ t('dialog.user.status.offline') }}
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.status.active')
+ }}
+ {{
+ t('dialog.user.status.join_me')
+ }}
+ {{
+ t('dialog.user.status.ask_me')
+ }}
+ {{
+ t('dialog.user.status.busy')
+ }}
+ {{ t('dialog.user.status.offline') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Desktop
+ VR
+ Android
+
+
+
+ {{ t('dialog.avatar.labels.public') }}
+ {{ t('dialog.avatar.labels.private') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.created_at | formatDate('long') }}
+
+ {{ scope.row.created_at | formatDate('short') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('dialog.avatar.labels.public') }}
+ {{ t('dialog.avatar.labels.private') }}
+
+ | - {{ scope.row.avatar.description }}
+
+
+
+
+
+
+ {{
+ t('dialog.user.status.active')
+ }}
+ {{
+ t('dialog.user.status.join_me')
+ }}
+ {{
+ t('dialog.user.status.ask_me')
+ }}
+ {{
+ t('dialog.user.status.busy')
+ }}
+ {{ t('dialog.user.status.offline') }}
+
+
+
+
+
+
+
+
+ {{
+ t('dialog.user.status.active')
+ }}
+ {{
+ t('dialog.user.status.join_me')
+ }}
+ {{
+ t('dialog.user.status.ask_me')
+ }}
+ {{
+ t('dialog.user.status.busy')
+ }}
+ {{ t('dialog.user.status.offline') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Desktop
+ VR
+ Android
+
+
+
+ {{ t('dialog.avatar.labels.public') }}
+ {{ t('dialog.avatar.labels.private') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 👑
+
+
+ ⚔️
+
+
+ 💚
+
+
+ 🔴{{ scope.row.timeoutTime }}s
+
+
+
+
+
+
+ PC
+ A
+ iOS
+ {{ scope.row.ref.last_platform }}
+
+
+ VR
+ M
+ D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.value }} ({{ item.key }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/PlayerList/dialogs/ChatboxBlacklistDialog.vue b/src/views/PlayerList/dialogs/ChatboxBlacklistDialog.vue
index fdfa18f9..c82733bb 100644
--- a/src/views/PlayerList/dialogs/ChatboxBlacklistDialog.vue
+++ b/src/views/PlayerList/dialogs/ChatboxBlacklistDialog.vue
@@ -1,12 +1,9 @@
-
+ width="600px">
{{ t('dialog.chatbox_blacklist.keyword_blacklist') }}
{{ user[1] }}
-
+
+
+
diff --git a/src/views/Profile/dialogs/DiscordNamesDialog.vue b/src/views/Profile/dialogs/DiscordNamesDialog.vue
index af1c9ad0..0aeb610e 100644
--- a/src/views/Profile/dialogs/DiscordNamesDialog.vue
+++ b/src/views/Profile/dialogs/DiscordNamesDialog.vue
@@ -1,13 +1,10 @@
-
+ @close="closeDialog">
{{ t('dialog.discord_names.description') }}
@@ -19,7 +16,7 @@
resize="none"
readonly
style="margin-top: 15px" />
-
+
+
+
diff --git a/src/views/Settings/dialogs/AvatarProviderDialog.vue b/src/views/Settings/dialogs/AvatarProviderDialog.vue
index 7b05c473..1f6c93c2 100644
--- a/src/views/Settings/dialogs/AvatarProviderDialog.vue
+++ b/src/views/Settings/dialogs/AvatarProviderDialog.vue
@@ -1,13 +1,10 @@
-
+ @close="closeDialog">
-
+