Garages

Component library

Every piece of the interface, in every state

This page shows the components every screen of the garages app is built from: in Arabic and English, light and dark. What changes here changes on every screen that uses it.

Garage pieces

The pieces made for the garages app: big, colour that means something, few words. Every screen is built from them.

Brand

Deep indigo and sunny yellow. Green, amber and red are kept for meaning: paid, soon, expired.

app/globals.css — brand block

Garages

Run motorcycle and car garages: every vehicle with its owner and subscription

Vehicle colours

BlackWhiteRedBlueSilverGreyGreenYellowOrangeMaroon

Titles and numbers: Baloo Bhaijaan 2

Body text: Readex Pro

Vehicle drawing

Motorcycle, car, van, bicycle — in the vehicle’s own colour.

VehicleIcon
MotorcycleCarVanBicycle

Number plate

A Syrian plate: private, public, motorcycle. It stays the same in Arabic and English.

PlateBadge
دمشق·سوريا441 049حلب·عمومي725 318اللاذقية58 213
حمص·سوريا310 872حمص·سوريا310 872حمص·سوريا310 872دمشق904 417No plate

Status as colour

Green paid or inside, amber ends soon, red expired or owes money.

StatusPill
PaidEnds soonExpiredOwes moneyInsideOut
PaidEnds soonExpiredOwes moneyInsideOut
PaidEnds soonExpiredOwes moneyInsideOut

Amount

In new Syrian pounds; a big number, a small currency.

Money · moneyText()
6,145SYP1,500SYP750SYP75SYP
Monthly · 1,500 SYP a monthWeekly · 450 SYP a weekDaily · 75 SYP a dayVisit · 30 SYP a visit

Big button

A huge icon and a word or two. One press, one job.

BigActionButton

Coloured number

A big number in its meaning colour; opens the list behind it.

CountTile
4Expired
9Ends soon
4Owes money
19Inside
16Out

Customer picture

Initials on a colour fixed by the name, and a status dot.

PersonAvatar

How full the garage is

A big ring: amber past 80 %, red when full.

OccupancyRing
19 / 36Inside
30 / 36Inside
22 / 22Inside
14 / 30Inside

Vehicle card

Lists on a phone are cards, not tables. The edge strip is the subscription colour.

VehicleCard

Screen header

A big back button, a clear title, and one action on the end side.

ScreenHeader

Vehicles

35

Mohammad Al-Halabi

0938 739 266

Number pad

Huge digit keys instead of the phone keyboard.

NumberPad · BigNumberDisplay
4410

One question per screen

A few steps, and one big button at the bottom of the screen.

StepWizard

Step 1 of 3

What kind of vehicle?

Bottom sheet

Rises from the bottom of the screen. Every pick list inside it opens whole above it.

BottomSheet

Garage switcher

An owner of several garages switches between them in one press.

GarageSwitcher · CurrentGarageSwitcher

Nothing here

A friendly drawing, one sentence and one button.

GarageEmpty

No payments today

The first payment you take will show up here.

Drawings

Simple drawings in the brand colours; they follow night mode.

Art

Section title

A title, a count, and an «all» link.

SectionTitle

Inside now

19Next

Tab bar

Four tabs and the big «In / Out» button in the middle — you see it at the bottom of every app screen.

components/shell/TabBar

Foundations

Colour, type and corners, then the smallest pieces every screen is built from: buttons, badges, avatars and hints.

Colours

Every colour on screen is one of these names, never a hand-typed code. Click a colour to copy its name.

tokens · ColorSwatch

Two colours make a project its own: the brand and the accent, plus the ink. The three are written in ONE block at the top of the stylesheet, and everything shown here is derived from them — light and dark alike. Change that block and every screen changes.

Brand

Accent

Ink steps

Surfaces

Lines

The four status tones

ToneSoftSolidWhen
BrandbrandSampleSampleThe main action, links, selection
NeutralneutralSampleSampleDrafts, secondary actions
AccentaccentSampleSampleWhat deserves a gentle look
SuccesssuccessSampleSampleApproved, complete, on time
WarningwarningSampleSampleClose to due, needs a change
DangerdangerSampleSampleLate, delete, reject
InfoinfoSampleSampleIn review, a note

Status tones are fixed: they never follow a rebrand, so red is red in every project.

Gradient and the deep shade

Signature gradient

For the ONE key action on a screen

bg-signature

Glow

For a page hero or an empty state

bg-glow

Deep shade

The sidebar and tooltips

bg-deep

Type scale

Eight sizes are enough for every screen. Figures are always Latin digits and line up in columns.

text-*
text-4xl36px

This week's report is ready for review

A big figure in a page header

text-3xl30px

This week's report is ready for review

Screen title

text-2xl24px

This week's report is ready for review

Section title

text-lg18px

This week's report is ready for review

Card title

text-[15px]15px

This week's report is ready for review

Lead paragraph

text-sm14px

This week's report is ready for review

Body text

text-xs12px

This week's report is ready for review

A hint under a field

text-2xs11px

This week's report is ready for review

A small label over a group

Corners and shadows

One base corner (10 px) the others derive from, and five shadows for elevation. In dark mode the shadows go deeper.

rounded-* · shadow-*

Corners

sm · 6
md · 8
lg · 10
xl · 14
2xl · 18
full · ∞

Shadows

xs
sm
md
lg
xl
brand

Button

Six shapes, each taking any tone. The signature shape is for the ONE key action of a screen.

Button

Shapes

Every shape in every tone

Sizes

With an icon

States

Button group

Buttons joined in one frame, or a spaced row. The group's size and tone apply to every button in it.

ButtonGroup

Joined

Spaced

Icon button

A square button with only its icon. Its name is required, and shows as a tooltip on hover or focus.

IconButton

Shapes

Sizes

Split button

A main action with an arrow beside it that opens the alternatives. The menu floats above everything, is never clipped, and Escape closes it.

SplitButton

Shapes

States

Copy button

Copies the text and says «Copied» right where it was pressed, for two seconds. This is house's own button, in the library's colours.

A house pieceCopyButton
https://house.example/invite/7Q2K

Badge

A short word for a state: soft, solid or outlined, with a dot or an icon.

Badge

Soft

ApprovedIn reviewLateDraftUrgent

Solid · Outline

ApprovedLateIn reviewUrgent

Sizes

SmallMediumLarge

Tag

A tag that toggles when pressed (for filters), is removed with its button, or carries a person.

Tag · Chip

For filtering

Removable

FinanceHuman resources

People

Sara Al-QahtaniFahad Al-OtaibiPremium Hospitality Co.

Count and status dot

A small number in a bubble that reads «99+» past its limit, and a dot that breathes for what is live now.

Count · StatusDot

Shapes

34299+597 unread

States

Online nowSyncingOffline

Avatar

Two initials in a colour fixed to the name everywhere, or the photo when there is one, with a presence dot.

Avatar · AvatarGroup

Sizes

States

Group

Tooltip

A short word on hover or keyboard focus. It even tells why a disabled button is disabled.

Tooltip

With a shortcut

On a disabled button

Keys and separator

Key caps (⌘ on Apple devices, Ctrl elsewhere) and a separating line, with or without a word.

Kbd · Separator

Kbd

To search, press CtrlK⇧↵Esc

Separator

or
Edit
Share
Print

Fields and forms

Every field here is built on house's Field: the label above the box, its message under it, one height and one border for every box. Lists and the calendar open over the page and nothing clips them.

Field

The label, the control, and its own message under it. Every field in the library goes through it.

A house pieceField

States

We only send the sign-in link there.

Text box

One line, with an icon, a prefix or a suffix, and a character counter when needed.

TextField · Input

States

Empty

Filled

Disabled

Read only

Checking

Extras

+966
https://

Accepted

Shown at the top of the report.0 / 40

Sizes

Long text

Grows with the text up to a limit, then scrolls; counts characters when the text has a maximum.

TextAreaField · Textarea

States

Sent to the reviewer with the request.86 / 200

Number box

The − and + buttons (hold to keep going), the arrow keys, a minimum and a maximum; digits typed on an Arabic keyboard read as Latin.

NumberField

States

hours

From 0 to 80, in half-hour steps.

%

Disabled

Search box

A clear button appears as you type, Esc clears, and a keyboard shortcut puts the cursor in it.

SearchField

States

Password

The eye shows what was typed. The box runs left to right in both languages.

A house piecePasswordInput

States

At least twelve characters.

Disabled

Pick list

Every choice from a list goes through it. A short list opens as it is; a long one (seven options or more) has a search box that understands Arabic spelling.

A house pieceSearchSelect

States

Short list

Long list with search

Disabled

Date box

Typed or picked from the calendar. Accepts 25/2/2027 and Arabic digits and turns them into year-month-day.

A house pieceDateInput

States

This month or the next only.

Date with Hijri

The same date box, with the same day in the Umm al-Qura calendar under it (or beside it), following every pick.

DateField

Layouts

Hijri: 3 Jumada I 1448 AH

Hijri under the box

The Hijri date shows here once a day is picked

Hijri beside it

Both dates together

For a date in a table or a card: Gregorian and Hijri, on one line or two, with the governing calendar emphasised.

DualDate

Display

One line

2026-10-143 Jumada I 1448 AH

Two lines

2026-10-143 Jumada I 1448 AH

Hijri governs

2026-10-143 Jumada I 1448 AH

Amounts

The official riyal sign (SAMA), drawn, before the figure in both languages. Digits are always Latin.

Money · RiyalSign

Display

Full

4,850,000

Compact

4.9M

With the code

SAR 1,250

With halalas

312.50

Amount box

Groups the thousands as you type, and turns Arabic digits into Latin ones.

MoneyInput

States

Stored value: nothing yet

Disabled

Verification code in boxes

A fixed-length code sent by text or email. Typing moves to the next box, pasting fills them all, Arabic digits read as Latin. Not the same as the two-step sign-in box below.

OtpInput

States

Empty

Complete

Split 3 + 3

Two-step sign-in code

One box that takes an authenticator app code (six digits) or a backup code shaped XXXXX-XXXXX.

A house pieceCodeInput

States

File upload

Drop or browse; the files are listed under it with their size and a remove button. It draws progress only for a real upload the screen reports.

FileDrop

States

Checkbox

On or off, and «some» when a group is partly chosen.

Checkbox

States

House's own checkbox (for a form posted as is)

Checkbox group

Several options under one label, with «select all».

CheckboxGroup

States

One of several

A vertical or horizontal list, with a line of explanation per option.

RadioGroup

Layouts

Choice cards

For a decision where each option needs a sentence.

RadioCards

Switch

For a setting that applies at once, with no save button.

Switch

States

Sizes

Segmented buttons

Always one choice among a few, such as how a list is shown.

SegmentedControl

States

Layouts

Filter chips

Several choices switched on and off, with an optional count.

ToggleChips

States

Sizes

Slider

One value or a range, with marks under it and a bubble with the value while dragging.

Slider

States

Windows and menus

Everything that appears over the page: windows, the side panel, the confirm question, toasts, menus and anchored panels — and with them the page’s quiet states: empty, loading, progressing. Every list and calendar here opens whole above the window that holds it, and Escape closes only the top layer.

Dialog

A window over the page for a short task: a form, details, or a decision. Escape, a click outside or the close button closes it, and focus returns to the button that opened it. On a phone it rises from the bottom edge.

Dialog · DialogClose

Sizes

A form inside a dialog

Side panel

A panel that slides in from the screen’s end (the right in English) for longer things: filters, a record’s details, settings. Same fields; their lists open whole above it.

Sheet

Confirm question

Asks before something that cannot be undone. A click outside does not close it — the answer is yes or no. It can ask for a word to be typed first, and run the work inside itself until it finishes. It opens from anywhere, even from inside an open dialog.

AlertDialog · useConfirm

Tones

Toast

A short word in the screen’s corner about something that happened elsewhere or in the background. It leaves by itself, its timer stops while the pointer is over it, and it shows above any open window.

toast · Toaster
A toast never replaces the result where it lands: a saved form shows its new values, a table dims in place while it refreshes. A toast is for what has no place on this screen: a job finished in the background, an undo for a row that left the list.

Tones

Cases

Popover

A small panel under a button: a quick filter, a two-field form, a piece of information. Focus moves into it; a click outside or Escape closes it.

Popover

Hover card

Shows when the pointer rests on a name or a link, or when the keyboard reaches it, after a short moment. For previews only — no buttons in it.

HoverCard
Reviewed by Mona Alqahtani and forwarded to Finance.

Screen-level note

A note about the whole screen: a refusal, an absence, a standing condition. Not where a field’s error goes — that is written under the field itself.

A house pieceCallout
This data is a demo and is not saved.
You may not open this screen. Ask your branch manager for access.

Waiting where the result lands

While a result is on its way, the place it will appear says so: the button spins until the new data is really on screen, and the list dims in place instead of being replaced.

A house piececomponents/Pending

A button and a list sharing one pending state

  • Row 1
  • Row 2
  • Row 3

The list never disappears and keeps its scroll: it only dims until the new row arrives.

A panel with nothing to show yet

Loading…

The spinner on its own

Checking the code…

Empty state

A small drawing, a title, one line of help, and the next step. Four kinds: nothing yet, no results, all done, and failed to load.

EmptyState

Nobody here yet

Add the first person to the branch and the list will appear here.

No results for “senior accountant”

Try a shorter word, or clear the filters.

Nothing is waiting for you

You have reviewed every request. We will tell you when a new one arrives.

Could not load the list

The connection to the server dropped. Nothing was lost.

Small — inside a card or a table

No results for “senior accountant”

Try a shorter word, or clear the filters.

Skeleton

The shape of what is coming, with a calm light crossing it in the reading direction. For a first load only: what is already shown and refreshing stays put and dims.

Skeleton · SkeletonText · SkeletonAvatar · SkeletonCard · SkeletonTable · SkeletonTableRow

Blocks and lines

A card

A table

Progress

How far along something measurable is: a file uploading, a wizard’s steps, a share of a target. Digits are always Latin.

Progress · SegmentedProgress · ProgressRing

The bar

Uploading the payroll sheet64%
Approved3 of 5
Storage92%

Nearly full — delete old attachments.

Preparing the file…

Steps

Step 2 of 4 · Attachments

The ring

64%
64%
18of 25

Figures and charts

The figures that matter, in a tile, and the charts that explain them. Their colours come from the chart slots in the brand block, their digits are Latin, and under Arabic time runs from the right.

Stat card

A label, a figure, the change against the last period, and a small trend. The change is coloured by whether it is good news, not by its sign: fewer failed sign-ins is green.

StatCard

Active people

1,284

+12%

against last month

Failed sign-ins

37

−18%

fewer is better

Sign-ins today

412

+6%

against yesterday

On-time attendance

92%

target 95%

Requests waiting

8

0%

same as last week — the whole tile is a link

Bar chart

A comparison between categories: columns for months, stacked when made of parts, or horizontal rows for long Arabic names. Hover to see the details.

BarChart

Stacked columns

JanFebMarAprMayJun
  • Approved
  • Waiting for review
  • Returned for changes

Horizontal rows

  • Field operations42
  • Engineering31
  • Customer care24
  • Finance12

Line chart

A trend over time, one line or more, with a filled area under the first and a dashed target line.

LineChart
  • This year
  • Last year

Donut

The parts of one whole. It turns from the top in the reading direction; hover a part to see its figure and share in the middle.

Donut

80

requests

  • Approved4657%
  • Waiting for review1823%
  • Returned for changes911%
  • Drafts79%

Sparkline

A trend without axes, beside a figure or inside a tile. It ends on a dot at the last value.

Sparkline
Sign-ins29
On-time attendance92
Failed sign-ins6
New people7

Chart legend

Explains a chart’s colours. The eight slots follow the brand and the dark theme; no colour is written by hand.

ChartLegend

The eight chart slots

  • chart-1
  • chart-2
  • chart-3
  • chart-4
  • chart-5
  • chart-6
  • chart-7
  • chart-8

With values

  • Approved46
  • Waiting for review18
  • Returned for changes9

Data table

House's own table, not a copy from another library. It reads the database, so it is not drawn on this page.

A house piececomponents/data-table

Fetches only the page you see from the server, sorts and searches there, opens a row in a side sheet, and lets the reader choose and resize columns. It runs on the People screen.