import type { Meta, StoryObj } from "@storybook/nextjs-vite" import { expect, fn } from "storybook/test" import { BackToTopButton } from "." import { config as backToTopButtonConfig } from "./variants" const meta: Meta = { title: "Patterns/BackToTopButton", component: BackToTopButton, argTypes: { onPress: { table: { disable: true, }, }, position: { control: "select", options: Object.keys(backToTopButtonConfig.variants.position), table: { type: { summary: "string", detail: Object.keys(backToTopButtonConfig.variants.position).join( " | " ), }, defaultValue: { summary: backToTopButtonConfig.defaultVariants.position, }, }, }, label: { control: "text", }, }, } export default meta type Story = StoryObj const globalStoryPropsInverted = { backgrounds: { value: "scandicPrimaryDark" }, } export const Default: Story = { args: { onPress: fn(), label: "Back to top", }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(await canvas.findByRole("button")) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const PositionLeft: Story = { args: { ...Default.args, position: "left", }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(await canvas.findByRole("button")) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const PositionCenter: Story = { args: { ...Default.args, position: "center", }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(await canvas.findByRole("button")) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const PositionRight: Story = { args: { ...Default.args, position: "right", }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(await canvas.findByRole("button")) expect(args.onPress).toHaveBeenCalledTimes(1) }, } export const OnDarkBackground: Story = { globals: globalStoryPropsInverted, args: { onPress: fn(), label: "Back to top", }, play: async ({ canvas, userEvent, args }) => { await userEvent.click(await canvas.findByRole("button")) expect(args.onPress).toHaveBeenCalledTimes(1) }, }