Component preview

One system,
three frameworks.

Every component below is a real Web Component built with Lit, the same source that ships in @bion-mfe-ui/core. React and Vue consume them through thin adapters with identical props and events. Interact with the controls to see them live.

Components
9
Frameworks
3
Palette
Mono
Tokens
55

Installation

npm · pnpm · yarn

All packages are ESM-only, published under the @bion-mfe-ui scope. Install the one that matches your setup; the React and Vue adapters pull core, tokens, and icons in automatically.

React npm install @bion-mfe-ui/react
Vue npm install @bion-mfe-ui/vue
Plain HTML / any framework npm install @bion-mfe-ui/core
CSS only (no JS framework) npm install @bion-mfe-ui/css
Design tokens only npm install @bion-mfe-ui/tokens
Peer deps you provide: react + react-dom ≥18 · vue ≥3.4

Load tokens once (required)

Components read CSS variables from tokens, including inside their shadow DOM, so import the stylesheet once at your app root.

@import "@bion-mfe-ui/css/index.css"; /* tokens + reset + classes */
/* or only the variables: */
@import "@bion-mfe-ui/tokens/css";

Via CDN (no install)

For quick prototyping, load straight from a CDN; esm.sh resolves Lit for you.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@bion-mfe-ui/css/dist/index.css" />
<script type="module">
  import "https://esm.sh/@bion-mfe-ui/core/product-card";
</script>
<bion-product-card name="Auro Headset" price="Rp 349.000"></bion-product-card>

Tokens

@bion-mfe-ui/tokens

The single source of truth. A pure monochrome scale. Color encodes elevation and text hierarchy only; ink itself is the accent. Every value is a CSS variable consumed by all packages and inside shadow DOM.

Changing a token re-themes every remote on rebuild → treat as semver-significant.

Icon

<bion-icon>

Convenience wrapper over the raw SVG strings in @bion-mfe-ui/icons. Inherits color via currentColor; size and stroke are props.

24

Button

<bion-button>

Three variants: solid, outline, and icon-only. Optional trailing icon. Fires native click, no custom event needed.

Lihat koleksi Keranjang Disabled

Chip

<bion-chip>

Underline-on-active filter chip. The parent owns which chip is active; the chip only reports intent, so a remote drives filtering (not the design system).

Emits bion-select { value }
interact to see events

Rating

<bion-rating>

Display-only star rating with optional review count. Read-only by design.

5

ProductCard

<bion-product-card>

The catalog's workhorse. Owns only presentation + the favourite toggle. It never knows about a cart or currency; it emits events and lets the remote decide. Hover to reveal the add and favourite buttons.

Emits bion-add · bion-favorite · bion-select
hover a card, then click + or ♥

QuantityStepper

<bion-quantity-stepper>

Pill stepper for cart line items. Emits the new value; the cart remote decides what a change means (e.g. remove at 0). The stepper only reports the number.

Emits bion-change { value }
value: 1

CartDrawer

<bion-cart-drawer>

Slide-over drawer. Receives line items and pre-formatted subtotal/total strings; it never does currency math. Keeps the source of truth in the cart remote, passes strings in, reacts to events out.

Emits bion-close · bion-quantity-change { id, value } · bion-checkout
Open cart drawer item qty changes update the totals live
drawer closed

AccountBadge

<bion-account-badge>

Shell-owned identity chip. Purely presentational; shows who is signed in. It does no auth; the shell passes the resolved name. Initials derive automatically if omitted.

Emits bion-select { name }
click a badge