Input

PreviousNext

React aria components Input with shadcn characteristics.

Docs
ouiui

Preview

Loading preview…
registry/default/ui/oui-input.tsx
"use client";

import * as React from "react";
import {
  composeTailwindRenderProps,
  focusVisibleStyles,
} from "@/registry/default/ui/oui-base";
import * as Rac from "react-aria-components";
import { twJoin } from "tailwind-merge";

export const inputStyles = twJoin(
  focusVisibleStyles,
  "h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground md:text-sm dark:bg-input/30",
  "file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",
  "selection:bg-primary selection:text-primary-foreground",
  "data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50",
  "data-invalid:border-destructive data-invalid:ring-destructive/20 dark:data-invalid:ring-destructive/40",
  "[&::-webkit-search-cancel-button]:hidden",
);

/**
 * Derived from shadcn Input.
 */
export function Input({
  className,
  ...props
}: React.ComponentProps<typeof Rac.Input>) {
  return (
    <Rac.Input
      data-slot="input"
      className={composeTailwindRenderProps(className, inputStyles)}
      {...props}
    />
  );
}

Installation

npx shadcn@latest add @oui/oui-input

Usage

import { OuiInput } from "@/components/ui/oui-input"
<OuiInput />