@@ -3,8 +3,8 @@ import { computed, useTemplateRef, watch, ref, inject } from 'vue';
33import { injectContainerContext } from ' ./Container.vue' ;
44import { injectFieldsContext } from ' ./FieldsProvider.vue' ;
55import {
6+ Avatar ,
67 Field ,
7- Icon ,
88 Label ,
99} from ' @ui' ;
1010import FieldActions from ' @/components/field-actions/FieldActions.vue' ;
@@ -242,7 +242,16 @@ const fieldtypeComponentEvents = computed(() => ({
242242 v- bind= " $attrs"
243243 >
244244 < template #label v- if = " shouldShowLabel" >
245- < Label : for = " fieldId" : required= " isRequired" >
245+ < Label : for = " fieldId" : required= " isRequired" class = " relative" >
246+ < Transition name= " lock-avatar-pop" mode= " out-in" >
247+ < Avatar
248+ v- if = " isLocked"
249+ : key= " `lock-avatar-${handle}-${lockedBy?.id}`"
250+ : user= " lockedBy"
251+ class = " inline-flex mx-1 -start-8 -top-0.5 absolute rounded-full size-6 text-3xs"
252+ v- tooltip= " lockedBy.name"
253+ / >
254+ < / Transition>
246255 < template v- if = " shouldShowLabelText" >
247256 < span v- tooltip= " config.handle" >
248257 {{ __ (config .display ) }}
@@ -251,7 +260,6 @@ const fieldtypeComponentEvents = computed(() => ({
251260 < template v- else - if = " config.hide_display" >
252261 < span class = " sr-only" > {{ __ (config .display ) }}< / span>
253262 < / template>
254- < ui- avatar v- if = " isLocked" : user= " lockedBy" class = " rounded-full w-4 h-4 text-2xs" v- tooltip= " lockedBy.name" / >
255263 < ui- button size= " xs" inset icon= " synced" variant= " ghost" v- tooltip= " __('messages.field_synced_with_origin')" v- if = " !isReadOnly && isSyncable" v- show= " isSynced" @click= " desync" / >
256264 < ui- button size= " xs" inset icon= " unsynced" variant= " ghost" v- tooltip= " __('messages.field_desynced_from_origin')" v- if = " !isReadOnly && isSyncable" v- show= " !isSynced" @click= " sync" / >
257265 < / Label>
@@ -273,3 +281,16 @@ const fieldtypeComponentEvents = computed(() => ({
273281 < / Field>
274282 < / slot>
275283< / template>
284+
285+ < style scoped>
286+ .lock - avatar- pop- enter- active,
287+ .lock - avatar- pop- leave- active {
288+ transition: opacity 120ms ease, transform 120ms ease;
289+ }
290+
291+ .lock - avatar- pop- enter- from,
292+ .lock - avatar- pop- leave- to {
293+ opacity: 0 ;
294+ transform: translateX (- 5px ) scale (0.85 );
295+ }
296+ < / style>
0 commit comments