1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/components/component-library/input/input.stories.tsx
Garrett Bear 66292330fe
Feat/18890/button ts update (#20492)
* button to TS migration

working demo

style props

broken mapping - need switch

working types file

working types

fix dependent imports of Button

variant mapping

working types

fix lint

fix test

fix ButtonSize issue on QuizContent

box fix

test if this works

fix button being used on QuizContent

fix button_variant import

readme fix

* fix button import

* fix primary button as anchor hover

* deprecated

* button to TS migration

fix lint

fix test

* fix rebase issue

* fix rebase issue

* lint fix
2023-08-28 14:42:00 -07:00

293 lines
6.2 KiB
TypeScript

import React, { useRef } from 'react';
import { Meta } from '@storybook/react';
import { useArgs } from '@storybook/client-api';
import {
Display,
FlexDirection,
TextVariant,
} from '../../../helpers/constants/design-system';
import { Button, Box, ButtonVariant } from '..';
import { InputType } from './input.types';
import { Input } from './input';
import README from './README.mdx';
const marginSizeControlOptions = [
undefined,
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
'auto',
];
export default {
title: 'Components/ComponentLibrary/Input',
component: Input,
parameters: {
docs: {
page: README,
},
},
argTypes: {
autoComplete: {
control: 'boolean',
},
autoFocus: {
control: 'boolean',
},
className: {
control: 'text',
},
defaultValue: {
control: 'text',
},
disabled: {
control: 'boolean',
},
disableStateStyles: {
control: 'boolean',
},
error: {
control: 'boolean',
},
id: {
control: 'text',
},
maxLength: {
control: 'number',
},
name: {
control: 'text',
},
onBlur: {
action: 'onBlur',
},
onChange: {
action: 'onChange',
},
onFocus: {
action: 'onFocus',
},
placeholder: {
control: 'text',
},
readOnly: {
control: 'boolean',
},
required: {
control: 'boolean',
},
type: {
control: 'select',
options: Object.values(InputType),
},
value: {
control: 'text',
},
textVariant: {
control: 'select',
options: Object.values(TextVariant),
},
marginTop: {
options: marginSizeControlOptions,
control: 'select',
table: { category: 'box props' },
},
marginRight: {
options: marginSizeControlOptions,
control: 'select',
table: { category: 'box props' },
},
marginBottom: {
options: marginSizeControlOptions,
control: 'select',
table: { category: 'box props' },
},
marginLeft: {
options: marginSizeControlOptions,
control: 'select',
table: { category: 'box props' },
},
},
args: {
placeholder: 'Placeholder...',
value: '',
},
} as Meta<typeof Input>;
const Template = (args) => {
const [{ value }, updateArgs] = useArgs();
const handleOnChange = (e) => {
updateArgs({ value: e.target.value });
};
return <Input {...args} value={value} onChange={handleOnChange} />;
};
export const DefaultStory = Template.bind({});
DefaultStory.storyName = 'Default';
export const Type = (args) => (
<Box
display={Display.InlineFlex}
flexDirection={FlexDirection.Column}
gap={4}
>
<Input {...args} placeholder="Default" />
<Input {...args} type={InputType.Password} placeholder="Password" />
<Input {...args} type={InputType.Number} placeholder="Number" />
<Input {...args} type={InputType.Search} placeholder="Search" />
</Box>
);
Type.args = {
value: undefined,
};
export const Ref = (args) => {
const [{ value }, updateArgs] = useArgs();
const inputRef = useRef<HTMLInputElement>(null);
const handleOnClick = () => {
inputRef.current?.focus();
};
const handleOnChange = (e) => {
updateArgs({ value: e.target.value });
};
return (
<Box display={Display.Flex}>
<Input {...args} ref={inputRef} value={value} onChange={handleOnChange} />
<Button
variant={ButtonVariant.Primary}
marginLeft={1}
onClick={handleOnClick}
>
Edit
</Button>
</Box>
);
};
export const AutoComplete = Template.bind({});
AutoComplete.args = {
autoComplete: true,
type: InputType.Password,
placeholder: 'Enter password',
};
export const AutoFocus = Template.bind({});
AutoFocus.args = { autoFocus: true };
export const DefaultValue = () => (
<Input placeholder="Default value" defaultValue="Default value" />
);
export const Disabled = Template.bind({});
Disabled.args = { disabled: true };
export const ErrorStory = Template.bind({});
ErrorStory.args = { error: true };
ErrorStory.storyName = 'Error';
export const MaxLength = Template.bind({});
MaxLength.args = { maxLength: 10, placeholder: 'Max length 10' };
export const ReadOnly = Template.bind({});
ReadOnly.args = { readOnly: true, value: 'Read only' };
export const RequiredStory = Template.bind({});
RequiredStory.args = { required: true, placeholder: 'Required' };
RequiredStory.storyName = 'Required';
export const DisableStateStyles = Template.bind({});
DisableStateStyles.args = {
disableStateStyles: true,
};
export const TextVariantStory = (args) => {
const [{ value }, updateArgs] = useArgs();
const handleOnChange = (e) => {
updateArgs({ value: e.target.value });
};
return (
<Box
display={Display.InlineFlex}
flexDirection={FlexDirection.Column}
gap={4}
>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.displayMd}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.headingLg}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.headingMd}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.headingSm}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.bodyLgMedium}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.bodyMdBold}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.bodyMd}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.bodySm}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.bodySmBold}
/>
<Input
{...args}
value={value}
onChange={handleOnChange}
textVariant={TextVariant.bodyXs}
/>
</Box>
);
};
TextVariantStory.storyName = 'Text Variant';