From 90665502e8518f1a4a1b6614eea8b11a5106dfaf Mon Sep 17 00:00:00 2001 From: Alexander Platov Date: Thu, 11 Apr 2024 06:40:23 +0300 Subject: [PATCH] Updated Avatar: add border, pulse (#5306) Signed-off-by: Alexander Platov --- .../src/components/Avatar.svelte | 89 ++++++++----------- 1 file changed, 35 insertions(+), 54 deletions(-) diff --git a/plugins/contact-resources/src/components/Avatar.svelte b/plugins/contact-resources/src/components/Avatar.svelte index 8ddc9aeb23..8a04f2c67d 100644 --- a/plugins/contact-resources/src/components/Avatar.svelte +++ b/plugins/contact-resources/src/components/Avatar.svelte @@ -39,6 +39,7 @@ IconSize, getPlatformAvatarColorByName, getPlatformAvatarColorForTextDef, + getPlatformColor, themeStore, resizeObserver } from '@hcengineering/ui' @@ -52,14 +53,24 @@ export let size: IconSize export let icon: Asset | AnySvelteComponent | undefined = undefined export let variant: 'circle' | 'roundedRect' | 'none' = 'roundedRect' + export let borderColor: number | undefined = undefined + + export function pulse (): void { + if (element) element.animate(pulsating, { duration: 150, easing: 'ease-in' }) + } let url: string[] | undefined let avatarProvider: AvatarProvider | undefined let color: ColorDefinition | undefined = undefined let fontSize: number = 16 let element: HTMLElement + const pulsating: Keyframe[] = [ + { boxShadow: '0 0 .75rem 0 var(--theme-bg-color), 0 0 .75rem .125rem var(--border-color)' }, + { boxShadow: '0 0 0 0 var(--theme-bg-color), 0 0 0 0 var(--border-color)' } + ] $: displayName = getDisplayName(name) + $: bColor = borderColor !== undefined ? getPlatformColor(borderColor, $themeStore.dark) : undefined function getDisplayName (name: string | null | undefined): string { if (name == null) { @@ -103,8 +114,6 @@ } $: update(size, avatar, direct, name) - let imageElement: HTMLImageElement | undefined = undefined - $: srcset = url?.slice(1)?.join(', ') onMount(() => { @@ -120,6 +129,8 @@ class="ava-{size} flex-center avatar-container {variant}" class:no-img={!url && color} class:bordered={!url && color === undefined} + class:border={bColor !== undefined} + style:--border-color={bColor ?? 'var(--primary-button-default)'} style:background-color={color && !url ? color.icon : 'var(--theme-button-default)'} use:resizeObserver={(element) => { fontSize = element.clientWidth * 0.6 @@ -134,16 +145,16 @@ {:else}
{#if url} - {#if size === 'large' || size === 'x-large' || size === '2x-large'} - {''} - {/if} - {''} + {''} {:else if name && displayName && displayName !== ''}