Skip to content

Commit bd8c3d5

Browse files
[6.x] Better Collaboration Avatars (#14511)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent 8a48cc5 commit bd8c3d5

1 file changed

Lines changed: 24 additions & 3 deletions

File tree

resources/js/components/ui/Publish/Field.vue

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { computed, useTemplateRef, watch, ref, inject } from 'vue';
33
import { injectContainerContext } from './Container.vue';
44
import { injectFieldsContext } from './FieldsProvider.vue';
55
import {
6+
Avatar,
67
Field,
7-
Icon,
88
Label,
99
} from '@ui';
1010
import 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

Comments
 (0)