import type { Meta, StoryObj } from '@storybook/nextjs-vite' import { useState } from 'react' import { ScriptArguments, type ScriptArgument } from '../components/platform/ScriptArguments' const meta = { title: 'Platform/ScriptArguments', component: ScriptArguments, parameters: { layout: 'padded', docs: { description: { component: 'Displays and manages script arguments as key-value pairs. Each argument has a name (key) and value input field with delete button. Includes an "Add Script Argument" button to add new entries.' } } }, tags: ['autodocs'], argTypes: { arguments: { control: 'object', description: 'Array of script arguments with id, key, and value' }, onArgumentsChange: { action: 'argumentsChanged', description: 'Callback when arguments change' }, keyPlaceholder: { control: 'text', description: 'Placeholder for key input' }, valuePlaceholder: { control: 'text', description: 'Placeholder for value input' }, addButtonLabel: { control: 'text', description: 'Label for the add button' }, disabled: { control: 'boolean', description: 'Whether the component is disabled' }, className: { control: 'text', description: 'Additional CSS classes' } }, decorators: [ (Story) => (
) ] } satisfies Meta export default meta type Story = StoryObj /** * Default ScriptArguments with example data matching the Figma design. */ export const Default: Story = { args: { arguments: [ { id: '1', key: 'port', value: '3000' }, { id: '2', key: 'verbose', value: '' }, { id: '3', key: 'config', value: 'production' } ], titleLabel: 'Script Arguments' } } /** * Empty state - no arguments yet. */ export const Empty: Story = { args: { arguments: [], titleLabel: 'Script Arguments' } } /** * Single argument. */ export const SingleArgument: Story = { args: { arguments: [{ id: '1', key: 'debug', value: 'true' }], titleLabel: 'Script Arguments' } } /** * Arguments with flags (empty values). */ export const WithFlags: Story = { args: { arguments: [ { id: '1', key: '--verbose', value: '' }, { id: '2', key: '--dry-run', value: '' }, { id: '3', key: '--force', value: '' } ], titleLabel: 'Script Arguments' } } /** * Many arguments to show scrolling behavior. */ export const ManyArguments: Story = { args: { arguments: [ { id: '1', key: 'host', value: 'localhost' }, { id: '2', key: 'port', value: '8080' }, { id: '3', key: 'database', value: 'mydb' }, { id: '4', key: 'user', value: 'admin' }, { id: '5', key: 'password', value: '********' }, { id: '6', key: 'timeout', value: '30000' }, { id: '7', key: 'retries', value: '3' } ], titleLabel: 'Script Arguments' } } /** * Disabled state. */ export const Disabled: Story = { args: { arguments: [ { id: '1', key: 'port', value: '3000' }, { id: '2', key: 'config', value: 'production' } ], disabled: true, titleLabel: 'Script Arguments' } } /** * Custom placeholders. */ export const CustomPlaceholders: Story = { args: { arguments: [{ id: '1', key: '', value: '' }], keyPlaceholder: 'Argument name', valuePlaceholder: 'Argument value', titleLabel: 'Script Arguments' } } /** * Custom add button label. */ export const CustomAddLabel: Story = { args: { arguments: [], addButtonLabel: 'Add New Parameter', titleLabel: 'Script Arguments' } } /** * Interactive example with state management. */ export const Interactive: Story = { args: { arguments: [], titleLabel: 'Script Arguments' }, render: function InteractiveStory() { const [args, setArgs] = useState([ { id: '1', key: 'port', value: '3000' }, { id: '2', key: 'verbose', value: '' }, { id: '3', key: 'config', value: 'production' } ]) return (

Current State:

            {JSON.stringify(args, null, 2)}
          
) } } /** * Long values that may need truncation. */ export const LongValues: Story = { args: { arguments: [ { id: '1', key: 'connection-string', value: 'mongodb+srv://user:password@cluster0.mongodb.net/database?retryWrites=true&w=majority' }, { id: '2', key: 'api-endpoint', value: 'https://api.example.com/v1/very/long/endpoint/path' } ], titleLabel: 'Script Arguments' } }