1212 'group appearance-none bg-transparent m-0 outline-none text-left hover:bg-secondary-background focus:bg-secondary-background border-none focus:outline-solid outline-base-foreground outline-4'
1313 )
1414 "
15- @keydown.enter =" interactive && $emit('select', asset)"
15+ @keydown.enter.self =" interactive && $emit('select', asset)"
1616 >
1717 <div class =" relative aspect-square w-full overflow-hidden rounded-xl" >
1818 <div
4444 </IconButton >
4545 <MoreButton ref =" dropdown-menu-button" size =" sm" >
4646 <template #default =" {} " >
47- <IconTextButton :label =" $t('g.rename')" type =" secondary" size =" md" >
47+ <IconTextButton
48+ :label =" $t('g.rename')"
49+ type =" secondary"
50+ size =" md"
51+ @click =" startAssetRename"
52+ >
4853 <template #icon >
4954 <i class =" icon-[lucide--pencil]" />
5055 </template >
7075 )
7176 "
7277 >
73- {{ asset.name }}
78+ <EditableText
79+ :model-value =" newNameRef ?? asset.name"
80+ :is-editing =" isEditing"
81+ :input-attrs =" { 'data-testid': 'asset-name-input' }"
82+ @edit =" assetRename"
83+ @cancel =" assetRename()"
84+ />
7485 </h3 >
7586 <p
7687 :id =" descId"
105116
106117<script setup lang="ts">
107118import { useImage } from ' @vueuse/core'
108- import { computed , useId , useTemplateRef } from ' vue'
119+ import { computed , ref , useId , useTemplateRef } from ' vue'
109120
110121import IconButton from ' @/components/button/IconButton.vue'
111122import IconGroup from ' @/components/button/IconGroup.vue'
112123import IconTextButton from ' @/components/button/IconTextButton.vue'
113124import MoreButton from ' @/components/button/MoreButton.vue'
125+ import EditableText from ' @/components/common/EditableText.vue'
114126import AssetBadgeGroup from ' @/platform/assets/components/AssetBadgeGroup.vue'
115127import type { AssetDisplayItem } from ' @/platform/assets/composables/useAssetBrowser'
116128import { useSettingStore } from ' @/platform/settings/settingStore'
@@ -127,13 +139,16 @@ defineEmits<{
127139
128140const settingStore = useSettingStore ()
129141
130- const dropdownMenuButton = useTemplateRef <typeof MoreButton >(
142+ const dropdownMenuButton = useTemplateRef <InstanceType < typeof MoreButton > >(
131143 ' dropdown-menu-button'
132144)
133145
134146const titleId = useId ()
135147const descId = useId ()
136148
149+ const isEditing = ref (false )
150+ const newNameRef = ref <string >() // TEMPORARY: Replace with actual response from API
151+
137152const tooltipDelay = computed <number >(() =>
138153 settingStore .get (' LiteGraph.Node.TooltipDelay' )
139154)
@@ -142,4 +157,16 @@ const { isLoading, error } = useImage({
142157 src: asset .preview_url ?? ' ' ,
143158 alt: asset .name
144159})
160+
161+ function startAssetRename() {
162+ dropdownMenuButton .value ?.hide ()
163+ isEditing .value = true
164+ }
165+
166+ function assetRename(newName ? : string ) {
167+ isEditing .value = false
168+ if (newName ) {
169+ newNameRef .value = newName
170+ }
171+ }
145172 </script >
0 commit comments