تخطَّ إلى المحتوى

Button

يُنفّذ إجراءً. ستة أنماط، ونسختان للإجراءات المدمّرة وللخلفيات الملونة، وثلاثة أحجام، وزر الأيقونة فقط وحالة التحميل.

الإصدار 0.2.0 ·

الأنماط
الاتجاه
السمة
حجم العرض

التثبيت

bunx --bun shadcn@latest add @dga/button

يثبّت هذا الأمر أيضًا Spinner لحالة التحميل.

الاستخدام

app/page.tsx
tsx
import { Button } from "@/components/ui/button";

export default function Page() {
  return <Button>إرسال الطلب</Button>;
}

البنية

Root (<button type="button">، أو أي عنصر عبر render)، وIcon اختيارية قبل Label أو بعده، وSpinner يحل محل الأيقونة الأولى أثناء loading.

أمثلة

الأنماط

النمطمتى يُستخدم
primaryالإجراء الرئيسي. واحد في كل عرض.
neutralإجراء قوي بلا لون العلامة (في Figma: Primary-Neutral).
secondaryإجراءات مساندة بجوار الإجراء الرئيسي (في Figma: Secondary-Solid).
outlineإجراءات مساندة على الخلفيات المزدحمة (في Figma: Secondary-Outline).
subtleإجراءات منخفضة الأهمية في أشرطة الأدوات والجداول.
transparentإجراءات تشبه النص. يتغير لون التسمية عند التمرير.

الإجراء المدمّر

أضف destructive للإجراءات التي تحذف أو لا يمكن التراجع عنها. لكل نمط ما عدا neutral نسخة مدمّرة، وneutral يرجع إلى primary المدمّر.

الإجراء المدمّر

للخلفيات الملونة

أضف onColor على تعبئات العلامة (background-primary وترويسة التنقل). تكون تسميات الإجراء المدمّر بيضاء هناك، والنص هو الذي يحمل المعنى.

للخلفيات الملونة

الأحجام

ارتفاع sm ‏24px، وmd ‏32px (الافتراضي)، وlg ‏40px.

الأحجام

الحالات

يشير aria-pressed إلى زر تبديل (أو data-selected في القوائم والمجموعات)، ويمنع disabled الإجراء، ويعرض loading التقدّم.

المحدد والمعطّل والتحميل

يستبدل loading الأيقونة الأولى بمؤشر دوّار، ويحافظ على العرض، ويتجاهل النقرات. ويبقى الزر قابلًا لاستقبال التركيز.

الأيقونات

ضع على أيقونة Hugeicons الوسم data-icon="inline-start" أو "inline-end". تحتاج أزرار الأيقونة فقط إلى iconOnly وإلى aria-label.

الأيقونات

لجعل الرابط يبدو كزر، اعرض عنصر a عبر الخاصية render:

page.tsx
tsx
<Button nativeButton={false} render={<a href="/services" />}>
  الخدمات
</Button>

اتجاه RTL

تتبدل جهات الأيقونات والمسافات والحشوات من تلقاء نفسها (خصائص منطقية). أما الأيقونات الاتجاهية كالأسهم فلا تنقلب: أضف rtl:-scale-x-100.

LTR (الإنجليزية)
RTL (العربية)

إمكانية الوصول

المفتاحالإجراء
Tabينقل التركيز إلى الزر.
Enter أو Spaceيُفعّله.
  • عنصر <button type="button"> أصلي: يُعلَن دور button واسمه.
  • حلقة التركيز على :focus-visible فقط: حد border-black بسمك 2px (أبيض في الوضع الداكن وعلى تعبئات العلامة)، وفاصل 1px.
  • تحتاج أزرار الأيقونة فقط إلى aria-label؛ والأيقونات مخفية عن قارئات الشاشة.
  • يشير aria-pressed إلى زر تبديل مضغوط. ويضبط loading القيمتين aria-busy وaria-disabled؛ والمؤشر الدوّار زخرفي.

مرجع API

Button

ينفّذ إجراءً. ستة أنماط، ونسختان للإجراءات المدمّرة وللخلفيات الملونة، وثلاثة أحجام، وزر بأيقونة فقط وحالة تحميل.

خصائص Button
الخاصيةالنوعالقيمة الافتراضية
"primary" | "neutral" | "secondary" | "outline" | "subtle" | "transparent"

النمط. `neutral` يقابل Primary-Neutral في Figma، و`secondary` يقابل Secondary-Solid، و`outline` يقابل Secondary-Outline.

"primary"
"sm" | "md" | "lg"

الارتفاع: `sm` ‏24px، و`md` ‏32px، و`lg` ‏40px.

"md"
boolean

النسخة المدمّرة من النمط. لا يوجد لـ `neutral` نسخة مدمّرة في Figma، فيعود إلى `primary` المدمّر.

false
boolean

للأزرار على خلفيات لون العلامة (`background-primary`، وترويسة التنقل).

false
boolean

مربع بأيقونة فقط. يحتاج إلى `aria-label`.

false
boolean

يعرض مؤشر تحميل مكان الأيقونة الأولى (أو الأيقونة نفسها في الأزرار ذات الأيقونة فقط)، ويضبط aria-busy، ويتجاهل النقرات. يحافظ الزر على عرضه ويبقى قابلًا للتركيز.

false
ReactElement | function

يتيح لك استبدال عنصر HTML الخاص بالمكوّن بوسم آخر، أو تركيبه مع مكوّن آخر. يقبل `ReactElement` أو دالة تعيد العنصر المراد عرضه.

لا توجد قيمة افتراضية

يقبل أيضًا جميع خصائص Base UI Button (يفتح في نافذة جديدة).

الدالة buttonVariants() مُصدَّرة لتنسيق عناصر أخرى كأزرار.

الاختلافات عن DGA

التغييرالسبب
--button-background-transparent-hovered (light)White label on white-20 over the brand fill fails AA (down to 2.38:1). Black-20 darkens the fill instead (6.30:1 or better), as dark mode already does.
--button-background-transparent-pressed (light)White label on white-40 over the brand fill fails AA (down to 2.38:1). Black-40 darkens the fill instead (6.30:1 or better), as dark mode already does.
--button-background-transparent-selected (light)White label on white-30 over the brand fill fails AA (down to 2.38:1). Black-30 darkens the fill instead (6.30:1 or better), as dark mode already does.
--button-label-transparent-hovered-on-color (light) و11 غيرهاGreen-300/400 on the brand fill is 2.10–2.82:1. The label stays white and the state is shown with an underline instead.

عرض جميع الاختلافات (46) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.

التباين

1,210 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 242 حالة
النمط / الحالةالفاتحالداكن
primary / default4.74:1 AA4.74:1 AA
primary / default (icon)4.74:1 3:14.74:1 3:1
primary / hovered6.60:1 AA6.60:1 AA
primary / hovered (icon)6.60:1 3:16.60:1 3:1
primary / pressed10.81:1 AAA10.81:1 AAA
primary / pressed (icon)10.81:1 3:110.81:1 3:1
primary / selected8.55:1 AAA8.55:1 AAA
primary / selected (icon)8.55:1 3:18.55:1 3:1
primary / focused4.74:1 AA4.74:1 AA
primary / focused (icon)4.74:1 3:14.74:1 3:1
primary / focus ring17.31:1 3:117.49:1 3:1
neutral / default18.74:1 AAA15.89:1 AAA
neutral / default (icon)18.74:1 3:115.89:1 3:1
neutral / hovered14.53:1 AAA10.57:1 AAA
neutral / hovered (icon)14.53:1 3:110.57:1 3:1
neutral / pressed7.36:1 AAA7.66:1 AAA
neutral / pressed (icon)7.36:1 3:17.66:1 3:1
neutral / selected10.17:1 AAA10.57:1 AAA
neutral / selected (icon)10.17:1 3:110.57:1 3:1
neutral / focused18.74:1 AAA15.89:1 AAA
neutral / focused (icon)18.74:1 3:115.89:1 3:1
neutral / focus ring17.31:1 3:117.49:1 3:1
secondary / default16.44:1 AAA12.71:1 AAA
secondary / default (icon)16.44:1 3:112.71:1 3:1
secondary / hovered14.61:1 AAA6.95:1 AA
secondary / hovered (icon)14.61:1 3:16.95:1 3:1
secondary / pressed14.61:1 AAA6.95:1 AA
secondary / pressed (icon)14.61:1 3:16.95:1 3:1
secondary / selected14.61:1 AAA9.59:1 AAA
secondary / selected (icon)14.61:1 3:19.59:1 3:1
secondary / focused16.44:1 AAA12.71:1 AAA
secondary / focused (icon)16.44:1 3:112.71:1 3:1
secondary / focus ring17.31:1 3:117.49:1 3:1
outline / default17.31:1 AAA15.87:1 AAA
outline / default (icon)17.31:1 3:115.87:1 3:1
outline / hovered16.44:1 AAA12.71:1 AAA
outline / hovered (icon)16.44:1 3:112.71:1 3:1
outline / pressed14.61:1 AAA6.95:1 AA
outline / pressed (icon)14.61:1 3:16.95:1 3:1
outline / selected14.61:1 AAA9.59:1 AAA
outline / selected (icon)14.61:1 3:19.59:1 3:1
outline / focused17.31:1 AAA15.87:1 AAA
outline / focused (icon)17.31:1 3:115.87:1 3:1
outline / focus ring17.31:1 3:117.49:1 3:1
subtle / default17.31:1 AAA15.87:1 AAA
subtle / default (icon)17.31:1 3:115.87:1 3:1
subtle / hovered16.44:1 AAA12.71:1 AAA
subtle / hovered (icon)16.44:1 3:112.71:1 3:1
subtle / pressed14.61:1 AAA6.95:1 AA
subtle / pressed (icon)14.61:1 3:16.95:1 3:1
subtle / selected14.61:1 AAA9.59:1 AAA
subtle / selected (icon)14.61:1 3:19.59:1 3:1
subtle / focused17.31:1 AAA15.87:1 AAA
subtle / focused (icon)17.31:1 3:115.87:1 3:1
subtle / focus ring17.31:1 3:117.49:1 3:1
transparent / default17.31:1 AAA15.87:1 AAA
transparent / default (icon)17.31:1 3:115.87:1 3:1
transparent / hovered6.31:1 AA10.38:1 AAA
transparent / hovered (icon)6.31:1 3:110.38:1 3:1
transparent / pressed10.34:1 AAA13.05:1 AAA
transparent / pressed (icon)10.34:1 3:113.05:1 3:1
transparent / selected8.18:1 AAA10.38:1 AAA
transparent / selected (icon)8.18:1 3:110.38:1 3:1
transparent / focused17.31:1 AAA15.87:1 AAA
transparent / focused (icon)17.31:1 3:115.87:1 3:1
transparent / focus ring17.31:1 3:117.49:1 3:1
primary on-colour / default18.09:1 AAA17.04:1 AAA
primary on-colour / default (icon)18.09:1 3:117.04:1 3:1
primary on-colour / hovered12.97:1 AAA13.44:1 AAA
primary on-colour / hovered (icon)12.97:1 3:113.44:1 3:1
primary on-colour / pressed8.89:1 AAA10.30:1 AAA
primary on-colour / pressed (icon)8.89:1 3:110.30:1 3:1
primary on-colour / selected8.89:1 AAA10.30:1 AAA
primary on-colour / selected (icon)8.89:1 3:110.30:1 3:1
primary on-colour / focused18.09:1 AAA16.42:1 AAA
primary on-colour / focused (icon)18.09:1 3:116.42:1 3:1
primary on-colour / focus ring4.74:1 3:14.74:1 3:1
neutral on-colour / default18.09:1 AAA17.04:1 AAA
neutral on-colour / default (icon)18.09:1 3:117.04:1 3:1
neutral on-colour / hovered12.97:1 AAA13.44:1 AAA
neutral on-colour / hovered (icon)12.97:1 3:113.44:1 3:1
neutral on-colour / pressed8.89:1 AAA10.30:1 AAA
neutral on-colour / pressed (icon)8.89:1 3:110.30:1 3:1
neutral on-colour / selected10.76:1 AAA11.80:1 AAA
neutral on-colour / selected (icon)10.76:1 3:111.80:1 3:1
neutral on-colour / focused18.09:1 AAA16.42:1 AAA
neutral on-colour / focused (icon)18.09:1 3:116.42:1 3:1
neutral on-colour / focus ring4.74:1 3:14.74:1 3:1
secondary on-colour / default6.30:1 AA6.30:1 AA
secondary on-colour / default (icon)6.30:1 3:16.30:1 3:1
secondary on-colour / hovered6.30:1 AA6.30:1 AA
secondary on-colour / hovered (icon)6.30:1 3:16.30:1 3:1
secondary on-colour / pressed8.46:1 AAA8.46:1 AAA
secondary on-colour / pressed (icon)8.46:1 3:18.46:1 3:1
secondary on-colour / selected7.31:1 AAA7.31:1 AAA
secondary on-colour / selected (icon)7.31:1 3:17.31:1 3:1
secondary on-colour / focused6.30:1 AA6.30:1 AA
secondary on-colour / focused (icon)6.30:1 3:16.30:1 3:1
secondary on-colour / focus ring4.74:1 3:14.74:1 3:1
outline on-colour / default4.74:1 AA4.74:1 AA
outline on-colour / default (icon)4.74:1 3:14.74:1 3:1
outline on-colour / hovered6.30:1 AA6.30:1 AA
outline on-colour / hovered (icon)6.30:1 3:16.30:1 3:1
outline on-colour / pressed8.46:1 AAA8.46:1 AAA
outline on-colour / pressed (icon)8.46:1 3:18.46:1 3:1
outline on-colour / selected7.31:1 AAA7.31:1 AAA
outline on-colour / selected (icon)7.31:1 3:17.31:1 3:1
outline on-colour / focused4.74:1 AA4.74:1 AA
outline on-colour / focused (icon)4.74:1 3:14.74:1 3:1
outline on-colour / focus ring4.74:1 3:14.74:1 3:1
subtle on-colour / default4.74:1 AA4.74:1 AA
subtle on-colour / default (icon)4.74:1 3:14.74:1 3:1
subtle on-colour / hovered6.30:1 AA6.30:1 AA
subtle on-colour / hovered (icon)6.30:1 3:16.30:1 3:1
subtle on-colour / pressed8.46:1 AAA8.46:1 AAA
subtle on-colour / pressed (icon)8.46:1 3:18.46:1 3:1
subtle on-colour / selected7.31:1 AAA7.31:1 AAA
subtle on-colour / selected (icon)7.31:1 3:17.31:1 3:1
subtle on-colour / focused4.74:1 AA4.74:1 AA
subtle on-colour / focused (icon)4.74:1 3:14.74:1 3:1
subtle on-colour / focus ring4.74:1 3:14.74:1 3:1
transparent on-colour / default4.74:1 AA4.74:1 AA
transparent on-colour / default (icon)4.74:1 3:14.74:1 3:1
transparent on-colour / hovered4.74:1 AA4.74:1 AA
transparent on-colour / hovered (icon)4.74:1 3:14.74:1 3:1
transparent on-colour / pressed4.74:1 AA4.74:1 AA
transparent on-colour / pressed (icon)4.74:1 3:14.74:1 3:1
transparent on-colour / selected4.74:1 AA4.74:1 AA
transparent on-colour / selected (icon)4.74:1 3:14.74:1 3:1
transparent on-colour / focused4.74:1 AA4.74:1 AA
transparent on-colour / focused (icon)4.74:1 3:14.74:1 3:1
transparent on-colour / focus ring4.74:1 3:14.74:1 3:1
destructive primary / default4.83:1 AA4.83:1 AA
destructive primary / default (icon)4.83:1 3:14.83:1 3:1
destructive primary / hovered6.57:1 AA6.57:1 AA
destructive primary / hovered (icon)6.57:1 3:16.57:1 3:1
destructive primary / pressed9.84:1 AAA9.84:1 AAA
destructive primary / pressed (icon)9.84:1 3:19.84:1 3:1
destructive primary / selected8.66:1 AAA8.66:1 AAA
destructive primary / selected (icon)8.66:1 3:18.66:1 3:1
destructive primary / focused4.83:1 AA4.83:1 AA
destructive primary / focused (icon)4.83:1 3:14.83:1 3:1
destructive primary / focus ring17.31:1 3:117.49:1 3:1
destructive secondary / default6.04:1 AA8.59:1 AAA
destructive secondary / default (icon)6.04:1 3:18.59:1 3:1
destructive secondary / hovered5.45:1 AA7.94:1 AAA
destructive secondary / hovered (icon)5.45:1 3:17.94:1 3:1
destructive secondary / pressed4.63:1 AA7.50:1 AAA
destructive secondary / pressed (icon)4.63:1 3:17.50:1 3:1
destructive secondary / selected6.04:1 AA8.59:1 AAA
destructive secondary / selected (icon)6.04:1 3:18.59:1 3:1
destructive secondary / focused6.04:1 AA8.59:1 AAA
destructive secondary / focused (icon)6.04:1 3:18.59:1 3:1
destructive secondary / focus ring17.31:1 3:117.49:1 3:1
destructive primary on-colour / default4.83:1 AA4.83:1 AA
destructive primary on-colour / default (icon)4.83:1 3:14.83:1 3:1
destructive primary on-colour / hovered6.57:1 AA6.57:1 AA
destructive primary on-colour / hovered (icon)6.57:1 3:16.57:1 3:1
destructive primary on-colour / pressed9.84:1 AAA9.84:1 AAA
destructive primary on-colour / pressed (icon)9.84:1 3:19.84:1 3:1
destructive primary on-colour / selected8.66:1 AAA8.66:1 AAA
destructive primary on-colour / selected (icon)8.66:1 3:18.66:1 3:1
destructive primary on-colour / focused4.83:1 AA4.83:1 AA
destructive primary on-colour / focused (icon)4.83:1 3:14.83:1 3:1
destructive primary on-colour / focus ring4.74:1 3:14.74:1 3:1
destructive secondary on-colour / default6.04:1 AA6.04:1 AA
destructive secondary on-colour / default (icon)6.04:1 3:16.04:1 3:1
destructive secondary on-colour / hovered5.45:1 AA5.45:1 AA
destructive secondary on-colour / hovered (icon)5.45:1 3:15.45:1 3:1
destructive secondary on-colour / pressed4.63:1 AA4.63:1 AA
destructive secondary on-colour / pressed (icon)4.63:1 3:14.63:1 3:1
destructive secondary on-colour / selected6.04:1 AA6.04:1 AA
destructive secondary on-colour / selected (icon)6.04:1 3:16.04:1 3:1
destructive secondary on-colour / focused6.04:1 AA6.04:1 AA
destructive secondary on-colour / focused (icon)6.04:1 3:16.04:1 3:1
destructive secondary on-colour / focus ring4.74:1 3:14.74:1 3:1
destructive outline / default6.29:1 AA9.01:1 AAA
destructive outline / default (icon)6.29:1 3:19.01:1 3:1
destructive outline / hovered5.45:1 AA7.94:1 AAA
destructive outline / hovered (icon)5.45:1 3:17.94:1 3:1
destructive outline / pressed4.63:1 AA7.50:1 AAA
destructive outline / pressed (icon)4.63:1 3:17.50:1 3:1
destructive outline / selected6.04:1 AA8.59:1 AAA
destructive outline / selected (icon)6.04:1 3:18.59:1 3:1
destructive outline / focused6.29:1 AA9.01:1 AAA
destructive outline / focused (icon)6.29:1 3:19.01:1 3:1
destructive outline / focus ring17.31:1 3:117.49:1 3:1
destructive outline on-colour / default4.74:1 AA4.74:1 AA
destructive outline on-colour / default (icon)4.74:1 3:14.74:1 3:1
destructive outline on-colour / hovered6.30:1 AA6.30:1 AA
destructive outline on-colour / hovered (icon)6.30:1 3:16.30:1 3:1
destructive outline on-colour / pressed8.46:1 AAA8.46:1 AAA
destructive outline on-colour / pressed (icon)8.46:1 3:18.46:1 3:1
destructive outline on-colour / selected7.31:1 AAA7.31:1 AAA
destructive outline on-colour / selected (icon)7.31:1 3:17.31:1 3:1
destructive outline on-colour / focused4.74:1 AA4.74:1 AA
destructive outline on-colour / focused (icon)4.74:1 3:14.74:1 3:1
destructive outline on-colour / focus ring4.74:1 3:14.74:1 3:1
destructive subtle / default6.29:1 AA9.01:1 AAA
destructive subtle / default (icon)6.29:1 3:19.01:1 3:1
destructive subtle / hovered5.45:1 AA7.94:1 AAA
destructive subtle / hovered (icon)5.45:1 3:17.94:1 3:1
destructive subtle / pressed4.63:1 AA7.50:1 AAA
destructive subtle / pressed (icon)4.63:1 3:17.50:1 3:1
destructive subtle / selected6.04:1 AA8.59:1 AAA
destructive subtle / selected (icon)6.04:1 3:18.59:1 3:1
destructive subtle / focused6.29:1 AA9.01:1 AAA
destructive subtle / focused (icon)6.29:1 3:19.01:1 3:1
destructive subtle / focus ring17.31:1 3:117.49:1 3:1
destructive subtle on-colour / default4.74:1 AA4.74:1 AA
destructive subtle on-colour / default (icon)4.74:1 3:14.74:1 3:1
destructive subtle on-colour / hovered6.30:1 AA6.30:1 AA
destructive subtle on-colour / hovered (icon)6.30:1 3:16.30:1 3:1
destructive subtle on-colour / pressed8.46:1 AAA8.46:1 AAA
destructive subtle on-colour / pressed (icon)8.46:1 3:18.46:1 3:1
destructive subtle on-colour / selected7.31:1 AAA7.31:1 AAA
destructive subtle on-colour / selected (icon)7.31:1 3:17.31:1 3:1
destructive subtle on-colour / focused4.74:1 AA4.74:1 AA
destructive subtle on-colour / focused (icon)4.74:1 3:14.74:1 3:1
destructive subtle on-colour / focus ring4.74:1 3:14.74:1 3:1
destructive transparent / default4.62:1 AA6.27:1 AA
destructive transparent / default (icon)4.62:1 3:16.27:1 3:1
destructive transparent / hovered6.29:1 AA9.01:1 AAA
destructive transparent / hovered (icon)6.29:1 3:19.01:1 3:1
destructive transparent / pressed9.42:1 AAA12.32:1 AAA
destructive transparent / pressed (icon)9.42:1 3:112.32:1 3:1
destructive transparent / selected8.29:1 AAA9.01:1 AAA
destructive transparent / selected (icon)8.29:1 3:19.01:1 3:1
destructive transparent / focused4.62:1 AA6.27:1 AA
destructive transparent / focused (icon)4.62:1 3:16.27:1 3:1
destructive transparent / focus ring17.31:1 3:117.49:1 3:1
destructive transparent on-colour / default4.74:1 AA4.74:1 AA
destructive transparent on-colour / default (icon)4.74:1 3:14.74:1 3:1
destructive transparent on-colour / hovered4.74:1 AA4.74:1 AA
destructive transparent on-colour / hovered (icon)4.74:1 3:14.74:1 3:1
destructive transparent on-colour / pressed4.74:1 AA4.74:1 AA
destructive transparent on-colour / pressed (icon)4.74:1 3:14.74:1 3:1
destructive transparent on-colour / selected4.74:1 AA4.74:1 AA
destructive transparent on-colour / selected (icon)4.74:1 3:14.74:1 3:1
destructive transparent on-colour / focused4.74:1 AA4.74:1 AA
destructive transparent on-colour / focused (icon)4.74:1 3:14.74:1 3:1
destructive transparent on-colour / focus ring4.74:1 3:14.74:1 3:1

يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل