Components

60 components, each shown in English and Arabic (right-to-left), dark and light.

Basics

Button

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { Button } from "@/design-system";

<Button variant="primary" size="md">Start session</Button>
Basics

IconButton

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { IconButton } from "@/design-system";

<IconButton label="Notifications" dot><IconBell size={20} /></IconButton>
Basics

Chip

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { Chip } from "@/design-system";

<Chip selected={on} onClick={toggle}>Yoga</Chip>
Basics

Badge

EN · Dark
CourseNewPlusFreeFew seatsFullOnline
AR · Dark
دورةجديدPlusمجانيمقاعد قليلةمكتملأونلاين
EN · Light
CourseNewPlusFreeFew seatsFullOnline
AR · Light
دورةجديدPlusمجانيمقاعد قليلةمكتملأونلاين
Code
import { Badge } from "@/design-system";

<Badge variant="plus">Plus</Badge>
Basics

Avatar

EN · Dark
AYASNA
AR · Dark
أيعصنا
EN · Light
AYASNA
AR · Light
أيعصنا
Code
import { Avatar } from "@/design-system";

<Avatar name="Amina Yasmin" size="lg" ring />
Basics

Card

EN · Dark

glass

Morning calm

solid

Morning calm

raised

Morning calm

AR · Dark

glass

هدوء الصباح

solid

هدوء الصباح

raised

هدوء الصباح

EN · Light

glass

Morning calm

solid

Morning calm

raised

Morning calm

AR · Light

glass

هدوء الصباح

solid

هدوء الصباح

raised

هدوء الصباح

Code
import { Card } from "@/design-system";

<Card variant="glass" padding="md">…</Card>
Basics

Input

EN · Dark
As it appears on your ID
Enter a valid email
AR · Dark
كما يظهر في الهوية
أدخل بريداً صحيحاً
EN · Light
As it appears on your ID
Enter a valid email
AR · Light
كما يظهر في الهوية
أدخل بريداً صحيحاً
Code
import { Input } from "@/design-system";

<Input label="Email" placeholder="you@example.com" error="…" />
Basics

Tabs

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { Tabs } from "@/design-system";

<Tabs items={items} value={tab} onValueChange={setTab} />
Basics

SegmentedControl

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { SegmentedControl } from "@/design-system";

<SegmentedControl label="Mode" options={…} value={v} onValueChange={setV} />
Basics

Toggle

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { Toggle } from "@/design-system";

<Toggle label="Reminders" showLabel checked={on} onCheckedChange={setOn} />
Basics

ProgressBar

EN · Dark

21-Day Anxiety Relief · 64%

AR · Dark

21 يوماً لتخفيف القلق · 64%

EN · Light

21-Day Anxiety Relief · 64%

AR · Light

21 يوماً لتخفيف القلق · 64%

Code
import { ProgressBar } from "@/design-system";

<ProgressBar label="Course progress" value={64} />
Basics

ProgressRing

EN · Dark
07:00
3/5
AR · Dark
07:00
3/5
EN · Light
07:00
3/5
AR · Light
07:00
3/5
Code
import { ProgressRing } from "@/design-system";

<ProgressRing label="Session timer" value={7} max={10}>07:00</ProgressRing>
Basics

Stepper

EN · Dark
  1. Details
  2. 2Payment
  3. 3Done
  1. Application sent
  2. Under review
  3. 3Interview
  4. 4Decision
AR · Dark
  1. التفاصيل
  2. 2الدفع
  3. 3تم
  1. تم إرسال الطلب
  2. قيد المراجعة
  3. 3مقابلة
  4. 4القرار
EN · Light
  1. Details
  2. 2Payment
  3. 3Done
  1. Application sent
  2. Under review
  3. 3Interview
  4. 4Decision
AR · Light
  1. التفاصيل
  2. 2الدفع
  3. 3تم
  1. تم إرسال الطلب
  2. قيد المراجعة
  3. 3مقابلة
  4. 4القرار
Code
import { Stepper } from "@/design-system";

<Stepper current={1} steps={[{label:"Details"},{label:"Payment"},{label:"Done"}]} />
Basics

Divider

EN · Dark

Above


Below

AR · Dark

أعلى


أسفل

EN · Light

Above


Below

AR · Light

أعلى


أسفل

Code
import { Divider } from "@/design-system";

<Divider />
Basics

RatingStars

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { RatingStars } from "@/design-system";

<RatingStars value={4} onValueChange={setRating} />
Basics

Text

EN · Dark

Are you ready to grow?

Caption text

AR · Dark

هل أنت مستعد للنمو؟

نص توضيحي

EN · Light

Are you ready to grow?

Caption text

AR · Light

هل أنت مستعد للنمو؟

نص توضيحي

Code
import { Text } from "@/design-system";

<Text variant="h2">Are you ready to grow?</Text>
App shell

PointsPill

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { PointsPill } from "@/design-system";

<PointsPill value={50} kind="points" />
App shell

AppHeader

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { AppHeader } from "@/design-system";

<AppHeader user={{name:"Abdullah"}} levelTitle="Hi Beginner" xp={389} points={50} streak={7} hasNotifications />
App shell

BottomNav

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { BottomNav } from "@/design-system";

<BottomNav items={items} activeKey="home" linkAs={Link} />
App shell

SideMenu

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { SideMenu } from "@/design-system";

<SideMenu items={items} activeKey="home" header={…} />
App shell

CreateButton

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { CreateButton } from "@/design-system";

<CreateButton>Create</CreateButton>
App shell

OfflineBanner

EN · Dark
You're offline. Showing saved content.
AR · Dark
أنت غير متصل. نعرض المحتوى المحفوظ.
EN · Light
You're offline. Showing saved content.
AR · Light
أنت غير متصل. نعرض المحتوى المحفوظ.
Code
import { OfflineBanner } from "@/design-system";

<OfflineBanner onRetry={retry} />
App shell

ViewAsBanner

EN · Dark
Viewing as Noura · Member · read-only
AR · Dark
تعرض كـ نورة · عضو · للقراءة فقط
EN · Light
Viewing as Noura · Member · read-only
AR · Light
تعرض كـ نورة · عضو · للقراءة فقط
Code
import { ViewAsBanner } from "@/design-system";

<ViewAsBanner viewingAs="Noura (Member)" onExit={exit} />
Overlays

Dialog

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { Dialog } from "@/design-system";

<Dialog open title="Cancel booking?" actions={…} onClose={close} />
Overlays

BottomSheet

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { BottomSheet } from "@/design-system";

<BottomSheet open title="Session options" onClose={close}>…</BottomSheet>
Overlays

FilterSheet

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { FilterSheet } from "@/design-system";

<FilterSheet open groups={groups} value={v} onValueChange={setV} onApply={apply} onReset={reset} />
Overlays

ShareSheet

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { ShareSheet } from "@/design-system";

<ShareSheet open onShare={share} onClose={close} />
Overlays

ReportSheet

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { ReportSheet } from "@/design-system";

<ReportSheet open targetName="@noura" onAction={act} onClose={close} />
Overlays

AdminActionsSheet

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { AdminActionsSheet } from "@/design-system";

<AdminActionsSheet open actions={actions} onSelect={run} onClose={close} />
Overlays

Toast

EN · Dark
Booking confirmed
See you Thursday at 7 PM
Only 2 seats left
New message from your coach
AR · Dark
تم تأكيد الحجز
نراك الخميس 7 مساءً
بقي مقعدان فقط
رسالة جديدة من مدربك
EN · Light
Booking confirmed
See you Thursday at 7 PM
Only 2 seats left
New message from your coach
AR · Light
تم تأكيد الحجز
نراك الخميس 7 مساءً
بقي مقعدان فقط
رسالة جديدة من مدربك
Code
import { Toast } from "@/design-system";

<Toast tone="success" title="Booking confirmed" onDismiss={dismiss} />
Overlays

CelebrationModal

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { CelebrationModal } from "@/design-system";

<CelebrationModal open kind="xp" amount={120} title="Streak unlocked!" />
Commerce & booking

PriceTiles

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { PriceTiles } from "@/design-system";

<PriceTiles tiles={tiles} value={opt} onValueChange={setOpt} />
Commerce & booking

StatusChip

EN · Dark
PendingConfirmedCancelledRefundedLiveEndedApprovedRejected
AR · Dark
قيد الانتظارمؤكدملغىمستردمباشرانتهىمقبولمرفوض
EN · Light
PendingConfirmedCancelledRefundedLiveEndedApprovedRejected
AR · Light
قيد الانتظارمؤكدملغىمستردمباشرانتهىمقبولمرفوض
Code
import { StatusChip } from "@/design-system";

<StatusChip status="confirmed" />
Commerce & booking

Countdown

EN · Dark
--Days
--Hours
--Min
--Sec
AR · Dark
--يوم
--ساعة
--دقيقة
--ثانية
EN · Light
--Days
--Hours
--Min
--Sec
AR · Light
--يوم
--ساعة
--دقيقة
--ثانية
Code
import { Countdown } from "@/design-system";

<Countdown to={retreatStart} />
Commerce & booking

DayGrid

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { DayGrid } from "@/design-system";

<DayGrid days={states} onSelect={openDay} />
Commerce & booking

CalendarPicker

EN · Dark

October 2026

AR · Dark

أكتوبر 2026

EN · Light

October 2026

AR · Light

أكتوبر 2026

Code
import { CalendarPicker } from "@/design-system";

<CalendarPicker value={date} onValueChange={setDate} locale="ar-SA" />
Commerce & booking

TimeSlotPicker

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { TimeSlotPicker } from "@/design-system";

<TimeSlotPicker slots={slots} value={slot} onValueChange={setSlot} />
Commerce & booking

QRTicket

EN · Dark

AlUla Desert Retreat

ConfirmedETZ-7F3K-2026
Date
12 Nov 2026
Time
4:00 PM
Guest
Abdullah
Seat
B-12
AR · Dark

خلوة صحراء العلا

مؤكدETZ-7F3K-2026
التاريخ
12 نوفمبر 2026
الوقت
4:00 م
الضيف
عبدالله
المقعد
B-12
EN · Light

AlUla Desert Retreat

ConfirmedETZ-7F3K-2026
Date
12 Nov 2026
Time
4:00 PM
Guest
Abdullah
Seat
B-12
AR · Light

خلوة صحراء العلا

مؤكدETZ-7F3K-2026
التاريخ
12 نوفمبر 2026
الوقت
4:00 م
الضيف
عبدالله
المقعد
B-12
Code
import { QRTicket } from "@/design-system";

<QRTicket code="ETZ-7F3K-2026" title="Desert Retreat" details={…} />
Commerce & booking

ConfirmationCard

EN · Dark

You're booked!

We've sent the details to your email.

Session
Breath & Release
Coach
Amina Yasmin
Paid
50 Etta Points
AR · Dark

تم الحجز!

أرسلنا التفاصيل إلى بريدك.

الجلسة
تنفّس وتحرّر
المدرب
أمينة ياسمين
المدفوع
50 نقطة إيتا
EN · Light

You're booked!

We've sent the details to your email.

Session
Breath & Release
Coach
Amina Yasmin
Paid
50 Etta Points
AR · Light

تم الحجز!

أرسلنا التفاصيل إلى بريدك.

الجلسة
تنفّس وتحرّر
المدرب
أمينة ياسمين
المدفوع
50 نقطة إيتا
Code
import { ConfirmationCard } from "@/design-system";

<ConfirmationCard title="You're booked!" summary={…} actions={…} />
Content

ContentCard

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { ContentCard } from "@/design-system";

<ContentCard contentType="audio" access="plus" locked title="…" />
Content

CourseCard

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { CourseCard } from "@/design-system";

<CourseCard title="21-Day Anxiety Relief" rating={4.9} price={50} coach={<CoachChip name="Amina Yasmin" />} />
Content

CoachChip

EN · DarkAYAmina Yasmin
AR · Darkأيأمينة ياسمين
EN · LightAYAmina Yasmin
AR · Lightأيأمينة ياسمين
Code
import { CoachChip } from "@/design-system";

<CoachChip name="Amina Yasmin" />
Content

SectionHeader

EN · Dark

Recommended For You

AR · Dark

مقترح لك

EN · Light

Recommended For You

AR · Light

مقترح لك

Code
import { SectionHeader } from "@/design-system";

<SectionHeader title="Recommended For You" action={<Button variant="ghost" size="sm">See all</Button>} />
Content

GreetingHeader

EN · Dark

Good Morning!

Hey Abdullah!

Are you ready to grow?

AR · Dark

صباح الخير!

أهلاً عبدالله!

هل أنت مستعد للنمو؟

EN · Light

Good Morning!

Hey Abdullah!

Are you ready to grow?

AR · Light

صباح الخير!

أهلاً عبدالله!

هل أنت مستعد للنمو؟

Code
import { GreetingHeader } from "@/design-system";

<GreetingHeader greeting="Good Morning!" name="Hey Abdullah!" prompt="Are you ready to grow?" />
Content

StreakTracker

EN · Dark
7 Day Streak2 days to go
z
AR · Dark
سلسلة 7 أيامبقي يومان
z
EN · Light
7 Day Streak2 days to go
z
AR · Light
سلسلة 7 أيامبقي يومان
z
Code
import { StreakTracker } from "@/design-system";

<StreakTracker title="7 Day Streak" remaining="2 days to go" days={[…]} />
Content

ReviewCard

EN · Dark
NA
Noura Al HarbiPlus
2 days ago

Amina's breathing sessions changed my evenings. I sleep so much better now.

AR · Dark
نا
نورة الحربيPlus
قبل يومين

جلسات التنفس مع أمينة غيّرت أمسياتي. أنام أفضل بكثير الآن.

EN · Light
NA
Noura Al HarbiPlus
2 days ago

Amina's breathing sessions changed my evenings. I sleep so much better now.

AR · Light
نا
نورة الحربيPlus
قبل يومين

جلسات التنفس مع أمينة غيّرت أمسياتي. أنام أفضل بكثير الآن.

Code
import { ReviewCard } from "@/design-system";

<ReviewCard author="Noura" rating={5} date="2 days ago" body="…" />
Content

RoleBadge

EN · Dark
CoachAdminModeratorMemberPlus
AR · Dark
مدربمشرفمراقبعضوPlus
EN · Light
CoachAdminModeratorMemberPlus
AR · Light
مدربمشرفمراقبعضوPlus
Code
import { RoleBadge } from "@/design-system";

<RoleBadge role="coach" />
Content

SafetyCard

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { SafetyCard } from "@/design-system";

<SafetyCard title="Need to talk now?" tone="urgent">…</SafetyCard>
States

EmptyState

EN · Dark

No bookings yet

Find a session that fits your day.

AR · Dark

لا توجد حجوزات بعد

اعثر على جلسة تناسب يومك.

EN · Light

No bookings yet

Find a session that fits your day.

AR · Light

لا توجد حجوزات بعد

اعثر على جلسة تناسب يومك.

Code
import { EmptyState } from "@/design-system";

<EmptyState title="No bookings yet" action={…} />
States

ErrorState

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { ErrorState } from "@/design-system";

<ErrorState title="Couldn't load" onRetry={retry} />
States

LockedState

EN · Dark

Plus members only

Unlock every course, retreat discount and offline listening.

AR · Dark

للأعضاء بلس فقط

افتح كل الدورات وخصومات الخلوات والاستماع دون اتصال.

EN · Light

Plus members only

Unlock every course, retreat discount and offline listening.

AR · Light

للأعضاء بلس فقط

افتح كل الدورات وخصومات الخلوات والاستماع دون اتصال.

Code
import { LockedState } from "@/design-system";

<LockedState title="Plus members only" action={…} />
States

NoAccess

EN · Dark

You don't have access

Ask an admin to grant you the Coach role.

AR · Dark

ليس لديك صلاحية

اطلب من المشرف منحك دور المدرب.

EN · Light

You don't have access

Ask an admin to grant you the Coach role.

AR · Light

ليس لديك صلاحية

اطلب من المشرف منحك دور المدرب.

Code
import { NoAccess } from "@/design-system";

<NoAccess title="You don't have access" />
States

Skeleton

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { Skeleton } from "@/design-system";

<SkeletonCard />  <Skeleton width="60%" />
States

Mascot

EN · Dark
Etta
Great job!
Etta
z z z
Etta
AR · Dark
Etta
أحسنت!
Etta
z z z
Etta
EN · Light
Etta
Great job!
Etta
z z z
Etta
AR · Light
Etta
أحسنت!
Etta
z z z
Etta
Code
import { Mascot } from "@/design-system";

<Mascot mood="happy" message="Great job!" />
Analytics

BarChart

EN · DarkSun: 12SunMon: 20MonTue: 8TueWed: 30WedThu: 18ThuFri: 0FriSat: 25Sat
AR · Darkأحد: 12أحدإثن: 20إثنثلا: 8ثلاأرب: 30أربخمي: 18خميجمع: 0جمعسبت: 25سبت
EN · LightSun: 12SunMon: 20MonTue: 8TueWed: 30WedThu: 18ThuFri: 0FriSat: 25Sat
AR · Lightأحد: 12أحدإثن: 20إثنثلا: 8ثلاأرب: 30أربخمي: 18خميجمع: 0جمعسبت: 25سبت
Code
import { BarChart } from "@/design-system";

<BarChart title="Minutes practised" data={[{label:"Sun",value:12},…]} />
Analytics

LineChart

EN · DarkW1: 3W1W2: 4W2W3: 3W3W4: 5W4W5: 4W5W6: 5W6W7: 5W7
AR · Darkأ1: 3أ1أ2: 4أ2أ3: 3أ3أ4: 5أ4أ5: 4أ5أ6: 5أ6أ7: 5أ7
EN · LightW1: 3W1W2: 4W2W3: 3W3W4: 5W4W5: 4W5W6: 5W6W7: 5W7
AR · Lightأ1: 3أ1أ2: 4أ2أ3: 3أ3أ4: 5أ4أ5: 4أ5أ6: 5أ6أ7: 5أ7
Code
import { LineChart } from "@/design-system";

<LineChart title="Mood trend" data={…} />
Analytics

CalendarHeatmap

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { CalendarHeatmap } from "@/design-system";

<CalendarHeatmap title="Practice days" values={levels} />
Brand

RewardBadge

EN · Dark
AR · Dark
EN · Light
AR · Light
Code
import { RewardBadge } from "@/design-system";

<RewardBadge size={96} />