Accordion
عرض شاملimport { Accordion, AccordionGroup } from '@nili/ui';هذه صفحة العرض الشامل الخاصة بالمكتبة، معروضة حيّة. غيّر اللغة أو السمة من الأعلى وسَتتبعك.
أساسي
لا يحتاج الأكورديون الواحد إلا إلى عنوان ومحتوى. وcontent اسم بديل لـchildren — مرِّر أيّهما أوضح في موضع الاستدعاء.
import { Accordion } from "@nili/ui"
export function Example() {
return (
<>
<Accordion
title="How long does delivery take?"
content="Orders placed before 14:00 ship the same day."
/>
{/* the same thing, as children */}
<Accordion title="What is the return policy?">
Anything unopened can be returned within thirty days.
</Accordion>
</>
)
}مفتوح ومُتحكَّم به ومعطّل
يبدأ defaultOpen مفتوحًا ثم يترك الأمر وشأنه. أما open مع onOpenChange فيسلّمك الحالة — كأن يكون العنصر المفتوح معاملًا في الرابط.
الدعم متاح يوميًا من ٠٩:٠٠ إلى ٢١:٠٠ عبر الدردشة أو البريد. وتُجاب معظم التذاكر خلال ساعة.
تُشحن الطلبات قبل الساعة ١٤:٠٠ في اليوم نفسه. ويستغرق التوصيل داخل البلد من يومين إلى أربعة أيام عمل.
import { Accordion } from "@nili/ui"
export function Example() {
const [open, setOpen] = useState(true)
return (
<>
<Accordion defaultOpen title={t('states.startsOpen')} content="…" />
<Accordion
open={open}
onOpenChange={setOpen}
title="Controlled"
content="…"
/>
<Accordion disabled title="Disabled" content="…" />
</>
)
}المؤشّر والفتحة المتقدّمة
يتبع indicatorPosition اتجاه القراءة. ويستبدل indicator رمز + / - بالكامل، بينما يضيف startAdornment عنصرًا زخرفيًا قبل العنوان.
import { Accordion, Icon } from "@nili/ui"
import { RiQuestionLine, RiArrowDownSLine } from "@remixicon/react"
export function Example() {
return (
<>
<Accordion
indicatorPosition="start"
title={t('indicator.atStart')}
content="…"
/>
<Accordion
indicator={<Icon icon={RiArrowDownSLine} />}
title={t('indicator.custom')}
content="…"
/>
<Accordion
startAdornment={<Icon icon={RiQuestionLine} size={20} />}
title={t('indicator.withIcon')}
content="…"
/>
</>
)
}مجموعة — متعدّد
ينسّق AccordionGroup مجموعةً كاملة. ويحتاج كل ابن إلى id فريد، فهو ما تتعقّبه المجموعة. والوضع multiple هو الافتراضي: فتح واحد لا يمسّ البقية.
تُشحن الطلبات قبل الساعة ١٤:٠٠ في اليوم نفسه. ويستغرق التوصيل داخل البلد من يومين إلى أربعة أيام عمل.
import { Accordion, AccordionGroup } from "@nili/ui"
export function Example() {
return (
<AccordionGroup defaultValue={["shipping"]}>
<Accordion id="shipping" title="How long does delivery take?" content="…" />
<Accordion id="returns" title="What is the return policy?" content="…" />
<Accordion id="support" title="How do I reach support?" content="…" />
</AccordionGroup>
)
}مجموعة — مفرد
يغلق single البقية عند فتح واحد. ويُبقي collapsible={false} عنصرًا واحدًا مفتوحًا دائمًا — للوحة يجب أن تعرض شيئًا في كل وقت.
تُشحن الطلبات قبل الساعة ١٤:٠٠ في اليوم نفسه. ويستغرق التوصيل داخل البلد من يومين إلى أربعة أيام عمل.
import { Accordion, AccordionGroup } from "@nili/ui"
export function Example() {
return (
<AccordionGroup type="single" collapsible={false} defaultValue={["shipping"]}>
<Accordion id="shipping" title="How long does delivery take?" content="…" />
<Accordion id="returns" title="What is the return policy?" content="…" />
</AccordionGroup>
)
}Accordion
extends Omit< ComponentPropsWithoutRef<'div'>, 'title' | 'content' | 'onToggle' >
محاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| open | boolean | false | Controlled open state. Pair with `onOpenChange`. |
| disabled | boolean | false |
باقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| title* | ReactNode | — | |
| content | ReactNode | — | Alias for `children`, kept for call sites that pass content as a prop. |
| defaultOpen | boolean | false | Uncontrolled initial state. |
| onOpenChange | (open: boolean) => void | — | |
| indicatorPosition | start | end | end | Where the expand/collapse indicator sits. Follows reading direction. |
| indicator | ReactNode | — | Replaces the default + / - indicator entirely. |
| startAdornment | ReactNode | — | Decorative element shown before the title (e.g. a category icon). |
| id | string | — | Override the generated ids used to wire `aria-controls`/`aria-labelledby`. |
AccordionContent
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| open | 'true' | 'false' | false |
AccordionGroup
extends Omit< ComponentPropsWithoutRef<'div'>, 'defaultValue' | 'onChange' >
باقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| type | single | multiple | multiple | `'single'` closes the others on open; `'multiple'` leaves them alone. |
| collapsible | boolean | true | In `'single'` mode, allow closing the open item by clicking it again. |
| value | string[] | — | |
| defaultValue | string[] | — | |
| onValueChange | (value: string[]) => void | — |
AccordionIndicator
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| position | start | end | end |
AccordionPanel
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| start | 0 | 1 | 2 | 0 | |
| end | 0 | 1 | 1 |
AccordionTrigger
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| open | 'true' | 'false' | false |