Components
Every component below ships as source through the @persianlabsui registry. More are on the way.
New
Bounce Sidebar
NewA vertical navigation list with a bouncy, arc-animated active marker that springs between items.
Duration Picker
NewA gooey, spring-animated picker for entering a duration in hours and minutes.
Proximity Sidebar
NewA document minimap of proximity-reactive dashes that tracks scroll position, expands near the pointer, and smooth-scrolls to sections on click.
All components
Accordion
A vertically stacked set of interactive headings that each reveal a section of content, built on Base UI.
Alert
Displays a callout for important, contextual messages.
Alert Dialog
A modal dialog that interrupts the user with important content and expects a response, built on Base UI.
Aspect Ratio
Displays content within a desired ratio.
Attachment
Displays a file or image attachment with media, metadata, upload state, and actions.
Avatar
An image element with a fallback, for representing a user or entity, built on Base UI.
Badge
Displays a small badge to highlight status or metadata.
Bank Input
Iranian card-number and Shaba fields with paste normalization, checksums, and bank detection.
Breadcrumb
Displays the path to the current resource using a hierarchy of links.
Bubble
A chat message bubble with variants, reactions, and start/end alignment.
Button
A button built on Base UI with variant and size support.
Button Group
A container that groups related buttons together with consistent styling.
Calendar
A date-grid calendar built on react-day-picker, switchable between the Jalali (Shamsi) and Gregorian (Miladi) calendars via a calendarType prop.
Card
Displays a card with header, content, and footer.
Carousel
A carousel with motion and swipe built using Embla.
Checkbox
A control for selecting one or more options, built on Base UI.
City Selector
A province & city picker for Iran, built on Combobox and bundled with all 31 provinces and 1,119 cities.
Collapsible
An interactive component which expands/collapses a panel, built on Base UI.
Combobox
A searchable, accessible combobox built on Base UI.
Command
A command palette component built with Dialog and Autocomplete for searching and executing commands.
Context Menu
A menu of actions triggered by a right click, built on Base UI.
Copy Button
An icon button that copies text to the clipboard, morphs its icon to reflect the result, and anchors a confirmation toast to itself.
Date Picker
Responsive Shamsi/Gregorian date and date-time fields with SSR-safe defaults and confirmation flows.
Date Wheel Picker
An iOS-style year/month/day wheel-based date picker, switchable between the Shamsi and Gregorian calendars, with a responsive Popover-on-desktop, Drawer-on-mobile composition.
Dialog
A modal window layered over the page for focused tasks or confirmations, built on Base UI.
Direction
A provider for setting the reading direction (LTR or RTL) of your app, built on Base UI.
Drawer
A swipeable panel that slides in from an edge of the screen, built on Base UI.
Dropdown Menu
Displays a menu of actions or options, triggered by a button.
Elastic Range Slider
A single-track, dual-thumb range slider in the same visual language as Elastic Slider.
Elastic Slider
Slider with elastic rubber-band drag and magnetic snap feedback.
Empty
Displays an empty state with a title, description, and optional actions.
Field
Groups a label, control, and description into an accessible form field, built on Base UI.
Hover Card
For sighted users to preview content available behind a link, built on Base UI.
Input
A styled text input built on Base UI.
Input Group
Add addons, buttons, and helper content to inputs.
Input OTP
Accessible one-time password component with copy-paste functionality.
Iran Map Picker
An interactive SVG map of Iran's provinces for picking a province, with hover previews, keyboard selection, and shadcn-style controlled state.
Item
A flexible layout for a piece of content, media, or action, often used in lists.
Kbd
Displays a keyboard key or shortcut.
Label
An accessible, styled label element.
Marker
A small label for annotating content, such as a section divider or inline note.
Menubar
A persistent horizontal menu bar for application-style commands, built on Base UI.
Message
Composable layout for a chat message with an avatar, header, content, and footer.
Message Scroller
An auto-scrolling viewport for chat messages, with scroll-to-start/end buttons, built on @shadcn/react.
Mobile Number Input
An Iranian mobile number input that normalizes mixed paste formats and Persian digits, with a redundant validity indicator.
National ID Input
An Iranian national ID (کد ملی) input that normalizes Persian digits as you type or paste and validates the checksum live, with a redundant validity indicator.
Native Select
A styled native <select> element for choosing a single value.
Navigation Menu
A collection of links for navigating websites.
Pagination
Navigation for paginated content, built on Button.
Password Input
A password input with a show/hide toggle that always renders LTR, regardless of the surrounding document direction.
Plate Input
An Iranian vehicle license plate input with digit segments, a letter picker including wheelchair plates, and the Iran serial tab.
Popover
Displays rich content in a portal, anchored to a trigger.
Price Input
A text input that formats digits as a grouped price as you type, with support for Persian/Arabic-Indic numerals.
Progress
Displays an indicator showing the completion progress of a task, built on Base UI.
QR Code
A rounded QR code generator with dot modules, custom foreground/background colors, and a center logo slot.
Questionnaire
A multi-step questionnaire with single-choice, multiple-choice, freeform, and skippable questions, built on @shadcn/react.
Radio Group
A set of mutually exclusive radio buttons, built on Base UI.
Receipt Printer
A tactile checkout printer with processing stages and a composable thermal-paper receipt.
Resizable
Accessible resizable panel groups and layouts, built on react-resizable-panels.
Responsive Alert Dialog
Renders an Alert Dialog on desktop and a bottom Drawer on mobile from one shared set of components.
Responsive Dialog
Renders a Dialog on desktop and a bottom Drawer on mobile from one shared set of components.
Responsive Menu
Renders a Dropdown Menu on desktop and a bottom Drawer menu on mobile from one shared set of components.
Scroll Area
Cross-browser custom scrollbars, built on Base UI.
Select
A listbox for choosing a single value, built on Base UI.
Separator
Visually or semantically separates content, built on Base UI.
Sheet
A panel that slides in from an edge of the screen to complement the main content, built on Base UI.
Sidebar
A composable, collapsible application sidebar with mobile drawer, tooltips, and RTL support, built on Base UI.
Skeleton
Used to show a placeholder while content is loading.
Slider
An input where the user selects a value from within a given range, built on Base UI.
Spinner
A spinning loading indicator icon.
Status Button
A button that swaps between idle, loading, and success feedback for async actions.
Switch
A control that toggles between checked and unchecked, built on Base UI.
Table
A responsive table component, with an optional card-row variant.
Tabs
Layered panels with a sliding active-tab indicator, built on Base UI.
Textarea
Displays a form textarea, or a component that looks like a textarea.
Time Picker
An hour/minute/second wheel-based time picker, with a responsive Popover-on-desktop, Drawer-on-mobile composition.
Toast
A temporary notification that stacks in a corner of the screen or anchors to an element, built on Base UI.
Toggle
A two-state button that can be either on or off, built on Base UI.
Toggle Group
A set of two-state buttons that can be toggled on or off, built on Base UI.
Toman Icon
The Toman currency symbol, as a standalone icon component.
Tooltip
Displays contextual information when hovering or focusing an element, built on Base UI.
Wheel Picker
An iOS-like wheel picker with smooth inertia, infinite scrolling, and keyboard navigation.