Observed since 20 Oct, 21:15 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
8-bit pixel aesthetic Lit web component library
A PICO-8 inspired Lit web component library with a subtle 8-bit aesthetic — hard corners, pixel-art shadows, stepped animations, and arcade UI primitives. Framework-agnostic custom elements that work in React, Vue, plain HTML, or any other stack.
The 8-bit character comes from geometry and motion, not from maxing out the decorative font everywhere:
border-radius: 0 — hard corners only2px 2px 0 color hard shadows — depth cue, not cartoon weightsteps(N) CSS transitions — frame-based state changes, not smooth eases--font-pixel) reserved for short labels, scores, and headings — ≥16px--font-body)| Element | Description |
|---|---|
<pixel-button> | primary / secondary / danger variants, sm/md/lg, loading, disabled |
<pixel-input> | Text input with scan-snap focus border, error message, label |
<pixel-textarea> | Multiline input with optional character counter |
<pixel-checkbox> | X-mark check, indeterminate support |
<pixel-radio> | Square-fill pixel radio button |
<pixel-toggle> | ON/OFF sliding block switch |
<pixel-range> | HP-bar style track — fill shifts green → yellow → red |
<pixel-select> | Custom listbox with keyboard navigation |
<pixel-number> | [<] / [>] step buttons around a numeric input |
| Element | Description |
|---|---|
<pixel-progress> | Segmented HP bar, determinate + indeterminate scan animation |
<pixel-life> | ♥ hearts or block segments, role="meter" |
<pixel-score> | Arcade digit counter with leading zeros, aria-live |
<pixel-badge> | Rarity tag — common / uncommon / rare / epic / legendary |
<pixel-status> | Blinking ● dot — online / idle / error / offline |
<pixel-toast> | Slide-in notification, auto-dismiss, 4 severity variants |
<pixel-tooltip> | Speech-bubble box with pixel arrow tail |
| Element | Description |
|---|---|
<pixel-card> | Bordered container, optional title bar, accent color variants |
<pixel-panel> | Collapsible panel with ▶/▼ pixel-font indicator |
<pixel-dialog> | Modal with [X] close, role="dialog", focus trap, Escape key |
<pixel-divider> | Solid or dashed rule with optional centered label |
<pixel-tabs> | Full role="tablist" ARIA pattern, arrow key navigation |
| Element | Description |
|---|---|
<pixel-typewriter> | Character-by-character text reveal with blinking block cursor |
<pixel-dialog-box> | RPG speech panel — speaker name, ▼ next indicator, multi-page messages |
<pixel-sprite> | CSS sprite sheet animation via steps() — bring your own PNG |
<pixel-map> | Canvas 2D tilemap renderer |
<pixel-cursor> | Blinking ▶ selection cursor for menus |
<pixel-scanline> | CSS-only CRT scanline + vignette overlay — opt-in, position: fixed |
All form components are form-associated custom elements — they participate in native <form> submit and FormData without any wrapper.
npm install 8-bit-vibez lit
<!-- Plain HTML / vanilla JS -->
<script type="module">
import '8-bit-vibez'
</script>
<link rel="stylesheet" href="node_modules/8-bit-vibez/src/styles/tokens.css">
<pixel-button>PRESS START</pixel-button>
// Bundler (Vite, webpack, etc.)
import '8-bit-vibez' // registers all 25 elements
import '8-bit-vibez/styles' // CSS design tokens
// Named imports for tree-shaking
import { PixelButton, PixelDialogBox } from '8-bit-vibez'
// React 19 — custom elements work in JSX natively
import '8-bit-vibez'
import '8-bit-vibez/styles'
<pixel-button variant="primary">START GAME</pixel-button>
npm install
npm run dev # showcase on localhost:5173
npm run storybook # component docs on localhost:6007
Requires Node 18+.
All visual properties are driven by CSS custom properties in src/styles/tokens.css. These pierce Shadow DOM natively — override them at :root to theme all components at once:
:root {
/* Colors — PICO-8 palette */
--bg: #0d0d1a;
--bg-2: #1d2b53;
--green: #00e436;
--blue: #29adff;
--yellow: #ffec27;
--red: #ff004d;
/* Typography */
--font-pixel: 'Dogica', 'Press Start 2P', monospace; /* decorative */
--font-body: 'JetBrains Mono', 'Courier New', monospace;
/* Shape — no border-radius in 8-bit art */
--radius: 0px;
/* Motion — stepped feel */
--ease-step: steps(4);
}
prefers-reduced-motion: all CSS animations disabled; pixel-typewriter reveals full text instantly; pixel-sprite freezes on frame 0; pixel-scanline hides entirelyrole="meter" on pixel-life, role="progressbar" on pixel-progress, role="tablist" on pixel-tabs, role="dialog" on pixel-dialogaria-live="polite" on pixel-score and pixel-statusfilter: opacity(0.4) instead of opacity so WCAG 1.4.3 inactive-UI exemption is correctly recognized by accessibility toolspixel-typewriter prefers-reduced-motion fallback shows full text immediately ✓ but the aria-live region on inline usage may be verbose — wrap in a semantically appropriate containerpixel-map canvas content has role="img" with a label, but tile-level detail is not exposed to AT (by design — visual decoration)pixel-scanline is purely decorative and aria-hidden — no AT impactpixel-dialog — full inert attribute propagation to sibling elementspixel-life / pixel-score — aria-live polite announcements on value change@web/test-runner + @open-wc/testing)changeset)pixel-audio — pixel-style audio player with frequency visualizerpixel-inventory — grid-based item slot systempixel-minimap — live canvas minimapMIT
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 21:15 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:7482837841b1948d462f4e8e94d6574f07bdb7d0a294f51cafd8c5e9822c02fd