Knit UI
GitHub

Playground

Loading playground…

false
Playground
<PillsInput
  label="Tags"
  description=""
  error=""
  disabled={false}
  size="sm"
  variant="default"
/>

Examples

Variants

Every visual variant side by side at the default size.

Loading example…

VariantsSourceStorybook

Sizes

The full seven-step size scale, from xxs to xxl.

Loading example…

SizesSourceStorybook

Shadows

Each elevation of the inherited shadow prop applied to the input shell.

Loading example…

ShadowsSourceStorybook

Matrix

Variant × size matrix for visual regression across all combinations.

Loading example…

MatrixSourceStorybook

With Label

With a label, description, and asterisk — full input wrapper chrome.

Loading example…

With LabelSourceStorybook

With Error

Error state — displays an error message and applies error styling to the frame.

Loading example…

With ErrorSourceStorybook

Loading

Loading state — a spinner stands in for a section; position via loadingPosition.

Loading example…

LoadingSourceStorybook

Disabled

Disabled state — the shell and all child pills and the field are inert.

Loading example…

DisabledSourceStorybook

With Sections

Left and right sections hold icons or adornments within the chrome frame.

Loading example…

With SectionsSourceStorybook

Controlled

Controlled — the pill list is owned by the parent; type and press Enter to add.

Loading example…

ControlledSourceStorybook

Styles

Per-slot styles targets individual parts — here the root frame, label and leftSection.

Loading example…

StylesSourceStorybook

Hidden Field

Hidden field type — collapses the editable area for non-searchable select scenarios.

Loading example…

Hidden FieldSourceStorybook

Props

PropTypeDefaultDescription
childrenReactNode—Pills + a `PillsInput.Field`, usually inside a `Pill.Group`.
descriptionReactNode—
descriptionPropsGetFinalProps<RNTamaguiTextNonStyleProps, TextStylePropsBase, { span?: boolean | undefined; size?: string | number | undefined; inherit?: boolean | undefined; lineClamp?: number | undefined; truncate?: boolean | "end" | "start" | undefined;…——
disabled systemboolean | undefinedfalseDisable the whole control (inherited by child `Pill`s + the field).
errorReactNode—
errorPropsGetFinalProps<RNTamaguiTextNonStyleProps, TextStylePropsBase, { span?: boolean | undefined; size?: string | number | undefined; inherit?: boolean | undefined; lineClamp?: number | undefined; truncate?: boolean | "end" | "start" | undefined;…——
idstring | undefined—Same as the web id property for setting a uid on an element
inputContainer((children: ReactNode) => ReactNode) | undefined——
inputSizestring | undefined—Host size attribute for the input element
inputWrapperOrderInputWrapperOrderItem[] | undefined——
labelReactNodeTags—
labelElement"div" | "label" | undefined——
labelPropsInputLabelProps | undefined——
leftSectionReactNode—Content section displayed on the left side of the input
leftSectionPointerEventsInputSectionPointerEvents | undefined"none"Sets pointer-events styles on the left section element
leftSectionPropsPartial<GetFinalProps<RNTamaguiViewNonStyleProps, StackStyleBase, { shadow?: "xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined; sectionPointerEvents?: "none" | "all" | undefined; }>> | undefined—Props passed down to the left section element
leftSectionWidthnumber | Animated.AnimatedNode | GetThemeValueForKey<"width"> | null | undefined—Left section width, by default equals to the input height
loadingboolean | undefined—Displays loading indicator in the left or right section
loadingPosition"left" | "right" | undefined"right"Position of the loading indicator
pointerboolean | undefined—Render the field with a pointer cursor (non-searchable selects).
radius systemstring | number | undefined—Key of theme radius or a valid CSS value to set border-radius
requiredboolean | undefined——
rightSectionReactNode—Content section displayed on the right side of the input
rightSectionPointerEventsInputSectionPointerEvents | undefined"none"Sets pointer-events styles on the right section element
rightSectionPropsPartial<GetFinalProps<RNTamaguiViewNonStyleProps, StackStyleBase, { shadow?: "xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined; sectionPointerEvents?: "none" | "all" | undefined; }>> | undefined—Props passed down to the right section element
rightSectionWidthnumber | Animated.AnimatedNode | GetThemeValueForKey<"width"> | null | undefined—Right section width, by default equals to the input height
rootRefRef<TamaguiElement> | undefined—Extra ref to the bordered frame, merged with `ref`. Lets a wrapper (e.g. `Combobox.Target`) anchor/measure a dropdown against the visible field.
shadow system"xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined——
size systemInputSize | undefined
xxs · xs · sm · md · lg · xl · xxl
smControls height metrics and font size.
styles systemSlotStyles<InputWrapperSlots> | undefined—Uniform per-slot style passthrough — sugar over the composable parts. Slots: `wrapper` / `label` / `description` / `error` / `required`.
theme systemThemeName | null | undefined—Applies a theme to this element
variant systemInputVariant | undefined
default · filled · unstyled
"default"Visual variant — how the border and background are rendered.
withAsteriskboolean | undefined——
wrapperPropsPartial<GetFinalProps<RNTamaguiViewNonStyleProps, StackStyleBase, { radius?: string | number | undefined; size?: string | number | undefined; shadow?: "xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined; disabled?: boolean | undefi…——

Style slots

Every part of PillsInput can be styled through the styles prop. Explicit props on the component always win over slot styles.

SlotTargets
descriptionThe Input.Description.
errorThe Input.Error.
labelThe Input.Label.
leftSectionThe left adornment section (InputSectionFrame). Applied by InputChrome. The deprecated leftSectionProps alias merges OVER this.
requiredThe required asterisk Text inside the label.
rightSectionThe right adornment section (InputSectionFrame). Applied by InputChrome. The deprecated rightSectionProps alias merges OVER this.
rootThe input frame/container (InputRootFrame) that InputChrome lays the control and its left/right sections out in. Applied by Input/InputChrome, not by Input.Wrapper. The deprecated wrapperProps alias merges OVER this.
wrapperThe outer InputWrapperFrame column.
Accessibility & DOM props (2)
PropType
keyKey | null | undefined
refRef<TamaguiElement> | undefined

Plus 496 inherited style props from Box — the full Tamagui/React Native style surface, including token shorthands like p, mx, bg and c. See Tokens for the scales they accept, or the full list.

Edit this page on GitHub