Button

Bir aksiyonu tetikler: form göndermek, dialog açmak, bir değişikliği kaydetmek. Sonuç başka bir sayfaya gitmekse buton yerine link kullan.

KararlıKaynak kod

Import

tsx
import { Button } from "@merid/react";

Örnekler

Varyantlar

primary, ekrandaki tek accent aksiyondur. secondary (varsayılan) geri kalan her şey içindir; ghost toolbar'larda ve yoğun satırlarda sessizce durur; danger geri alınamayan aksiyonları onaylar; link satır içi metin gibi görünür ama buton semantiğini korur.

Boyutlar

sm 36px, md 44px (varsayılan), lg 50px yüksekliğindedir. Yan yana duran kontroller aynı taban çizgisini paylaşsın diye boyutu komşu input'larla eşleştir.

İkonlu

leadingIcon ve trailingIcon herhangi bir node alır. İkisi de aria-hidden span'lere sarılır; butonun adını yalnızca etiket belirler.

Yükleniyor

loading butonun üstüne bir spinner koyar, layout zıplamasın diye genişliği korur, aria-busy ve aria-disabled atar ve tıklamaları yutar. Buton focus alabilir kalır, yani istek sürerken klavye focus'u kaybolmaz.

Devre dışı

disabled native attribute'tur: buton tab sırasından çıkar ve tıklamaları yok sayar. Bir aksiyonu sessizce devre dışı bırakmak yerine neden kullanılamadığını açıklamayı tercih et.

Tam genişlik

fullWidth butonu container'ı boyunca uzatır. Dar formlarda ve mobilde işe yarar.

Router link'i olarak

Router'ının link'ini buton görünümüyle render'lamak için asChild kullan. Böylece navigasyon gerçek bir link olarak kalır:

tsx
import Link from "next/link";

<Button asChild variant="primary">
  <Link href="/signup">Ücretsiz başla</Link>
</Button>

API referansı

Button ref'ini <button>'a iletir, diğer tüm native buton attribute'larını olduğu gibi geçirir. type varsayılan olarak "button"'dır; form içindeki bir buton, type="submit" vermediğin sürece formu göndermez.

PropTipVarsayılanAçıklama
variant"primary" | "secondary" | "ghost" | "danger" | "link""secondary"Görsel stil. primary, ekrandaki tek accent aksiyondur.
size"sm" | "md" | "lg""md"Yükseklik ve padding: sm 36px, md 44px, lg 50px.
loadingbooleanfalseSpinner gösterir, genişliği korur, aria-busy atar ve tıklamaları engeller.
leadingIconReactNode–Etiketten önceki ikon. Yardımcı teknolojilerden gizlenir.
trailingIconReactNode–Etiketten sonraki ikon. Yardımcı teknolojilerden gizlenir.
fullWidthbooleanfalseButonu container'ının genişliğine uzatır.
asChildbooleanfalse`<button>` yerine tek child elemanı (örneğin bir router `<Link>`'i) bu butonun stiliyle render'lar. Props, ref, handler'lar ve className child'a birleştirilir; child'ın içeriği butonun içerik span'ine sarılır. `disabled`/`loading`, `aria-disabled`'a dönüşür ve tıklamaları engeller. Server component'lerde de çalışır.
type"button" | "submit" | "reset""button"Native buton tipi.
disabledboolean–Native disabled attribute'u.

Stil verme

SeçiciDeğerler
.mrd-buttonKök <button>
.mrd-button__contentİkonları ve etiketi saran eleman (yüklenirken gizlenir)
.mrd-button__iconBaştaki / sondaki ikon slot'u
.mrd-button__spinnerYüklenirken görünen spinner
data-variantprimary · secondary · ghost · danger · link
data-sizesm · md · lg
data-loadingYüklenirken bulunur
data-full-widthfullWidth verildiğinde bulunur

Boyuta göre atanan component değişkenleri: --mrd-button-height, --mrd-button-padding, --mrd-button-font.

css
.toolbar .mrd-button {
  --mrd-button-height: 32px;
  --mrd-button-padding: 0 12px;
}

Erişilebilirlik

  • Native bir <button> render'lar; Enter ve Space ile tetiklenir, formlara katılır.
  • Görünen etiket, butonun erişilebilir adıdır. Yalnızca ikondan oluşan aksiyonlar için label'ı zorunlu olan IconButton'ı kullan.
  • loading sırasında buton aria-busy="true" ve aria-disabled="true" bildirir ama focus'u korur.
TuşNe yapar
TabFocus'u butona taşır.
EnterButonu tetikler.
SpaceButonu tetikler.

Kullanım ilkeleri

Yap

Her görünümde tek bir primary buton kullan ve ne olacağını söyleyen bir fiille etiketle: “Değişiklikleri kaydet”, “Davet gönder”.

Kaçın

İki primary butonu yan yana koymak ya da “Tamam”, “Gönder” gibi belirsiz etiketler kullanmak.

Yap

İstek sürerken loading kullan; buton yerini ve focus'u korur.

Kaçın

Etiketi elle spinner'la değiştirmek ya da istek boyunca butonu devre dışı bırakmak. Focus kaybolur, genişlik zıplar.

İlgili sayfalar

  • IconButton: kare, yalnızca ikonlu aksiyonlar.
  • Link: aksiyon değil, navigasyon için.
  • Spinner: loading'in kullandığı gösterge.