import type { Meta, StoryObj } from "@storybook/react-vite"; import { CheckRegularIcon } from "alouette-icons/phosphor-icons/Check"; import { Story } from "../story-components/Story"; import { ActionButton } from "./ActionButton"; type ThisStory = StoryObj; export default { title: "alouette/Actions/ActionButton", component: ActionButton, parameters: { componentSubtitle: "A Button that runs a promise-returning onPress, showing a spinner while pending and flipping to the danger accent if it rejects", docs: { description: { component: `### Usage ~~~tsx { await saveChanges(); }} /> ~~~`, }, }, }, } satisfies Meta; function delay(ms: number): Promise { return new Promise((resolve) => { setTimeout(resolve, ms); }); } function rejectAfter(ms: number, message: string): Promise { return new Promise((_resolve, reject) => { setTimeout(() => { reject(new Error(message)); }, ms); }); } export const ActionButtonPreviewStory: ThisStory = { name: "ActionButton Preview", parameters: { layout: "padded", chromatic: { disableSnapshot: true }, }, args: { text: "Save", }, render: (args) => ( } errorToMessage={(error) => error instanceof Error ? error.message : "Unknown error" } onPress={() => delay(1500)} /> ), }; export const ActionButtonVariantsStory: ThisStory = { name: "ActionButton Variants", render: () => ( error instanceof Error ? error.message : "Unknown error" } onPress={() => delay(1500)} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => rejectAfter(1500, "Simulated failure")} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => delay(1500)} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => delay(1500)} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => delay(1500)} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => delay(1500)} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => rejectAfter(1500, "Simulated failure")} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => {}} /> error instanceof Error ? error.message : "Unknown error" } onPress={() => { // oxlint-disable-next-line no-console console.log("Synchronous press, no loading state"); }} /> ), };