Components
Every UI, content, and interactive component in the Ma system.
UI Primitives
Textuicomponents/ui/TextThe space between. Nearly two decades at the intersection of design and code have led to a single conviction: the discipline of leaving things out is the discipline that matters most.
Props (3)
| Prop | Type | Default | Description |
|---|---|---|---|
| as | ElementType | "p" | Rendered element |
| className | string | — | Tailwind class override |
| children | ReactNode | — | Content |
Titleuicomponents/ui/TitleThe space between
Headlineuicomponents/ui/HeadlineSection heading
Props (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| as | ElementType | "h2" | Rendered element |
Subheadlineuicomponents/ui/SubheadlineSub-section heading
Subsubheadlineuicomponents/ui/SubsubheadlineMinor heading
SectionLabeluicomponents/ui/SectionLabelDesign tokens
TextLinkuicomponents/ui/TextLinkRead more about Ma design principles and how they inform every decision in the system.
MoreLinkuicomponents/ui/MoreLinkProps (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| href | string | — | Link destination |
| text | string | — | Link label |
Divideruicomponents/ui/DividerTaguicomponents/ui/TagProps (3)
| Prop | Type | Default | Description |
|---|---|---|---|
| active | boolean | false | Active/selected state |
| href | string | — | Renders as <a> when provided |
| onClick | () => void | — | Renders as <button> when provided |
UnorderedList / OrderedList / ListItemuicomponents/ui/UnorderedList- Exclude the non-essential
- Favour decisions that age well
- The discipline of leaving things out
- Establish the grid
- Set the type
- Add colour sparingly
Strong / Emuicomponents/ui/StrongThe system is built on contrast as a principle, not as an accident. Display type is set in Boska Bold at extreme sizes.
Strikethrough / Inserted / Markeduicomponents/ui/Strikethroughdeleted content was replaced by inserted content and some text is highlighted for emphasis.
Subscript / Superscriptuicomponents/ui/SubscriptWater is H2O. A footnote reference1 links to the note.
Tableuicomponents/ui/Table| Component | Element | Purpose |
|---|---|---|
| Text | p | Body copy paragraph |
| Headline | h2 | Section heading |
| Tag | a / button / span | Filter label pill |
CodeBlockuicomponents/ui/CodeBlockconst greeting = (name: string) => `Hello, ${name}!`;
greeting('Ma Design System'); FootnoteSectionuicomponents/ui/FootnoteSection1. Boska Variable, Barbara Bigosińska, Fontshare/ITF, 2022.
TaskCheckboxuicomponents/ui/TaskCheckboxBadgeuicomponents/ui/BadgeProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| variant | "default" | "favorite" | "paid" | "language" | "default" | Visual variant |
Linkuicomponents/ui/LinkProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| href | string | "#" | Link destination |
EssayLinkuicomponents/ui/EssayLinkFlaguicomponents/ui/FlagA generic flag NEW used inline. Also linkable: tv.
Props (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| label | string | — | Text displayed inside the flag |
| href | string | — | Renders as Link when provided |
HaikuItemuicomponents/ui/HaikuItemIm Herbstwind weht / ein gelbes Blatt vom Baum — / Stille danach.
In the autumn wind / a yellow leaf falls from the tree — / silence after.
Props (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| de | string | — | German haiku text (newline-separated lines) |
| en | string | — | English translation |
JapanesePoemuicomponents/ui/JapanesePoemProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| as | ElementType | "span" | Rendered element |
QuoteAttributionuicomponents/ui/QuoteAttributionProps (3)
| Prop | Type | Default | Description |
|---|---|---|---|
| author | string | — | Author name |
| source | string | — | Work title |
| sourceUrl | string | — | Optional link for source |
Switchuicomponents/ui/switchProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| size | "default" | "sm" | "default" | Toggle size |
Tooltipuicomponents/ui/tooltip
Requires client:load — portal-based, SSR-safe demo not possible.
Pattern: TooltipProvider > Tooltip > TooltipTrigger + TooltipContent
Content Components
Bannercontentcomponents/content/BannerProps (3)
| Prop | Type | Default | Description |
|---|---|---|---|
| tone | "default" | "accent" | "default" | Visual emphasis |
| summary | string | — | Renders as <details> with this summary label |
| open | boolean | — | Initial open state for disclosure |
Blockquotecontentcomponents/content/Blockquote The discipline of leaving things out is the discipline that matters most.
Pullquotecontentcomponents/content/PullquoteThe space between is not empty — it is ma.
InlineCodecontentcomponents/content/InlineCodeUse var(--color-beni) for accent elements. Never use --color-sumi on near-black backgrounds.
Color Components
ColorSwatchPrimarycontentcomponents/content/ColorSwatchPrimaryAccent, links, focus ring
Primary text, headings
Primary background
Props (4)
| Prop | Type | Default | Description |
|---|---|---|---|
| color | string | — | Hex color value |
| name | string | — | Color name |
| kanji | string | — | Japanese character |
| description | string | — | Usage description |
ColorSwatchcontentcomponents/content/ColorSwatch#F2F2F0
Card backgrounds
#C8C8C4
Borders, dividers
#A0A09C
Muted text, captions
#6B6B67
Mid-tone borders
Props (4)
| Prop | Type | Default | Description |
|---|---|---|---|
| color | string | — | Hex color value |
| name | string | — | Color name |
| kanji | string | — | Japanese character (optional) |
| description | string | — | Usage note (optional) |
ColorSwatchMinicontentcomponents/content/ColorSwatchMiniBeni Beni Light Beni Muted Beni Pale Beni Dark
Props (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| color | string | — | Hex color value |
ColorStackcontentcomponents/content/ColorStack#1A1918
Dark surface, footer
#0E0D0C
Primary text
#6B6B67
Mid borders
#A0A09C
Muted text
#C8C8C4
Dividers
#E6E6E6
Background
#F2F2F0
Cards
Media Cards
AudioCardcontentcomponents/content/AudioCard
Anatomy of the State
Murray N. Rothbard

Aethervox Patreon
Christian Schneider
Props (9)
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | — | Card title (required) |
| kind | "audiobook" | "podcast" | — | Sets placeholder icon and contributor label |
| author | string | — | Audiobook author |
| moderator | string | — | Podcast host |
| cover | string | — | Cover image URL |
| featured | boolean | — | Shows Favorite badge |
| paid | boolean | — | Shows Paid badge |
| language | string | — | Shows language badge |
| links | MediaLink[] | — | Platform links rendered via MediaLinkRow |
BookCardcontentcomponents/content/BookCardProps (5)
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | — | Book title (required) |
| author | string | — | Author name |
| asin | string | — | Auto-generates Amazon cover and link |
| cover | string | — | Override cover image URL |
| featured | boolean | — | Favorite badge |
VideoCardcontentcomponents/content/VideoCardProps (6)
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | — | Video title (required) |
| url | string | — | Link URL (required) |
| youtubeId | string | — | YouTube ID for thumbnail |
| kind | "video" | "playlist" | "channel" | "video" | Shows badge for non-video types |
| channel | string | — | Channel name |
| featured | boolean | — | Favorite badge |
MediaLinkRowcontentcomponents/content/MediaLinkRowProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| links | MediaLink[] | — | Array of { kind, url?, label? } objects |
Platform Flags
AppleTVFlag / NetflixFlag / PrimeVideoFlagcontentcomponents/content/AppleTVFlagProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| id | string | — | Platform-specific show ID |
Platformcontentcomponents/content/PlatformProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| kind | "iphone" | "desktop" | "appletv" | "web" | — | Platform type |
Books
Bookcontentcomponents/content/BookProps (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| src | string | — | Cover image URL (required) |
| alt | string | — | Accessible description |
AmazonBookcontentcomponents/content/AmazonBookProps (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| asin | string | — | Amazon Standard Identification Number |
| alt | string | — | Accessible book title |
Bookshelfcontentcomponents/content/BookshelfEmbeds
YouTubecontentcomponents/content/YouTubeProps (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| id | string | — | YouTube video ID (required) |
| title | string | "YouTube video" | Accessible play label |
Spotifycontentcomponents/content/SpotifyProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| id | string | — | Spotify show ID (required) |
Images
Figurecontentcomponents/content/FigureProps (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| caption | string | — | Figcaption text |
| size | "regular" | "wide" | "fullsize" | — | Layout hint (used by MDX grid context) |
Imagecontentcomponents/content/ImageProps (6)
| Prop | Type | Default | Description |
|---|---|---|---|
| src | string | — | Image URL (required) |
| alt | string | — | Accessible description |
| caption | string | — | Figcaption text |
| enableLightbox | boolean | true | Click to expand |
| source | string | — | Attribution source text |
| sourceUrl | string | — | Attribution URL |
MarkdownImagecontentcomponents/content/MarkdownImageProps (3)
| Prop | Type | Default | Description |
|---|---|---|---|
| src | string | — | Image URL |
| alt | string | — | Accessible description |
| noMargin | boolean | — | Suppresses bottom margin |
Inline Content
DownloadLinkcontentcomponents/content/DownloadLinkProps (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| href | string | — | File URL (required) |
| text | string | — | Link label (required) |
EmailLinkcontentcomponents/content/EmailLinkProps (4)
| Prop | Type | Default | Description |
|---|---|---|---|
| data-name | string | — | Email username |
| data-domain | string | — | Domain without TLD |
| data-tld | string | — | Top-level domain |
| text | string | "Email" | Link label |
ProductLinkcontentcomponents/content/ProductLinkRead The Elements of Style for clear, direct prose.
Props (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| asin | string | — | Amazon ASIN |
| text | string | — | Link label |
Rubycontentcomponents/content/RubyThe kanji 間 means the space between.
Props (2)
| Prop | Type | Default | Description |
|---|---|---|---|
| base | string | — | Base text (required) |
| text | string | — | Annotation text (rt element) |
Versecontentcomponents/content/VerseStill waters — a leaf falls without a sound. The space between.
Still waters — a leaf falls without a sound. The space between.
Props (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| variant | "center" | "left" | "center" | Alignment variant |
RSSTextcontentcomponents/content/RSSTextRenders nothing — placeholder for RSS-only content.
Interactive Components
BarChartinteractivecomponents/interactive/BarChart
Requires client:visible — Recharts ResponsiveContainer needs DOM measurement.
Usage: <BarChart client:visible data={chartData} />
Props (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| data | { labels: string[]; datasets: { data: number[] }[] } | — | Chart data |
DoughnutChartinteractivecomponents/interactive/DoughnutChart
Requires client:visible — Recharts ResponsiveContainer needs DOM measurement.
Usage: <DoughnutChart client:visible data={chartData} />
Props (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| data | { labels: string[]; datasets: { data: number[] }[] } | — | Chart data |
Marqueeinteractivecomponents/interactive/MarqueeProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| pixelsPerSecond | number | 65 | Scroll speed in px/s |
Roadmapinteractivecomponents/interactive/RoadmapProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| milestones | RoadmapMilestoneData[] | — | Array of milestone entries |
SeriesStepperinteractivecomponents/interactive/SeriesStepperProps (3)
| Prop | Type | Default | Description |
|---|---|---|---|
| steps | SeriesStep[] | — | Series steps with id and title |
| currentId | string | — | ID of the currently active step |
| seriesName | string | — | Accessible series label |
TableOfContentsinteractivecomponents/interactive/TableOfContentsProps (1)
| Prop | Type | Default | Description |
|---|---|---|---|
| headings | { id: string; text: string }[] | — | Section headings to track |
HoverPreviewinteractivecomponents/interactive/HoverPreview
No visible output — renders a hidden positioned img that activates on anchors with data-hover-preview attribute.
LightboxRootinteractivecomponents/interactive/LightboxRootActive on this page — click the Image or MarkdownImage showcase above to trigger it.


