feat: add PresetCardSkeleton component with shimmer animation

This commit is contained in:
Daniil
2026-04-06 01:25:16 +03:00
parent bca8224f16
commit face8bb811
3 changed files with 100 additions and 0 deletions
@@ -0,0 +1,74 @@
.skeletonCard {
border-radius: 12px;
overflow: hidden;
background: var(--bg-default);
border: 1px solid var(--border-subtle);
display: flex;
flex-direction: column;
}
.skeletonPreview {
aspect-ratio: 16 / 9;
background: var(--bg-surface);
position: relative;
overflow: hidden;
&::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
transparent 0%,
rgba(203, 166, 247, 0.08) 50%,
transparent 100%
);
animation: shimmer 1.5s infinite;
}
}
@keyframes shimmer {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
.skeletonFooter {
padding: 14px 16px;
background: linear-gradient(to top, var(--bg-surface), var(--bg-default));
border-top: 1px solid var(--border-subtle);
display: flex;
flex-direction: column;
gap: 10px;
}
.skeletonLine {
height: 14px;
background: var(--bg-hover);
border-radius: 4px;
width: 60%;
position: relative;
overflow: hidden;
&::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
transparent 0%,
rgba(203, 166, 247, 0.06) 50%,
transparent 100%
);
animation: shimmer 1.5s infinite;
}
}
.skeletonLineShort {
composes: skeletonLine;
width: 40%;
height: 10px;
}
@@ -0,0 +1,25 @@
import type { FunctionComponent } from "react"
import type { JSX } from "react"
import styles from "./PresetCardSkeleton.module.scss"
interface IPresetCardSkeletonProps {
aspectRatio?: number
}
export const PresetCardSkeleton: FunctionComponent<IPresetCardSkeletonProps> = ({
aspectRatio = 16 / 9,
}): JSX.Element => {
return (
<div className={styles.skeletonCard}>
<div
className={styles.skeletonPreview}
style={{ aspectRatio }}
/>
<div className={styles.skeletonFooter}>
<div className={styles.skeletonLine} />
<div className={styles.skeletonLineShort} />
</div>
</div>
)
}
@@ -1 +1,2 @@
export { CaptionSettingsStep } from "./CaptionSettingsStep"
export { PresetCardSkeleton } from "./PresetCardSkeleton"