پرتوپرتو

انتخابگر (Select)

کامپوننت انتخاب گزینه از لیست

معرفی

کامپوننت Select برای انتخاب یک گزینه از لیست کشویی استفاده می‌شود.

استفاده

import {
  Select,
  SelectTrigger,
  SelectValue,
  SelectContent,
  SelectItem,
} from '@parto/ui';

<Select defaultValue="option1">
  <SelectTrigger className="w-[220px]">
    <SelectValue placeholder="انتخاب کنید" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="option1">گزینه ۱</SelectItem>
    <SelectItem value="option2">گزینه ۲</SelectItem>
    <SelectItem value="option3">گزینه ۳</SelectItem>
  </SelectContent>
</Select>

با Label

<div className="space-y-2">
  <label htmlFor="framework">فریمورک</label>
  <Select>
    <SelectTrigger id="framework" className="w-[180px]">
      <SelectValue placeholder="انتخاب فریمورک" />
    </SelectTrigger>
    <SelectContent>
      <SelectItem value="next">Next.js</SelectItem>
      <SelectItem value="react">React</SelectItem>
      <SelectItem value="vue">Vue</SelectItem>
      <SelectItem value="svelte">Svelte</SelectItem>
    </SelectContent>
  </Select>
</div>

کنترل شده

const [value, setValue] = React.useState("");

<Select value={value} onValueChange={setValue}>
  <SelectTrigger>
    <SelectValue placeholder="انتخاب کنید" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="apple">سیب</SelectItem>
    <SelectItem value="banana">موز</SelectItem>
    <SelectItem value="orange">پرتقال</SelectItem>
  </SelectContent>
</Select>

با گروه‌بندی

import { SelectGroup, SelectLabel } from '@parto/ui';

<Select>
  <SelectTrigger className="w-[280px]">
    <SelectValue placeholder="انتخاب میوه" />
  </SelectTrigger>
  <SelectContent>
    <SelectGroup>
      <SelectLabel>میوه‌های استوایی</SelectLabel>
      <SelectItem value="banana">موز</SelectItem>
      <SelectItem value="pineapple">آناناس</SelectItem>
      <SelectItem value="mango">انبه</SelectItem>
    </SelectGroup>
    <SelectGroup>
      <SelectLabel>میوه‌های معمولی</SelectLabel>
      <SelectItem value="apple">سیب</SelectItem>
      <SelectItem value="orange">پرتقال</SelectItem>
      <SelectItem value="grape">انگور</SelectItem>
    </SelectGroup>
  </SelectContent>
</Select>

غیرفعال کردن گزینه

<Select>
  <SelectTrigger>
    <SelectValue placeholder="انتخاب کنید" />
  </SelectTrigger>
  <SelectContent>
    <SelectItem value="option1">گزینه ۱</SelectItem>
    <SelectItem value="option2" disabled>
      گزینه ۲ (غیرفعال)
    </SelectItem>
    <SelectItem value="option3">گزینه ۳</SelectItem>
  </SelectContent>
</Select>

ترکیب کامپوننت‌ها

Select از اجزای زیر تشکیل شده است:

  • Select: کانتینر اصلی و مدیریت state
  • SelectTrigger: دکمه باز کننده منو
  • SelectValue: نمایش مقدار انتخاب شده
  • SelectContent: کانتینر محتوای منو
  • SelectItem: هر گزینه
  • SelectGroup: گروه‌بندی گزینه‌ها
  • SelectLabel: برچسب گروه

Props

Select

PropTypeDefaultDescription
valuestring-مقدار کنترل شده
onValueChange(value: string) => void-callback تغییر مقدار
defaultValuestring-مقدار پیش‌فرض
disabledbooleanfalseغیرفعال کردن select

SelectItem

PropTypeDefaultDescription
valuestring-مقدار گزینه (الزامی)
disabledbooleanfalseغیرفعال کردن گزینه

دسترسی‌پذیری

  • پیمایش با کیبورد (Arrow keys، Enter، Space)
  • جستجو با تایپ
  • از role="combobox" استفاده می‌شود
  • aria-expanded برای وضعیت باز/بسته
  • aria-selected برای گزینه انتخاب شده
  • پشتیبانی کامل از screen readers

ملاحظات RTL

  • منوی dropdown به‌درستی راست‌چین می‌شود
  • آیکون کشویی در سمت مناسب قرار می‌گیرد
  • متن‌ها راست‌چین هستند
  • پیمایش کیبورد با RTL سازگار است