2019-02-02 14:11:36 -05:00
|
|
|
<template>
|
2022-03-21 20:59:25 +02:00
|
|
|
<span
|
2020-08-18 23:57:42 +03:00
|
|
|
class="Avatar"
|
2022-03-21 20:59:25 +02:00
|
|
|
:class="{ '-compact': compact }"
|
2022-03-29 15:35:18 +03:00
|
|
|
>
|
2025-09-07 15:02:04 -04:00
|
|
|
<div
|
|
|
|
|
v-if="user && user.is_cat && canShowEars && !showPlaceholder && earsReady"
|
|
|
|
|
class="ears"
|
|
|
|
|
:style="{'color': earsColor}"
|
|
|
|
|
>
|
|
|
|
|
<div class="earLeft" />
|
|
|
|
|
<div class="earRight" />
|
|
|
|
|
</div>
|
2022-03-21 20:59:25 +02:00
|
|
|
<StillImage
|
|
|
|
|
v-if="user"
|
|
|
|
|
class="avatar"
|
|
|
|
|
:alt="user.screen_name_ui"
|
|
|
|
|
:title="user.screen_name_ui"
|
|
|
|
|
:src="imgSrc(user.profile_image_url_original)"
|
|
|
|
|
:image-load-error="imageLoadError"
|
|
|
|
|
:class="{ '-compact': compact, '-better-shadow': betterShadow }"
|
|
|
|
|
/>
|
|
|
|
|
<div
|
|
|
|
|
v-else
|
|
|
|
|
class="avatar -placeholder"
|
|
|
|
|
:class="{ '-compact': compact }"
|
|
|
|
|
/>
|
2025-09-07 15:02:04 -04:00
|
|
|
|
2022-03-14 09:35:29 +02:00
|
|
|
<FAIcon
|
|
|
|
|
v-if="bot"
|
|
|
|
|
icon="robot"
|
|
|
|
|
class="bot-indicator"
|
|
|
|
|
/>
|
2022-03-21 20:59:25 +02:00
|
|
|
</span>
|
2019-02-02 14:11:36 -05:00
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script src="./user_avatar.js"></script>
|
2019-02-02 14:33:13 -05:00
|
|
|
<style lang="scss">
|
|
|
|
|
@import '../../_variables.scss';
|
|
|
|
|
|
2025-09-07 15:02:04 -04:00
|
|
|
/* ears ripped from https://github.com/ihateblueb/aster/blob/main/packages/frontend/src/lib/components/Avatar.svelte */
|
2020-08-18 23:57:42 +03:00
|
|
|
.Avatar {
|
2020-10-29 20:03:53 +02:00
|
|
|
--_avatarShadowBox: var(--avatarStatusShadow);
|
|
|
|
|
--_avatarShadowFilter: var(--avatarStatusShadowFilter);
|
|
|
|
|
--_avatarShadowInset: var(--avatarStatusShadowInset);
|
2023-09-12 03:36:14 -07:00
|
|
|
// --_still-image-label-visibility: hidden;
|
2020-08-18 23:57:42 +03:00
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
display: inline-block;
|
|
|
|
|
position: relative;
|
2019-02-02 14:33:13 -05:00
|
|
|
width: 48px;
|
|
|
|
|
height: 48px;
|
2019-02-02 15:33:02 -05:00
|
|
|
|
2025-09-07 15:02:04 -04:00
|
|
|
&:hover {
|
|
|
|
|
.ears {
|
|
|
|
|
.earLeft {
|
|
|
|
|
animation: earwiggleleft 1s infinite;
|
|
|
|
|
}
|
|
|
|
|
.earRight {
|
|
|
|
|
animation: earwiggleright 1s infinite;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
&.-compact {
|
|
|
|
|
width: 32px;
|
|
|
|
|
height: 32px;
|
|
|
|
|
border-radius: $fallback--avatarAltRadius;
|
|
|
|
|
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.avatar {
|
2019-02-02 15:33:02 -05:00
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
2022-03-21 20:59:25 +02:00
|
|
|
box-shadow: var(--_avatarShadowBox);
|
|
|
|
|
border-radius: $fallback--avatarRadius;
|
|
|
|
|
border-radius: var(--avatarRadius, $fallback--avatarRadius);
|
2019-02-02 14:33:13 -05:00
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
&.-better-shadow {
|
|
|
|
|
box-shadow: var(--_avatarShadowInset);
|
|
|
|
|
filter: var(--_avatarShadowFilter);
|
|
|
|
|
}
|
2022-03-01 00:35:00 +03:00
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
&.-animated::before {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&.-compact {
|
|
|
|
|
border-radius: $fallback--avatarAltRadius;
|
|
|
|
|
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
|
|
|
|
|
}
|
2019-02-02 14:33:13 -05:00
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
&.-placeholder {
|
|
|
|
|
background-color: $fallback--fg;
|
|
|
|
|
background-color: var(--fg, $fallback--fg);
|
|
|
|
|
}
|
2019-02-02 14:33:13 -05:00
|
|
|
}
|
|
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
2019-02-02 14:33:13 -05:00
|
|
|
}
|
2020-09-06 15:28:09 +03:00
|
|
|
|
2022-03-21 20:59:25 +02:00
|
|
|
.bot-indicator {
|
|
|
|
|
position: absolute;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
margin: -0.2em;
|
|
|
|
|
padding: 0.2em;
|
|
|
|
|
background: rgba(127, 127, 127, 0.5);
|
|
|
|
|
color: #fff;
|
|
|
|
|
border-radius: var(--tooltipRadius);
|
2020-09-06 15:28:09 +03:00
|
|
|
}
|
2022-03-21 20:59:25 +02:00
|
|
|
|
2025-09-07 15:02:04 -04:00
|
|
|
.ears {
|
|
|
|
|
contain: strict;
|
|
|
|
|
position: absolute;
|
|
|
|
|
z-index: 0;
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
|
|
top: -50%;
|
|
|
|
|
left: -50%;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
padding: 50%;
|
|
|
|
|
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
|
|
|
|
|
.earLeft,
|
|
|
|
|
.earRight {
|
|
|
|
|
contain: strict;
|
|
|
|
|
display: inline-block;
|
|
|
|
|
height: 50%;
|
|
|
|
|
width: 50%;
|
|
|
|
|
background: currentColor;
|
|
|
|
|
|
|
|
|
|
&::after {
|
|
|
|
|
contain: strict;
|
|
|
|
|
content: '';
|
|
|
|
|
display: block;
|
|
|
|
|
width: 60%;
|
|
|
|
|
height: 60%;
|
|
|
|
|
margin: 20%;
|
|
|
|
|
background: #df548f;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.earLeft {
|
|
|
|
|
transform: rotate(37.5deg) skew(30deg);
|
|
|
|
|
|
|
|
|
|
&,
|
|
|
|
|
&::after {
|
|
|
|
|
border-radius: 25% 75% 75%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.earRight {
|
|
|
|
|
transform: rotate(-37.5deg) skew(-30deg);
|
|
|
|
|
|
|
|
|
|
&,
|
|
|
|
|
&::after {
|
|
|
|
|
border-radius: 75% 25% 75% 75%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes earwiggleleft {
|
|
|
|
|
from {
|
|
|
|
|
transform: rotate(37.6deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
25% {
|
|
|
|
|
transform: rotate(10deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
50% {
|
|
|
|
|
transform: rotate(20deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
75% {
|
|
|
|
|
transform: rotate(0deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
to {
|
|
|
|
|
transform: rotate(37.6deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes earwiggleright {
|
|
|
|
|
from {
|
|
|
|
|
transform: rotate(-37.6deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
30% {
|
|
|
|
|
transform: rotate(-10deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
55% {
|
|
|
|
|
transform: rotate(-20deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
75% {
|
|
|
|
|
transform: rotate(0deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
to {
|
|
|
|
|
transform: rotate(-37.6deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes eartightleft {
|
|
|
|
|
from {
|
|
|
|
|
transform: rotate(37.6deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
50% {
|
|
|
|
|
transform: rotate(37.4deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
to {
|
|
|
|
|
transform: rotate(37.6deg) skew(30deg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes eartightright {
|
|
|
|
|
from {
|
|
|
|
|
transform: rotate(-37.6deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
50% {
|
|
|
|
|
transform: rotate(-37.4deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
to {
|
|
|
|
|
transform: rotate(-37.6deg) skew(-30deg);
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-02-02 14:33:13 -05:00
|
|
|
}
|
|
|
|
|
</style>
|