# Tags Input
Allows input of multiple values.
```svelte
Label
{#snippet children(tagsInput)}
{#each tagsInput().value as value, index (index)}
{value}
{/each}
{/snippet}
Clear All
```
## Custom Icon
```svelte
{#snippet children(tagsInput)}
{#each tagsInput().value as value, index (index)}
{value}
{/each}
{/snippet}
```
## Color
```svelte
{#snippet children(tagsInput)}
{#each tagsInput().value as value, index (index)}
{value}
{/each}
{/snippet}
```
## Provider Pattern
Use the [Provider Pattern](/docs/get-started/fundamentals#provider-pattern) to gain access to the the inner component APIs.
```svelte
{#snippet children(tagsInput)}
{#each tagsInput().value as value, index (index)}
{value}
{/each}
{/snippet}
```
## Direction
```svelte
Label
{#snippet children(tagsInput)}
{#each tagsInput().value as value, index (index)}
{value}
{/each}
{/snippet}
Clear All
```
## API Reference
### TagsInputRootProps
| Property | Default | Type | Description |
| --------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| ids? | - | Partial\<\{ root: string; input: string; hiddenInput: string; clearBtn: string; label: string; control: string; item: (opts: ItemProps) => string; itemDeleteTrigger: (opts: ItemProps) => string; itemInput: (opts: ItemProps) => string; }> \| undefined | The ids of the elements in the tags input. Useful for composition. |
| translations? | - | IntlTranslations \| undefined | Specifies the localized strings that identifies the accessibility elements and their states |
| maxLength? | - | number \| undefined | The max length of the input. |
| delimiter? | "," | string \| RegExp \| undefined | The character that serves has:
- event key to trigger the addition of a new tag
- character used to split tags when pasting into the input |
| autoFocus? | - | boolean \| undefined | Whether the input should be auto-focused |
| disabled? | - | boolean \| undefined | Whether the tags input should be disabled |
| readOnly? | - | boolean \| undefined | Whether the tags input should be read-only |
| invalid? | - | boolean \| undefined | Whether the tags input is invalid |
| required? | - | boolean \| undefined | Whether the tags input is required |
| editable? | true | boolean \| undefined | Whether a tag can be edited after creation, by pressing \`Enter\` or double clicking. |
| inputValue? | - | string \| undefined | The controlled tag input's value |
| defaultInputValue? | - | string \| undefined | The initial tag input value when rendered.
Use when you don't need to control the tag input value. |
| value? | - | string\[] \| undefined | The controlled tag value |
| defaultValue? | - | string\[] \| undefined | The initial tag value when rendered.
Use when you don't need to control the tag value. |
| onValueChange? | - | ((details: ValueChangeDetails) => void) \| undefined | Callback fired when the tag values is updated |
| onInputValueChange? | - | ((details: InputValueChangeDetails) => void) \| undefined | Callback fired when the input value is updated |
| onHighlightChange? | - | ((details: HighlightChangeDetails) => void) \| undefined | Callback fired when a tag is highlighted by pointer or keyboard navigation |
| onValueInvalid? | - | ((details: ValidityChangeDetails) => void) \| undefined | Callback fired when the max tag count is reached or the \`validateTag\` function returns \`false\` |
| validate? | - | ((details: ValidateArgs) => boolean) \| undefined | Returns a boolean that determines whether a tag can be added.
Useful for preventing duplicates or invalid tag values. |
| blurBehavior? | - | "clear" \| "add" \| undefined | The behavior of the tags input when the input is blurred
- \`"add"\`: add the input value as a new tag
- \`"clear"\`: clear the input value |
| addOnPaste? | false | boolean \| undefined | Whether to add a tag when you paste values into the tag input |
| max? | Infinity | number \| undefined | The max number of tags |
| allowOverflow? | - | boolean \| undefined | Whether to allow tags to exceed max. In this case,
we'll attach \`data-invalid\` to the root |
| name? | - | string \| undefined | The name attribute for the input. Useful for form submissions |
| form? | - | string \| undefined | The associate form of the underlying input element. |
| dir? | "ltr" | "ltr" \| "rtl" \| undefined | The document's text/writing direction. |
| getRootNode? | - | (() => ShadowRoot \| Node \| Document) \| undefined | A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron. |
| onPointerDownOutside? | - | ((event: PointerDownOutsideEvent) => void) \| undefined | Function called when the pointer is pressed down outside the component |
| onFocusOutside? | - | ((event: FocusOutsideEvent) => void) \| undefined | Function called when the focus is moved outside the component |
| onInteractOutside? | - | ((event: InteractOutsideEvent) => void) \| undefined | Function called when an interaction happens outside the component |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### TagsInputRootProviderProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| value | - | () => TagsInputApi\ | - |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### TagsInputRootContextProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------- | ----------- |
| children | - | Snippet\<\[() => TagsInputApi\]> | - |
### TagsInputLabelProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"label">]> \| undefined | Render the element yourself |
### TagsInputControlProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### TagsInputItemProps
| Property | Default | Type | Description |
| --------- | ------- | ------------------------------------------------- | --------------------------- |
| index | - | string \| number | - |
| value | - | string | - |
| disabled? | - | boolean \| undefined | - |
| element? | - | Snippet\<\[HTMLAttributes\<"span">]> \| undefined | Render the element yourself |
### TagsInputItemPreviewProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------ | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"div">]> \| undefined | Render the element yourself |
### TagsInputItemTextProps
| Property | Default | Type | Description |
| -------- | ------- | ------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"span">]> \| undefined | Render the element yourself |
### TagsInputItemDeleteTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### TagsInputItemInputProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"input">]> \| undefined | Render the element yourself |
### TagsInputInputProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"input">]> \| undefined | Render the element yourself |
### TagsInputClearTriggerProps
| Property | Default | Type | Description |
| -------- | ------- | --------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"button">]> \| undefined | Render the element yourself |
### TagsInputHiddenInputProps
| Property | Default | Type | Description |
| -------- | ------- | -------------------------------------------------- | --------------------------- |
| element? | - | Snippet\<\[HTMLAttributes\<"input">]> \| undefined | Render the element yourself |