# Getting started
Binary UIKit provides Svelte 5 components and theme tokens for product interfaces. Configure the private package source, install the library with its date peer dependency, and place `Provider` near the root of your app.
Purpose
Use the package when an application needs the Binary Dreams token system and its Svelte 5 components. The published library contains no locale state, so your application keeps control of translated labels and route language.
Install
Binary Dreams publishes Binary UIKit to a private OneDev registry. Add the scope mapping to the project `.npmrc`:
```ini
@binarydreams:registry=https://git.binarydreams.io/BinaryDreams/~npm/
```
Keep credentials out of the project. Add a OneDev access token that can read packages to your user-level `~/.npmrc`, replacing the placeholder with the token value:
```ini
//git.binarydreams.io/BinaryDreams/~npm/:_authToken=
```
Install the library and its date peer dependency:
```sh
npm install @binarydreams/uikit @internationalized/date
```
Add Provider
`Provider` installs the default variables and utility styles. Keep document mode for an app shell. Use scoped mode when the kit lives inside a widget or shadow root.
```svelte
```
Application structure
`Provider` establishes the theme boundary. Components sit below it and import from the package root. Overlays use the same boundary, including inside a scoped widget or shadow root.
First component
Start with one action and keep its label in your application translation layer. Pass component state through props or bindings. Use snippets for visible content and custom cells.
Configuration
A bare `Provider` installs Graphite Light with the Graphite accent, Compact density, and Ledger radii. The supported 2x2 model pairs Graphite and Blueprint styles with Light and Dark modes. Apply Graphite Dark, Blueprint Light, or Blueprint Dark with `BD_PRESET_GRAPHITE_DARK`, `BD_PRESET_BLUEPRINT`, or `BD_PRESET_BLUEPRINT_DARK`. Marketing Buttons use the pill shape as a contextual exception. Use `scoped={true}` only when the kit must stay inside an embedded boundary.
TypeScript and SvelteKit
Import public components and types from `@binarydreams/uikit`. The package supports Svelte 5 and exposes declarations for component props, snippets, callbacks, and bindable values.
Accessibility
Many interactive components use Bits UI, which provides strong keyboard, focus, and ARIA behavior by default. Applications remain responsible for task-specific labels, status messages, and contrast, including after theme overrides.
Tokens and style hooks
Use the exported token objects when application code needs token values. Component styles read `--bd-*` variables. Apply visual changes through `Provider` overrides instead of private component classes.
Next steps
Read [Colors](/docs/foundations/colors) before changing theme values. Open the [Button reference](/docs/components/button) for a compact component example.
---
# Colors
Binary UIKit names colors and surfaces by purpose. Components read semantic variables instead of fixed values or theme names.
Semantic roles
Canvas, surface, and sunken roles establish the base. Semantic layers assign colors to cards, controls, floating panels, chrome, selections, and prose.
Palette structure
Graphite Light is the base and default. Zinc surfaces, dark neutral text, monochrome technical colors, and a graphite accent define its character.
Accent and status roles communicate selection, progress, warning, and failure. Filled status roles have explicit foreground variables, and controls use a separate thumb foreground.
Provider overrides
Pass a named preset or a partial `BDThemeOverrides` object to `Provider.overrides`. Graphite Light remains active when `overrides` is absent.
The supported 2x2 model pairs Graphite and Blueprint styles with Light and Dark modes. Graphite Light uses the base tokens and needs no preset. The package exports `BD_PRESET_GRAPHITE_DARK`, `BD_PRESET_BLUEPRINT`, and `BD_PRESET_BLUEPRINT_DARK` for the other three combinations.
Graphite Dark keeps compact ledger geometry on near-black layers. Blueprint Light uses pale drafting paper, blue heading ink, and Cobalt actions. Blueprint Dark keeps the Blueprint geometry on deep blue layers with a brighter Cobalt accent.
The library has no global theme store, picker, or preset-name prop. An application can own a selection and pass the matching object to `Provider`.
Roles and states
Use accent for the primary action and current selection. Use success, warning, danger, and info for states with matching text or icons.
Components use semantic layer, foreground, stroke, focus, and thumb variables. They never inspect `theme.name` or branch by theme ID.
Contrast
Check text, controls, focus rings, status foregrounds, and thumbs on every changed surface. Do not rely on color as the only status cue.
Tokens
Use `BD_THEME`, `BD_ACCENT`, and `bdBuildCssVars` when code needs the same values as CSS. Important families include `--bd-layer-*`, `--bd-accent*`, `--bd-{success,warning,danger,info}*`, `--bd-stroke*`, `--bd-focus-ring*`, and `--bd-thumb`.
Related
Start with [Provider](/docs/components/provider) for scope behavior and [Badge](/docs/components/badge) for semantic tones.
---
# Brand
Binary Dreams is a studio that builds mobile apps with care. The identity reads calm and confident: quiet surfaces frame a fixed bright blue brand accent.
Positioning
The brand describes a mobile-first product studio, established in 2026. Keep the tone declarative and the surfaces quiet, so the official blue stays clear.
Wordmark
The wordmark sets `Binary Dreams` in the display face across two lines, tightly tracked, with an accent period after the first word. The supporting line stays in the sans face at muted text weight.
Mark
The mark pairs a rounded rectangle carrying two cut-out windows with a blue capsule and a single counter-form dot. Draw the rectangle in text ink and the windows in canvas. The capsule uses `--bd-brand-accent`, and its dot uses `--bd-brand-accent-fg`. These roles stay fixed across themes and application overrides.
On dark
On ink surfaces the wordmark shortens to `bd.`, set in the display face on a text-ink background with canvas-colored letters. The period keeps the fixed brand accent in both forms.
Contrast
Place the wordmark on canvas, surface, or ink only. Check the blue period and capsule against Graphite and Blueprint surfaces in both modes. Never rely on color alone to carry meaning.
Tokens
Official brand accents read `--bd-brand-accent` and `--bd-brand-accent-fg`. These variables do not change with themes or `Provider` overrides. Supporting surfaces read `--bd-text`, `--bd-canvas`, and `--bd-surface`. Typography reads `--bd-font-display` and `--bd-font-sans`. The hero card uses `--bd-hero-wash` for its background image.
Related
See [Colors](/docs/foundations/colors) for application color roles, [Provider](/docs/components/provider) for scoped supporting surfaces, and [LogoStrip](/docs/components/logo-strip) for placing wordmarks in a row.
---
# Typography
Graphite Light uses Apple system fonts with Inter and system fallbacks. Presets can change font roles and type metrics without changing component code.
Type roles
Six heading roles carry structure. Two body roles carry interface and general body text. Caption, eyebrow, and mono carry supporting or technical labels.
Heading roles have desktop, tablet, and phone recipes at the 1024 and 640 px boundaries. Fixed roles keep one recipe across viewports.
Families
The system has five font roles. `--bd-font-sans` serves UI labels and small headings. `--bd-font-display` serves display headings. `--bd-font-text` serves body and body-md. `--bd-font-prose` serves authored prose. `--bd-font-mono` serves technical values.
`--bd-font-prose` falls back to `--bd-font-text`. The four public themes keep the same sans and mono font stacks. Blueprint presets change type metrics and geometry without changing those families.
Applying a role
The utility stylesheet exposes `.bd-h1` through `.bd-h6`, `.bd-body-md`, `.bd-body`, `.bd-caption`, `.bd-eyebrow`, and `.bd-mono`. Apply the class that matches the role. Choose the heading element from the document outline, not from its visual size.
For authored content, `.bd-prose` maps H2 and H3 to responsive H4 and H5 metrics. Paragraphs, list items, and blockquotes use Body metrics with `--bd-font-prose`. Table cells use Caption, table headers use Eyebrow, and code uses Mono. The utility does not set margins or colors.
Scale
Graphite Light and Graphite Dark use 72, 52, 38, 28, 22, and 18 px desktop heading sizes. Blueprint Light and Blueprint Dark use 88, 64, 44, 32, 24, and 20 px through the same semantic roles.
At widths below 1024 and 640 px, each heading changes to its tablet and phone recipe. Each role also owns weight, tracking, and line height.
Reading comfort
Keep the heading level tied to structure, not to size. Reserve uppercase for short eyebrows and badges. Keep authored prose within the `--bd-measure-prose` reading measure.
Tokens
`BD_TOKENS.font` holds four default stacks. `bdBuildCssVars()` adds the fifth `prose` role with a fallback to `text`. `BD_TOKENS.type` owns Graphite Light's default metrics.
`BDThemeOverrides.font` can replace any font role. `BDThemeOverrides.type` can replace family assignments and metrics. Components read generated `--bd-font-*` and `--bd-type-*` variables.
Related
See [Eyebrow](/docs/components/eyebrow) for the uppercase label, [Section](/docs/components/section) for heading and description framing, and [CodeBlock](/docs/components/code-block) for monospace output.
---
# Spacing
Every gap, pad, and offset lands on a multiple of 4. The scale reaches from tight form fields to generous hero blocks, and components read it as `--bd-s-*` variables instead of fixed pixel values.
A 4-base rhythm
Spacing encodes relationship. Blocks that belong together sit closer, independent blocks sit farther apart. A single 4px base keeps that signal legible: two gaps either match or differ by a step a reader can perceive.
Scale structure
Twelve steps run 4, 8, 12, 16, 20, 24, 32, 40, 56, 72, 96, and 128 px, exposed as `--bd-s-1` through `--bd-s-12`. Small steps handle control internals, mid steps handle grouping, large steps frame sections and hero blocks.
Applying the scale
Space a group of blocks with the parent container's `gap`, not with the children's own margins. Use semantic HTML and local flex or grid CSS with `--bd-s-*` tokens. One container owns each rhythm.
Proximity ramp
Pick the gap between two blocks by how related they are. Tight (`--bd-s-1`) joins an element to its own satellite, such as a label and its control. Grouped (`--bd-s-3`) separates peers in one group. Related (`--bd-s-4`) separates headingless peer blocks. Distinct (`--bd-s-6`) separates sub-blocks within one surface. Zone (`--bd-s-8`) separates independent top-level sections and is the whitespace ceiling — when a firmer break is needed, add a boundary such as a `Divider` or a `Card` rather than more space.
Density and targets
Keep controls far enough apart that a pointer or a focus ring cannot land ambiguously between them. Grouped is the practical floor between adjacent interactive rows; Tight is reserved for an element and its own satellite. Density changes the scale a component consumes, so verify hit areas after switching density.
Tokens
`BD_TOKENS.space` holds the numeric scale, and `bdBuildCssVars` emits it as `--bd-s-1` through `--bd-s-12`. Reference the variables in component styles; read the numbers only when code needs the same values as CSS.
Related
Compose rhythm with semantic HTML and `--bd-s-*` tokens. Use [Section](/docs/components/section), [Divider](/docs/components/divider), or [Card](/docs/components/card) when a stable public frame is needed.
---
# Radius
Softness on demand. Corner rounding comes from one scale and a small set of role radii, so a button, a card, and an input stay recognizable across every screen.
Corner scale
The scale runs from `none` through `3xl` to `full`. Small steps keep dense controls crisp, large steps soften panels and cards, and `full` produces a pill.
Role radii
Components do not read the raw scale. Product Buttons read `--bd-r-btn`. Single-line fields read `--bd-r-input`. Marketing Buttons default to `--bd-r-pill`. An explicit `shape` prop can override that default. Chips read `--bd-r-pill`. Badges read `--bd-r-full`. Cards read `--bd-r-card`, and floating panels read `--bd-r-panel`.
Graphite Light and Graphite Dark use the Ledger profile: 5 px buttons and inputs, 8 px cards, 6 px panels, and 4 px items. Blueprint Light and Blueprint Dark use the roomier Rounded profile.
Choosing a value
Pick the role radius that matches what the element is, not the value that looks right in isolation. Nested surfaces read best when the inner radius is smaller than the outer one. Do not hardcode a pixel value in a component.
Tokens
`BD_TOKENS.radius` holds the scale and `BD_RADIUS` holds the role profile. Pass `radius` overrides to `Provider` or to `bdBuildCssVars` when a product needs squarer or rounder corners; components keep reading the resulting `--bd-r-*` variables.
Related
See [Button](/docs/components/button) for product and marketing Button radii, [Card](/docs/components/card) for panel corners, and [Input](/docs/components/input) for field corners.
---
# Elevation
Elevation follows the active style. Graphite uses layers and borders without outer shadows. Blueprint adds cool shadows for raised surfaces.
Purpose
Elevation separates a surface from the one behind it. Use it when a panel floats above the page — menus, popovers, modals, toasts, and cards that lift on hover. A surface that sits flat in the layout needs a border, not a shadow.
Layer structure
Blueprint levels use a soft cast and a tighter contact. As elevation rises, the cast grows and the contact attenuates. Graphite Light and Graphite Dark flatten the five outer levels to `none`. Their inset levels retain a quiet inner boundary for wells such as inputs and checkboxes.
Applying a level
Read the level through its variable — `box-shadow: var(--bd-shadow-md)` — rather than writing a shadow value. `Provider` publishes the whole set, so a theme override changes every elevated surface at once.
Levels
In Blueprint, `xs` and `sm` mark low surfaces, `md` carries floating panels, and `lg` and `xl` carry large overlays. Graphite uses layer color and borders for the same boundaries. `glow` is an accent effect, not a depth level.
Boundaries
Shadows are quiet by design and can disappear under high-contrast or forced-color settings. Keep a border or a background change on any surface whose boundary carries meaning, so the edge survives without the shadow.
Tokens
`--bd-shadow-xs`, `--bd-shadow-sm`, `--bd-shadow-md`, `--bd-shadow-lg`, `--bd-shadow-xl`, `--bd-shadow-inset`, `--bd-shadow-inset-sm`, and `--bd-shadow-glow`. The same values are available in code as `BD_THEME.shadows` and through `bdBuildCssVars`.
Related
See [Card](/docs/components/card) for the elevation prop, [Modal](/docs/components/modal) for the highest level, and [Popover](/docs/components/popover) for floating panels.
---
# Gradients
Binary UIKit ships five text gradients for display type. They are applied with utility classes, never with a color value written into a component.
`Provider` injects the utility stylesheet that defines the gradient classes, so no extra CSS file is needed.
Where gradients belong
Gradients carry hero titles and single-word emphasis. Keep them out of body copy, buttons, inputs, and any text that has to stay legible at small sizes. Contrast comes first.
Two classes, one effect
A gradient needs the base class `.bd-grad-text` plus one ramp class. The base class clips the background to the glyphs; the ramp class supplies the image from a `--bd-grad-text-*` variable.
```html
Binary Dreams
```
Use sparingly
One gradient per screen is usually enough. Apply it to a single heading or one word inside a heading, and let the rest of the type stay solid. Repeating the effect flattens its meaning.
The five ramps
The class names stay stable across themes. Graphite Light supplies monochrome default ramps. Graphite Dark reverses them for dark surfaces. Blueprint Light and Blueprint Dark replace them with blue technical ramps and warm `ember` and `dawn` counterparts.
Legibility
Clipped text drops the solid `color` value, so a gradient must stay large and heavy enough to read on its own. Check every ramp against the surface behind it, and keep a solid fallback for text that carries meaning at body size.
Tokens
The default ramps live in `BD_THEME.gradients` and reach CSS as `--bd-grad-text-blueprint`, `--bd-grad-text-blueprint-deep`, `--bd-grad-text-ember`, `--bd-grad-text-dawn`, and `--bd-grad-text-ink`. A `Provider` override replaces the values without changing the class names.
Related
See [Provider](/docs/components/provider) for the utility stylesheet and overrides, and [Section](/docs/components/section) for the headings a gradient usually lands on.
---
# Grid backgrounds
Graphite and Blueprint provide different pattern recipes. The same grid utilities use the active theme's pattern without checking a theme ID.
Where patterns apply
Use a pattern when a surface needs quiet structure: a documentation hero, console frame, settings shell, or reading sheet. Actions still use the active accent.
Pattern recipes
Graphite Light and Graphite Dark use interrupted execution traces on a 28 px rhythm. Blueprint Light and Blueprint Dark build quiet 1 px minor and major rules on a 24 px cell.
Grid surfaces
`Provider` injects the pattern utility classes with the rest of the kit stylesheet. The base utilities paint `--bd-pattern` over `--bd-canvas`. Add `.bd-bg-grid-fade` to taper the active pattern without fading the content.
Utility classes
`.bd-bg-grid` and `.bd-bg-grid-blueprint` render the active theme pattern. `.bd-bg-grid-dots` and `.bd-bg-grid-crosshair` use generated geometry from the current theme colors. `.bd-bg-hero-blueprint` combines the active pattern with the theme's hero wash.
Legibility
Patterns stay quiet on purpose. `.bd-bg-grid-fade` places the selected pattern on a masked pseudo-layer, while foreground content stays opaque. Use a semantic layer when the content needs stronger separation.
Tokens
`BDThemeOverrides.grid` controls pattern geometry, image, size, and position. The theme's technical color family supplies generated line, dot, and crosshair colors. `bdBuildCssVars()` emits the `--bd-pattern*`, `--bd-grid*`, and `--bd-hero-pattern*` families.
Related
See [Provider](/docs/components/provider) for how the utility stylesheet is injected, [Section](/docs/components/section) for the frame a grid usually sits behind, and [Card](/docs/components/card) for the opaque surface that carries text above one.
---
# Motion
Binary UIKit animates with curves rather than linear timing. Transitions are fast enough to feel responsive and curved enough to feel alive.
Duration and easing
Motion is expressed as one value that carries duration and easing. Components use stable semantic steps, while each preset can tune the resulting pace.
The four steps
`fast` covers hover, focus, and small states. `base` is the common control step. `slow` covers large surfaces and overlays. `spring` is the emphasis recipe.
Graphite Light and Graphite Dark use 90, 140, 220, and 260 ms without spring overshoot. Blueprint Light and Blueprint Dark use 120, 200, 320, and 520 ms.
Choosing a step
Default to `base`. Use `fast` for small changes that repeat often. Use `slow` when a large surface enters or leaves. Reserve `spring` for emphasis.
Reduced motion
Honor `prefers-reduced-motion` in product code: shorten or remove movement and keep the state change itself visible. Never make an animation the only signal that something happened.
Tokens
`--bd-motion-fast`, `--bd-motion-base`, `--bd-motion-slow`, and `--bd-motion-spring` come from the merged motion axis through `Provider`. `BD_TOKENS.motion` supplies Graphite Light defaults, and `BDThemeOverrides.motion` can replace individual steps.
Related
See [Modal](/docs/components/modal) and [Sheet](/docs/components/sheet) for overlay timing, and [Accordion](/docs/components/accordion) for a state change on the base step.
---
# Provider
Installs theme variables, utility CSS, scope boundaries, and overlay portal context.
Place Provider around an application or an isolated subtree that needs Binary UIKit theme variables and overlay boundaries. Scoped utilities do not style matching classes outside `.bd-scope`; a host/global Provider can still style them separately.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | No additional description. |
| `overrides` | `BDThemeOverrides` | prop | No | `undefined` | No additional description. |
| `scoped` | `boolean` | prop | No | `false` | If true, scopes CSS vars and utilities to this element / shadow root, leaving matching utility classes outside `.bd-scope` untouched. Default false (document mode). |
## Related
- [Accordion](/docs/components/accordion): Single or multiple disclosure panels.
- [Collapsible](/docs/components/collapsible): Single disclosure region with panel and plain presentations and measured-height animation.
- [Section](/docs/components/section): Top-level showcase or document section frame.
---
# Eyebrow
Tracked label used above headings.
Use Eyebrow as a short category label above a heading, not as a replacement for the heading.
## API
The package declarations define these public members.
### Inherited prop contracts
- `Omit, 'children'>` — Props from this native base are accepted except the listed members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | No additional description. |
| `color` | `string` | prop | No | `undefined` | Raw CSS color value (e.g. a var(--bd-*) token or color-mix() expression). Defaults to the accent. |
## Related
- [Avatar](/docs/components/avatar): Identity image or fallback with an optional status marker.
- [CodeBlock](/docs/components/code-block): Read-only code surface with copy support.
- [Stat](/docs/components/stat): Metric value and caption for KPI compositions.
---
# Link
Styled native link for body and navigation text.
Choose Link for inline or navigational text that leads to another destination.
## API
The package declarations define these public members.
### Inherited prop contracts
- `Omit` — Props from this native base are accepted except the listed members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | No additional description. |
| `variant` | `'accent' \| 'muted'` | prop | No | `'accent'` | No additional description. |
## Related
- [Segmented](/docs/components/segmented): Single-select segmented control.
- [Tabs](/docs/components/tabs): Panelled tabs with underline and pill presentations.
- [Breadcrumb](/docs/components/breadcrumb): Breadcrumb trail with optional overflow menu.
---
# Label
Visible form label with required-state treatment.
Pair Label with a form control when the field needs a persistent visible name.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | Yes | - | No additional description. |
| `for` | `string` | prop | No | `undefined` | Id of the control this labels. |
| `required` | `boolean` | prop | No | `false` | Renders the required marker. |
| `size` | `ControlSize` | prop | No | `'md'` | No additional description. |
## Related
- [Input](/docs/components/input): Single-line field with internal or external labeling, hint, error, icons, and password reveal.
- [Switch](/docs/components/switch): Bindable binary switch with visible or aria-only labeling.
- [Checkbox](/docs/components/checkbox): Bindable tri-state checkbox with a visible or ARIA-only accessible name.
---
# Badge
Compact semantic or categorical label.
Use Badge for compact status or category metadata that does not trigger an action. Each tone pairs a soft tint with its semantic foreground.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | No additional description. |
| `tone` | `BadgeTone` | prop | No | `'neutral'` | No additional description. |
## Related
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
- [Spinner](/docs/components/spinner): Indeterminate loading indicator.
---
# Avatar
Identity image or fallback with an optional status marker.
Use Avatar to identify a person or account where a compact image or initials aid recognition.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `alt` | `string` | prop | No | `undefined` | Accessible alt text for the image. |
| `icon` | `IconGlyph` | prop | No | `undefined` | Fallback glyph when there is no image and no initials. |
| `initials` | `string` | prop | No | `undefined` | Initials shown when no `src` resolves. Optional once `icon` is a fallback. |
| `size` | `number \| ControlSize` | prop | No | `40` | Outer diameter — a number (px) or a token: sm 32 / md 40 / lg 56. |
| `src` | `string` | prop | No | `undefined` | Image URL. Renders an , falling back to initials / icon on error. |
| `status` | `AvatarStatus` | prop | No | `undefined` | No additional description. |
| `statusLabel` | `string` | prop | No | `undefined` | Accessible presence text. Auto-derived as 'Online' / 'Offline' for `status` 'online' / 'offline'; required (and used verbatim) for the other five `status` values — the aria text is omitted when neither applies. |
| `variant` | `AvatarVariant` | prop | No | `'accent'` | No additional description. |
## Related
- [Eyebrow](/docs/components/eyebrow): Tracked label used above headings.
- [CodeBlock](/docs/components/code-block): Read-only code surface with copy support.
- [Stat](/docs/components/stat): Metric value and caption for KPI compositions.
---
# CodeBlock
Read-only code surface with copy support.
Choose CodeBlock for read-only code that readers may need to copy.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `code` | `string` | prop | Yes | - | Raw source. Exactly what the copy button puts on the clipboard. |
| `copyLabel` | `string` | prop | No | `'Copy code'` | Accessible label for the copy control. |
| `copyable` | `boolean` | prop | No | `true` | Render the copy control in the header. |
| `filename` | `string` | prop | No | `undefined` | Header label. |
| `highlight` | `(code: string, language: string) => string` | callback | No | `undefined` | Opt-in highlighter. The kit bundles none. Whatever this returns is injected with `{@html}` — **the caller owns sanitisation**. |
| `label` | `string` | prop | No | `undefined` | Accessible label for the code region. |
| `language` | `CodeLang \| (string & {})` | prop | No | `'text'` | Header label, and the hint passed to `highlight`. |
| `maxHeight` | `number` | prop | No | `undefined` | Maximum body height in px; taller content scrolls. |
| `showLineNumbers` | `boolean` | prop | No | `false` | Render a line-number gutter. |
| `wrap` | `boolean` | prop | No | `false` | Soft-wrap long lines instead of scrolling horizontally. |
## Related
- [Eyebrow](/docs/components/eyebrow): Tracked label used above headings.
- [Avatar](/docs/components/avatar): Identity image or fallback with an optional status marker.
- [Stat](/docs/components/stat): Metric value and caption for KPI compositions.
---
# Stat
Metric value and caption for KPI compositions.
Use Stat to foreground one metric and its caption inside a dashboard or summary.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `label` | `string` | prop | No | `undefined` | Caption below the value. |
| `leading` | `Snippet` | snippet | No | `undefined` | Optional content slot rendered above the value (e.g. badge, icon). |
| `size` | `StatSize` | prop | No | `'md'` | Display size — `sm` 32 / `md` 40 / `lg` 56 px. Default `md`. |
| `value` | `string \| number` | prop | Yes | - | The numeric or short value displayed prominently. |
## Related
- [Eyebrow](/docs/components/eyebrow): Tracked label used above headings.
- [Avatar](/docs/components/avatar): Identity image or fallback with an optional status marker.
- [CodeBlock](/docs/components/code-block): Read-only code surface with copy support.
---
# StatusDot
Semantic status dot with an optional label and pulse.
Add StatusDot when a compact semantic indicator needs an optional text label.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | No additional description. |
| `pulse` | `boolean` | prop | No | `false` | Pulse the dot for "live" / in-progress states. |
| `tone` | `StatusDotTone` | prop | No | `'neutral'` | Drives the dot color. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
- [Spinner](/docs/components/spinner): Indeterminate loading indicator.
---
# LogoStrip
Row of text-based brand marks.
Use LogoStrip for a compact row of partner or customer wordmarks.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `label` | `string` | prop | No | `undefined` | Accessible label for the surrounding `
`. |
| `labels` | `readonly string[]` | prop | Yes | - | Brand wordmarks rendered in display font. |
| `variant` | `LogoStripVariant` | prop | No | `'light'` | `light` over a light surface (text-subtle); `dark` over a dark/accent surface. |
## Related
- [Eyebrow](/docs/components/eyebrow): Tracked label used above headings.
- [Avatar](/docs/components/avatar): Identity image or fallback with an optional status marker.
- [CodeBlock](/docs/components/code-block): Read-only code surface with copy support.
---
# EmptyState
Empty-state message with optional art and action.
Show EmptyState when a view has no content and the reader needs an explanation or next action.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `action` | `Snippet` | snippet | No | `undefined` | Slot for action buttons rendered below the description. |
| `art` | `Snippet` | snippet | No | `undefined` | Slot for custom artwork (replaces `icon` when provided). |
| `description` | `string` | prop | No | `undefined` | Optional supporting copy. |
| `icon` | `IconGlyph` | prop | No | `TrayIcon` | Iconic glyph rendered above the title. Defaults to `Tray`. |
| `size` | `EmptyStateSize` | prop | No | `'md'` | Vertical density. `sm` 32 / `md` 48 / `lg` 80 px outer padding. |
| `title` | `string` | prop | Yes | - | Headline. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [Spinner](/docs/components/spinner): Indeterminate loading indicator.
---
# Placeholder
Decorative blueprint preview frame.
Use Placeholder as a decorative stand-in for media or unfinished preview content.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `height` | `number` | prop | No | `874` | No additional description. |
| `label` | `string` | prop | No | `'Preview slot'` | No additional description. |
| `width` | `number` | prop | No | `402` | No additional description. |
## Related
- [Eyebrow](/docs/components/eyebrow): Tracked label used above headings.
- [Avatar](/docs/components/avatar): Identity image or fallback with an optional status marker.
- [CodeBlock](/docs/components/code-block): Read-only code surface with copy support.
---
# Icon
Renders a phosphor-svelte glyph component passed as `glyph`.
Use Icon to render a Phosphor glyph when text alone does not communicate the action or subject quickly enough.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `color` | `string` | prop | No | `undefined` | Defaults to `currentColor` (phosphor default). |
| `glyph` | `IconGlyph` | prop | Yes | - | The glyph component itself — e.g. `HouseIcon` from `phosphor-svelte`. |
| `mirrored` | `boolean` | prop | No | `false` | Horizontally mirror the glyph (RTL). |
| `size` | `number \| string` | prop | No | `18` | px number or any CSS length. Default 18. |
| `weight` | `IconWeight` | prop | No | `'regular'` | phosphor weight. Default `regular`. |
## Related
- [Eyebrow](/docs/components/eyebrow): Tracked label used above headings.
- [Avatar](/docs/components/avatar): Identity image or fallback with an optional status marker.
- [CodeBlock](/docs/components/code-block): Read-only code surface with copy support.
---
# Spinner
Indeterminate loading indicator.
Show Spinner for work with an unknown completion time when the surrounding interface remains visible.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `color` | `string` | prop | No | `'currentColor'` | Stroke colour. Defaults to the inherited text colour. |
| `label` | `string` | prop | No | `'Loading'` | Accessible label announced to assistive tech. |
| `size` | `number \| ControlSize` | prop | No | `18` | Outer diameter — a number (px) or a token: sm 16 / md 20 / lg 24. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
---
# Alert
Inline semantic message, optionally dismissible.
Use Alert for an inline message that needs semantic emphasis within the current page.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | Message body. |
| `dismissLabel` | `string` | prop | No | `'Dismiss'` | Accessible label for the dismiss control. |
| `dismissible` | `boolean` | prop | No | `false` | No additional description. |
| `icon` | `IconGlyph \| boolean` | prop | No | `undefined` | Leading icon, rendered tinted to the tone colour. Pass an {@link IconGlyph} for a specific glyph, or `true` to use the tone's canonical glyph. |
| `iconContent` | `Snippet` | snippet | No | `undefined` | Arbitrary leading content in place of a glyph. Takes precedence over `icon`. A glyph and a snippet are both functions at runtime, so they cannot share one prop. |
| `onDismiss` | `() => void` | callback | No | `undefined` | No additional description. |
| `title` | `string` | prop | No | `undefined` | No additional description. |
| `tone` | `AlertTone` | prop | No | `'info'` | No additional description. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
---
# Skeleton
Decorative loading placeholder recipes.
Reserve Skeleton for loading layouts whose final structure is already known.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `circle` | `boolean` | prop | No | `false` | Round avatar — forces equal w/h and a full radius. |
| `height` | `string \| number` | prop | No | `undefined` | Box height. Number → px, string → used verbatim. Default 1em. |
| `lines` | `number` | prop | No | `undefined` | Render N stacked text bars; the last one is shortened. |
| `radius` | `string \| number` | prop | No | `undefined` | Corner radius. Number → px, string → used verbatim. |
| `variant` | `SkeletonVariant` | prop | No | `undefined` | Preset shape that seeds default width / height / radius. |
| `width` | `string \| number` | prop | No | `undefined` | Box width. Number → px, string → used verbatim. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
---
# Progress
Task progress or a bounded measurement, selected with a required kind.
Choose kind="task" for determinate or indeterminate work. Choose kind="measurement" for a named bounded value and add text when color alone would carry meaning.
## API
The package declarations define these public members.
### Inherited prop contracts
- `AccessibleName` — Requires exactly one accessible name: `label`, `aria-label`, or `aria-labelledby`.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `aria-label` | `string` | prop | No | `undefined` | No additional description. |
| `aria-labelledby` | `string` | prop | No | `undefined` | No additional description. |
| `aria-valuetext` | `string` | prop | No | `undefined` | No additional description. |
| `indeterminate` | `boolean` | prop | No | `false` | No additional description. |
| `kind` | `'measurement' \| 'task'` | prop | Yes | - | No additional description. |
| `label` | `string` | prop | No | `undefined` | No additional description. |
| `max` | `number` | prop | No | `100` | No additional description. |
| `min` | `number` | prop | No | `0` | No additional description. |
| `showValue` | `boolean` | prop | No | `false` | No additional description. |
| `tone` | `ProgressTone` | prop | No | `'accent'` | No additional description. |
| `value` | `number` | prop | No | `0` | No additional description. |
| `valueLabel` | `string` | prop | No | `undefined` | No additional description. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
---
# LiveRegion
Visually hidden ARIA live region for consumer-controlled announcements.
Use LiveRegion for one consumer-controlled status announcement. Announce state transitions or completed chunks, not each streamed token or a duplicate nested status.
## API
The package declarations define these public members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `atomic` | `boolean` | prop | No | `true` | Announces the complete region when the message changes. |
| `message` | `string` | prop | No | `''` | Text that assistive technology announces. |
| `politeness` | `LiveRegionPoliteness` | prop | No | `'polite'` | Controls when assistive technology interrupts its current output. |
## Related
- [Badge](/docs/components/badge): Compact semantic or categorical label.
- [StatusDot](/docs/components/status-dot): Semantic status dot with an optional label and pulse.
- [EmptyState](/docs/components/empty-state): Empty-state message with optional art and action.
---
# Button
Button starts an action or opens a link while keeping size, tone, loading, and disabled behavior consistent.
Use Button for an action or link treatment. Select product and marketing contexts deliberately: product for interface actions, marketing for conversion CTAs. Use `fullWidth` when a button or full-width link must fill a bounded container. Open destructive confirmation with a quiet danger action.
Purpose
Use Button for a clear action. Choose one primary action in a local group. Use concise, verb-led labels such as “Save changes” or “Create project”. Use its link behavior when the same visual treatment must navigate to another location.
Anatomy
The component owns the interactive element, label, optional icon snippets, and loading indicator. The `children` snippet supplies the visible label. Native buttons keep their built-in keyboard behavior, while `href` renders a link for navigation. Icon-only Buttons require an accessible label. If completion matters, announce the result separately because `loading` only marks the action as busy.
Context
Product context
Product is the default context. It uses the semantic Button radius and the small primary shadow. Use it in forms, dialogs, settings, toolbars, tables, empty states, and onboarding flows.
Marketing context
Marketing is an explicit context. It defaults to the pill shape. An enabled primary marketing Button uses the accent glow. Use it for landing-page heroes, pricing sections, compact marketing headers, and promotional banners. Do not use it for routine product actions.
```svelte
```
Shape
Shape remains independent from context. `rounded` uses the default Button radius. `pill` uses the full pill radius. `circle` is for icon-only Buttons. An explicit shape overrides the context default.
Form alignment
Product Button and Input use paired semantic radii. Their heights come from separate control and field recipes, so a preset can tune each role. Use the product default when Button sits beside or below an Input in a form.
Use `sm` only when the surrounding layout provides a clear and usable target. Icon-only Buttons require an accessible label.
Standalone hero CTA
One standalone hero CTA can use `lg` when one action dominates the page. Center the CTA in the hero. Do not place a second `lg` Button beside it.
```svelte
```
Two-button hero CTA
A two-button hero group uses `md` for both buttons. Variant and glow create the hierarchy. Size does not create hierarchy inside the group.
```svelte
```
Tokens and style hooks
Button reads semantic accent, text, focus, radius, spacing, and motion variables. Override those values through `Provider` rather than targeting internal classes.
## API
The package declarations define these public members.
### Inherited prop contracts
- `Omit` — Props from this native base are accepted except the listed members.
| Member | Type | Kind | Required | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `children` | `Snippet` | snippet | No | `undefined` | No additional description. |
| `context` | `ButtonContext` | prop | No | `'product'` | No additional description. |
| `fullWidth` | `boolean` | prop | No | `false` | No additional description. |
| `href` | `string` | prop | No | `undefined` | Render an `` instead of a `