@frontpanel/vue

Vue 3 components for the Frontpanel early-2000s hardware skin: a scale-to-fit device frame, windows, chrome and gel buttons, caps, LCDs and LEDs, built on Reka UI.
219
Install
npm install @frontpanel/vue
Latest Version:0.3.0
Vue:3
License:MIT
Last Updated:Oct 23, 2026
Links: GitHub  ·  npm
Maintainer: dulanh

@frontpanel/vue

Vue 3 components for the Frontpanel early-2000s hardware skin: a device frame that can scale to fit, windows, chrome and gel buttons, molded caps, LCD lines, LEDs and a pixel icon set. Behaviour and ARIA come from Reka UI; the look comes from @frontpanel/css.

The UI kit behind WhatsTheNextChord.

Documentation: guides, live demos, and every component, class and token.

0.x: props may still change between minor versions. Pin the version.

Install

npm install @frontpanel/vue

It needs Vue 3.5 or later. @frontpanel/css comes with it; the components ship no CSS of their own, so import the stylesheet once:

import '@frontpanel/css/index.css'
import '@frontpanel/css/fonts.css' // optional: the display and LCD fonts

With Tailwind 4, import @frontpanel/css/tailwind.css instead (see its README), and add an @source line for this package. Tailwind doesn't scan node_modules, so without it the classes the components use are never generated. Give the path from your CSS file:

@source "../node_modules/@frontpanel/vue/dist";

Example

<script setup lang="ts">
import { FpButton, FpDevice, FpGelButton, FpLcd, FpLcdLine, FpLed, FpWindow } from '@frontpanel/vue'
import { ref } from 'vue'

const playing = ref(false)
</script>

<template>
  <FpDevice fit="width" :width="600">
    <FpWindow title="Deck">
      <FpLcd>
        <FpLcdLine :text="playing ? 'PLAYING' : 'STOPPED'" ghost :cells="12" redraw />
      </FpLcd>
      <FpLed :lit="playing" color="amber" />
      <FpButton :pressed="playing" @click="playing = !playing">
        Play
      </FpButton>
      <FpGelButton>Save</FpGelButton>
    </FpWindow>
  </FpDevice>
</template>

Components

Component What it is
FpDevice The device: a molded body in a liquid-chrome rim on a backdrop. fit="width" or "contain" draws it at a design width and scales it to the room it has; the default fit="none" leaves layout to your page
FpWindow A matte module with a chrome title bar: title, level, closable (emits close), an actions slot, and sheet for a phone bottom sheet
FpButton A brushed-chrome push button; pressed makes it a toggle
FpGelButton The glossy gel pill, for the panel's main action
FpCap A molded-plastic cap in white, blue, amber, graphite or berry; pressed holds it down with a ring
FpLcd, FpLcdLine LCD glass, and a line of text on it with optional unlit segments (ghost, cells) and a left-to-right redraw
FpLed A green, amber or red LED; lit, and blink to confirm an action
FpHousing, FpWell, FpSilk, FpScrew A dark housing for LEDs, a recessed well, a silkscreened label, a screw head
FpIcon A 19-glyph 16 px pixel icon set (fpIconNames)

Element components take Reka's as and asChild.

Accessibility

  • LEDs and icons are decorative (aria-hidden) unless you give them a label, which makes them an image with that name. Say an LED's state in text nearby, or label it; colour alone never carries meaning.
  • An icon-only button needs a name. Put aria-label on the FpButton and leave the FpIcon inside it decorative.
  • pressed makes a toggle. On FpButton and FpCap it sets aria-pressed and holds the control down; leave it unset for an ordinary button, which then gets no aria-pressed.
  • Closing an FpWindow removes the focused close button. Move focus back to the control that opened the window.
  • FpSilk is a span. Render it as a heading or label (as="h3", as="label") where it names something.
  • Every control shows a focus ring, every text colour pairing passes WCAG AA in both skins, and each moving part respects prefers-reduced-motion.

Licence

MIT.

Related Packages

@mart-booking/ui

MART UI — Vue 3 component library built on Reka UI

2,119
@63pokupki/design-system

UI component kit and design-system for 63 Pokupki project

32,580 5
@vtmn/vue

Decathlon Design System - Vitamin Vue components library

25,169 288
@linto-ai/transcript-ui-ui

Design-system components and CSS tokens for @linto-ai/transcript-ui

8,368 59
@enirman/ui

Shared design system for eNirman apps — shadcn-vue primitives + app shell + desi...

5,056 0

Version History

Version Released Vue License
0.3.0 ^3.5.0 MIT
0.2.0 ^3.5.0 MIT
0.1.0 ^3.5.0 MIT
Pre-releases (1)
Version Released License
0.0.0-stage