davidwin3 / react-tag-input-component

lightweight react component for tag(s) input

Home Page:https://codesandbox.io/s/react-tag-input-component-rgf97

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

react-tag-input-component

lightweight component for tag(s) input

GitHub Actions Status NPM gzip

also see multi select component

✨ Features

  • πŸƒ Lightweight (2KB including styles 😎)
  • πŸ’… Themeable
  • ✌ Written w/ TypeScript
  • πŸ—‘οΈ Use Backspace to remove last tag

πŸ”§ Installation

npm i react-tag-input-component    # npm
yarn add react-tag-input-component # yarn

πŸ“¦ Example

Example

Edit react-tag-input-component

import React, { useState } from "react";
import { TagsInput } from "react-tag-input-component";

const Example = () => {
  const [selected, setSelected] = useState(["papaya"]);

  return (
    <div>
      <h1>Add Fruits</h1>
      <pre>{JSON.stringify(selected)}</pre>
      <TagsInput
        value={selected}
        onChange={setSelected}
        name="fruits"
        placeHolder="enter fruits"
      />
      <em>press enter or comma to add new tag</em>
    </div>
  );
};

export default Example;

πŸ‘€ Props

Prop Description Type Default
name value for name of input string
placeholder placeholder for text input string
value initial tags string[] []
onChange onChange callback (added/removed) string[]
classNames className for styling input and tags (i.e {tag:'tag-cls', input: 'input-cls'}) object[tag, input]
onKeyUp input onKeyUp callback event
onBlur input onBlur callback event
separators when to add tag (i.e. "Enter", " ") string[] ["Enter"]
removers Remove last tag if textbox empty and Backspace is pressed string[] ["Backspace"]
onExisting if tag is already added then callback (tag: string) => void
onRemoved on tag removed callback (tag: string) => void
beforeAddValidate Custom validation before adding tag (tag: string, existingTags: string[]) => boolean
isEditOnRemove Remove the tag but keep the word in the input to edit it on using Backscape Key boolean false

πŸ’… Themeing

You can override CSS variables to customize the appearance

.rti--container {
  --rti-bg: "#fff",
  --rti-border: "#ccc",
  --rti-main: "#3182ce",
  --rti-radius: "0.375rem",
  --rti-s: "0.5rem", /* spacing */
  --rti-tag: "#edf2f7",
  --rti-tag-remove: "#e53e3e",
}

use !important if CSS variables are not getting applied

🀠 Credits

πŸ“œ License

MIT Β© harshzalavadiya

About

lightweight react component for tag(s) input

https://codesandbox.io/s/react-tag-input-component-rgf97

License:MIT License


Languages

Language:TypeScript 73.3%Language:CSS 17.7%Language:JavaScript 6.4%Language:HTML 2.6%