@arif-un/react-mix-tag-input
Version:
A simple react component for inputting tags with a mix of text
109 lines (76 loc) • 3.6 kB
Markdown
A react input component that pairs text with tags, supports multiline entry, and provides customizable tag rendering.
<br/>
<br/>

<br/>
<br/>
```
npm install @arif-un/react-mix-tag-input
```
```
import MixTagInput from "mix-tag-input";
const [value, setValue] = useState<MixInputValues>([
[ "Text ", {type: "tag", attrs: {id: "1", label: "Tag"}} ]
]);
<MixTagInput value={value} onChange={handleChange} />
```
<br/><br/>
| Prop | Description | Default | Type |
|------|-------------|---------|------|
| `ref` | React forwardRef with options of component | | [MixInputRef](
| `value` | Values of Mix Input | [] | [MixInputValues](
| `onChange` | Function to handle the change event | | (value: [MixInputValues](
| `disabled` | Boolean value to set the input as disabled | false | Boolean |
| `placeholder` | Placeholder text | | string |
| `immediatelyRender` | Boolean value to render the component immediately on mount. Useful for server side rendering | false | Boolean |
| `tagClassName` | Class name for tags | mi-tag | string |
| `editorOptions` | Options for the editor | {} | [Editor](https://tiptap.dev/docs/editor/api/editor) |
| `tagAttrs` | Allowed attributes for tags, that returns with tag value on change and also render as data-* attribute | | { [key: string]: string } |
| `tagView` | Custom tag view component | | React.FC<[TagViewProps](https://tiptap.dev/docs/editor/extensions/custom-extensions/node-views/react#all-available-props)> |
<br/><br/>
```typescript
import { type MixInputRef } from '@arif-un/react-mix-tag-input';
const ref = useRef<MixInputRef>(null);
// ...
ref.current?.insertContent({ type: 'tag', attrs: { id: '1', label: 'Tag' } });
// ...
return <MixTagInput ref={ref} />;
```
| Prop | Description | Type |
|------|-------------|------|
| insertContent | Function to insert content in the editor current caret position, accepts Tag or Text alone or in array | (content: [Tag](
| element | Returns the editor element | HTMLDivElement |
| editor | Returns the editor instance | [Editor](https://tiptap.dev/docs/editor/api/editor) |
<br/><br/>
```typescript
const text = 'Any text string'
const tag: Tag = {
type: 'tag',
attrs: {
id: '1',
label: 'Tag',
className: 'tag-class',
style: {color: 'cyan'}
[]: string // key and default value need to specify in 'tagAttrs' prop
},
}
const firstLineValues: MixInputValues = [[ text, tag ]]
return <MixTagInput value={firstLineValues} />;
```
| Prop | Description | Type |
|------|-------------|------|
| type | Type of the tag | `'tag'` |
| attrs | Attributes of the tag | `object` |
| attrs.id | Unique identifier of the tag | `string` |
| attrs.label | Label of the tag | `string` |
| attrs.className | Class name of the tag | `string` |
| attrs.style | Style of the tag | `React.CSSProperties` |
| attrs.[key: string] | Any other attribute. Key and default value need to specify in tagAttrs prop in order to get back with tag value on change and also render as data-* attribute | `string` |