nili/ui
كل المكوّنات

Button

عرض شامل
٤٢ تصدير١٩ محور تنويع٧٢ خاصيّة١٢ ملف
import { Button, ButtonGroup, CompactButton, FancyButton, LinkButton } from '@nili/ui';

هذه صفحة العرض الشامل الخاصة بالمكتبة، معروضة حيّة. غيّر اللغة أو السمة من الأعلى وسَتتبعك.

المظاهر

أربعة أنماط بصرية. النمط filled هو الافتراضي؛ استخدم stroke أو lighter أو ghost حين تحتاج وزنًا بصريًا أخف.

import { Button } from "@nili/ui"

export function Example() {
  return (
    <>
      <Button appearance="filled">Filled</Button>
      <Button appearance="stroke">Stroke</Button>
      <Button appearance="lighter">Lighter</Button>
      <Button appearance="ghost">Ghost</Button>
    </>
  )
}

الألوان

primary وneutral وerror وsuccess. تُدمج بحرّية مع أي مظهر.

primary
neutral
error
success
import { Button } from "@nili/ui"

export function Example() {
  return (
    <>
      <Button color="primary">Primary</Button>
      <Button color="neutral">Neutral</Button>
      <Button color="error">Error</Button>
      <Button color="success">Success</Button>
    </>
  )
}

الأحجام

الحجم md (‏40 بكسل) هو الافتراضي. تحتفظ الأحجام الأصغر بمقياس الأيقونة والخط نفسه.

import { Button } from "@nili/ui"

export function Example() {
  return (
    <>
      <Button size="md">Medium</Button>
      <Button size="sm">Small</Button>
      <Button size="xs">X-Small</Button>
      <Button size="2xs">2X-Small</Button>
    </>
  )
}

مع الأيقونات

مرِّر أي عنصر React إلى startIcon أو endIcon. يُضبط حجم الأيقونة وتباعدها تلقائيًا.

import { Button, Icon } from "@nili/ui"
import { RiArrowLeftSLine, RiArrowRightSLine } from "@remixicon/react"

export function Example() {
  return (
    <Button
      startIcon={<Icon icon={RiArrowLeftSLine} mirrored />}
      endIcon={<Icon icon={RiArrowRightSLine} mirrored />}
    >
      Continue
    </Button>
  )
}

أيقونة فقط

أزرار مربّعة. امنحها دائمًا اسمًا وصفيًا عبر aria-label؛ فالأيقونة وحدها بلا اسم.

import { Button, Icon } from "@nili/ui"
import { RiAddLine } from "@remixicon/react"

export function Example() {
  return (
    <Button iconOnly aria-label="Add" startIcon={<Icon icon={RiAddLine} />} />
  )
}

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

تحافظ حالة loading على العرض الأصلي كي لا يقفز التخطيط. وdisabled هي السمة disabled نفسها.

import { Button } from "@nili/ui"

export function Example() {
  return (
    <>
      <Button loading loadingLabel="Sending">Send</Button>
      <Button disabled>Disabled</Button>
    </>
  )
}

بعرض كامل

مفيد داخل النماذج أو الأوراق على الهاتف.

import { Button } from "@nili/ui"

export function Example() {
  return <Button fullWidth>Continue</Button>
}

أزرار الروابط

إجراءات بوزن النص تجلس داخل الفقرة. استخدم underline لرابط مسطّر دائمًا، أو اتركه يظهر عند المرور.

import { LinkButton, Icon } from "@nili/ui"
import { RiArrowRightSLine } from "@remixicon/react"

export function Example() {
  return (
    <>
      <LinkButton href="#" color="primary">Primary link</LinkButton>
      <LinkButton href="#" color="gray">Gray link</LinkButton>
      <LinkButton href="#" color="error" underline>
        Underlined
      </LinkButton>
      <LinkButton
        href="#"
        color="primary"
        endIcon={<Icon icon={RiArrowRightSLine} mirrored />}
      >
        With icon
      </LinkButton>
    </>
  )
}

أزرار Fancy

النسخة البارزة، لأهم إجراء واحد في الشاشة. استخدمها بحساب — إن صار ثلاثة، لم يعد أيٌّ منها مميّزًا.

الألوان
الأحجام
مع الأيقونات
import { FancyButton, Icon } from "@nili/ui"
import { RiArrowRightSLine } from "@remixicon/react"

export function Example() {
  return (
    <>
      <FancyButton color="primary">Primary</FancyButton>
      <FancyButton color="neutral">Neutral</FancyButton>
      <FancyButton color="basic">Basic</FancyButton>
      <FancyButton
        color="primary"
        endIcon={<Icon icon={RiArrowRightSLine} mirrored />}
      >
        Continue
      </FancyButton>
    </>
  )
}

الأزرار المدمجة

عناصر مربّعة بأيقونة فقط للأماكن الضيّقة — إجراءات صفوف الجدول، زخارف الحقول، أشرطة الأدوات. امنحها aria-label دائمًا.

المظاهر
الأحجام
استدارة كاملة (قرص)
import { CompactButton, Icon } from "@nili/ui"
import { RiCloseLine, RiSettings3Line, RiMore2Fill } from "@remixicon/react"

export function Example() {
  return (
    <>
      <CompactButton appearance="stroke" aria-label="Close">
        <Icon icon={RiCloseLine} />
      </CompactButton>
      <CompactButton appearance="ghost" aria-label="Settings">
        <Icon icon={RiSettings3Line} />
      </CompactButton>
      <CompactButton appearance="error" aria-label="Delete">
        <Icon icon={RiCloseLine} />
      </CompactButton>
    </>
  )
}