import { cssVar } from '@toeverything/theme'; import { keyframes, style } from '@vanilla-extract/css'; // variables const bg = cssVar('placeholderColor'); const highlight = 'rgba(255, 255, 255, 0.4)'; const defaultHeight = '32px'; const pulseKeyframes = keyframes({ '0%': { opacity: 1, }, '50%': { opacity: 0.5, }, '100%': { opacity: 1, }, }); const waveKeyframes = keyframes({ '0%': { transform: 'translateX(-100%)', }, '50%': { transform: 'translateX(100%)', }, '100%': { transform: 'translateX(100%)', }, }); export const root = style({ display: 'block', width: '100%', height: defaultHeight, flexShrink: 0, /** * paint background in ::before, * so that we can use opacity to control the color **/ position: 'relative', '::before': { content: '', position: 'absolute', borderRadius: 'inherit', inset: 0, opacity: 0.3, backgroundColor: bg, }, }); export const variant = { circular: style({ width: defaultHeight, borderRadius: '50%', }), rectangular: style({ borderRadius: '0px', }), rounded: style({ borderRadius: '8px', }), text: style({ borderRadius: '4px', height: '1.2em', marginTop: '0.2em', marginBottom: '0.2em', }), }; export const animation = { pulse: style({ animation: `${pulseKeyframes} 2s ease-in-out 0.5s infinite`, }), wave: style({ position: 'relative', overflow: 'hidden', /* Fix bug in Safari https://bugs.webkit.org/show_bug.cgi?id=68196 */ WebkitMaskImage: '-webkit-radial-gradient(white, black)', '::after': { animation: `${waveKeyframes} 2s linear 0.5s infinite`, background: `linear-gradient( 90deg, transparent, ${highlight}, transparent )`, content: '', position: 'absolute', transform: 'translateX(-100%)' /* Avoid flash during server-side hydration */, bottom: 0, left: 0, right: 0, top: 0, }, }), };