From primitives to e-commerce blocks.
Analysed the Untitled UI Pro Figma source, filtered out the page-level examples (marketing pages, dashboards, utility), and mapped every component set onto a dependency graph. The order below follows that graph: leaf primitives first, compounds in the middle, e-commerce blocks last. Each tier can be built in parallel once the tier above is done.
Tier 0 · Foundations
8 / 8Tokens, type, icons, shadows. These are inherited by every component below. Shipped.
- 01Color tokens — monochrome brand + Tailwind limeDone
- 02Typography — Display + Text scale with tracking on displayDone
- 03Icons — Phosphor Icons via @phosphor-icons/react/ssrDone
- 04Spacing & radiiDone
- 05Shadows & blurs — UntitledUI multi-layer recipesDone
- 06Focus ring — .focus-ring-lime / .focus-ring-error utilitiesDone
- 07Logos — BrandWordmark + square faviconDone
- 08FeaturedIconusestokensDone
Tier 1 · Atomic primitives
19 / 20Leaf components with no inter-component dependencies. Safe to build in parallel.
- 01ButtonDone
- 02Input (basic)Ship v2 with states, icons, addons, sizes in Tier 2.Partial
- 03LabelDone
- 04Badge + BadgeDotDone
- 05BadgeGroup + BadgeGroupAddonDone
- 06NavLinkDone
- 07TagFilter pill + multi-select chip. Active state + optional close X.Done
- 08AvatarRadix primitive. 6 sizes, circle + square, with image + initials fallback.Done
- 09Status icon5 tones (online/offline/busy/away/accent) × 4 sizes. Paired with Avatar for presence.Done
- 10Help iconInfo button + Tooltip. aria-label doubles as tooltip content.Done
- 11Separator / Content dividerRadix separator. Horizontal + vertical.Done
- 12Loading indicator / SpinnerCircleNotch from Phosphor. 5 sizes, 4 tones.Done
- 13Progress barRadix progress. 3 sizes, 5 tones.Done
- 14Progress circleSVG-based. 4 sizes, 5 tones, optional centred label.Done
- 15SkeletonDone
- 16CheckboxRadix. Check / indeterminate / unchecked. 3 sizes.Done
- 17RadioRadix RadioGroup + Radio. Keyboard arrows. 3 sizes.Done
- 18Toggle (Switch)Radix Switch. 3 sizes.Done
- 19SliderSingle + range auto-detect from value length. Radix.Done
- 20TooltipRadix. Shorthand Tooltip + primitive parts. TooltipProvider wired into docs root.Done
Tier 2 · Form composites
10 / 13Build on Tier 1. Form fields with labels, hints, errors, and bespoke inputs.
- 01InputField (labelled)Label, hint, error, required asterisk, leading/trailing icons, leading/trailing addons, help tooltip.usesInput · Label · HelpIcon · TooltipDone
- 02Textarea + TextareaFieldTextarea primitive + labelled TextareaField wrapper.usesLabel · HelpIconDone
- 03VerificationCodeInputOTP / 2FA — N discrete cells, auto-advance, backspace-to-previous, paste support.Done
- 04CheckboxGroupControlled list with per-option hint + error. Vertical / horizontal orientation.usesCheckbox · LabelDone
- 05RadioGroupFieldLabelled RadioGroup with per-option hint + error. Ideal for shipping/payment pickers.usesRadio · LabelDone
- 06ToggleGroupRadix toggle-group: single or multiple selection. Joined row with outline or ghost variant.Done
- 07SelectRadix Select with groups + separators. Keyboard-navigable, portal-rendered.usesLabelDone
- 08MultiSelectPopover of checkable options with selected chips in the trigger. maxChips + overflow count.usesPopoverDone
- 09Combobox / Command inputusesInputTodo
- 10Date picker dropdownusesCalendarTodo
- 11Date picker modalusesCalendar · DialogTodo
- 12ColorPickerCompact swatch palette + optional hex input. Controlled or uncontrolled; custom swatches via prop.Done
- 13FileUploadDrag-and-drop with file list. accept / multiple / maxSize. Controlled or uncontrolled.usesFeaturedIconDone
Tier 3 · Molecules
26 / 26Composed from primitives. Cards, rows, headers, nav items — the connective tissue.
- 01CardDone
- 02BannerusesFeaturedIcon · ButtonDone
- 03PopoverRadix popover primitive. Backbone for dropdowns, date pickers, filter pickers.Done
- 04DropdownMenuRadix. Includes Item, CheckboxItem, RadioItem, Label, Separator, Shortcut, Sub-menus.usesPopoverDone
- 05AlertDialogRadix alert-dialog. Forces explicit Action/Cancel for destructive flows.usesDialog · ButtonDone
- 06AlertInline alert with 5 tones (neutral/info/success/warning/destructive), optional onDismiss.usesFeaturedIconDone
- 07TabsRadix tabs. Three list variants: underline / pill / segmented.usesButtonDone
- 08AccordionRadix accordion. Single-open (FAQ) or multiple-open (filter panels).Done
- 09BreadcrumbsCompound — List, Item, Link, Page, Separator. Caret separator by default, overridable.usesNavLinkDone
- 10PaginationPrimitive parts + NumberedPagination convenience wrapper with ellipsis collapse.usesButtonDone
- 11Empty stateCompound — Icon, Title, Description, Actions.usesFeaturedIcon · ButtonDone
- 12AvatarGroupOverlapping avatars with ring separator. max / total props for truncation badge.usesAvatarDone
- 13AvatarLabelGroupAvatar + name + subtitle. For nav account buttons, table rows, testimonials.usesAvatarDone
- 14ButtonGroupJoined-border row/column of Buttons. Strips radius/borders on middle siblings.usesButtonDone
- 15SocialButton / SocialButtonGroupOAuth buttons with provider-picked logo (google/apple/facebook/github/x). Group stacks full-width.usesButtonDone
- 16PaginationDotsCarousel indicator. Active dot elongates. Controlled via value + onChange.Done
- 17ProgressStepsStepper — minimal or with-text, horizontal or vertical.Done
- 18Toast / Notificationsonner wrapper. Mount <Toaster /> once at root, then call toast.success / .info / .warning / .error.usesFeaturedIcon · ButtonDone
- 19InlineCTACompact CTA card for sidebars / PDP columns / dashboards.usesFeaturedIcon · ButtonDone
- 20MetricItemKPI card: label + big number + delta badge with arrow.usesBadgeDone
- 21CardHeading (standalone)Icon + text + actions card header. Exports as CardHeading to not collide with Card's internal CardHeader.Done
- 22SectionHeader / SectionLabel / SectionFooterEyebrow / title / description / actions compound for in-page section intros.Done
- 23PageHeaderCompound page top: title / description / actions. Pair with Breadcrumbs.usesBreadcrumbs · ButtonDone
- 24CodeSnippetCopyable code block. Inline (pill) or block (card) variants. Clipboard API; no syntax highlighting (bring your own).Done
- 25FiltersBarApplied-filter chip row with clear-all action. Layout container; caller renders chips.usesTag · ButtonDone
- 26FiltersDropdownFacet filter popover. Trigger shows active-count badge; body accepts Checkbox/Radio/Slider.usesPopover · Button · BadgeDone
Tier 4 · Compounds
11 / 19Feature-scale components. Need Tier 3 to be in place.
- 01Dialog (≈ Modal)Done
- 02Modal (UntitledUI spec)Opinionated wrapper: icon + title + description + actions row (horizontal / vertical / full-width layouts).usesDialogDone
- 03AlertDialog (destructive confirm)Shipped in Tier 3A.usesDialog · ButtonDone
- 04Sheet (slide-out)Radix Dialog with top/right/bottom/left side variants. For cart drawer, mobile nav, filter panels.usesDialogDone
- 05PopoverShipped in Tier 3A.Done
- 06Dropdown menuShipped in Tier 3A.usesPopoverDone
- 07Context menuDeferred — niche, not ecommerce-critical.usesDropdown menuTodo
- 08Command menucmdk-based. Command + CommandDialog (global ⌘K) + Input / List / Group / Item / Empty / Shortcut / Separator.usesDialogDone
- 09TableSemantic HTML parts. Table / Header / Body / Footer / Row / Head / Cell / Caption. Pair with @tanstack/react-table for data grids.Done
- 10Tree viewDeferred — not ecommerce-critical.Todo
- 11Calendarreact-day-picker v9 styled to BTNG tokens. Single / range / multiple modes.Done
- 12Charts (line, bar, pie, activity gauge)Deferred — big surface, closer to real demand.Todo
- 13Activity feedDeferred — not ecommerce-critical for MVP.usesAvatar · BadgeTodo
- 14MessagingDeferred — not ecommerce-critical.usesAvatar · Status iconTodo
- 15Video player 16:9Deferred — PDP videos can use native <video> for now.usesButton · SliderTodo
- 16Text editorDeferred — rarely needed for ecommerce surfaces.usesTooltip · Button groupTodo
- 17HeaderNav (marketing)Top-bar shell: Brand / Links / Actions. Sticky + backdrop blur. Pair with Sheet for mobile.Done
- 18Dropdown header navigationDeferred — compose from HeaderNav + DropdownMenu when needed.usesHeaderNav · Dropdown menuTodo
- 19SidebarNav (app)Compound: Header / Body / Footer + Group / GroupLabel / Item. Hidden below lg; pair with Sheet for mobile.Done
Tier 5 · Marketing sections
9 / 18Section-scale blocks used on landing pages and the BTNG.UI docs itself. Not primitives — layouts that compose Tier 1-4.
- 01SectionShellShared container for every Tier 5 section — max-width, vertical rhythm, optional background tone.Done
- 02HeroSectionCentered or split layout. Slots: Eyebrow / Title / Description / Actions + split `media` prop.usesSectionShellDone
- 03Header section (non-hero)Deferred — compose from PageHeader + SectionShell directly.Todo
- 04CtaSectionMid/end-of-page CTA. Boxed (contained card) or flat. Slots: Title / Description / Actions.usesSectionShellDone
- 05FeatureGrid2/3/4 column feature grid with FeatureCard (icon + title + description).usesSectionShellDone
- 06Metrics sectionDeferred — MetricItem already exists; compose inside a SectionShell grid.usesMetricItemTodo
- 07Social proof sectionDeferred — AvatarGroup + logo strip inside SectionShell.usesAvatarTodo
- 08Press mentions sectionDeferred — logo-strip inside SectionShell.Todo
- 09TestimonialSectionFeatured (centered quote) or card-grid. Slots: quote / author / role / avatar.usesAvatarDone
- 10FaqSectionSplit (title left, accordion right) or stacked layout.usesAccordionDone
- 11NewsletterCtaInline email-capture section. Title + description + form slot + footnote.usesInput · ButtonDone
- 12PricingTierStandalone pricing plan card — compose multiple in a grid. Highlighted variant for recommended plan.Done
- 13Contact sections + Contact page headerDeferred — compose InputField + Textarea + PageHeader inside SectionShell.usesInputField · TextareaTodo
- 14Team sectionDeferred — Avatar grid inside SectionShell.usesAvatarTodo
- 15Blog section / Blog post card / Blog subscribe cardDeferred — compose Card + Avatar + Badge.Todo
- 16Blog post page header + Content section + Content itemDeferred — PageHeader + prose inside SectionShell.Todo
- 17Careers sectionDeferred — table of roles inside SectionShell.Todo
- 18FooterNavMulti-column site footer: Top (brand + link columns) + Bottom (copyright + socials).Done
Tier 6 · E-commerce blocks (end goal)
19 / 24The reason we built BTNG.UI. Commerce-specific patterns composed from everything above.
- 01ProductPage (PDP)Full PDP — gallery + breadcrumbs + title + rating + price + variants + quantity + CTA + shipping promise + specs + reviews.usesProductGallery · VariantSelector · SizeSelector · QuantityStepper · PriceDisplay · ReviewItemDone
- 02ProductCardDone
- 03ProductCard variants (image-over, horizontal, compact)Deferred — base ProductCard is flexible enough; re-skin via className + asChild.usesProductCardTodo
- 04QuantityStepperNumeric stepper for cart line items and PDP add-to-cart. Clamps between min/max, controlled or uncontrolled, 3 sizes.Done
- 05PriceDisplayPrice + compareAt (strikethrough) + optional discount pill. 4 sizes.Done
- 06VariantSelectorPDP variant picker: swatches (color circles) or chips (labelled pills) mode. Controlled or uncontrolled. radiogroup semantics.Done
- 07SizeSelectorVariantSelector (chips) with inline 'Size guide' action.usesVariantSelectorDone
- 08ProductGalleryPDP image gallery: main + thumb strip. Below (default) or side orientation. Configurable aspect ratio.Done
- 09Rating / Review summaryDeferred — compose RatingStars + ProgressBar rows inside a Card.usesRatingStars · ProgressBarTodo
- 10ReviewItemHeader (avatar + author + date + verified badge) + Rating slot + Title + Body.usesAvatar · RatingStarsDone
- 11CartPageFull cart page: line items + order summary with promo + checkout CTA + empty state fallback.usesLineItem · OrderSummary · PageHeaderDone
- 12LineItemCart / mini-cart / order-summary row: Image / Title / Meta / Actions / Price / Remove. Pair with QuantityStepper inside Actions.usesQuantityStepperDone
- 13OrderSummaryCart totals card: subtotal / shipping / tax / discount rows + prominent Total.Done
- 14CheckoutPage (incl. address + payment forms)Three-step checkout: Address → Shipping → Payment with sticky order summary. All forms inline.usesProgressSteps · InputField · Radio · OrderSummaryDone
- 15FilterSidebarLeft-rail facet panel shell. Header (title + clear) + Accordion body of facets. Wrap in Sheet for mobile.usesAccordion · CheckboxGroup · SliderDone
- 16Sort selectReuses Select primitive directly — no new component needed.usesSelectTodo
- 17ListingToolbar + ListingGridTop bar (count + actions) + responsive 2-5 col grid for ProductCard.usesProductCardDone
- 18ListingPage (PLP)Full listing page: sidebar facets (desktop) or Sheet (mobile) + toolbar + product grid + pagination.usesListingGrid · Pagination · FilterSidebar · SheetDone
- 19Shipping estimatorDeferred — compose InputField + Button inline.usesInputField · ButtonTodo
- 20StockIndicatorin-stock / low-stock / out-of-stock / pre-order with tone-coloured dot + label.Done
- 21WishlistButtonHeart toggle. Icon-only (floats on ProductCard) or labelled (PDP). Fills when active.Done
- 22Empty cart stateReuses EmptyState directly — no new block needed.usesEmptyStateDone
- 23Order confirmation success screenDeferred — compose FeaturedIcon + heading + OrderSummary inside SectionShell.usesFeaturedIcon · OrderSummaryTodo
- 24AnnouncementBarThin full-width strip above the header: free-shipping threshold, sales, global messages. Accent (lime) or inverse (dark) tones.Done
Notes on scope
- Skipped per your direction: all page-level examples (marketing website pages, application examples, utility page, experiment). Those are blueprints, not primitives — they get rebuilt as real pages once Tier 5 is in place.
- Underscore-prefixed Figma components (
_Nav item base,_Tab button base, etc.) are treated as internal sub-parts. They inform the implementation but don't need their own public exports. - Every new component ships with a registry manifest, docs page with Configurator where it has > 2 axes, live Variant blocks, and a Reasoning section. That scaffolding is already in place.
- Charts, Video player, and Text editor are big enough to defer until closer to real demand. Flagged in Tier 4 but not required for the Tier 6 e-commerce goal.