import { useState } from 'react' import { ArrowLeftIcon, BookmarkFilledIcon, CallInProgressIcon, ChannelBtnFilledIcon, CheckCircleIcon, ChevronDownDoubleIcon, ChevronRightIcon, ClockIcon, EditIcon, EmailIcon, ErrorTriangleFilledIcon, type IconName, InboxIcon, InfoFilledIcon, SendForwardFilledIcon, SettingsIcon, TrashIcon, icons, } from '@channel.io/bezier-icons' import { type Meta, type StoryFn, type StoryObj } from '@storybook/react' import { type BetaSemanticColor } from '~/src/types/beta-tokens' import { camelCase } from '~/src/utils/string' import { LegacyHStack, LegacyStackItem, LegacyVStack, } from '~/src/components/LegacyStack' import { ListItem } from '~/src/components/ListItem' import { Select } from '~/src/components/Select' import { Stack } from '~/src/components/Stack' import { Text } from '~/src/components/Text' import { useBetaTokens } from '~/src/components/ThemeProvider' import { Icon } from './Icon' import mdx from './Icon.mdx' import { type IconProps } from './Icon.types' const meta: Meta = { component: Icon, parameters: { docs: { page: mdx, }, }, tags: ['!autodocs'], } export default meta export const Primary: StoryObj = { args: { source: ChannelBtnFilledIcon, size: 'm', color: 'icon-neutral-heavier', }, } const pascalCase = (str: string) => camelCase(str).replace(/^./, (char) => char.toUpperCase()) export const AllIcons: StoryObj> = { render: (args) => ( <> {(Object.keys(icons) as IconName[]).map((iconName) => ( {pascalCase(iconName)} ))} ), args: { size: 'm', color: 'icon-neutral-heavier', }, } export const Overview: StoryFn<{}> = () => ( {[ ChannelBtnFilledIcon, CheckCircleIcon, InfoFilledIcon, ErrorTriangleFilledIcon, SendForwardFilledIcon, EmailIcon, InboxIcon, CallInProgressIcon, EditIcon, SettingsIcon, TrashIcon, ClockIcon, ChevronRightIcon, ArrowLeftIcon, ChevronDownDoubleIcon, BookmarkFilledIcon, ].map((source, i) => ( // eslint-disable-next-line react/no-array-index-key ))} {[ 'icon-neutral-heavier' as const, 'icon-accent-blue' as const, 'icon-accent-cobalt' as const, 'icon-accent-teal' as const, 'icon-accent-green' as const, 'icon-accent-olive' as const, 'icon-accent-yellow' as const, 'icon-accent-orange' as const, 'icon-accent-red' as const, 'icon-accent-pink' as const, 'icon-accent-purple' as const, 'icon-accent-navy' as const, ].map((semanticName) => ( ))} {(['xxxs', 'xxs', 'xs', 's', 'm', 'l', 'xl'] as const).map((size) => ( ))} ) function ColorIcon() { const [color, setColor] = useState('icon-accent-blue') return ( ) } export const UsageColor: StoryObj<{}> = { render: () => , name: 'Usage (color)', } export const UsageSize: StoryFn<{}> = () => ( {(['xxxs', 'xxs', 'xs', 's', 'm', 'l', 'xl'] as const).map((size) => ( {size} ))} ) export const TipsMargin: StoryObj<{}> = { render: () => (
), name: 'Tips (margin)', }