Component & Icon Showcase

Sidebar

The sidebar's height is `calc(100% - 24px)` of its container, so each box below sizes it to fit fully (header, body, and footer all visible) rather than the full viewport.

Default — collapsible="icon", rail, side="left"
Bundy
JD
Jane Doe
Admin
collapsible="offcanvas" — hides completely instead of shrinking
Bundy
collapsible="none" — always expanded, no rail
Bundy
side="right" — rail and bulge mirror to the other edge
Bundy
rail=false — no built-in toggle; controlled externally via `v-model:open`
Bundy
title/description (no custom #header)

Bundy

Workspace

Sub-items — children collapse to icons only, "Settings" starts expanded
Bundy
Team switcher (header) + User menu (footer)

Navbar

Dashboard

Overview of your workspace

Projects
3

Buttons

As link
Colors — solid
Colors — subtle
Colors — soft
Colors — ghost

Links

Avatars

JD
JD
JD
Jane Doe
Jane Doe
JD
JD
JD
JD
JD
JD
JD
JD
JD
Jane Doe
JD
JD
JD
Square shape — corner radius scales with size
JD
JD
JD

Avatar Groups

JD
John Smith
AL
MP
SW
JD
John Smith
AL
MP
SW
JD
John Smith
AL
+2
Ring color matched to a Card's background
JD
John Smith
AL
MP
SW

Users

JD
Jane Doe
Product Designer

Badges

Colors — standalone
Statuses — standalone
Text — standalone
1 1 1 1 1 1 1 1
Positions
3
Inset
3
3
Ring color matched to a Card's background
3

Cards

Subtle (default)
Soft
Soft
Soft
Solid
Soft
Outline
Soft
Subtle rounded lgSoft rounded lgSolid rounded lgOutline rounded lg

Alert

neutral

This is an alert description explaining the current state.

primary

This is an alert description explaining the current state.

secondary

This is an alert description explaining the current state.

success

This is an alert description explaining the current state.

error

This is an alert description explaining the current state.

warning

This is an alert description explaining the current state.

info

This is an alert description explaining the current state.

pending

This is an alert description explaining the current state.

Without icon

Without icon

Alerts work fine without an icon too.

Title only

Title only

Description only

Description only, no title.

Slot content

Slot content

Custom rich content passed via the default slot.

File Upload

Area — single

Drop your file here

or click to browse

Area — multiple

Drop your files here

or click to browse

Area — accept images, color success

Drop images here

PNG, JPG up to 10MB

Area — disabled

Drop your file here

Button variant
Button variant — disabled

Tags Input

Outline (default)

vue nuxt

Soft

Colors

neutral
primary
secondary
success
error
warning
info
pending

Max tags

one two

Disabled

vue nuxt

Number Input

Basic

Variants

outline (default)
soft

Orientation

horizontal (default)
vertical

Min / max / step

Decimal step

Disabled

With FormField

Switch

Basic

Colors

Indicator

States

Required

Tabs

Variants

subtle (default)

Manage your account settings and preferences here.

outline

Manage your account settings and preferences here.

link

Manage your account settings and preferences here.

Sizes

sm
md (default)
lg

Orientation

horizontal (default)
vertical — subtle
vertical — outline
vertical — link

With content

Manage your account settings and preferences here.

Disabled tab

Without icons

Kbd

AltDelEscTabK

Checkbox

Basic

Colors

States

Indicator

Required

Card variant

Radio Group

Basic

Notification frequency

Colors

Orientation

vertical (default)
horizontal

Indicator

States

Required

Plan*

Card variant

Tooltip

Basic

Sides

With keyboard shortcut

Without arrow

Disabled

Tags

Soft (default)

PrimarySuccessWarningErrorInfoPendingNeutral

Solid

PrimarySuccessWarningErrorInfoPendingNeutral

With icons

FeaturedNextDoneExpired

Form Field & Input

Outline (default)

We'll never share your email.

Soft

Username is already taken.

Disabled

With icons

Textarea

Outline (default)

Soft

Disabled

Rows

Autoresize

Autoresize with max rows

With icon

Resizable

With FormField

Feedback is required.

Select

Basic

Variants

outline (default)
soft

With icon

Multiple

Disabled

With FormField

Grouped

With divider

Clearable

Combobox

Basic

Variants

outline (default)
soft

With icon

Multiple (removable tags)

Multiple with icons

Disabled

With FormField

Grouped

With divider

Clearable

Autocomplete

Basic (type to filter)

Variants

outline (default)
soft

With icon

Multiple (removable tags)

Disabled

With FormField

Grouped

Clearable

Date Input

Basic

Variants

outline (default)
soft

Min / Max (this month only)

Disabled

With FormField

Clearable

Range

Time Input

Basic

Variants

outline (default)
soft

Format

12h
24h

Minute step (15 min)

Disabled

With FormField

Clearable

Range

Command Palette

Basic — click to open, or press ⌘K / Ctrl+K

Last selected

Nothing selected yet

Collapsed

Post Navigation

First page — no previous link

Last page — no next link

Pin Input

Basic (empty)

Variants

outline (default)
soft

Length

4
6

Number only

Masked

Disabled

With FormField

Last completed value

Not completed yet

Phone Input

Basic

Variants

outline (default)
soft

Without the country picker

Disabled

Selected value

+1 empty

Pagination

Basic (1 / 12)

Sibling count

0
1 (default)
2

Without edges

Without controls

Few pages (no dots needed)

Disabled

Modal

Slideover

Drawer

Drag the handle to dismiss.

Slider

Basic (50)

Range (25 – 75)

Variants

solid (default)
outline

Colors

neutral
primary
secondary
success
error
warning
info
pending

Min / max / step

4 (0–10, step 2)

With tooltip (drag the thumb)

Disabled

With FormField

Popover

Basic (click)
Hover mode
With arrow
Non-dismissible
Form content

Info

Next to a label
Auto-renew
Colors
Content slot
Sides

Toast

Colors

Floating Action Buttons

Drag the pill by its grip (or any empty space in it) towards an edge of the box below — it snaps to whichever edge is nearest and switches between a horizontal and vertical layout as you cross between edges.

Bounded container — every FAB below stays confined to this box, not the full viewport

The top-anchored pill above has no handle and isn't draggable; the others can be dragged by their grip, empty space, or even their own buttons.

Toolbar

Grouped items



Vertical



Slot content mixed with items


Stepper

Horizontal — click a step to navigate

Account

Create an account

Profile

Set up our profile

Complete

Complete the setup

Vertical

Intro

Get to know the basics

Basics

Advanced

Deep dive into advanced topics

Practice

Certification

Get your certificate

Non-linear (any step is clickable) + icons

Cart

Review your items

Shipping

Delivery details

Payment

Add payment method

Done

Order confirmed

Disabled step

Account

Create an account

Verify

Confirm your email

Profile

Set up our profile

Complete

Complete the setup

Line variant — a divided progress line, no circular trigger

Line variant — vertical

Line variant — with icons

Line variant — colors

neutral
primary
secondary
success
error
warning
info
pending

Tree

Basic — single selection

app
components
Button.vue
Card.vue
package.json

Selected: none

Multiple selection

app
components
Button.vue
Card.vue
package.json

Selected: none

Controlled expansion

Disabled

app
components
Button.vue
Card.vue
package.json

Colors

Folder
Item A
Item B
Folder
Item A
Item B
Folder
Item A
Item B
Folder
Item A
Item B
Folder
Item A
Item B
Folder
Item A
Item B
Folder
Item A
Item B
Folder
Item A
Item B

Navigation

Color

Scroll Spy

Scroll the box below — the active link tracks via CSS `scroll-target-group`/`:target-current` (Chromium 133+), no JS scroll-spy.

Introduction

Placeholder content for "Introduction" — scroll to see the matching link on the left highlight automatically.

Installation

Placeholder content for "Installation" — scroll to see the matching link on the left highlight automatically.

Usage

Placeholder content for "Usage" — scroll to see the matching link on the left highlight automatically.

Basic usage

Placeholder content for "Basic usage" — scroll to see the matching link on the left highlight automatically.

Advanced usage

Placeholder content for "Advanced usage" — scroll to see the matching link on the left highlight automatically.

FAQ

Placeholder content for "FAQ" — scroll to see the matching link on the left highlight automatically.

Table

Status
Jane Doe
jane@bundy.dev
Active
$1,204
John Smith
john@bundy.dev
Invited
$820
Ava Chen
ava@bundy.dev
Active
$3,410
Liam Brown
liam@bundy.dev
Suspended
$0

Loading and empty states

Status
Status
No members yet

Code

Install the package with npm install bundy-ui, then import components as needed.

app.vue
vue
<template>
  <UiButton>Click me</UiButton>
</template>
json
{
  "id": 1,
  "name": "Example Item",
  "description": "This is a sample JSON structure",
  "active": true,
  "tags": ["sample", "json", "example"],
  "createdAt": "2026-01-16T12:00:00Z"
}
bash
npm install bundy-ui

Divider

Horizontal

Above

Below

Vertical

Left

Right

Color Picker

Basic

#ff0000
#2F9DBC

Disabled

#ff0000

Progress

Basic

Upload75%

Colors

Outline variant

Large variant

Indeterminate

Buffering

Buffer

Circle variant

75%
45%
90%
Upload

Circle-outline variant

75%
45%
90%
Upload

Circle-lg variant

75%
45%
90%
Upload

Circle-lg-outline variant

75%
45%
90%
Upload

Circle buffering

Context Menu

Basic

Right click here

Grouped items

Right click here

With colors

Right click here

Checkbox items

Right click here

Disabled

Right click (disabled)

With submenu

Right click here

Dropdown Menu

Basic

Grouped items

With colors

Checkbox items

With submenu

Disabled

Controlled open state

Open state: false

Skeleton

Basic

Different tags

Card preview

Icons

ArrowDown
ArrowLeft
ArrowOut
ArrowRight
ArrowUp
BookOpen
Buildings
Calendar
CaretDown
CaretLeft
CaretRight
CaretUp
Chat
Checkmark
ClipboardCheck
ClipboardText
Close
Component
Copy
CopySuccess
DotsThree
Folder
Gear
Globe
Home
ImportArrow
Layers
Login
Logout
MagnifyingGlass
MainComponent
Paperclip
Pencil
PieChart
Plus
PresentationChart
RedoArrow
Sparkles
Star
Stars
Ticket
TicketExpired
Timer
TimeReverse
TrendUp
UndoArrow
User
Users