import type { Meta, StoryObj } from '@storybook/react-vite' import { expect, fn } from 'storybook/test' import { MaterialIcon } from '../Icons/MaterialIcon' import { IconButton } from './IconButton' import { config } from './variants' const meta: Meta = { title: 'Components/IconButton', component: IconButton, argTypes: { onPress: { table: { disable: true, }, }, theme: { control: 'select', options: Object.keys(config.variants.theme), default: 'Primary', }, style: { control: 'select', options: Object.keys(config.variants.style), default: 'Normal', type: 'string', description: `The style variant is only applied on certain variants. The examples below shows the possible combinations of variants and style variants.`, }, }, } export default meta type Story = StoryObj export const PrimaryDefault: Story = { args: { onPress: fn(), children: , theme: 'Primary', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const PrimaryDisabled: Story = { args: { ...PrimaryDefault.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, } export const InvertedDefault: Story = { args: { onPress: fn(), children: ( ), theme: 'Inverted', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const InvertedDisabled: Story = { args: { ...InvertedDefault.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, } export const InvertedElevated: Story = { args: { ...InvertedDefault.args, style: 'Elevated', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const InvertedElevatedDisabled: Story = { args: { ...InvertedElevated.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, } export const InvertedMuted: Story = { args: { ...InvertedDefault.args, children: , style: 'Muted', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const InvertedMutedDisabled: Story = { args: { ...InvertedMuted.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, } export const InvertedFaded: Story = { args: { ...InvertedDefault.args, style: 'Faded', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const InvertedFadedDisabled: Story = { args: { ...InvertedFaded.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, } export const TertiaryElevated: Story = { args: { onPress: fn(), children: , theme: 'Tertiary', style: 'Elevated', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const TertiaryDisabled: Story = { args: { ...TertiaryElevated.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, } export const BlackMuted: Story = { args: { onPress: fn(), children: , theme: 'Black', }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const BlackMutedDisabled: Story = { args: { ...BlackMuted.args, isDisabled: true, }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(canvas.getByRole('button')) expect(args.onPress).toHaveBeenCalledTimes(0) }, }