"use client" import * as React from "react" import { Link } from "react-router" import { Badge } from "@/components/ui/badge" import { CatalogCategoryFilter } from "@/components/design-system/catalog-category-filter" import { CatalogLandingHero } from "@/components/design-system/catalog-landing-hero" import { designSystemHasLivePreview } from "@/components/design-system/design-system-previews" import { DESIGN_SYSTEM_TIER_LABEL, listDesignSystemEntries, type DesignSystemRegistryEntry, type DesignSystemTier, } from "@/lib/design-system/registry" import { DS_DOC_BODY, DS_DOC_BODY_EMPHASIS, DS_DOC_SECTION_TITLE } from "@/lib/design-system/doc-typography" import { cn } from "@/lib/utils" const TIER_ORDER: DesignSystemTier[] = [ "token", "component", "pattern", "template", "example", "rule", "skill", "agent", ] const TIER_FILTER_ICONS: Record = { token: "fa-light fa-droplet", component: "fa-light fa-cube", pattern: "fa-light fa-layer-group", template: "fa-light fa-browser", example: "fa-light fa-compass", rule: "fa-light fa-scale-balanced", skill: "fa-light fa-book", agent: "fa-light fa-robot", } function CatalogEntryCard({ item }: { item: DesignSystemRegistryEntry }) { const showLive = designSystemHasLivePreview(item.slug) || item.status === "live" return (
{item.name} {showLive ? ( Live ) : item.status === "catalog" ? ( Hub ) : null}
{item.description} {item.group} ) } export function DesignSystemIndexPage() { const allItems = React.useMemo(() => listDesignSystemEntries(), []) const [tierFilter, setTierFilter] = React.useState("all") const filteredItems = React.useMemo(() => { return allItems.filter((item) => tierFilter === "all" || item.tier === tierFilter) }, [allItems, tierFilter]) const catalogSections = React.useMemo(() => { return TIER_ORDER.map((tier) => ({ tier, label: DESIGN_SYSTEM_TIER_LABEL[tier], items: filteredItems.filter((item) => item.tier === tier), })).filter((section) => section.items.length > 0) }, [filteredItems]) const tierCounts = React.useMemo(() => { const counts = new Map() for (const item of allItems) { counts.set(item.tier, (counts.get(item.tier) ?? 0) + 1) } return counts }, [allItems]) const categoryFilterOptions = React.useMemo(() => { const tierOptions = TIER_ORDER.flatMap((tier) => { const count = tierCounts.get(tier) ?? 0 if (count === 0) return [] return [ { value: tier as DesignSystemTier | "all", label: DESIGN_SYSTEM_TIER_LABEL[tier], count, icon: TIER_FILTER_ICONS[tier], }, ] }) return [ { value: "all" as const, label: "All", count: allItems.length }, ...tierOptions, ] }, [allItems.length, tierCounts]) return (

Browse the Design OS Catalog

Filter by category below, or search entries in the Design OS Catalog drill-in sidebar.

{catalogSections.length === 0 ? (

No entries in this category.

) : ( catalogSections.map((section) => (

{section.label} ({section.items.length})

    {section.items.map((item) => (
  • ))}
)) )}
) }