mix tag input logo

A react input component that pairs text with tags, supports multiline entry, and provides customizable tag rendering.

try it callout
  • Try place caret anywhere in text and add tag

Installation

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} />

Example 1: Customizable Tags

Example 2: Render Custom Component

Props

<MixTagInput />
PropDescriptionDefaultType
refReact forwardRef with options of componentMixInputRef
valueValues of Mix Input[]MixInputValues
onChangeFunction to handle the change event(value: MixInputValues) => void
disabledBoolean value to set the input as disabledfalseBoolean
placeholderPlaceholder textstring
immediatelyRenderBoolean value to render the component immediately on mount. Useful for server side renderingfalseBoolean
tagClassNameClass name for tagsmi-tagstring
editorOptionsOptions for the editor{}Editor
tagAttrsAllowed attributes for tags, that returns with tag value on change and also render as data-* attribute{ [key: string]: string }
tagViewCustom tag view componentReact.FC<TagViewProps>
MixInputRef: React.forwardRef
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} />;
PropDescriptionDefaultType
insertContentFunction to insert content in the editor current caret position, accepts Tag or Text alone or in array(content: Tag | string | (Tag | string)[]) => void
elementReturns the editor elementHTMLDivElement
editorReturns the editor instanceEditor
MixInputValues: (string | Tag)[][]
const text = 'Any text string'
const tag: Tag = {
type: 'tag',
attrs: {
id: '1',
label: 'Tag',
className: 'tag-class',
style: {color: 'cyan'}
[key: string]: string // key and default value need to specify in 'tagAttrs' prop
},
}
const firstLineValues: MixInputValues = [[ text, tag ]]
return <MixTagInput value={firstLineValues} />;
Tag:
PropDescriptionDefaultType
typeType of the tag'tag'
attrsAttributes of the tagobject
attrs.idUnique identifier of the tagstring
attrs.labelLabel of the tagstring
attrs.classNameClass name of the tagstring
attrs.styleStyle of the tagReact.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-* attributestring