gglc-ui

Label

Label kontrol, Inter Medium 14/20. Dibangun di atas Radix Label, jadi klik pada teks memfokuskan kolomnya.

Instalasi

npx shadcn@latest add @glc/label

Penggunaan

import { Label } from "@/components/ui/label"

<Label htmlFor="npwp">NPWP</Label>

htmlFor bukan opsional

Tanpa htmlFor yang cocok dengan id kolomnya, label hanyalah teks: mengkliknya tidak memfokuskan apa pun, dan pembaca layar mengumumkan kolom itu tanpa nama.

Mengikuti status disabled

Label meredup sendiri saat kontrolnya dinonaktifkan — tanpa prop tambahan.

Mekanismenya adalah peer-disabled:, jadi urutan DOM menentukan: kolomnya harus diberi kelas peer dan berada sebelum label. Contoh di atas membalik urutan visualnya dengan flex-col-reverse supaya DOM-nya tetap benar sementara label tetap tampil di atas.

Alternatifnya, bungkus keduanya dalam elemen ber-data-disabled="true" dan beri kelas group — jalur group-data-[disabled=true]: juga sudah disiapkan.

Props

Meneruskan seluruh props Radix Label Root.
PropTipeDefaultKeterangan
htmlForstringid kontrol yang dilabeli. Praktis wajib diisi.
classNamestringDigabung terakhir lewat cn(), jadi bisa menimpa kelas bawaan.

Kode sumber

import * as React from "react"
import * as LabelPrimitive from "@radix-ui/react-label"

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

/** Control label — Inter Medium 14/20, the file's label role. */
function Label({
  className,
  ...props
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
  return (
    <LabelPrimitive.Root
      data-slot="label"
      className={cn(
        "flex items-center gap-2 text-sm leading-5 font-medium text-foreground select-none",
        "group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
        "peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
        className
      )}
      {...props}
    />
  )
}

export { Label }