Components
Button triggers actions with a clear visual hierarchy, from Meta's Astryx design system. Variants: primary, secondary, ghost, destructive; sizes sm/md/lg; disabled and loading states; leading icon and trailing endContent slots for badges or counts.
npx @21st-dev/cli add Astryxdesign/astryx-buttonLoading preview...
'use client';
import Button from '@/components/ui/astryx-button';
import {Theme} from '@astryxdesign/core/theme';
import {neutralTheme} from '@astryxdesign/theme-neutral/built';
import {Stack} from '@astryxdesign/core/Layout';
import {Text} from '@astryxdesign/core/Text';
const VARIANTS = [
{variant: 'primary' as const, label: 'Primary'},
{variant: 'secondary' as const, label: 'Secondary'},
{variant: 'ghost' as const, label: 'Ghost'},
{variant: 'destructive' as const, label: 'Destructive'},
];
export default function ButtonVariants() {
return (
<Theme theme={neutralTheme}>
<div
style={{
minHeight: '100dvh',
display: 'grid',
placeItems: 'center',
padding: 24,
}}>
<Stack direction="vertical" gap={4}>
<Stack direction="vertical" gap={1}>
<Text type="supporting" color="secondary">
Default
</Text>
<Stack direction="horizontal" gap={3} vAlign="center">
{VARIANTS.map(({variant, label}) => (
<Button key={variant} label={label} variant={variant} />
))}
</Stack>
</Stack>
<Stack direction="vertical" gap={1}>
<Text type="supporting" color="secondary">
Disabled
</Text>
<Stack direction="horizontal" gap={3} vAlign="center">
{VARIANTS.map(({variant, label}) => (
<Button
key={variant}
label={label}
variant={variant}
isDisabled
/>
))}
</Stack>
</Stack>
<Stack direction="vertical" gap={1}>
<Text type="supporting" color="secondary">
Loading
</Text>
<Stack direction="horizontal" gap={3} vAlign="center">
{VARIANTS.map(({variant, label}) => (
<Button
key={variant}
label={label}
variant={variant}
isLoading
/>
))}
</Stack>
</Stack>
</Stack>
</div>
</Theme>
);
}
Loading preview...
Loading preview...
Loading preview...
Loading preview...