website refactor

This commit is contained in:
2026-01-18 22:55:55 +01:00
parent b43a23a48c
commit aeaa43f4d3
179 changed files with 4736 additions and 6832 deletions

View File

@@ -1,39 +1,57 @@
import React from 'react';
import { Box } from './primitives/Box';
import { Icon } from './Icon';
import { Image as ImageIcon } from 'lucide-react';
import { Image as ImageIcon, AlertCircle, Loader2 } from 'lucide-react';
import { Text } from './Text';
export interface ImagePlaceholderProps {
width?: string | number;
height?: string | number;
animate?: 'pulse' | 'none' | 'spin';
aspectRatio?: string;
variant?: 'default' | 'loading' | 'error';
message?: string;
}
export const ImagePlaceholder = ({
width = '100%',
height = '100%',
animate = 'pulse',
aspectRatio
aspectRatio,
variant = 'default',
message
}: ImagePlaceholderProps) => {
const icons = {
default: ImageIcon,
loading: Loader2,
error: AlertCircle,
};
return (
<Box
width={width}
height={height}
aspectRatio={aspectRatio}
display="flex"
flexDirection="col"
alignItems="center"
justifyContent="center"
bg="var(--ui-color-bg-surface-muted)"
style={{ borderRadius: 'var(--ui-radius-md)' }}
gap={2}
>
<Icon
icon={ImageIcon}
icon={icons[variant]}
size={8}
intent="low"
animate={animate === 'spin' ? 'spin' : 'none'}
className={animate === 'pulse' ? 'animate-pulse' : ''}
animate={variant === 'loading' ? 'spin' : (animate === 'spin' ? 'spin' : 'none')}
className={animate === 'pulse' && variant !== 'loading' ? 'animate-pulse' : ''}
/>
{message && (
<Text size="xs" variant="low" align="center" paddingX={4}>
{message}
</Text>
)}
</Box>
);
};