From 6e0a3ffc7dcff038be31d0b5e49bf3a03d121f13 Mon Sep 17 00:00:00 2001 From: pa Date: Sat, 10 Jan 2026 19:31:32 +0900 Subject: [PATCH] replace some el-select with VirtualCombobox --- .../GroupDialog/GroupPostEditDialog.vue | 55 ++- .../dialogs/InviteDialog/InviteDialog.vue | 211 +++++----- src/components/dialogs/InviteGroupDialog.vue | 299 +++++++------- .../dialogs/ModerateGroupDialog.vue | 59 +-- src/components/dialogs/NewInstanceDialog.vue | 373 ++++++++++-------- src/components/dialogs/SendBoopDialog.vue | 63 +-- src/components/ui/command/index.js | 16 + src/components/ui/dialog/index.js | 10 + src/components/ui/input/Input.vue | 32 ++ src/components/ui/input/index.js | 1 + .../ui/virtual-combobox/VirtualCombobox.vue | 181 ++++----- src/components/ui/virtual-combobox/index.js | 1 + src/views/Layout/AuthenticatedLayout.vue | 1 - src/views/PlayerList/PlayerList.vue | 1 - src/views/Tools/Gallery.vue | 75 ++-- 15 files changed, 768 insertions(+), 610 deletions(-) create mode 100644 src/components/ui/command/index.js create mode 100644 src/components/ui/dialog/index.js create mode 100644 src/components/ui/input/Input.vue create mode 100644 src/components/ui/input/index.js create mode 100644 src/components/ui/virtual-combobox/index.js diff --git a/src/components/dialogs/GroupDialog/GroupPostEditDialog.vue b/src/components/dialogs/GroupDialog/GroupPostEditDialog.vue index decbd727..0017d95f 100644 --- a/src/components/dialogs/GroupDialog/GroupPostEditDialog.vue +++ b/src/components/dialogs/GroupDialog/GroupPostEditDialog.vue @@ -38,25 +38,28 @@ - - - -
- -
-
-
-
+ :model-value="Array.isArray(groupPostEditDialog.roleIds) ? groupPostEditDialog.roleIds : []" + @update:modelValue="handleRoleIdsChange"> + + + + {{ selectedRoleSummary || t('dialog.new_instance.role_placeholder') }} + + + + + + + {{ role.name }} + + + +
@@ -191,25 +192,26 @@

- - - {{ t('dialog.gallery_icons.emoji_animation_styles') }} - -
- + + + {{ t('dialog.gallery_icons.emoji_animation_type') }} @@ -276,7 +278,7 @@ {{ image.frames }}frames
-
+
- {{ stickerTable.length }}/{{ cachedConfig?.maxUserStickers }} + {{ stickerTable.length }}/{{ cachedConfigTyped.maxUserStickers }} @@ -348,7 +350,7 @@ :src="image.versions[image.versions.length - 1].file.url" loading="lazy" />
-
+
 
-
+
+ class="float-right"> {{ t('dialog.gallery_icons.consume_bundle') }}
@@ -533,6 +535,7 @@ import { Button } from '@/components/ui/button'; import { ButtonGroup } from '@/components/ui/button-group'; import { ElMessageBox } from 'element-plus'; + import { VirtualCombobox } from '@/components/ui/virtual-combobox'; import { storeToRefs } from 'pinia'; import { toast } from 'vue-sonner'; import { useI18n } from 'vue-i18n'; @@ -589,6 +592,9 @@ const { showFullscreenImageDialog } = useGalleryStore(); const { currentUser, isLocalUserVrcPlusSupporter } = storeToRefs(useUserStore()); const { cachedConfig } = storeToRefs(useAuthStore()); + const cachedConfigTyped = computed( + () => /** @type {{ maxUserEmoji?: number, maxUserStickers?: number }} */ (cachedConfig.value ?? {}) + ); const emojiAnimFps = ref(15); const emojiAnimFrameCount = ref(4); @@ -596,6 +602,19 @@ const emojiAnimationStyle = ref('Stop'); const emojiAnimLoopPingPong = ref(false); + const emojiStylePickerGroups = computed(() => [ + { + key: 'emojiAnimationStyles', + label: t('dialog.gallery_icons.emoji_animation_styles'), + items: Object.entries(emojiAnimationStyleList).map(([styleName, fileName]) => ({ + value: styleName, + label: styleName, + search: styleName, + fileName + })) + } + ]); + const pendingUploads = ref(0); const isUploading = computed(() => pendingUploads.value > 0);