You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/conversation/TypingAnimation.tsx

87 lines
1.6 KiB
TypeScript

import React from 'react';
import styled from 'styled-components';
const StyledTypingContainer = styled.div`
display: inline-flex;
flex-direction: row;
align-items: center;
height: 8px;
width: 38px;
padding-inline-start: 1px;
padding-inline-end: 1px;
`;
const StyledTypingDot = styled.div<{ index: number }>`
border-radius: 50%;
background-color: var(--text-secondary-color);
height: 6px;
width: 6px;
opacity: 0.4;
@keyframes typing-animation-first {
0% {
opacity: 0.4;
}
20% {
transform: scale(1.3);
opacity: 1;
}
40% {
opacity: 0.4;
}
}
@keyframes typing-animation-second {
10% {
opacity: 0.4;
}
30% {
transform: scale(1.3);
opacity: 1;
}
50% {
opacity: 0.4;
}
}
@keyframes typing-animation-third {
20% {
opacity: 0.4;
}
40% {
transform: scale(1.3);
opacity: 1;
}
60% {
opacity: 0.4;
}
}
animation: ${props =>
props.index === 0
? 'typing-animation-first'
: props.index === 1
? 'typing-animation-second'
: 'typing-animation-third'}
1600ms ease infinite;
`;
const StyledSpacer = styled.div`
flex-grow: 1;
`;
export const TypingAnimation = () => {
return (
<StyledTypingContainer title={window.i18n('typingAlt')} aria-label={window.i18n('typingAlt')}>
<StyledTypingDot index={0} />
<StyledSpacer />
<StyledTypingDot index={1} />
<StyledSpacer />
<StyledTypingDot index={2} />
</StyledTypingContainer>
);
};