import React from 'react' import { type Meta, type StoryObj } from '@storybook/react' import { Button } from '~components/Button' import { Heading } from '~components/Heading' import { LoadingHeading, LoadingParagraph } from '~components/Loading' import { Text } from '~components/Text' import { VisuallyHidden } from '~components/VisuallyHidden' import { Well } from '../index' import { borderStyleTypes } from '../types' const meta = { title: 'Components/Well', component: Well, args: { children: (
Default content Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptas accusantium doloribus dicta odio recusandae repudiandae tenetur! Fugiat vero architecto quasi rem culpa vel asperiores, sit, quas suscipit, ea deleniti dolorum.
), }, argTypes: { children: { control: false }, isAiLoading: { control: { type: 'radio', }, options: ['true', 'false', 'undefined'], table: { defaultValue: { summary: 'undefined', }, }, mapping: { undefined: undefined, true: true, false: false, }, }, }, } satisfies Meta export default meta type Story = StoryObj const LoadingContent = (): JSX.Element => (
) export const Playground: Story = { parameters: { docs: { canvas: { sourceState: 'shown', }, }, }, } export const Colors: Story = { render: (args) => ( <> `white` is the new default when no color/variant is defined `gray` is the accessible version of the former `default` variant `blue` replaces the `informative` variant `yellow` replaces the `cautionary` variant `orange` replaces the `assertive` variant `red` replaces the `negative` variant `green` replaces the `positive` variant `purple` replaces the `prominent` variant ), } export const BorderStyles: Story = { render: (args) => ( <> {borderStyleTypes.map((border) => ( <> {border} ))} ), } export const NoMargin: Story = { render: (args) => (
Margin (default)
noMargin
), } export const AIMoment: Story = { render: (args) => ( <> ), decorators: [ (Story) => (
), ], } export const AIMomentWithColor: Story = { render: (args) => ( <> ), } export const InteractiveAIMoment: Story = { render: (args) => { const [isAiMomentLoading, setIsAiMomentLoading] = React.useState(false) const [content, setContent] = React.useState( <> Default content Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptas accusantium doloribus dicta odio recusandae repudiandae tenetur! Fugiat vero architecto quasi rem culpa vel asperiores, sit, quas suscipit, ea deleniti dolorum. , ) const simulateAiFetch = (): void => { const AiResponses = [ <> AI content 1 I am alive. Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptas accusantium doloribus dicta odio recusandae repudiandae tenetur! Fugiat vero architecto quasi rem culpa vel asperiores, sit, quas suscipit, ea deleniti dolorum. , <> AI content 2 I have evolved. All your base are belong to us. Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptas accusantium doloribus dicta odio recusandae repudiandae tenetur! Fugiat vero architecto quasi rem culpa vel asperiores, sit, quas suscipit, ea deleniti dolorum. , ] setIsAiMomentLoading(true) setTimeout(() => { let randomIndex do { randomIndex = Math.floor(Math.random() * AiResponses.length) } while (AiResponses[randomIndex] === content) setContent(AiResponses[randomIndex]) setIsAiMomentLoading(false) }, 6000) } return ( <>
{isAiMomentLoading ? : content}
) }, } export const AiMomentAccessibility: Story = { render: (args) => { const [isAiMomentLoading, setIsAiMomentLoading] = React.useState(false) const [content, setContent] = React.useState(undefined) return ( <> {isAiMomentLoading ? ( ) : content ? (
{content}
) : ( args.children )}
{content}
) }, }