Wireframe Kit

A lo-fi component library mirroring Neo, Moderne's design system. Browse components below, view their code, and copy into your prototypes.

Setup & usage

Add these two lines to any HTML file in your prototype repo:

<link rel="stylesheet" href="wireframe-kit/wireframe-kit.css"> <script src="wireframe-kit/wireframe-kit.js"></script>

Then use web components directly in your HTML. Wrap everything in class="wf-kit" for base styles:

<body class="wf-kit"> <div class="wf-page"> <!-- Left rail: home + primary nav + tenant logo --> <wf-sidebar home="My App" items="Moddy|sparkles,DevCenter|pie-chart,Trigrep|search,Artifacts|package,Marketplace|globe,Builder|blocks,Activity|history,Changelog|activity" active="0" tenant="ACM"></wf-sidebar> <!-- Top bar: org switcher, search, action icons, avatar --> <wf-navbar org="Acme, Inc." search="Search…" actions="✦,?" avatar="AC"></wf-navbar> <main class="wf-main"> <wf-card title="Hello">Your content here</wf-card> </main> </div> </body>

For React, import from wireframe-kit.jsx alongside wireframe-kit.css.

Buttons
Button<wf-button>
<wf-button>Default</wf-button>
<wf-button variant="primary">Primary</wf-button>
<wf-button variant="secondary">Secondary</wf-button>
<wf-button variant="ghost">Ghost</wf-button>
<wf-button variant="destructive">Destructive</wf-button>
<wf-button size="sm">Small</wf-button>
<wf-button size="lg">Large</wf-button>
ButtonGroup<wf-button-group>
<wf-button-group items="Day,Week,Month"></wf-button-group>
ButtonTab<wf-button-tab>
<wf-button-tab items="Overview,Details,History" active="0"></wf-button-tab>
Form controls
Input<wf-input>
<wf-input label="Email address" placeholder="you@example.com"></wf-input>
<wf-input label="With error" error="This field is required"></wf-input>
Textarea<wf-textarea>
<wf-textarea label="Description" placeholder="Enter a description..."></wf-textarea>
Select<wf-select>
<wf-select placeholder="Choose option..."></wf-select>
<wf-select value="Selected value"></wf-select>
Search<wf-search>
<wf-search placeholder="Search recipes..."></wf-search>
DatePicker<wf-datepicker>
<wf-datepicker value="Jun 4, 2026"></wf-datepicker>
Checkbox<wf-checkbox>
<wf-checkbox label="Option A"></wf-checkbox>
<wf-checkbox label="Option B" checked></wf-checkbox>
Radio<wf-radio>
<wf-radio label="Option A" selected></wf-radio>
<wf-radio label="Option B"></wf-radio>
Toggle<wf-toggle>
<wf-toggle label="Dark mode"></wf-toggle>
<wf-toggle label="Enabled" on></wf-toggle>
Data display
Badge<wf-badge>
<wf-badge>Default</wf-badge>
<wf-badge filled>Filled</wf-badge>
Default Filled
Tag<wf-tag>
<wf-tag>Java</wf-tag>
Java Spring Migration
Chip<wf-chip>
<wf-chip>Filter</wf-chip>
<wf-chip removable>Removable</wf-chip>
Filter Removable
Avatar<wf-avatar>
<wf-avatar initials="AC"></wf-avatar>
<wf-avatar size="sm" initials="S"></wf-avatar>
<wf-avatar size="lg" initials="LG"></wf-avatar>
KeyValuePair<wf-kv>
<wf-kv key="Author" value="Moderne Team"></wf-kv>
ListItem<wf-list-item>
<wf-list-item title="Spring Boot Migration" subtitle="Java - 342 runs" trailing="2m ago"></wf-list-item>
Table<wf-table>
<wf-table rows="5" cols="4" headers="Name,Status,Role,Date"></wf-table>
DataGrid<wf-data-grid>
<wf-data-grid rows="5" cols="4" headers="Recipe,Status,Repos,Date"></wf-data-grid>
Progress<wf-progress>
<wf-progress value="72"></wf-progress>
DiffStat<wf-diffstat>
<wf-diffstat additions="24" deletions="8"></wf-diffstat>
Feedback
Alert<wf-alert>
<wf-alert variant="info" title="Info">Message here.</wf-alert>
<wf-alert variant="success" title="Done">All good.</wf-alert>
<wf-alert variant="warning" title="Heads up">Check this.</wf-alert>
<wf-alert variant="error" title="Error">Failed.</wf-alert>
Informational message. Operation completed. Review before continuing. Something went wrong.
Toast<wf-toast>
<wf-toast>Recipe run completed</wf-toast>
Recipe run completed
SpinnerCSS class
<span class="wf-spinner"></span>
<span class="wf-spinner wf-spinner--sm"></span>
<span class="wf-spinner wf-spinner--lg"></span>
EmptyState<wf-empty-state>
<wf-empty-state
  title="No recipes found"
  message="Try adjusting your search"
  action="Create Recipe">
</wf-empty-state>
Cards & charts
Card<wf-card>
<wf-card title="Card Title" footer>
  Your content here
</wf-card>
StatCard<wf-stat-card>
<wf-stat-card label="Active Recipes" value="247" change="+12 this week"></wf-stat-card>
Chart<wf-chart>
<wf-chart title="Weekly Recipe Runs" bars="7"></wf-chart>
Developer
CodeSnippet<wf-code-snippet>
<wf-code-snippet language="yaml" lines="5"></wf-code-snippet>

<!-- Or with real content: -->
<wf-code-snippet language="java">
public class Main {
  public static void main(String[] args) {}
}
</wf-code-snippet>
Tree<wf-tree>
<wf-tree depth="3" items="4"></wf-tree>
Assemblies
CardTable<wf-card-table>
<wf-card-table title="Recipe Runs" rows="4"></wf-card-table>
FilterResults<wf-filter-results>
<wf-filter-results rows="4" headers="Repository,Status,Changes,Date" filters="Status,Language"></wf-filter-results>
DataTableLayout<wf-data-table-layout>
<wf-data-table-layout rows="5" headers="Name,Status,Type,Modified"></wf-data-table-layout>
ChangelogFeed<wf-changelog-feed>
<wf-changelog-feed entries="4"></wf-changelog-feed>
Compositions
RecipeResults<wf-recipe-results>
<wf-recipe-results recipe="Migrate to Java 17" status="completed" repos="24" changes="18" errors="2"></wf-recipe-results>
Activation<wf-activation>
<wf-activation headline="Welcome to Moderne" cta="Run your first recipe"
  prereqs="Connect an SCM:done,Add repositories:done,Run first recipe:pending">
</wf-activation>