input-group-demo

PreviousNext
Docs
pureuiexample

Preview

Loading preview…
registry/pure-ui/examples/input-group/input-group-demo.tsx
import {
  ArrowUpIcon,
  CheckIcon,
  InfoIcon,
  PlusIcon,
  Search,
  SearchIcon,
} from "lucide-react";

import {
  InputGroup,
  InputGroupAddon,
  InputGroupButton,
  InputGroupInput,
  InputGroupText,
  InputGroupTextarea,
} from "@/registry/pure-ui/ui/input-group";
import {
  Tooltip,
  TooltipTrigger,
  TooltipPopup,
  TooltipProvider,
} from "@/registry/pure-ui/ui/tooltip";
import {
  Menu,
  MenuItem,
  MenuPopup,
  MenuTrigger,
} from "@/registry/pure-ui/ui/menu";
import { Separator } from "@/registry/pure-ui/ui/separator";

export function InputGroupDemo() {
  return (
    <div className="grid w-full max-w-sm gap-6">
      <InputGroup>
        <InputGroupInput
          type="search"
          placeholder="Search"
          aria-label="Search"
        />
        <InputGroupAddon>
          <SearchIcon />
        </InputGroupAddon>
      </InputGroup>

      <InputGroup>
        <InputGroupInput placeholder="Search..." />
        <InputGroupAddon>
          <Search />
        </InputGroupAddon>
        <InputGroupAddon align="inline-end">12 results</InputGroupAddon>
      </InputGroup>

      <InputGroup>
        <InputGroupInput placeholder="example.com" className="pl-1!" />
        <InputGroupAddon>
          <InputGroupText>https://</InputGroupText>
        </InputGroupAddon>
        <InputGroupAddon align="inline-end">
          <TooltipProvider>
            <Tooltip>
              <TooltipTrigger
                render={
                  <InputGroupButton className="rounded-full" size="icon-xs" />
                }
              >
                <InfoIcon />
              </TooltipTrigger>
              <TooltipPopup>This is content in a tooltip.</TooltipPopup>
            </Tooltip>
          </TooltipProvider>
        </InputGroupAddon>
      </InputGroup>

      <InputGroup>
        <InputGroupTextarea placeholder="Ask, Search or Chat..." />
        <InputGroupAddon align="block-end">
          <InputGroupButton
            variant="outline"
            className="rounded-full"
            size="icon-xs"
          >
            <PlusIcon />
          </InputGroupButton>
          <Menu>
            <MenuTrigger render={<InputGroupButton variant="ghost" />}>
              <span>Auto</span>
            </MenuTrigger>
            <MenuPopup side="top" align="start" className="[--radius:0.95rem]">
              <MenuItem>Auto</MenuItem>
              <MenuItem>Agent</MenuItem>
              <MenuItem>Manual</MenuItem>
            </MenuPopup>
          </Menu>
          <InputGroupText className="ml-auto">52% used</InputGroupText>
          <Separator orientation="vertical" className="h-4!" />
          <InputGroupButton
            variant="default"
            className="rounded-full"
            size="icon-xs"
            disabled
          >
            <ArrowUpIcon />
            <span className="sr-only">Send</span>
          </InputGroupButton>
        </InputGroupAddon>
      </InputGroup>

      <InputGroup>
        <InputGroupInput placeholder="@shadcn" />
        <InputGroupAddon align="inline-end">
          <div className="bg-primary text-primary-foreground flex size-4 items-center justify-center rounded-full">
            <CheckIcon className="size-3" />
          </div>
        </InputGroupAddon>
      </InputGroup>
    </div>
  );
}

Installation

npx shadcn@latest add @pureui/input-group-demo

Usage

import { InputGroupDemo } from "@/components/input-group-demo"
<InputGroupDemo />