import type { ComponentProps } from 'react';
import FaceSmile from '@mildang/icons/react/face-smile';
import { Sticker } from '@mildang/design-system/Sticker';
import { HStack, VStack } from '@mildang/styled-system/jsx';
import { type ReactNode } from 'react';
import { css } from '@mildang/styled-system/css';
// 스티커 아래에 토큰명을 캡션으로 붙이는 데모 전용 래퍼.
// label=배경(bg) 토큰. sub=아이콘색이 bg role과 다를 때만 아랫줄에 흐리게 표기(긴 라벨 방지).
const Swatch = ({ label, sub, children }: { label: string; sub?: string; children: ReactNode }) => (
<VStack gap="6" alignItems="center">
{children}
<VStack gap="0" alignItems="center">
<span className={css({ textStyle: 'caption-sm', color: 'neutral.text.low', whiteSpace: 'nowrap' })}>
{label}
</span>
{sub && (
<span className={css({ textStyle: 'caption-sm', color: 'neutral.text.lowest', whiteSpace: 'nowrap' })}>
{sub}
</span>
)}
</VStack>
</VStack>
);
const STORY_DEFAULT_ARGS = { ...({
icon: <FaceSmile />,
}), ...({}) } as ComponentProps<typeof Sticker>;
const StickerColorsExampleRender = (args: ComponentProps<typeof Sticker>) => (
<VStack alignItems="flex-start" gap="20">
<HStack alignItems="flex-start" gap="16">
<Swatch label="neutral.surface.low">
<Sticker {...args} size="xl" bg="neutral.surface.low" color="neutral.icon.base" />
</Swatch>
<Swatch label="neutral.surface.high">
<Sticker {...args} size="xl" bg="neutral.surface.high" color="neutral.icon.base" />
</Swatch>
<Swatch label="neutral.surface.highest">
<Sticker {...args} size="xl" bg="neutral.surface.highest" color="neutral.icon.base" />
</Swatch>
</HStack>
<HStack alignItems="flex-start" gap="16">
<Swatch label="primary.surface.base">
<Sticker {...args} size="xl" bg="primary.surface.base" color="primary.icon.base" />
</Swatch>
<Swatch label="primary.surface.high">
<Sticker {...args} size="xl" bg="primary.surface.high" color="primary.icon.base" />
</Swatch>
</HStack>
<HStack alignItems="flex-start" gap="16">
<Swatch label="brand.surface.low">
<Sticker {...args} size="xl" bg="brand.surface.low" color="brand.icon.base" />
</Swatch>
<Swatch label="brand.surface.base">
<Sticker {...args} size="xl" bg="brand.surface.base" color="brand.icon.base" />
</Swatch>
<Swatch label="brand.surface.high">
<Sticker {...args} size="xl" bg="brand.surface.high" color="brand.icon.base" />
</Swatch>
<Swatch label="brand.surface.highest">
<Sticker {...args} size="xl" bg="brand.surface.highest" color="brand.icon.base" />
</Swatch>
<Swatch label="brand.surface.highest" sub="+ inverse.icon.base">
<Sticker {...args} size="xl" bg="brand.surface.highest" color="inverse.icon.base" />
</Swatch>
</HStack>
<HStack alignItems="flex-start" gap="16">
<Swatch label="positive.surface.low">
<Sticker {...args} size="xl" bg="positive.surface.low" color="positive.icon.base" />
</Swatch>
<Swatch label="positive.surface.base">
<Sticker {...args} size="xl" bg="positive.surface.base" color="positive.icon.base" />
</Swatch>
<Swatch label="positive.surface.high">
<Sticker {...args} size="xl" bg="positive.surface.high" color="positive.icon.base" />
</Swatch>
</HStack>
<HStack alignItems="flex-start" gap="16">
<Swatch label="critical.surface.base">
<Sticker {...args} size="xl" bg="critical.surface.base" color="critical.icon.base" />
</Swatch>
<Swatch label="critical.surface.high">
<Sticker {...args} size="xl" bg="critical.surface.high" color="critical.icon.base" />
</Swatch>
</HStack>
<HStack alignItems="flex-start" gap="16">
<Swatch label="warning.surface.base">
<Sticker {...args} size="xl" bg="warning.surface.base" color="warning.icon.base" />
</Swatch>
<Swatch label="warning.surface.high">
<Sticker {...args} size="xl" bg="warning.surface.high" color="warning.icon.base" />
</Swatch>
</HStack>
<HStack alignItems="flex-start" gap="16">
<Swatch label="info.surface.base">
<Sticker {...args} size="xl" bg="info.surface.base" color="info.icon.base" />
</Swatch>
<Swatch label="info.surface.high">
<Sticker {...args} size="xl" bg="info.surface.high" color="info.icon.base" />
</Swatch>
</HStack>
</VStack>
);
export default function StickerColorsExample(props: Partial<ComponentProps<typeof Sticker>>) {
const mergedProps = { ...STORY_DEFAULT_ARGS, ...props } as ComponentProps<typeof Sticker>;
return StickerColorsExampleRender(mergedProps);
}