diff --git a/.storybook/components/Roadmap/data.ts b/.storybook/components/Roadmap/data.ts index 0f4d2f42..237079e6 100644 --- a/.storybook/components/Roadmap/data.ts +++ b/.storybook/components/Roadmap/data.ts @@ -332,4 +332,10 @@ export const rows: Rows = [ stage: '🔵 experimental', planned: 'Q2 2026', }, + { + component: 'TagList', + status: '✅ Done', + stage: '🔵 experimental', + planned: 'Q2 2026', + }, ]; diff --git a/packages/components/src/components/Form/Form.stories.tsx b/packages/components/src/components/Form/Form.stories.tsx index 5c230109..43f92765 100644 --- a/packages/components/src/components/Form/Form.stories.tsx +++ b/packages/components/src/components/Form/Form.stories.tsx @@ -1,4 +1,4 @@ -import { type FormEvent, useState } from 'react'; +import { type FormEvent, useRef, useState } from 'react'; import type { Meta, StoryObj } from '@storybook/react'; @@ -10,12 +10,14 @@ import { CheckboxGroup } from '../CheckboxGroup'; import { DatePicker } from '../DatePicker'; import { FlexBox } from '../FlexBox'; import { FormField } from '../FormField'; +import { useListData } from '../index'; import { Input } from '../Input'; import { InputNumber } from '../InputNumber'; import { spacing } from '../layout'; import { Radio, RadioGroup } from '../RadioGroup'; import { SearchInput } from '../SearchInput'; import { Select } from '../Select'; +import { TagInput } from '../TagInput'; import { Textarea } from '../Textarea'; import { TimePicker } from '../TimePicker'; import { Typography } from '../Typography'; @@ -426,6 +428,25 @@ export const FormFields: Story = { }, name: 'All form fields', render: function Render() { + const tags = useListData<{ id: string; name: string }>({ + initialItems: [{ id: 'react', name: 'React' }], + }); + + const tagCounter = useRef(1); + + const addTags = (values: string[]) => { + tags.append( + ...values.map((name) => { + tagCounter.current += 1; + + return { + id: `tag-${tagCounter.current}-${name}`, + name, + }; + }) + ); + }; + return (
Option 3 + + label="Tag input" + placeholder="Type and press Enter" + items={tags.items} + onAdd={addTags} + onRemove={(keys) => tags.remove(...keys)} + > + {(item) => {item.name}} +