M Majid DS mds
GitHub

Guides

Demo

Every component on one page — the free Flux UI set plus the whole mds layer, in English.

This is the workbench demo, rendered through Blade at build time like every other preview in these docs. Everything on it is live: open the modals, press ⌘K, type in the composer. For the kit in the language it is designed for, see the RTL demo.

The whole kit follows one config flag
config('mds.persian_digits') is off on this page, so every component speaks English: Latin digits and separators, %, English unit labels, transliterated Jalali month names, Out of stock, 159 KB. The only Persian left comes from the digit and money directives (@fa, @faNum, @toman, @rial), which are Persian by definition — @jalali and every component follow the config; reach for mds:price when money should too.
Typography — flux:heading / text / link / separator
Large heading — Vazirmatn
Medium heading
Regular heading
A subheading to explain a section

Body text with an inline link and Persian numerals straight from the @toman directive: ۲٬۵۰۰٬۰۰۰ تومان — and from @jalali: 29 Mordad 1405 (both are Persian by definition, whatever the page locale).

or

Vertical separator:

Sign in

Sign up

Buttons — flux:button
Badges — flux:badge
Default
Cancelled
Pending
Ships today
Delivered
Original
Shipping
Featured
Subscription
Offer
Flash
Small
Large
Rounded with icon
Solid
Flash sale
Avatars & icons — flux:avatar / icon
MM
SR
FK
MM
3+
Forms — flux:input / textarea / select / checkbox / radio / switch / otp
Search
⌘K
Mobile number A verification code will be sent to this number.
Password
Referral code
Email
Product image
Review
Province Verification code
Notifications
Order status An SMS at every shipping step
Discounts and offers
Weekly newsletter
Shipping method
Courier Same-day delivery
Priority post 2 to 4 business days
In-store pickup
View List Grid Table In stock only Free shipping
Callouts — flux:callout
Payment is awaiting confirmation
The bank will report the result in a moment.
Order placed successfully
Tracking code: MDS-140529
Only 2 left in stock
Payment failed
Any amount charged will be returned to your account within 72 hours.
Tooltip, menu, modal and toast — flux:tooltip / dropdown / modal / toast
Add to favorites
Quick search ⌘K
Newest
Cheapest
Best selling
Delete this order?

This cannot be undone and your order will be cancelled entirely.

Cart

AirSound Pro wireless headphones

1

Total:

1,890,000 Toman
Command palette — mds:command

An open version of the Command component (Pro-only in Flux) — Persian search, keyboard navigation and a ⌘K shortcut.

Inline:

Chat with support
No results found.

In a modal with the ⌘K shortcut:

No results found.
Color picker — mds:color-picker

An open version of the Color Picker component (Pro-only in Flux) — a saturation/brightness canvas, hue and alpha sliders, a swatch palette, an eyedropper and six output formats.

Brand color
Background color (rgba)
Output format: rgba, with an alpha slider
Custom swatches

Button mode:

File upload — mds:file-upload

An open version of the File Upload component (Pro-only in Flux) — drag and drop, click to choose, a Livewire upload progress bar, and a file list with localized sizes.

Upload images
You can select several files at once.
Profile_pic.jpg
159 KB
sales-contract.pdf
2.3 MB
archive.zip
This file is larger than 10 MB.
Compact (inline)
With a progress bar
Disabled
With a validation error
Custom uploader (avatar)

Any HTML inside <mds:file-upload> gets the full upload behavior; style the states with in-data-dragging: and in-data-loading:.

Chat & prompt input — mds:composer

An open version of the Composer component (Pro-only in Flux) — a multi-line input that grows with the text, an action bar around it, Ctrl/⌘ + Enter to send, and a character counter.

A prompt with an action bar
Message
Press Ctrl + Enter to send.
0 / 500
With an attachment preview (the header slot)
galaxy-phone.jpg
159 KB
A conversation, Enter to send
Hi! When is my order arriving?
Your parcel arrives on:
Message
Form variant (variant="input") and error states
Support message
You will get a reply within 24 hours.
With a validation error
Disabled
Link preview — mds:preview-card

A card previewing a link's destination — it opens on hover or keyboard focus, and the link itself still navigates on click.

The profile behind an @mention

This kit is maintained by the team at @majid_ds .

A media preview

Our next offsite is at the Coastal House next month.

The card only opens on hover or focus — never on touch — so keep anything essential on the linked page itself. Placement is logical (side/align take start/end) and mirrors automatically on RTL pages.

Timeline — mds:timeline

An open version of the Timeline component (Pro-only in Flux) — vertical and horizontal, step states, colored indicators and full-width blocks. The rail follows the reading direction.

Default
  1. Order placed · 4 days ago
  2. Payment confirmed
    Online
  3. Delivered ·
Large (size="lg") with numbered steps
  1. 1
    Cart

    Review the items and finalize quantities.

  2. 2
    Address & delivery slot

    Pick the recipient address and a delivery window.

  3. 3
    Payment

    Pay online or on delivery.

Horizontal + step state
  1. Paid

    31 Mordad 1405

  2. Packed

    1 Shahrivar 1405

  3. Shipping

    The courier is on the way

  4. Delivered to customer

    By tomorrow

Indicator alignment with long text (align)
Start — start
  1. 1
    Submit documents

    Upload a photo of your national ID and your latest academic certificate so our team can review your file.

  2. 2
    Final review
First text line — baseline
  1. 1
    Submit documents

    Upload a photo of your national ID and your latest academic certificate so our team can review your file.

  2. 2
    Final review
Center (default) — center
  1. 1
    Submit documents

    Upload a photo of your national ID and your latest academic certificate so our team can review your file.

  2. 2
    Final review
End — end
  1. 1
    Submit documents

    Upload a photo of your national ID and your latest academic certificate so our team can review your file.

  2. 2
    Final review
Colored indicator, bare variant and block
  1. Deployment failed
  2. Warning raised
  3. Released

    The indicator sits on the first line of the large heading (align="baseline").

  1. Mahdi left a comment · 30 Mordad 1405
  2. Support replied

    Your parcel ships from the Tehran warehouse today.

  3. Ticket closed
Charts — mds:chart

Monochrome dashboard charts, server-rendered as SVG with no library — an open take on the Chart component (Pro-only in Flux). Persian digits; the funnel and heatmap are RTL-native.

Monthly revenue
48,920 k Toman +14.2%
Rounded sparkline Last six months
Monthly sales Spline
84 k orders
0 25 50 75 100 Far Ord Kho Tir Mor Sha
Dashed: last year Peak in Mordad
Seasonal sales 3 layers
160 billion
0 50 100 150 200 Spring Summer Fall Winter
Sales funnel 4 stages
24% conversion
Visits 100
Cart 68
Payment 42
Purchase 24
Category share Donut
100% Total sales
Mobile Home appliances Books Other
4 categories Share of sales
Customer satisfaction Gauge
84% performance index
84 Target met
Ops targets Benchmark
On-time delivery 82% / 75%
Response rate 65% / 80%
Uptime 95% / 90%
Marker: target 3 metrics
Seller score Radar
85 of 100
Shipping speed Quality Price Response rate Packaging
Order activity 14 weeks
807 orders
Tir Mor Sha
Hover tiles for details
One column per week Darker: more

Every chart's ink is currentColor; a single text-accent class recolors the whole thing.

Popover — mds:popover

An open version of the Popover component (Pro-only in Flux) — a panel anchored to its button: logical, RTL-aware placement, focus returned to the trigger, and Escape to close.

The third panel also opens on hover or keyboard focus; a click pins it open.

Accordion — mds:accordion

An open version of the Accordion component (Pro-only in Flux) — built on the browser's own details/summary, so opening, the keyboard and find-in-page keep working with JavaScript off.

Frequently asked questions (one at a time, animated):

Shipping and delivery
Orders leave the warehouse within two working days and arrive within a week almost everywhere.
Seven days from delivery, no questions asked. We pay the return postage.
Every device carries a two-year warranty, handled by us rather than by the manufacturer.
Coming soon

A custom heading with a badge and an icon:

Order 1481
Shipping
Handed to the courier on Sunday.
Delivered last Wednesday and signed for.
Slider — mds:slider

An open version of the Slider component (Pro-only in Flux) — single-thumb or range, with a live localized readout, tick marks and server-side clamping.

Volume 60%
Arrow keys move it too.
Price range 500000 Toman – 3000000 Toman
Screen brightness 3
Data allowance
Sign in to change this.
Time picker — mds:time-picker

An open version of the Time Picker component (Pro-only in Flux) — a list of times at any step, free typing with localized digits, and a machine value that is always 24-hour.

Delivery time
  • 09:00
  • 09:30
  • 10:00
  • 10:30
  • 11:00
  • 11:30
  • 12:00
  • 12:30
  • 13:00
  • 13:30
  • 14:00
  • 14:30
  • 15:00
  • 15:30
  • 16:00
  • 16:30
  • 17:00
  • 17:30
  • 18:00
  • 18:30
  • 19:00
  • 19:30
  • 20:00
  • 20:30
  • 21:00
Half-hour slots, 9 to 21.
Appointment start
  • 08:00
  • 08:15
  • 08:30
  • 08:45
  • 09:00
  • 09:15
  • 09:30
  • 09:45
  • 10:00
  • 10:15
  • 10:30
  • 10:45
  • 11:00
  • 11:15
  • 11:30
  • 11:45
  • 12:00
  • 12:15
  • 12:30
  • 12:45
  • 13:00
  • 13:15
  • 13:30
  • 13:45
  • 14:00
  • 14:15
  • 14:30
  • 14:45
  • 15:00
  • 15:15
  • 15:30
  • 15:45
  • 16:00
  • 16:15
  • 16:30
  • 16:45
  • 17:00
  • 17:15
  • 17:30
  • 17:45
  • 18:00
Reminder
  • 12:00 AM
  • 12:30 AM
  • 1:00 AM
  • 1:30 AM
  • 2:00 AM
  • 2:30 AM
  • 3:00 AM
  • 3:30 AM
  • 4:00 AM
  • 4:30 AM
  • 5:00 AM
  • 5:30 AM
  • 6:00 AM
  • 6:30 AM
  • 7:00 AM
  • 7:30 AM
  • 8:00 AM
  • 8:30 AM
  • 9:00 AM
  • 9:30 AM
  • 10:00 AM
  • 10:30 AM
  • 11:00 AM
  • 11:30 AM
  • 12:00 PM
  • 12:30 PM
  • 1:00 PM
  • 1:30 PM
  • 2:00 PM
  • 2:30 PM
  • 3:00 PM
  • 3:30 PM
  • 4:00 PM
  • 4:30 PM
  • 5:00 PM
  • 5:30 PM
  • 6:00 PM
  • 6:30 PM
  • 7:00 PM
  • 7:30 PM
  • 8:00 PM
  • 8:30 PM
  • 9:00 PM
  • 9:30 PM
  • 10:00 PM
  • 10:30 PM
  • 11:00 PM
  • 11:30 PM
Tabs — mds:tabs

An open version of the Tabs component (Pro-only in Flux) — the full WAI-ARIA pattern, arrow-key navigation that flips in a right-to-left layout, and the correct tab already active in the server's first render.

Default, with icons:

Weight, dimensions and warranty.

Segmented and small, with a preselected tab:

Orders from the last 30 days.

Pills, bound to Livewire:

Your name, photo and public profile.
Autocomplete — mds:autocomplete

An open version of the Autocomplete component (Pro-only in Flux) — an ordinary text field with a list of suggestions, Persian-aware search and keyboard navigation.

Free text, with cities suggested:

City
Tehran
Mashhad
Isfahan
Karaj
Shiraz
Tabriz
Kish (outside the delivery area)
No city by that name.
Move through the list with the arrow keys and pick with Enter.

One of the options only, after two characters:

Search products
Samsung Galaxy S25
AirSound Pro wireless headphones
Fit Band 8 smartwatch
65 W fast charger
No product by that name.
Text that matches no product is cleared when the field loses focus.
The value is always text, never an id — so wire:model.live lets you build the list on the server; the component re-reads its own options after every morph.
Context menu — mds:context

An open version of the Context component (Pro-only in Flux) — an ordinary flux:menu that opens at the pointer on right-click, Shift+F10 or a long press.

Right-click the card:

Quarterly report.pdf

2.4 MB · right-click for options

With the keyboard: Tab to the image, then Shift+F10:

A sample photo

A context menu is a shortcut, never the only path: keep the same actions somewhere visible too — a flux:dropdown or the row's own buttons.

Pillbox — mds:pillbox

An open version of the Pillbox component (Pro-only in Flux) — multi-select with removable pills, Persian search and a selection cap.

Up to three categories:

Categories
Mobile phones
1 selected
Mobile phones
Books & magazines
Home appliances
Beauty & health
Fashion
Sports & travel
No matches.

Product tags:

Product tags
Free shipping Authentic
2 selected
Free shipping
Authentic
Warranty
In stock
Discounted
No tags found.
Tags appear next to the title on the product page.
Rich-text editor — mds:editor

An open version of Flux Pro's Editor — with no third-party JavaScript at all: a contenteditable surface, a standard ARIA toolbar, and pasted HTML filtered down to the allow-list.

Product description
Only the formatting below is kept; everything else is stripped on paste.

A short toolbar:

Short note

A custom toolbar:

Your comment

Shortcuts: Ctrl/⌘ with B for bold, I for italic, U for underline and K for a link. In the toolbar, the arrow keys move in the order you see.

Calendar — mds:calendar

An open version of the Calendar component (Pro-only in Flux) — and unlike it, Jalali: Farvardin through Esfand, a week that opens on Saturday, and the right leap years. What reaches Livewire is always an ISO Gregorian date.

One day, with bounds and days off:

Shahrivar 1405
Week Saturday Sunday Monday Tuesday Wednesday Thursday Friday
23
24
25
26
27

A stay, two months side by side:

Shahrivar 1405 – Mehr 1405
Shahrivar 1405
Saturday Sunday Monday Tuesday Wednesday Thursday Friday
Mehr 1405
Saturday Sunday Monday Tuesday Wednesday Thursday Friday

Several days at once:

Mordad 1405
Saturday Sunday Monday Tuesday Wednesday Thursday Friday

Month and year from the header:

Khordad 1372
Saturday Sunday Monday Tuesday Wednesday Thursday Friday
The arrow keys drive the grid: Left and Right move a day — the way the arrow points, even on a right-to-left page — Up and Down move a week, Home and End jump to the ends of the week, PageUp and PageDown move a month, and Shift makes it a year.
Kanban board — mds:kanban

An open version of the Kanban component (Pro-only in Flux) — mouse and touch dragging, full keyboard moves, and every move announced to screen readers.

To move a card with the keyboard, focus it and press Space, move it with the arrow keys, then press Space again.

To do 3 cards
  • Design the checkout page Due Thursday
  • Fix the cart badge
  • Migrate to Tailwind 4
In progress 1 of 2 cards
  • Release 2.1 Waiting on QA
Done 2 cards
  • Add unit tests
  • Review the Persian copy Locked
Press Space or Enter to pick up a card, the arrow keys to move it, Space or Enter to drop it, Escape to cancel.

Last move: Nothing moved yet.

Date picker — mds:date-picker

An open version of the Date picker component (Pro-only in Flux): a text field you can write a date into, plus the same Jalali calendar inside a popover. Whatever you type or pick, what reaches Livewire is an ISO Gregorian date.

One day — type it or take it from the calendar:

Delivery day
Date format: YYYY/MM/DD Selected: 1405/06/02
Write the date, or pick it from the calendar.

A travel range, two months side by side:

Stay
Date format: YYYY/MM/DD — two dates separated by "to" Selected: 1405/06/04 – 1405/06/17

A date far back — with month and year selects:

Date of birth
Date format: YYYY/MM/DD Selected: 15 Khordad 1372

The same field, on the Gregorian calendar:

Invoiced at
Date format: YYYY/MM/DD Selected: 2026/08/20

«۱۴۰۵-۰۵-۲۹», «۱۴۰۵/۰۵/۲۹» and «۱۴۰۵۰۵۲۹» are all the same day; anything that is not a date never becomes one, and the field puts back what it had.

Border beam — mds:border-beam

A comet of light lapping the border of whatever it wraps. There is no script behind it — it is CSS all the way down, and it inherits the corner radius from the wrapper itself, so it sits on a rounded card and on a fully round button alike. On a right-to-left page the lap is mirrored too.

Analyzing your data
Longer tail, slower, thicker

The beam is decoration and nothing else: it stays hidden from screen readers, never swallows a click, and is not drawn at all for anyone who asked for less motion. So never let it be the only sign of a state — put text or a spinner next to it.

Icons — mds:icon

Hugeicons replaces heroicons across every mds component. The free Stroke Rounded set (6,200 icons) ships with the package; heroicon names still work through an alias map.

Hugeicons names
shopping-cart-01
truck-delivery
discount-tag-01
wallet-01
store-01
gift
coins-01
delivery-box-01
heroicon names (alias map)
magnifying-glass → search-01
shopping-bag → shopping-bag
credit-card → credit-card
exclamation-triangle → alert-02
heart → heart
map-pin → map-pin
trash → delete-02
user → user
Size with Tailwind classes
Stroke width
Color & accessibility
Pro styles
Only the Stroke Rounded style is free. For the other eight, register your own licensed export in config('mds.icons.sets') — this package ships no Pro files. Set config('mds.icons.default') = 'flux' to go back to heroicons everywhere.
Breadcrumbs — flux:breadcrumbs
MDS-140529
Table & pagination — flux:table / pagination + mds components
Product
Status
Amount
Samsung Galaxy S25
Delivered
2 days ago
13%
48,900,000
42,500,000 Toman
AirSound Pro wireless headphones
Shipping
1 day ago
1,890,000 Toman
One Hundred Years of Solitude
Awaiting payment
6 hours ago
30%
350,000
245,000 Toman
Fit Band 8 smartwatch
Cancelled
2 hours ago
3,200,000 Toman
Showing 9 to 12 of 48 results
Progress — flux:progress

Profile completion — 35%

Flash sale capacity — 70%

Satisfaction score — 92%

Skeleton — flux:skeleton
Rating — mds:rating

Leave a rating:

Quantity — mds:quantity
2
1
3
Price — mds:price / discount-badge
22%
3,200,000
2,500,000 Toman
890,000 Toman
14,500,000 Rial
20%
1,500,000
1,200,000 Toman
10% 25% 20%
Digit input — mds:input

flux:input, except Persian and Arabic digits are rewritten to Latin as they are typed or pasted — the value that reaches the server is always the machine form.

Mobile number Type with any keyboard; the Latin value is stored.
National ID Ten digits; the check digit is verified server-side by the NationalId rule.
Card number 16 digits; the grouping is display-only and the BankCard rule ignores the spaces.
Sheba (IBAN) IR and 24 digits; the grouping is display-only and the Sheba rule ignores the spaces.
Verification code
Address
Checkout steps — mds:stepper
Countdown — mds:countdown

Flash deal:

07 hours
42 min
00 sec
02 days
05 hours
00 min
00 sec
This deal has ended
Jalali date — mds:jalali-date
Today:
Numeric:
Order placed:
With the Blade directives (always Persian): 29 Mordad 1405۲٬۵۰۰٬۰۰۰ تومان
Product card — mds:product-card
Ships today
Samsung Galaxy S25, 256 GB

Samsung Galaxy S25, 256 GB

13%
48,900,000
42,500,000 Toman

AirSound Pro wireless headphones

1,890,000 Toman
Best seller
One Hundred Years of Solitude by Gabriel García Márquez

One Hundred Years of Solitude by Gabriel García Márquez

30%
350,000
245,000 Toman
Your cart is empty

You have not added anything to your cart yet. Start with the flash deals.

Related