import React from 'react' import { type Meta, type StoryObj } from '@storybook/react' import { VisuallyHidden } from 'react-aria' import { Button } from '~components/Button' import { Heading } from '~components/Heading' import { LoadingHeading, LoadingParagraph } from '~components/Loading' import { Text } from '~components/Text' import { Card, type CardProps } from '../index' const LoadingContent = (): JSX.Element => (
) const Content = (): JSX.Element => (
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 meta = { title: 'Components/Card', component: Card, args: { children: , }, argTypes: { 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 export const Playground: Story = { parameters: { docs: { canvas: { sourceState: 'shown', }, }, }, } const colors = [ 'blue', 'green', 'gray', 'orange', 'purple', 'red', 'white', 'yellow', ] satisfies CardProps['color'][] export const Colors: Story = { render: () => (
    {colors.map((color) => (
  • This is a default container
  • ))}
), } export const Elevation: Story = { render: () => (
  • Default
  • isElevated
), } 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}
) }, }