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
childrenReactNodePills + 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 | undefinedSame as the web id property for setting a uid on an element
inputContainer((children: ReactNode) => ReactNode) | undefined
inputSizestring | undefinedHost size attribute for the input element
inputWrapperOrderInputWrapperOrderItem[] | undefined
labelReactNodeTags
labelElement"div" | "label" | undefined
labelPropsInputLabelProps | undefined
leftSectionReactNodeContent 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; }>> | undefinedProps passed down to the left section element
leftSectionWidthnumber | Animated.AnimatedNode | GetThemeValueForKey<"width"> | null | undefinedLeft section width, by default equals to the input height
loadingboolean | undefinedDisplays loading indicator in the left or right section
loadingPosition"left" | "right" | undefined"right"Position of the loading indicator
pointerboolean | undefinedRender the field with a pointer cursor (non-searchable selects).
radius systemstring | number | undefinedKey of theme radius or a valid CSS value to set border-radius
requiredboolean | undefined
rightSectionReactNodeContent 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; }>> | undefinedProps passed down to the right section element
rightSectionWidthnumber | Animated.AnimatedNode | GetThemeValueForKey<"width"> | null | undefinedRight section width, by default equals to the input height
rootRefRef<TamaguiElement> | undefinedExtra 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> | undefinedUniform per-slot style passthrough — sugar over the composable parts. Slots: `wrapper` / `label` / `description` / `error` / `required`.
theme systemThemeName | null | undefinedApplies 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.

SlotUsage
descriptionstyles={{ description: { … } }}
errorstyles={{ error: { … } }}
labelstyles={{ label: { … } }}
leftSectionstyles={{ leftSection: { … } }}
requiredstyles={{ required: { … } }}
rightSectionstyles={{ rightSection: { … } }}
rootstyles={{ root: { … } }}
wrapperstyles={{ wrapper: { … } }}
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.