A Lit Web Component library implementing the Windows Phone / Windows 8 Metro design system. Built with TypeScript for modern web applications.
Metrino is published to GitHub Packages. Configure the registry first:
npm config set @angelmunoz:registry https://npm.pkg.github.comOr add to your project's .npmrc:
@angelmunoz:registry=https://npm.pkg.github.com
Then install:
npm install @angelmunoz/metrino
# or
pnpm add @angelmunoz/metrinoMetrino requires lit and @mdi/js as peer dependencies:
npm install lit @mdi/jsImport all components at once:
import '@angelmunoz/metrino';<metro-button accent>Click Me</metro-button>
<metro-pivot>
<metro-pivot-item header="Tab 1">Content 1</metro-pivot-item>
<metro-pivot-item header="Tab 2">Content 2</metro-pivot-item>
</metro-pivot>Import only the components you need for smaller bundle sizes:
import '@angelmunoz/metrino/button';
import '@angelmunoz/metrino/pivot';
import '@angelmunoz/metrino/pivot-item';
import '@angelmunoz/metrino/flip-tile';import { MetroButton, MetroPivot } from '@angelmunoz/metrino';
const button: MetroButton = document.querySelector('metro-button');If you only need the CSS custom properties (without components):
import '@angelmunoz/metrino/styles.css';metro-button- Standard push button with accent color variantmetro-hyperlink-button- Link-styled navigation buttonmetro-repeat-button- Button that fires repeatedly on holdmetro-dropdown-button- Button that reveals a dropdown menu
metro-date-picker- Calendar date selectionmetro-date-picker-roller- Roller-style date pickermetro-time-picker- Time selectionmetro-time-picker-roller- Roller-style time pickermetro-calendar- Month view calendar displaymetro-calendar-date-picker- Inline calendar picker
metro-content-dialog- Custom content modalmetro-message-dialog- Alert/confirmation dialogmetro-flyout- Contextual popupmetro-settings-flyout- Settings panel (346px width)metro-toast- Notification bannermetro-menu-flyout- Menu commands popup
metro-text-box- Single-line text inputmetro-password-box- Password input with reveal togglemetro-number-box- Numeric input with spinnersmetro-check-box- Checkbox controlmetro-radio-button- Radio button for mutually exclusive choicesmetro-toggle-switch- On/off sliding switchmetro-slider- Range value selectormetro-rating- Star rating controlmetro-combo-box- Dropdown selectionmetro-auto-suggest-box- Autocomplete inputmetro-rich-edit-box- Rich text editor
metro-grid- CSS Grid containermetro-stack-panel- Vertical/horizontal flexbox stackmetro-wrap-panel- Flowing wrap layoutmetro-scroll-viewer- Scrollable container with touch physicsmetro-viewbox- Scalable content containermetro-canvas- Absolute positioning containermetro-tile-grid- Responsive tile layoutmetro-variable-sized-wrap-grid- Mixed-size flow layout
metro-pivot- Tab-based navigationmetro-pivot-item- Pivot tab contentmetro-hub- Horizontal section groupingmetro-hub-section- Hub content sectionmetro-panorama- Full-screen horizontal scrolling viewmetro-panorama-item- Panorama panelmetro-split-view- Collapsible sidebar layoutmetro-app-bar- Bottom command barmetro-app-bar-button- Circular icon button for app barmetro-app-bar-toggle-button- Checkable command buttonmetro-app-bar-separator- Visual divider
metro-icon- Material Design icons (via @mdi/js)metro-text-block- Typography elementmetro-border- Styled containermetro-image- Image displaymetro-person-picture- Contact avatarmetro-expander- Collapsible sectionmetro-info-bar- Informational bannermetro-tooltip- Hover informationmetro-toast- Notificationmetro-context-menu- Right-click menumetro-menu-flyout- Popup menumetro-rich-text-block- Formatted textmetro-media-element- Audio/video player
metro-progress-bar- Determinate linear progressmetro-progress-ring- Indeterminate circular spinner
metro-list-box- Selectable item listmetro-list-view- Virtualized list with gesturesmetro-grid-view- Virtualized tiled gridmetro-flip-view- Swipeable carouselmetro-tree-view- Hierarchical expandable listmetro-long-list-selector- Virtualized list with jump gridmetro-semantic-zoom- Zoom between overview and detail viewsmetro-list-picker- Modal selection dialog
metro-live-tile- Animated content updatesmetro-flip-tile- 3D rotation effectmetro-cycle-tile- Rotating contentmetro-iconic-tile- Icon with counter
Metrino uses CSS custom properties for theming and respects prefers-color-scheme automatically. Override tokens in your CSS:
:root {
--metro-accent: #0078d4;
--metro-accent-light: #429ce3;
--metro-accent-dark: #005a9e;
--metro-background: #000000;
--metro-background-alt: #1a1a1a;
--metro-surface: rgba(255, 255, 255, 0.05);
--metro-foreground: #ffffff;
--metro-foreground-secondary: rgba(255, 255, 255, 0.6);
--metro-border: rgba(255, 255, 255, 0.2);
--metro-highlight: rgba(255, 255, 255, 0.1);
--metro-font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
--metro-transition-fast: 167ms;
--metro-transition-normal: 250ms;
--metro-transition-slow: 333ms;
--metro-easing: cubic-bezier(0.1, 0.9, 0.2, 1);
}Use data-theme on <html> to override the system preference:
<html data-theme="light">21 accent colors are available via the accent attribute:
<html accent="red">Available: blue (default), red, orange, green, teal, purple, magenta, lime, brown, pink, mango, cobalt, indigo, violet, crimson, emerald, mauve, sienna, olive, steel, taupe.
MIT © Angel D. Munoz