website refactor
This commit is contained in:
@@ -1,43 +1,57 @@
|
||||
import React, { ReactNode } from 'react';
|
||||
import { Box, BoxProps } from './primitives/Box';
|
||||
import { Box } from './primitives/Box';
|
||||
import { Icon } from './Icon';
|
||||
import { LucideIcon } from 'lucide-react';
|
||||
import { Stack } from './primitives/Stack';
|
||||
|
||||
interface BadgeProps {
|
||||
export interface BadgeProps {
|
||||
children: ReactNode;
|
||||
variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
|
||||
size?: 'xs' | 'sm' | 'md';
|
||||
variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'critical' | 'info' | 'outline' | 'default' | 'danger';
|
||||
size?: 'sm' | 'md';
|
||||
style?: React.CSSProperties;
|
||||
icon?: LucideIcon;
|
||||
}
|
||||
|
||||
export function Badge({ children, variant = 'default', size = 'sm', icon }: BadgeProps) {
|
||||
const baseClasses = 'flex items-center gap-1.5 border font-bold uppercase tracking-widest';
|
||||
|
||||
const sizeClasses = {
|
||||
xs: 'px-1.5 py-0.5 text-[9px]',
|
||||
sm: 'px-2 py-0.5 text-[10px]',
|
||||
md: 'px-3 py-1 text-xs'
|
||||
export const Badge = ({
|
||||
children,
|
||||
variant = 'primary',
|
||||
size = 'md',
|
||||
style,
|
||||
icon
|
||||
}: BadgeProps) => {
|
||||
const variantClasses = {
|
||||
primary: 'bg-[var(--ui-color-intent-primary)] text-white',
|
||||
secondary: 'bg-[var(--ui-color-bg-surface)] text-[var(--ui-color-text-med)] border border-[var(--ui-color-border-default)]',
|
||||
success: 'bg-[var(--ui-color-intent-success)] text-[var(--ui-color-bg-base)]',
|
||||
warning: 'bg-[var(--ui-color-intent-warning)] text-[var(--ui-color-bg-base)]',
|
||||
critical: 'bg-[var(--ui-color-intent-critical)] text-white',
|
||||
danger: 'bg-[var(--ui-color-intent-critical)] text-white',
|
||||
info: 'bg-[var(--ui-color-intent-telemetry)] text-[var(--ui-color-bg-base)]',
|
||||
outline: 'bg-transparent text-[var(--ui-color-text-med)] border border-[var(--ui-color-border-default)]',
|
||||
default: 'bg-[var(--ui-color-bg-surface-muted)] text-[var(--ui-color-text-med)]',
|
||||
};
|
||||
|
||||
const variantClasses = {
|
||||
default: 'bg-gray-500/10 border-gray-500/30 text-gray-400',
|
||||
primary: 'bg-primary-accent/10 border-primary-accent/30 text-primary-accent',
|
||||
success: 'bg-success-green/10 border-success-green/30 text-success-green',
|
||||
warning: 'bg-warning-amber/10 border-warning-amber/30 text-warning-amber',
|
||||
danger: 'bg-critical-red/10 border-critical-red/30 text-critical-red',
|
||||
info: 'bg-telemetry-aqua/10 border-telemetry-aqua/30 text-telemetry-aqua'
|
||||
const sizeClasses = {
|
||||
sm: 'px-1.5 py-0.5 text-[10px]',
|
||||
md: 'px-2 py-0.5 text-xs',
|
||||
};
|
||||
|
||||
const classes = [
|
||||
baseClasses,
|
||||
sizeClasses[size],
|
||||
'inline-flex items-center justify-center font-bold uppercase tracking-wider rounded-none',
|
||||
variantClasses[variant],
|
||||
].filter(Boolean).join(' ');
|
||||
sizeClasses[size],
|
||||
].join(' ');
|
||||
|
||||
const content = icon ? (
|
||||
<Stack direction="row" align="center" gap={1}>
|
||||
<Icon icon={icon} size={3} />
|
||||
{children}
|
||||
</Stack>
|
||||
) : children;
|
||||
|
||||
return (
|
||||
<Box className={classes}>
|
||||
{icon && <Icon icon={icon} size={3} />}
|
||||
{children}
|
||||
<Box as="span" className={classes} style={style}>
|
||||
{content}
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user