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);