ui-kit
All components, liveB

ui-kit

Shared components for Kuroko, Fuzen, EXT and the next tools. Built from the Figma “EXT System”, with light / dark, a blur mode for surfaces, and two motion feelings. Hover the ruler on the left to jump around.

Fuzen composer, rebuilt with the kit

WandaProjectsStudioContact

Films that move
the way you do.

1
section.hero › h1 AnnulerEsc
Category *

Draft restored

Priority
Screenshot
or ⌘V
Browser
Chrome 141
OS
macOS 15.6
Device
desktop
Viewport
1440 × 900
Page
/projects/wanda
Errors
2 in the console
⌘↵ to send
Foundations
01

Tokens

Tokens from the Figma variables, as CSS custom properties (--ui-*). Everything below switches with the toolbar.

Colors

Background
bg-canvas
bg-muted
bg-emphasis
bg-inverse
surface-raised
surface-overlay
Text
text-primary
text-secondary
text-tertiary
text-inverse
Border & fill
border-subtle
border-default
border-strong
border-focus
fill-hover
fill-active
Status
success-fg
success-bg
danger-fg
danger-bg
warning-fg
warning-bg
info-fg
info-bg

Type

SF Pro (system)
Heading H2--ui-text-h224 / 28 · 500
Heading H4--ui-text-h416 / 20 · 500
Body--ui-text-body14 / 20 · 400
Label L--ui-text-label-l14 / 14 · 500
Label M--ui-text-label-m12 / 12 · 500
Label S--ui-text-label-s10 / 10 · 500
Caption--ui-text-caption12 / 16 · 400

Spacing & radius

2
4
6
8
10
12
16
20
24
32
40
xs
sm
md
lg
xl
full

Motion

Active: smooth · move 500ms

Click the track. Smooth = expo-out, Snappy = light spring. Tune both live with “Tune”.

02

Icons

Figma

16px, 1.5px stroke, currentColor. Generated from the Figma export (pnpm icons). Click one to copy its name.

Set

32 icons
03

Surface

Panels, toolbars, popovers. The only element that turns to glass in Blur mode (translucent fill + backdrop-filter + light edge). Controls inside stay opaque, as in Figma.

Solid / Blur

Forced per side, whatever the toolbar says
Solid
Blur
Controls
04

Button

Figma

Pill button. Primary = the main action (one per view), Secondary = header actions, Ghost = tertiary actions. Hover and disabled through opacity or fill/hover, never blur. Press scales down with the motion preset (springs back in Snappy).

States

Pinned with data-force
DefaultHoverPressedFocusDisabledprimary
secondary
ghost

Sizes & icons

M 32px · S 28px
M
S
Icon right
Icon only
Icon only S
Link

Shape

shape="pill" (default) · shape="rounded"
PrimarySecondaryGhost · hoverSize SIcon onlypill
rounded

Live

Click and hold to feel the press
05

Input

Figma

36px text field. Focus = 1.5px border/focus outline (no shadow, no blur). Error = danger outline + helper in danger. The whole field focuses its input on click.

States

Default
Hover
Focus
Filled
Disabled

Texte d’aide

Error

Live

Try typing anything

Visible to everyone in the workspace

06

Textarea

A multiline Input: same field, same focus ring. It grows with its content (the height eases with the move curve) between rows and maxRows. With a maxlength, a ring fills as you type, the count slides in at 80%, and the ring bumps at the limit.

States

Default
Focus

Add a few more details

Error
Disabled

Live

Type past a line, and toward the limit

Grows up to 8 lines

07

Select

An Input-looking trigger that opens a listbox (Figma Menu: raised surface, border, no blur). The chevron turns, the list opens from the trigger, one highlight glides between rows and starts on the selected one. ↑ ↓ Home End, or type to jump.

States

Low
Normal
High
Critical
Placeholder
Low
Normal
High
Critical
Value
Low
Normal
High
Critical
Disabled

Live

Low
Normal
High
Critical

Value: normal

none
power1.out
power2.out
power3.out
power4.out
expo.out
back.out(1.7)
elastic.out(1, 0.3)
circ.inOut
sine.inOut
08

Toggle

Figma

28×16 switch for preferences (theme, public sharing). The knob glides with the move curve and stretches while pressed.

States

Off
On
Pressed
Focus
Disabled off
Disabled on

Live

The first one drives the page theme
09

Range

Apple-style sliders. Dragging is relative (grab anywhere, nothing jumps), a tap eases to that point, pulling past an end stretches it like rubber and it springs back. Pressing grows it; steps show as dots and snap. Icon and value invert where the fill passes.

Pill

Control Center style
Brightness64%
Stagger40ms
Opacity100%

Thin

With a knob; the value floats above while dragging
Duration0.80s
Stagger40ms
10

Inline edit

Rename in place: the text is the field. Click a name: a field grows out around it, the name is selected (without its extension), the width follows what you type. Enter folds the field back and the new name morphs from the old one, with a check; Esc cancels; a refused value shakes.

Folders

Duplicates are refused
  • 12 items
  • 19 items
  • 26 items
  • 33 items

Any typography

It takes the parent's font

11

Segmented

Figma

View switch (Grid / List) or pill tabs. Opaque track, never blurred. The selected pill is a single element that glides between items.

States

2 items
3 items
Icons
Size S

Glide vs stretch

thumb="stretch" · lag tunable in Tune (Segmented)
Glide (current)
Stretch
Best felt in Snappy.

Live

Arrow keys work too
12

Chip

Figma

Filter or tag (Figma Chip: selected = active filter). With a color, it becomes a category chip, our take on Fuzen's Bug / Design / Animation buttons: the dot is the category, selecting spreads its tint across the chip from the dot, and the dot grows into a check.

States

DefaultHoverPressedSelectedSelected · hoverNeutral
Color
Size S

Categories

One choice: mode="radio" in a radiogroup (Fuzen's composer)
Current theme
In a dark glass panel, like Fuzen's widget
Category *

Filters

Several choices: mode="toggle", size S, with a count
13

Drop zone

Figma

Figma Dropzone. Drag files over it: the dashes tighten and march, a light follows the pointer, the icon lifts, the title morphs. Drop: a ripple where you released, and each image flies from there into its slot, tilting as it lands. Uploads show a ring that closes into a check. Drag images from your desktop, or simulate a drop.

Images

v-model:items · @add
Overlays & motionPanels, menus, modals, drawers and morphs: how things appear, move and change shape.
14

Command palette

⌘K anywhere on this page. Jump to any component, switch theme / blur / motion, open the motion tuner, copy the Nuxt setup or the skill install command. Fuzzy search (try “drwr”, “dark”, “stag”), matched letters underlined, recent commands first. One highlight glides between rows, the list unfolds and eases to its new height, the chosen row flashes before the palette closes.

Palette

⌘K / Ctrl+K
⌘ K works everywhere on the page
Settings
Switch to dark theme
Turn blur on
Switch to snappy motion
Tune motion curves…
Open the bento view
Use the kit
Copy Nuxt setup (current settings)
Copy skill install command
Foundations
Tokens
Icons
Surface
Controls
Button
Input
Textarea
Select
Toggle
Range
Inline edit
Segmented
Chip
Drop zone
Overlays & motion
Command palette
Popover
Hint
Notification
Modal
Drawer
Morph
Tools
State switch
Split picker
↑↓ navigate↵ run⌘K
15

Popover

Anything that opens next to its trigger: menus, small panels (a mini modal), tooltips. Native popover in the top layer but kept in place in the DOM, so it inherits the theme around it. Opens from the trigger (scale + slide with the move curve), closes faster, flips up when there's no room below.

Menu

Figma Menu · gliding highlight · keyboard
Open it, hover, or use ↑ ↓ and Enter

Panel

A mini modal on its trigger: a Surface, glass in blur mode

Tooltip

Figma Tooltip · 500ms, then instant from one to the next
NouveauNCopier le lien⌘LTéléchargerFiltrerRéglages
16

Hint

A small popover that explains, in words, what the selected thing does: anchored to any element, opened by a shortcut or a click, with mini chips inside the sentence (a property with its icon, a duration drawn as an arc, an ease drawn as its curve). Hover the chips: the arc fills in that duration, a dot runs the curve with that ease.

Kuroko: select a tween, press H

Click a bar · H toggles · ← → move the selection · Esc
0s0.5s1s1.5s2s2.5s
.hero-title
.hero-image
.nav a
.cta

H explain the selected tween

.hero-title rises into view, line by line: Y from 100% to 0% and opacity from 0 to 1.

Lasts 0.9s with power3.out, which starts fast and slows down as it lands.

Starts at the beginning of the timeline, with 0.08s between lines.

Click version

The same hint on a trigger
Motion: smooth

Smooth: everything follows expo.out over 0.5s. Movement leaves fast and lands softly, never overshooting.

17

Notification

Figma

Figma Toast: inverse, opaque, at the bottom. Toasts stack (the newest in front, the others peek behind), hovering unfolds the stack and pauses the timers, swiping one sideways throws it away. A toast can change in place: loading → success or error, the box, the icon and the text morph.

Tones

useToast().show / success / error

Loading → result

useToast().promise

Stack

Then hover the stack, or swipe a toast away
19

Drawer

Sheets that you can throw. The sheet follows the pointer 1:1 (rubber band past the ends), the grip stretches with your speed, and on release it settles open or closed from position and velocity, carrying the gesture's speed into a spring in Snappy. Everything reads one number, --ui-drawer-p, also written on the parent: the page behind scales, dims and rounds in plain CSS.

Bottom sheet

Drag the strip up, flick it down · or use the button
Board

The page behind uses scale(1 - p × 0.07), a radius and a dim from --ui-drawer-p: no JS on its side.

Side panel

An inspector that docks in and pushes the content · drag its edge
Timeline
20

Morph

One container, several states: UiMorph tweens its size from one content to the next with the move curve while the contents cross-fade (the old one leaves fast, the new one arrives slightly blurred). Radius and colors per state are plain CSS on [data-state].

Button → form

The button becomes the field it asks for

Status

A pill that grows into what's happening, then shrinks back
Saved

Toolbar → composer

Fuzen: the toolbar turns into the ticket form
Pin an elementPSelect a zoneZTickets
ToolsProposals for Kuroko and Fuzen, built from the kit.
21

State switch

A proposal for Kuroko's states bar. Click a name to edit that state (the element jumps to it, like in Kuroko). ● is where the page is; ▶ plays a state from there. The chip fills with the real animation's progress (the switch reads the WAAPI / GSAP animation it gets back), and ● lands when the element does.

Proposal

1-9 edit · ⇧1-9 play (focus the switch first)
Navbar

Editing open · page in closed

22

Split picker

A proposal for Kuroko's Split section: instead of three rows of buttons, you edit the split on the text itself. Drag the rail to change the granularity, toggle the mask under a stop, drag the stagger strip, click a piece to stagger from it, and pick properties from chips that preview themselves. Every change replays with the active motion preset, and the GSAP code comes out at the bottom.

Proposal

Panel sized like DialKit (360px)
Splitwords · mask lines · 40ms start
Design is not just what it looks like. Design is how it works.
Split by
Lines
Words
Chars
Stagger 40ms
drag ↔

Or click a word in the text to start from it.

Animate
v-model
{
  "animate": "words",
  "mask": "lines",
  "props": [
    "y",
    "opacity"
  ],
  "stagger": {
    "each": 0.04,
    "from": "start"
  }
}