import { useState } from 'react'
import type { Meta, StoryObj } from '@storybook/react-vite'
import { fn } from 'storybook/test'
import { ParagraphField } from './ParagraphField'
const meta = {
title: 'Components/Paragraph',
component: ParagraphField,
tags: ['autodocs'],
parameters: { layout: 'centered' },
decorators: [
(Story) => (
),
],
} satisfies Meta
export default meta
type Story = StoryObj
export const Default: Story = {
args: {
label: 'Description',
placeholder: 'Enter a description...',
},
render: (args) => {
const [value, setValue] = useState(args.value ?? '')
return
},
}
export const WithValue: Story = {
args: {
label: 'Comments',
value: 'This is an existing comment that can be edited.',
},
render: (args) => {
const [value, setValue] = useState(args.value ?? '')
return
},
}
export const WithInstructions: Story = {
args: {
label: 'Bio',
instructions: 'Write a short description about yourself. This will be visible on your profile.',
placeholder: 'Tell us about yourself...',
},
render: (args) => {
const [value, setValue] = useState(args.value ?? '')
return
},
}
export const Required: Story = {
args: {
label: 'Feedback',
required: true,
placeholder: 'Please provide your feedback...',
saveInto: fn(),
},
}
export const WithValidation: Story = {
args: {
label: 'Notes',
value: 'Too short',
validations: ['Please enter at least 20 characters'],
saveInto: fn(),
},
}
export const WithCharacterLimit: Story = {
args: {
label: 'Bio',
value: 'A short bio about myself.',
characterLimit: 200,
placeholder: 'Tell us about yourself...',
saveInto: fn(),
},
}
export const Short: Story = {
args: {
label: 'Short Field',
height: 'SHORT',
placeholder: 'A short paragraph field...',
saveInto: fn(),
},
}
export const ExtraTall: Story = {
args: {
label: 'Extra Tall Field',
height: 'EXTRA_TALL',
placeholder: 'An extra tall paragraph field...',
saveInto: fn(),
},
}
export const NarrowWidth: Story = {
args: {
label: 'Narrow Field',
width: 'NARROW',
placeholder: 'Narrow width...',
saveInto: fn(),
},
}
export const ReadOnly: Story = {
args: {
label: 'Summary',
value: 'This is a read-only paragraph field displaying content without edit controls.',
readOnly: true,
},
}
export const ReadOnlyWithLinks: Story = {
args: {
label: 'Description',
value: 'Visit https://docs.appian.com for more information.',
readOnly: true,
linkify: true,
},
}
export const Disabled: Story = {
args: {
label: 'Locked Field',
value: 'This field cannot be edited.',
disabled: true,
},
}
export const CollapsedLabel: Story = {
args: {
label: 'Hidden Label',
labelPosition: 'COLLAPSED',
placeholder: 'Label is hidden but accessible...',
saveInto: fn(),
},
}