InputGroup

Display additional information or actions to an input or textarea.

12 results
https://
52% used

Installation

pnpm dlx shadcn-vue@latest add input-group

Usage

vue
<script setup lang="ts">
import {
  InputGroup,
  InputGroupAddon,
  InputGroupButton,
  InputGroupInput,
  InputGroupText,
  InputGroupTextarea,
} from '@/components/ui/input-group'
</script>

<template>
  <InputGroup>
    <InputGroupInput placeholder="Search..." />
    <InputGroupAddon>
      <SearchIcon />
    </InputGroupAddon>
    <InputGroupAddon align="inline-end">
      <InputGroupButton>Search</InputGroupButton>
    </InputGroupAddon>
  </InputGroup>
</template>

Examples

Icon

Text

Display additional text information alongside inputs.

$
USD
https://
.com
@company.com
120 characters left

Button

Add buttons to perform actions within the input group.

https://

Tooltip

Add tooltips to provide additional context or help.

Textarea

Input groups also work with textarea components. Use block-start or block-end for alignment.

Line 1, Column 1
script.js

Spinner

Show loading indicators while processing input.

Saving...
Please wait...

Label

Add labels within input groups to improve accessibility.

Pair input groups with dropdown menus for complex interactions.

Button Group

Wrap input groups with button groups to create prefixes and suffixes.

.com

Custom Input

Add the data-slot="input-group-control" attribute to your custom input for automatic behavior and focus state handling.

vue
<script lang='ts' setup>
import { InputGroup, InputGroupAddon, InputGroupButton } from '@/registry/default/ui/input-group'
</script>

<template>
  <div class="grid w-full max-w-sm gap-6">
    <InputGroup>
      <textarea
        data-slot="input-group-control"
        class="flex field-sizing-content min-h-16 w-full resize-none rounded-md bg-transparent px-3 py-2.5 text-base transition-[color,box-shadow] outline-none md:text-sm"
        placeholder="Autoresize textarea..."
      />
      <InputGroupAddon align="block-end">
        <InputGroupButton class="ml-auto" size="sm" variant="default">
          Submit
        </InputGroupButton>
      </InputGroupAddon>
    </InputGroup>
  </div>
</template>

API Reference

InputGroup

The main component that wraps inputs and addons.

PropTypeDefault
classstring
vue
<template>
  <InputGroup>
    <InputGroupInput />
    <InputGroupAddon />
  </InputGroup>
</template>

InputGroupAddon

Displays icons, text, buttons, or other content alongside inputs.

::info For proper focus navigation, the InputGroupAddon component should be placed after the input. Set the align prop to position the addon. ::

PropTypeDefault
align"inline-start" | "inline-end" | "block-start" | "block-end"'inline-start'
classstring
vue
<InputGroupAddon align="inline-end">
  <SearchIcon />
</InputGroupAddon>

For <InputGroupInput />, use the inline-start or inline-end alignment. For <InputGroupTextarea />, use the block-start or block-end alignment.

The InputGroupAddon component can have multiple InputGroupButton components and icons.

vue
<template>
  <InputGroupAddon>
    <InputGroupButton>Button</InputGroupButton>
    <InputGroupButton>Button</InputGroupButton>
  </InputGroupAddon>
</template>

InputGroupButton

Displays buttons within input groups.

PropTypeDefault
size"xs" | "icon-xs" | "sm" | "icon-sm""xs"
variant"default" | "destructive" | "outline" | "secondary" | "ghost" | "link""ghost"
classstring
vue
<template>
  <InputGroupButton>Button</InputGroupButton>
  <InputGroupButton size="icon-xs" aria-label="Copy">
    <CopyIcon />
  </InputGroupButton>
</template>

InputGroupInput

Replacement for <Input /> when building input groups. This component has the input group styles pre-applied and uses the unified data-slot="input-group-control" for focus state handling.

PropTypeDefault
classstring

All other props are passed through to the underlying <Input /> component.

vue
<template>
  <InputGroup>
    <InputGroupInput placeholder="Enter text..." />
    <InputGroupAddon>
      <SearchIcon />
    </InputGroupAddon>
  </InputGroup>
</template>

InputGroupTextarea

Replacement for <Textarea /> when building input groups. This component has the textarea group styles pre-applied and uses the unified data-slot="input-group-control" for focus state handling.

PropTypeDefault
classstring

All other props are passed through to the underlying <Textarea /> component.

vue
<template>
  <InputGroup>
    <InputGroupTextarea placeholder="Enter message..." />
    <InputGroupAddon align="block-end">
      <InputGroupButton>Send</InputGroupButton>
    </InputGroupAddon>
  </InputGroup>
</template>
Edit this page on GitHub