gglc-ui

Input

Kolom teks setinggi 40 dengan radius 10 dan cincin fokus brand. Sebuah <input> biasa — tanpa props tambahan.

Instalasi

npx shadcn@latest add @glc/input

Penggunaan

import { Input } from "@/components/ui/input"

<Input placeholder="PT Contoh Sejahtera" />

Dengan label

Hubungkan htmlFor ke id. Tanpa itu, mengklik label tidak memfokuskan kolomnya dan pembaca layar kehilangan namanya.

Status

Kondisi galat digerakkan oleh aria-invalid, bukan prop error.

Format email tidak valid.

Kenapa aria-invalid, bukan prop error

Satu atribut mengurus dua hal sekaligus: gayanya dan pengumuman ke pembaca layar. Prop error terpisah akan membuat keduanya bisa jadi tidak sinkron — komponen terlihat merah tapi tidak diumumkan sebagai galat, atau sebaliknya.

Pasangkan dengan aria-describedby yang menunjuk ke pesan galatnya, seperti pada contoh di atas.

Props

Input tidak menambahkan props apa pun. Seluruh atribut <input> diteruskan; yang di bawah ini hanya yang paling memengaruhi tampilan.
PropTipeDefaultKeterangan
typestring"text"Tipe input HTML. Gaya file: sudah disiapkan untuk type="file".
aria-invalidbooleanMenyalakan border dan cincin fokus merah.
disabledbooleanfalseLatar dan teks berubah ke token disabled.
classNamestringDigabung terakhir lewat cn(), jadi bisa menimpa kelas bawaan.

Kode sumber

import * as React from "react"

import { cn } from "@/registry/glc/lib/utils"

/**
 * Text field — the `Input` set from Company BookV1.0.fig.
 * Height 40, radius 10, padding 4/10, Inter 14/20, brand focus ring.
 * shadcn-compatible: a plain `<input>` with the same `data-slot` and
 * `aria-invalid` styling contract.
 */
function Input({ className, type, ...props }: React.ComponentProps<"input">) {
  return (
    <input
      type={type}
      data-slot="input"
      className={cn(
        "flex h-10 w-full min-w-0 rounded-lg border border-input bg-card px-2.5 py-1",
        "text-sm leading-5 text-foreground shadow-none transition-[color,box-shadow] outline-none",
        "placeholder:text-[var(--text-placeholder)] selection:bg-primary selection:text-primary-foreground",
        "file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",
        "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/20",
        "aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20",
        "disabled:cursor-not-allowed disabled:bg-[var(--surface-disabled)] disabled:text-[var(--text-disabled)]",
        className
      )}
      {...props}
    />
  )
}

export { Input }