@vibes.diy/prompts 14.3.202 → 14.3.204
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/llms/access.md +4 -4
- package/llms/backend.md +1 -1
- package/llms/blockly.md +2 -2
- package/llms/bluesky.md +1 -1
- package/llms/board-games.md +95 -1
- package/llms/calendar.md +1 -1
- package/llms/callai.md +4 -4
- package/llms/connections.md +1 -1
- package/llms/create-vibe.md +3 -3
- package/llms/fireproof.md +7 -7
- package/llms/github.md +6 -2
- package/llms/image-gen.md +2 -2
- package/llms/index.d.ts +28 -28
- package/llms/index.js +84 -84
- package/llms/index.js.map +1 -1
- package/llms/maps.js +14 -2
- package/llms/maps.js.map +1 -1
- package/llms/maps.md +212 -9
- package/llms/match-style.md +1 -1
- package/llms/motion.md +7 -7
- package/llms/p5.md +1 -1
- package/llms/physics.md +2 -2
- package/llms/reskin.js +8 -1
- package/llms/reskin.js.map +1 -1
- package/llms/reskin.md +99 -20
- package/llms/richtext.md +5 -5
- package/llms/spotify.md +1 -1
- package/llms/stripe-subscriptions.md +1 -1
- package/llms/stripe.md +3 -3
- package/llms/strudel.md +3 -3
- package/llms/three-js.md +4 -4
- package/llms/touch-games.js +1 -1
- package/llms/touch-games.js.map +1 -1
- package/llms/touch-games.md +3 -3
- package/llms/ui-blog.d.ts +2 -0
- package/llms/ui-blog.js +7 -0
- package/llms/ui-blog.js.map +1 -0
- package/llms/{pouf-blog.md → ui-blog.md} +10 -10
- package/llms/ui-booking.d.ts +2 -0
- package/llms/ui-booking.js +7 -0
- package/llms/ui-booking.js.map +1 -0
- package/llms/{pouf-booking.md → ui-booking.md} +8 -8
- package/llms/ui-calendar.d.ts +2 -0
- package/llms/ui-calendar.js +7 -0
- package/llms/ui-calendar.js.map +1 -0
- package/llms/{pouf-calendar.md → ui-calendar.md} +5 -5
- package/llms/ui-chat.d.ts +2 -0
- package/llms/ui-chat.js +7 -0
- package/llms/ui-chat.js.map +1 -0
- package/llms/{pouf-chat.md → ui-chat.md} +4 -4
- package/llms/ui-contact.d.ts +2 -0
- package/llms/ui-contact.js +7 -0
- package/llms/ui-contact.js.map +1 -0
- package/llms/{pouf-contact.md → ui-contact.md} +7 -7
- package/llms/ui-course.d.ts +2 -0
- package/llms/ui-course.js +7 -0
- package/llms/ui-course.js.map +1 -0
- package/llms/{pouf-course.md → ui-course.md} +9 -9
- package/llms/ui-crm.d.ts +2 -0
- package/llms/ui-crm.js +7 -0
- package/llms/ui-crm.js.map +1 -0
- package/llms/{pouf-crm.md → ui-crm.md} +5 -5
- package/llms/ui-dashboard.d.ts +2 -0
- package/llms/ui-dashboard.js +7 -0
- package/llms/ui-dashboard.js.map +1 -0
- package/llms/{pouf-dashboard.md → ui-dashboard.md} +7 -7
- package/llms/ui-editorial.d.ts +2 -0
- package/llms/ui-editorial.js +7 -0
- package/llms/ui-editorial.js.map +1 -0
- package/llms/{pouf-editorial.md → ui-editorial.md} +5 -5
- package/llms/ui-event.d.ts +2 -0
- package/llms/ui-event.js +7 -0
- package/llms/ui-event.js.map +1 -0
- package/llms/{pouf-event.md → ui-event.md} +5 -5
- package/llms/ui-feed.d.ts +2 -0
- package/llms/ui-feed.js +7 -0
- package/llms/ui-feed.js.map +1 -0
- package/llms/{pouf-feed.md → ui-feed.md} +5 -5
- package/llms/ui-game.d.ts +2 -0
- package/llms/ui-game.js +7 -0
- package/llms/ui-game.js.map +1 -0
- package/llms/{pouf-game.md → ui-game.md} +6 -6
- package/llms/ui-inbox.d.ts +2 -0
- package/llms/ui-inbox.js +7 -0
- package/llms/ui-inbox.js.map +1 -0
- package/llms/{pouf-inbox.md → ui-inbox.md} +5 -5
- package/llms/ui-inventory.d.ts +2 -0
- package/llms/ui-inventory.js +7 -0
- package/llms/ui-inventory.js.map +1 -0
- package/llms/{pouf-inventory.md → ui-inventory.md} +5 -5
- package/llms/ui-kanban.d.ts +2 -0
- package/llms/ui-kanban.js +7 -0
- package/llms/ui-kanban.js.map +1 -0
- package/llms/{pouf-kanban.md → ui-kanban.md} +5 -5
- package/llms/ui-landing.d.ts +2 -0
- package/llms/ui-landing.js +7 -0
- package/llms/ui-landing.js.map +1 -0
- package/llms/{pouf-landing.md → ui-landing.md} +6 -6
- package/llms/ui-login.d.ts +2 -0
- package/llms/ui-login.js +7 -0
- package/llms/ui-login.js.map +1 -0
- package/llms/{pouf-login.md → ui-login.md} +7 -7
- package/llms/ui-music.d.ts +2 -0
- package/llms/ui-music.js +7 -0
- package/llms/ui-music.js.map +1 -0
- package/llms/{pouf-music.md → ui-music.md} +6 -6
- package/llms/ui-onboarding.d.ts +2 -0
- package/llms/ui-onboarding.js +7 -0
- package/llms/ui-onboarding.js.map +1 -0
- package/llms/{pouf-onboarding.md → ui-onboarding.md} +5 -5
- package/llms/ui-pricing.d.ts +2 -0
- package/llms/ui-pricing.js +7 -0
- package/llms/ui-pricing.js.map +1 -0
- package/llms/{pouf-pricing.md → ui-pricing.md} +5 -5
- package/llms/ui-profile.d.ts +2 -0
- package/llms/ui-profile.js +7 -0
- package/llms/ui-profile.js.map +1 -0
- package/llms/{pouf-profile.md → ui-profile.md} +4 -4
- package/llms/ui-quiz.d.ts +2 -0
- package/llms/ui-quiz.js +7 -0
- package/llms/ui-quiz.js.map +1 -0
- package/llms/{pouf-quiz.md → ui-quiz.md} +6 -6
- package/llms/ui-settings.d.ts +2 -0
- package/llms/ui-settings.js +7 -0
- package/llms/ui-settings.js.map +1 -0
- package/llms/{pouf-settings.md → ui-settings.md} +5 -5
- package/llms/ui-storefront.d.ts +2 -0
- package/llms/ui-storefront.js +7 -0
- package/llms/ui-storefront.js.map +1 -0
- package/llms/{pouf-storefront.md → ui-storefront.md} +9 -9
- package/llms/ui-support.d.ts +2 -0
- package/llms/ui-support.js +7 -0
- package/llms/ui-support.js.map +1 -0
- package/llms/{pouf-support.md → ui-support.md} +5 -5
- package/llms/ui-testimonials.d.ts +2 -0
- package/llms/ui-testimonials.js +7 -0
- package/llms/ui-testimonials.js.map +1 -0
- package/llms/{pouf-testimonials.md → ui-testimonials.md} +6 -6
- package/llms/ui-todo.d.ts +2 -0
- package/llms/ui-todo.js +7 -0
- package/llms/ui-todo.js.map +1 -0
- package/llms/{pouf-todo.md → ui-todo.md} +5 -5
- package/llms/ui-weather.d.ts +2 -0
- package/llms/ui-weather.js +7 -0
- package/llms/ui-weather.js.map +1 -0
- package/llms/{pouf-weather.md → ui-weather.md} +5 -5
- package/llms/use-vibe.md +4 -4
- package/llms/use-viewer.md +5 -5
- package/llms/voxel.md +1 -1
- package/llms/web-audio.md +49 -26
- package/llms/worlds.md +3 -3
- package/llms/youtube.md +1 -1
- package/package.json +5 -5
- package/system-prompt-initial-instant.md +3 -3
- package/system-prompt.md +3 -3
- package/themes/colorsets.js +7 -7
- package/themes/colorsets.js.map +1 -1
- package/themes/looks/pouf/brief.md +87 -85
- package/themes/looks/pouf/catalog.generated.d.ts +1 -1
- package/themes/looks/pouf/catalog.generated.js +47 -17
- package/themes/looks/pouf/catalog.generated.js.map +1 -1
- package/themes/looks/pouf/variety.js +4 -4
- package/themes/looks/pouf/variety.js.map +1 -1
- package/llms/pouf-blog.d.ts +0 -2
- package/llms/pouf-blog.js +0 -6
- package/llms/pouf-blog.js.map +0 -1
- package/llms/pouf-booking.d.ts +0 -2
- package/llms/pouf-booking.js +0 -6
- package/llms/pouf-booking.js.map +0 -1
- package/llms/pouf-calendar.d.ts +0 -2
- package/llms/pouf-calendar.js +0 -6
- package/llms/pouf-calendar.js.map +0 -1
- package/llms/pouf-chat.d.ts +0 -2
- package/llms/pouf-chat.js +0 -6
- package/llms/pouf-chat.js.map +0 -1
- package/llms/pouf-contact.d.ts +0 -2
- package/llms/pouf-contact.js +0 -6
- package/llms/pouf-contact.js.map +0 -1
- package/llms/pouf-course.d.ts +0 -2
- package/llms/pouf-course.js +0 -6
- package/llms/pouf-course.js.map +0 -1
- package/llms/pouf-crm.d.ts +0 -2
- package/llms/pouf-crm.js +0 -6
- package/llms/pouf-crm.js.map +0 -1
- package/llms/pouf-dashboard.d.ts +0 -2
- package/llms/pouf-dashboard.js +0 -6
- package/llms/pouf-dashboard.js.map +0 -1
- package/llms/pouf-editorial.d.ts +0 -2
- package/llms/pouf-editorial.js +0 -6
- package/llms/pouf-editorial.js.map +0 -1
- package/llms/pouf-event.d.ts +0 -2
- package/llms/pouf-event.js +0 -6
- package/llms/pouf-event.js.map +0 -1
- package/llms/pouf-feed.d.ts +0 -2
- package/llms/pouf-feed.js +0 -6
- package/llms/pouf-feed.js.map +0 -1
- package/llms/pouf-game.d.ts +0 -2
- package/llms/pouf-game.js +0 -6
- package/llms/pouf-game.js.map +0 -1
- package/llms/pouf-inbox.d.ts +0 -2
- package/llms/pouf-inbox.js +0 -6
- package/llms/pouf-inbox.js.map +0 -1
- package/llms/pouf-inventory.d.ts +0 -2
- package/llms/pouf-inventory.js +0 -6
- package/llms/pouf-inventory.js.map +0 -1
- package/llms/pouf-kanban.d.ts +0 -2
- package/llms/pouf-kanban.js +0 -6
- package/llms/pouf-kanban.js.map +0 -1
- package/llms/pouf-landing.d.ts +0 -2
- package/llms/pouf-landing.js +0 -6
- package/llms/pouf-landing.js.map +0 -1
- package/llms/pouf-login.d.ts +0 -2
- package/llms/pouf-login.js +0 -6
- package/llms/pouf-login.js.map +0 -1
- package/llms/pouf-music.d.ts +0 -2
- package/llms/pouf-music.js +0 -6
- package/llms/pouf-music.js.map +0 -1
- package/llms/pouf-onboarding.d.ts +0 -2
- package/llms/pouf-onboarding.js +0 -6
- package/llms/pouf-onboarding.js.map +0 -1
- package/llms/pouf-pricing.d.ts +0 -2
- package/llms/pouf-pricing.js +0 -6
- package/llms/pouf-pricing.js.map +0 -1
- package/llms/pouf-profile.d.ts +0 -2
- package/llms/pouf-profile.js +0 -6
- package/llms/pouf-profile.js.map +0 -1
- package/llms/pouf-quiz.d.ts +0 -2
- package/llms/pouf-quiz.js +0 -6
- package/llms/pouf-quiz.js.map +0 -1
- package/llms/pouf-settings.d.ts +0 -2
- package/llms/pouf-settings.js +0 -6
- package/llms/pouf-settings.js.map +0 -1
- package/llms/pouf-storefront.d.ts +0 -2
- package/llms/pouf-storefront.js +0 -6
- package/llms/pouf-storefront.js.map +0 -1
- package/llms/pouf-support.d.ts +0 -2
- package/llms/pouf-support.js +0 -6
- package/llms/pouf-support.js.map +0 -1
- package/llms/pouf-testimonials.d.ts +0 -2
- package/llms/pouf-testimonials.js +0 -6
- package/llms/pouf-testimonials.js.map +0 -1
- package/llms/pouf-todo.d.ts +0 -2
- package/llms/pouf-todo.js +0 -6
- package/llms/pouf-todo.js.map +0 -1
- package/llms/pouf-weather.d.ts +0 -2
- package/llms/pouf-weather.js +0 -6
- package/llms/pouf-weather.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
This look is a room full of cushions. `@vibes.diy/ui` ships every surface, control and layout this look needs, each carrying the cushion, the corner, the ink and the press. An app is composed from those components and their props; the room's colours arrive through them, so a palette change restyles the app without a line of it changing.
|
|
2
2
|
|
|
3
3
|
## Composition
|
|
4
4
|
|
|
5
5
|
One view does one job. Let everything on screen serve it; a second job gets its own view, tab or sheet. Content lives on cushions: a group of related things sits in a `Card`, a list is one `RowCard` per item, a headline number is a `Stat`, an empty list is an `Empty`, and the closing ask on a page is a `CTA`. Those are the only raised surfaces; if something needs to float, it is a `Card`.
|
|
6
6
|
|
|
7
|
-
Every view has exactly one lead: the single element wearing `tone="purple"`, usually the primary `Button`. Most tone-taking components default to the lead — `Button`, `Badge`, `Dot`, `
|
|
7
|
+
Every view has exactly one lead: the single element wearing `tone="purple"`, usually the primary `Button`. Most tone-taking components default to the lead — `Button`, `Badge`, `Dot`, `IconTile`, `Avatar`, `Progress`, `CTA`, `NavLink`, `ToggleGroup`, chart series — so set `tone` explicitly on everything but the one lead. An `Empty` may carry its own `purple` `IconTile`: it shows only when the view holds nothing else. A second button takes `variant="quiet"` or a meaning tone (`down` for delete). Three components default to an untaught tone and always get one: `Tabs` and `Segmented` take `tone="info"`, `Highlight` takes `tone="orange"`. `Confirm` defaults to the decorative fill, so a destructive ask passes `tone="down"`.
|
|
8
8
|
|
|
9
9
|
Open a view with a `Heading level={1}`, then the job; each section gets a `Heading level={2}`, and every run of words is `Text`, `muted` for metadata such as a timestamp.
|
|
10
10
|
|
|
@@ -24,7 +24,7 @@ A tone names a meaning, not a colour. Choose it by what the thing says:
|
|
|
24
24
|
- `info` — a neutral notice: a tip, a count, a status with no verdict.
|
|
25
25
|
- `idle` — quiet and passive: paused, archived, not started.
|
|
26
26
|
- `purple` — this room's lead colour, whatever its hue. It marks the one call to action in a view.
|
|
27
|
-
- `orange` — the decorative fill, for ornament only: a `Highlight` on one word,
|
|
27
|
+
- `orange` — the decorative fill, for ornament only: a `Highlight` on one word, an `IconTile` that fronts a feature. Never a verdict.
|
|
28
28
|
|
|
29
29
|
Tone names are slot names, not hues: another room may paint `purple` teal, and the meaning holds.
|
|
30
30
|
|
|
@@ -32,88 +32,90 @@ Tone names are slot names, not hues: another room may paint `purple` teal, and t
|
|
|
32
32
|
|
|
33
33
|
Every control below exists; use it, never a hand-built element.
|
|
34
34
|
|
|
35
|
-
<!--
|
|
36
|
-
|
|
37
|
-
- `AlertBell` (`@vibes.diy/
|
|
38
|
-
- `Badge` (`@vibes.diy/
|
|
39
|
-
- `
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
- `
|
|
44
|
-
- `
|
|
45
|
-
- `
|
|
46
|
-
- `
|
|
47
|
-
- `
|
|
48
|
-
- `
|
|
49
|
-
- `
|
|
50
|
-
- `
|
|
51
|
-
- `
|
|
52
|
-
- `
|
|
53
|
-
- `
|
|
54
|
-
- `
|
|
55
|
-
- `
|
|
56
|
-
- `
|
|
57
|
-
- `
|
|
58
|
-
- `Input` (`@vibes.diy/
|
|
59
|
-
- `Metric` (`@vibes.diy/
|
|
60
|
-
- `ModeBanner` (`@vibes.diy/
|
|
61
|
-
- `NavLink` (`@vibes.diy/
|
|
62
|
-
- `Navbar` (`@vibes.diy/
|
|
63
|
-
- `NumberInput` (`@vibes.diy/
|
|
64
|
-
- `Pagination` (`@vibes.diy/
|
|
65
|
-
- `Row` (`@vibes.diy/
|
|
66
|
-
- `RowCard` (`@vibes.diy/
|
|
67
|
-
- `Segmented` (`@vibes.diy/
|
|
68
|
-
- `Shell` (`@vibes.diy/
|
|
69
|
-
- `Sidebar` (`@vibes.diy/
|
|
70
|
-
- `Skeleton` (`@vibes.diy/
|
|
71
|
-
- `Spacer` (`@vibes.diy/
|
|
72
|
-
- `Stack` (`@vibes.diy/
|
|
73
|
-
- `Stat` (`@vibes.diy/
|
|
74
|
-
- `Status` (`@vibes.diy/
|
|
75
|
-
- `Table` (`@vibes.diy/
|
|
76
|
-
- `Text` (`@vibes.diy/
|
|
77
|
-
- `Textarea` (`@vibes.diy/
|
|
78
|
-
- `Accordion` (`@vibes.diy/
|
|
79
|
-
- `AspectRatio` (`@vibes.diy/
|
|
80
|
-
- `Avatar` (`@vibes.diy/
|
|
81
|
-
- `BottomNav` (`@vibes.diy/
|
|
82
|
-
- `Checkbox` (`@vibes.diy/
|
|
83
|
-
- `Collapsible` (`@vibes.diy/
|
|
84
|
-
- `Combobox` (`@vibes.diy/
|
|
85
|
-
- `Confirm` (`@vibes.diy/
|
|
86
|
-
- `ContextMenu` (`@vibes.diy/
|
|
87
|
-
- `Dialog` (`@vibes.diy/
|
|
88
|
-
- `DropdownMenu` (`@vibes.diy/
|
|
89
|
-
- `HoverCard` (`@vibes.diy/
|
|
90
|
-
- `Menubar` (`@vibes.diy/
|
|
91
|
-
- `
|
|
92
|
-
- `
|
|
93
|
-
- `
|
|
94
|
-
- `
|
|
95
|
-
- `
|
|
96
|
-
- `
|
|
97
|
-
- `
|
|
98
|
-
- `
|
|
99
|
-
- `
|
|
100
|
-
- `
|
|
101
|
-
- `
|
|
102
|
-
- `
|
|
103
|
-
- `
|
|
104
|
-
- `
|
|
105
|
-
- `
|
|
106
|
-
- `
|
|
107
|
-
- `
|
|
108
|
-
- `
|
|
109
|
-
- `
|
|
110
|
-
|
|
111
|
-
|
|
35
|
+
<!-- ui-catalog:start -->
|
|
36
|
+
|
|
37
|
+
- `AlertBell` (`@vibes.diy/ui`) — A bell button with an unread count that opens the session's alert history. Props: `alerts` (required) AlertBellItem[]; `unread` (required) number; `connected` (required); `onOpen` (required) () => void
|
|
38
|
+
- `Badge` (`@vibes.diy/ui`) — A small tonal label for a count, category or state. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
39
|
+
- `Breadcrumb` (`@vibes.diy/ui`) — Shows where the current page sits in a hierarchy, with links back up. Props: `items` (required) BreadcrumbItem[]
|
|
40
|
+
- `Button` (`@vibes.diy/ui`) — The action button; give one primary action per area. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `block`; `disabled`; `loading`; `type` button|submit; `label` string; `tint` string
|
|
41
|
+
- `CTA` (`@vibes.diy/ui`) — A call-to-action banner: a big tonal cushion with a headline and an action. Props: `title` (required) string; `description` string; `action` (required) ReactNode; `tone` purple (lead)|pink|blue|mint|yellow|surface
|
|
42
|
+
- `Card` (`@vibes.diy/ui`) — The raised surface that groups related content into a panel. Props: `variant` default|flush|tight; `motion` none|lift|tilt-left|tilt-right
|
|
43
|
+
- `Dot` (`@vibes.diy/ui`) — A status dot. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
44
|
+
- `Empty` (`@vibes.diy/ui`) — The empty state for a list or panel with nothing in it yet. Props: `icon` IconLike; `title` (required) string
|
|
45
|
+
- `ErrorBoundary` (`@vibes.diy/ui`) — Catches render crashes so one broken part can't blank the whole page. Props: `name` (required) string; `resetKey` string
|
|
46
|
+
- `ErrorNote` (`@vibes.diy/ui`) — An inline message that says a request or action failed.
|
|
47
|
+
- `Eyebrow` (`@vibes.diy/ui`) — A small uppercase label above a section heading.
|
|
48
|
+
- `Field` (`@vibes.diy/ui`) — Wraps a form control with its label, hint and error text. Props: `label` (required) string; `children` (required) (id: string, describedBy: string | undefined) => ReactNode; `hint` string; `error` string
|
|
49
|
+
- `Figure` (`@vibes.diy/ui`) — An image, framed in clay. Props: `src` (required) string; `alt` (required) string; `width` (required) number; `height` (required) number
|
|
50
|
+
- `Footer` (`@vibes.diy/ui`) — A site footer on one big cushion: brand block plus columns of links, with an optional bottom note. Props: `brand` (required) ReactNode; `tagline` string
|
|
51
|
+
- `Freshness` (`@vibes.diy/ui`) — Speaks only when the data on screen can no longer be trusted. Props: `at` (required) number; `isError`
|
|
52
|
+
- `Grid` (`@vibes.diy/ui`) — Lays children out in columns, or main plus side, stacking on narrow screens. Props: `cols` 2|3|4|sidebar; `gap` 1|2|3|4|5|6
|
|
53
|
+
- `Heading` (`@vibes.diy/ui`) — A page or section heading at level 1, 2 or 3. Props: `level` 1|2|3
|
|
54
|
+
- `Highlight` (`@vibes.diy/ui`) — Puts a tonal swatch behind a word or short phrase to make it pop. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
55
|
+
- `Icon` (`@vibes.diy/ui`) — A named glyph from the built-in icon set. Props: `name` (required) up|down|warn|info|idle|overview|chart|log|channels|activity|lab|history|performance|settings|database|menu|flat|ok|fail|off|live|draft|target|alerts|add|remove|search|close|expand|prev|next|photo|heart|heart-filled|comment|play|pause|rewind|forward|sun|cloud|rain|star|calendar|clock|user|users|mail|lock|send|home|trophy|flame|sparkle|music|cart|tag|dots|sword|shield|wand|smile|card|pin|wind|drop; `size` sm|md|lg; `label` string
|
|
56
|
+
- `IconButton` (`@vibes.diy/ui`) — A square, labelled icon action. Props: `icon` (required) ReactNode; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `disabled`; `loading`; `type` button|submit; `tint` string
|
|
57
|
+
- `IconTile` (`@vibes.diy/ui`) — A tonal icon tile that fronts a stat, list row or feature. Props: `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `label` string
|
|
58
|
+
- `Input` (`@vibes.diy/ui`) — A single-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `type` string; `autoComplete` string; `inputMode` none|search|email|tel|text|url|numeric|decimal; `autoCapitalize` string; `spellCheck`; `required`; `mono`; `invalid`; `disabled`; `label` string; `bare`
|
|
59
|
+
- `Metric` (`@vibes.diy/ui`) — A labelled readout: small muted label, value beneath. Props: `label` (required) string; `value` (required) ReactNode; `num`; `mono`
|
|
60
|
+
- `ModeBanner` (`@vibes.diy/ui`) — The draft/live (or any two-mode) indicator. Props: `live` (required)
|
|
61
|
+
- `NavLink` (`@vibes.diy/ui`) — A navigation link that marks itself active on the current path. Props: `href` (required) string; `currentPath` (required) string; `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
62
|
+
- `Navbar` (`@vibes.diy/ui`) — A top navigation bar on a floating cushion. Props: `brand` (required) ReactNode; `label` string
|
|
63
|
+
- `NumberInput` (`@vibes.diy/ui`) — A numeric field with step buttons; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `step` number; `min` number; `max` number; `id` string; `describedBy` string; `placeholder` string; `invalid`; `disabled`; `label` string
|
|
64
|
+
- `Pagination` (`@vibes.diy/ui`) — Previous and next page controls with a page indicator for long lists. Props: `page` (required) number; `total` (required) number; `onChange` (required) (page: number) => void
|
|
65
|
+
- `Row` (`@vibes.diy/ui`) — Lays children out horizontally with a gap, alignment and wrapping. Props: `gap` 1|2|3|4|5|6; `align` center|top; `justify` start|center|between|end; `wrap`
|
|
66
|
+
- `RowCard` (`@vibes.diy/ui`) — One raised row per item in a list; clickable when given onClick. Props: `selected`
|
|
67
|
+
- `Segmented` (`@vibes.diy/ui`) — A mutually-exclusive choice: grid vs list, draft vs live, and similar. Props: `value` (required) T; `onChange` (required) (value: T) => void; `options` (required) SegmentedOption<T>[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
68
|
+
- `Shell` (`@vibes.diy/ui`) — The page frame: a sidebar column beside the main content.
|
|
69
|
+
- `Sidebar` (`@vibes.diy/ui`) — The side navigation column inside Shell. Props: `mobile` show|hide
|
|
70
|
+
- `Skeleton` (`@vibes.diy/ui`) — A loading placeholder shaped like the text, row or card it stands in for. Props: `variant` text|row|card; `count` number
|
|
71
|
+
- `Spacer` (`@vibes.diy/ui`) — Pushes the items after it to the far end of a Row.
|
|
72
|
+
- `Stack` (`@vibes.diy/ui`) — Stacks children vertically with an even gap. Props: `gap` 1|2|3|4|5|6
|
|
73
|
+
- `Stat` (`@vibes.diy/ui`) — A headline figure on its own cushion. Props: `label` (required) string; `value` (required) string; `icon` (required) IconLike; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
74
|
+
- `Status` (`@vibes.diy/ui`) — A labelled status dot that turns unknown when its reading goes stale. Props: `label` (required) string; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative); `at` number
|
|
75
|
+
- `Table` (`@vibes.diy/ui`) — A data table with typed columns; rows can be clickable. Props: `columns` (required) TableColumn<T>[]; `rows` (required) T[]; `getKey` (required) (row: T) => string
|
|
76
|
+
- `Text` (`@vibes.diy/ui`) — Body text: size, muted, numeric and monospace variants. Props: `size` sm|md; `muted`; `num`; `mono`; `truncate`
|
|
77
|
+
- `Textarea` (`@vibes.diy/ui`) — A multi-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `autoComplete` string; `spellCheck`; `required`; `rows` number; `mono`; `invalid`; `disabled`; `label` string
|
|
78
|
+
- `Accordion` (`@vibes.diy/ui/interactive`) — A stack of expandable sections with one open at a time. Props: `items` (required) AccordionItem[]; `defaultValue` string
|
|
79
|
+
- `AspectRatio` (`@vibes.diy/ui/interactive`) — Holds media at a fixed width-to-height ratio. Props: `ratio` number
|
|
80
|
+
- `Avatar` (`@vibes.diy/ui/interactive`) — A person's picture, with initials or an icon when there is none. Props: `src` string; `alt` string; `fallback` string; `icon` IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg
|
|
81
|
+
- `BottomNav` (`@vibes.diy/ui/interactive`) — Mobile bottom navigation. Props: `primary` (required) NavItem[]; `groups` (required) NavGroup[]; `currentPath` (required) string
|
|
82
|
+
- `Checkbox` (`@vibes.diy/ui/interactive`) — A labelled on/off checkbox. Props: `checked` (required) boolean | "indeterminate"; `onChange` (required) (checked: boolean | "indeterminate") => void; `id` string; `disabled`; `label` string; `hideLabel`
|
|
83
|
+
- `Collapsible` (`@vibes.diy/ui/interactive`) — A single section that shows or hides its content from a trigger. Props: `trigger` (required) ReactNode; `open`
|
|
84
|
+
- `Combobox` (`@vibes.diy/ui/interactive`) — A text field with suggestions to pick or type; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) string[]; `loading`; `error` string; `id` string; `describedBy` string; `placeholder` string; `mono`; `label` string
|
|
85
|
+
- `Confirm` (`@vibes.diy/ui/interactive`) — Wraps the button that opens it; asks to confirm an irreversible action such as a delete. Props: `title` (required) string; `body` (required) string; `confirmLabel` (required) string; `cancelLabel` (required) string; `onConfirm` (required) () => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `loading`
|
|
86
|
+
- `ContextMenu` (`@vibes.diy/ui/interactive`) — A menu of actions that opens on right-click or long-press. Props: `items` (required) (MenuEntry | "separator")[]
|
|
87
|
+
- `Dialog` (`@vibes.diy/ui/interactive`) — A modal window for a focused task or form. Props: `trigger` (required) ReactNode; `title` (required) string; `description` string; `open`; `size` md|lg
|
|
88
|
+
- `DropdownMenu` (`@vibes.diy/ui/interactive`) — A menu of actions that opens from a trigger button. Props: `items` (required) ("separator" | MenuItem)[]; `label` string
|
|
89
|
+
- `HoverCard` (`@vibes.diy/ui/interactive`) — A preview card that appears on hover over its trigger. Props: `content` (required) ReactNode; `side` top|right|bottom|left; `align` start|center|end
|
|
90
|
+
- `Menubar` (`@vibes.diy/ui/interactive`) — An application menu bar (File / Edit / View…). Props: `menus` (required) MenubarMenu[]
|
|
91
|
+
- `Pad` (`@vibes.diy/ui/interactive`) — A square instrument pad that toggles on and off, with a playhead light and beat-group shading. Props: `on` (required); `onPress` (required) () => void; `label` (required) string; `playhead`; `downbeat`; `group` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `disabled`
|
|
92
|
+
- `Progress` (`@vibes.diy/ui/interactive`) — A progress bar for a value out of a maximum. Props: `value` (required) number; `max` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `label` string
|
|
93
|
+
- `RadioGroup` (`@vibes.diy/ui/interactive`) — A labelled set of options where exactly one is chosen. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) RadioOption[]; `label` (required) string; `disabled`
|
|
94
|
+
- `ScrollArea` (`@vibes.diy/ui/interactive`) — A fixed-height region that scrolls its own content. Props: `maxHeight` string
|
|
95
|
+
- `Select` (`@vibes.diy/ui/interactive`) — A dropdown for picking one option; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) SelectOption[]; `id` string; `describedBy` string; `placeholder` string; `disabled`; `label` string
|
|
96
|
+
- `Separator` (`@vibes.diy/ui/interactive`) — A thin divider line between groups of content.
|
|
97
|
+
- `Sheet` (`@vibes.diy/ui/interactive`) — A panel that slides in from the side for secondary tasks. Props: `title` (required) string; `description` string; `open`
|
|
98
|
+
- `Slider` (`@vibes.diy/ui/interactive`) — Picks a number in a range by dragging. Props: `value` (required) number[]; `onChange` (required) (value: number[]) => void; `min` number; `max` number; `step` number; `disabled`; `label` string
|
|
99
|
+
- `StepGrid` (`@vibes.diy/ui/interactive`) — One sequencer row of Pads with a moving playhead and beat groups, wrapping to two lines on a phone. Props: `steps` (required) readonly (number | boolean)[]; `onToggle` (required) (index: number) => void; `label` (required) string; `playhead` number; `groupSize` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
100
|
+
- `Switch` (`@vibes.diy/ui/interactive`) — A labelled on/off toggle for a setting that applies at once. Props: `checked` (required); `onChange` (required) (checked: boolean) => void; `id` string; `describedBy` string; `disabled`; `label` string
|
|
101
|
+
- `Tabs` (`@vibes.diy/ui/interactive`) — Switches between panels of content under one heading. Props: `tabs` (required) Tab[]; `value` (required) string; `onChange` (required) (value: string) => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
102
|
+
- `Toast` (`@vibes.diy/ui/interactive`) — One alert message with a severity and a dismiss button. Props: `id` (required) number; `severity` (required) critical|info; `onDismiss` (required) (id: number) => void
|
|
103
|
+
- `ToastViewport` (`@vibes.diy/ui/interactive`) — Renders a list of alert messages your app keeps in state. Props: `toasts` (required) ToastItem[]; `onDismiss` (required) (id: number) => void
|
|
104
|
+
- `Toaster` (`@vibes.diy/ui/interactive`) — Mount once in the app so toast() calls appear on screen.
|
|
105
|
+
- `ToggleGroup` (`@vibes.diy/ui/interactive`) — A row of toggle buttons where several can be on at once. Props: `value` (required) string[]; `onChange` (required) (value: string[]) => void; `options` (required) ToggleOption[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)
|
|
106
|
+
- `Tooltip` (`@vibes.diy/ui/interactive`) — Wraps an element with a short hint on hover or focus; needs a TooltipProvider above it. Props: `tip` (required) string
|
|
107
|
+
- `TooltipProvider` (`@vibes.diy/ui/interactive`) — Wrap the app once; every Tooltip must sit inside it.
|
|
108
|
+
- `AreaChart` (`@vibes.diy/ui/charts`) — An area chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`
|
|
109
|
+
- `BarChart` (`@vibes.diy/ui/charts`) — A bar chart of one or more series, optionally stacked. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`; `toneKey` string
|
|
110
|
+
- `LineChart` (`@vibes.diy/ui/charts`) — A line chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number
|
|
111
|
+
- `PieChart` (`@vibes.diy/ui/charts`) — A pie or donut chart of parts of a whole. Props: `data` (required) PieSlice[]; `height` number; `donut`; `labelled`
|
|
112
|
+
|
|
113
|
+
<!-- ui-catalog:end -->
|
|
112
114
|
|
|
113
115
|
What the lines above leave out:
|
|
114
116
|
|
|
115
|
-
- A grid of things to tap (a week, a month's dates, a crossword, a keypad, a swatch) is a grid `div` of square `IconButton`s; seven across is `grid-cols-7`, never a `Row`. Each cell wears its state as props (`variant="solid"` on, `"quiet"` off, a meaning `tone`, `aria-pressed`) with its own `label`, and its face is an `Icon`, number or glyph. `Button` and `IconButton` pass native props through, so a held key takes `onPointerDown` and `onPointerUp`. A colour from data goes in `tint={block.color}`;
|
|
116
|
-
- Every `icon` prop (`NavLink`, `
|
|
117
|
+
- A grid of things to tap (a week, a month's dates, a crossword, a keypad, a swatch) is a grid `div` of square `IconButton`s; seven across is `grid-cols-7`, never a `Row`. Each cell wears its state as props (`variant="solid"` on, `"quiet"` off, a meaning `tone`, `aria-pressed`) with its own `label`, and its face is an `Icon`, number or glyph. `Button` and `IconButton` pass native props through, so a held key takes `onPointerDown` and `onPointerUp`. A colour from data goes in `tint={block.color}`; the button picks readable text.
|
|
118
|
+
- Every `icon` prop (`NavLink`, `IconTile`, `Stat`, nav, menu and option items) takes one of `Icon`'s names above, or an element. A sectioned app:
|
|
117
119
|
|
|
118
120
|
```jsx
|
|
119
121
|
const AREAS = [{ href: "#/plan", label: "Plan", icon: "calendar", tone: "idle" }];
|
|
@@ -140,13 +142,13 @@ What the lines above leave out:
|
|
|
140
142
|
- `TableColumn<T>` is `{ key, header, render: (row) => node, align?, mono?, truncate?, sort?: (a, b) => number }`.
|
|
141
143
|
- `SelectOption` is `{ value, label }`, both strings.
|
|
142
144
|
- `ChartSeries` is `{ key, label?, tone? }`: `key` names a field of each `data` row and `dataKey` names the category field; a `PieChart` slice is `{ key, label, value, tone? }`.
|
|
143
|
-
- Toasts: mount `Toaster` once near the root inside the one wrapper that positions the stack, `<div className="
|
|
145
|
+
- Toasts: mount `Toaster` once near the root inside the one wrapper that positions the stack, `<div className="ui-toasts"><Toaster /></div>`, then call `toast("Saved")`, `toast.success(…)` or `toast.error(…)` from anywhere; `toast` is imported from `@vibes.diy/ui/interactive` beside `Toaster`. A `ToastViewport` for alerts the app keeps in its own state sits inside the same wrapper.
|
|
144
146
|
|
|
145
147
|
## DO
|
|
146
148
|
|
|
147
149
|
- Give each view one job and build it from cushions: `Card`, `RowCard`, `Stat`, `Empty`, `CTA`.
|
|
148
150
|
- Let exactly one element per view wear `tone="purple"`, and give every other `Button` `variant="quiet"` or a tone that states its meaning.
|
|
149
|
-
- Set `tone` explicitly on every `Badge`, `Dot`, `
|
|
151
|
+
- Set `tone` explicitly on every `Badge`, `Dot`, `IconTile`, `Avatar`, `Progress`, `Tabs`, `Segmented`, `Highlight` and chart series, and pass `tone="down"` to a `Confirm` that deletes.
|
|
150
152
|
- Wrap every form control in a `Field` and pass its `id` and `describedBy` through the render function.
|
|
151
153
|
- Show a `Skeleton` while data loads, an `Empty` for an empty list and an `ErrorNote` when a request fails.
|
|
152
154
|
- Ask before an irreversible action with `Confirm` around its button; acknowledge a finished one with `toast`.
|
|
@@ -154,7 +156,7 @@ What the lines above leave out:
|
|
|
154
156
|
|
|
155
157
|
## DON'T
|
|
156
158
|
|
|
157
|
-
- Do not put `className` or `style` on a
|
|
159
|
+
- Do not put `className` or `style` on a UI component; use its `tone`, `size` and `variant` props or wrap it in a layout primitive.
|
|
158
160
|
- Do not write a hex, rgb or named colour, or an arbitrary colour class such as `bg-[…]`, anywhere in the app.
|
|
159
161
|
- Do not hand-build a control: an action is a `Button`, a cell or key is an `IconButton`, a choice is a `Select`, `Checkbox`, `RadioGroup` or `Slider`, and a modal is a `Dialog`, `Sheet` or `Confirm`.
|
|
160
162
|
- Do not put two leads in one view: one `tone="purple"` element, and no other component left on its lead-tone default.
|
|
@@ -13,4 +13,4 @@ export interface PoufCatalogEntry {
|
|
|
13
13
|
}
|
|
14
14
|
export declare const POUF_CATALOG: readonly PoufCatalogEntry[];
|
|
15
15
|
export declare const POUF_COMPONENT_NAMES: Readonly<Record<PoufEntry, readonly string[]>>;
|
|
16
|
-
export declare const POUF_CATALOG_MD = "- `AlertBell` (`@vibes.diy/pouf`) \u2014 A bell button with an unread count that opens the session's alert history. Props: `alerts` (required) AlertBellItem[]; `unread` (required) number; `connected` (required); `onOpen` (required) () => void\n- `Badge` (`@vibes.diy/pouf`) \u2014 A small tonal label for a count, category or state. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Blob` (`@vibes.diy/pouf`) \u2014 A tonal icon tile that fronts a stat, list row or feature. Props: `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `label` string\n- `Breadcrumb` (`@vibes.diy/pouf`) \u2014 Shows where the current page sits in a hierarchy, with links back up. Props: `items` (required) BreadcrumbItem[]\n- `Button` (`@vibes.diy/pouf`) \u2014 The action button; give one primary action per area. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `block`; `disabled`; `loading`; `type` button|submit; `label` string; `tint` string\n- `CTA` (`@vibes.diy/pouf`) \u2014 A call-to-action banner: a big tonal cushion with a headline and an action. Props: `title` (required) string; `description` string; `action` (required) ReactNode; `tone` purple (lead)|pink|blue|mint|yellow|surface\n- `Card` (`@vibes.diy/pouf`) \u2014 The raised surface that groups related content into a panel. Props: `variant` default|flush|tight; `motion` none|lift|tilt-left|tilt-right\n- `Dot` (`@vibes.diy/pouf`) \u2014 A status dot. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Empty` (`@vibes.diy/pouf`) \u2014 The empty state for a list or panel with nothing in it yet. Props: `icon` IconLike; `title` (required) string\n- `ErrorBoundary` (`@vibes.diy/pouf`) \u2014 Catches render crashes so one broken part can't blank the whole page. Props: `name` (required) string; `resetKey` string\n- `ErrorNote` (`@vibes.diy/pouf`) \u2014 An inline message that says a request or action failed.\n- `Eyebrow` (`@vibes.diy/pouf`) \u2014 A small uppercase label above a section heading.\n- `Field` (`@vibes.diy/pouf`) \u2014 Wraps a form control with its label, hint and error text. Props: `label` (required) string; `children` (required) (id: string, describedBy: string | undefined) => ReactNode; `hint` string; `error` string\n- `Figure` (`@vibes.diy/pouf`) \u2014 An image, framed in clay. Props: `src` (required) string; `alt` (required) string; `width` (required) number; `height` (required) number\n- `Footer` (`@vibes.diy/pouf`) \u2014 A site footer on one big cushion: brand block plus columns of links, with an optional bottom note. Props: `brand` (required) ReactNode; `tagline` string\n- `Freshness` (`@vibes.diy/pouf`) \u2014 Speaks only when the data on screen can no longer be trusted. Props: `at` (required) number; `isError`\n- `Grid` (`@vibes.diy/pouf`) \u2014 Lays children out in columns, or main plus side, stacking on narrow screens. Props: `cols` 2|3|4|sidebar; `gap` 1|2|3|4|5|6\n- `Heading` (`@vibes.diy/pouf`) \u2014 A page or section heading at level 1, 2 or 3. Props: `level` 1|2|3\n- `Highlight` (`@vibes.diy/pouf`) \u2014 Puts a tonal swatch behind a word or short phrase to make it pop. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Icon` (`@vibes.diy/pouf`) \u2014 A named glyph from the built-in icon set. Props: `name` (required) up|down|warn|info|idle|overview|chart|log|channels|activity|lab|history|performance|settings|database|menu|flat|ok|fail|off|live|draft|target|alerts|add|remove|search|close|expand|prev|next|photo|heart|heart-filled|comment|play|pause|rewind|forward|sun|cloud|rain|star|calendar|clock|user|users|mail|lock|send|home|trophy|flame|sparkle|music|cart|tag|dots|sword|shield|wand|smile|card|pin|wind|drop; `size` sm|md|lg; `label` string\n- `IconButton` (`@vibes.diy/pouf`) \u2014 A square, labelled icon action. Props: `icon` (required) ReactNode; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `disabled`; `loading`; `type` button|submit; `tint` string\n- `Input` (`@vibes.diy/pouf`) \u2014 A single-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `type` string; `autoComplete` string; `inputMode` search|none|email|tel|text|url|numeric|decimal; `autoCapitalize` string; `spellCheck`; `required`; `mono`; `invalid`; `disabled`; `label` string; `bare`\n- `Metric` (`@vibes.diy/pouf`) \u2014 A labelled readout: small muted label, value beneath. Props: `label` (required) string; `value` (required) ReactNode; `num`; `mono`\n- `ModeBanner` (`@vibes.diy/pouf`) \u2014 The draft/live (or any two-mode) indicator. Props: `live` (required)\n- `NavLink` (`@vibes.diy/pouf`) \u2014 A navigation link that marks itself active on the current path. Props: `href` (required) string; `currentPath` (required) string; `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Navbar` (`@vibes.diy/pouf`) \u2014 A top navigation bar on a floating cushion. Props: `brand` (required) ReactNode; `label` string\n- `NumberInput` (`@vibes.diy/pouf`) \u2014 A numeric field with step buttons; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `step` number; `min` number; `max` number; `id` string; `describedBy` string; `placeholder` string; `invalid`; `disabled`; `label` string\n- `Pagination` (`@vibes.diy/pouf`) \u2014 Previous and next page controls with a page indicator for long lists. Props: `page` (required) number; `total` (required) number; `onChange` (required) (page: number) => void\n- `Row` (`@vibes.diy/pouf`) \u2014 Lays children out horizontally with a gap, alignment and wrapping. Props: `gap` 1|2|3|4|5|6; `align` center|top; `justify` start|center|between|end; `wrap`\n- `RowCard` (`@vibes.diy/pouf`) \u2014 One raised row per item in a list; clickable when given onClick. Props: `selected`\n- `Segmented` (`@vibes.diy/pouf`) \u2014 A mutually-exclusive choice: grid vs list, draft vs live, and similar. Props: `value` (required) T; `onChange` (required) (value: T) => void; `options` (required) SegmentedOption<T>[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Shell` (`@vibes.diy/pouf`) \u2014 The page frame: a sidebar column beside the main content.\n- `Sidebar` (`@vibes.diy/pouf`) \u2014 The side navigation column inside Shell. Props: `mobile` show|hide\n- `Skeleton` (`@vibes.diy/pouf`) \u2014 A loading placeholder shaped like the text, row or card it stands in for. Props: `variant` text|row|card; `count` number\n- `Spacer` (`@vibes.diy/pouf`) \u2014 Pushes the items after it to the far end of a Row.\n- `Stack` (`@vibes.diy/pouf`) \u2014 Stacks children vertically with an even gap. Props: `gap` 1|2|3|4|5|6\n- `Stat` (`@vibes.diy/pouf`) \u2014 A headline figure on its own cushion. Props: `label` (required) string; `value` (required) string; `icon` (required) IconLike; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Status` (`@vibes.diy/pouf`) \u2014 A labelled status dot that turns unknown when its reading goes stale. Props: `label` (required) string; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative); `at` number\n- `Table` (`@vibes.diy/pouf`) \u2014 A data table with typed columns; rows can be clickable. Props: `columns` (required) TableColumn<T>[]; `rows` (required) T[]; `getKey` (required) (row: T) => string\n- `Text` (`@vibes.diy/pouf`) \u2014 Body text: size, muted, numeric and monospace variants. Props: `size` sm|md; `muted`; `num`; `mono`; `truncate`\n- `Textarea` (`@vibes.diy/pouf`) \u2014 A multi-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `autoComplete` string; `spellCheck`; `required`; `rows` number; `mono`; `invalid`; `disabled`; `label` string\n- `Accordion` (`@vibes.diy/pouf/interactive`) \u2014 A stack of expandable sections with one open at a time. Props: `items` (required) AccordionItem[]; `defaultValue` string\n- `AspectRatio` (`@vibes.diy/pouf/interactive`) \u2014 Holds media at a fixed width-to-height ratio. Props: `ratio` number\n- `Avatar` (`@vibes.diy/pouf/interactive`) \u2014 A person's picture, with initials or an icon when there is none. Props: `src` string; `alt` string; `fallback` string; `icon` IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg\n- `BottomNav` (`@vibes.diy/pouf/interactive`) \u2014 Mobile bottom navigation. Props: `primary` (required) NavItem[]; `groups` (required) NavGroup[]; `currentPath` (required) string\n- `Checkbox` (`@vibes.diy/pouf/interactive`) \u2014 A labelled on/off checkbox. Props: `checked` (required) boolean | \"indeterminate\"; `onChange` (required) (checked: boolean | \"indeterminate\") => void; `id` string; `disabled`; `label` string; `hideLabel`\n- `Collapsible` (`@vibes.diy/pouf/interactive`) \u2014 A single section that shows or hides its content from a trigger. Props: `trigger` (required) ReactNode; `open`\n- `Combobox` (`@vibes.diy/pouf/interactive`) \u2014 A text field with suggestions to pick or type; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) string[]; `loading`; `error` string; `id` string; `describedBy` string; `placeholder` string; `mono`; `label` string\n- `Confirm` (`@vibes.diy/pouf/interactive`) \u2014 Wraps the button that opens it; asks to confirm an irreversible action such as a delete. Props: `title` (required) string; `body` (required) string; `confirmLabel` (required) string; `cancelLabel` (required) string; `onConfirm` (required) () => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `loading`\n- `ContextMenu` (`@vibes.diy/pouf/interactive`) \u2014 A menu of actions that opens on right-click or long-press. Props: `items` (required) (MenuEntry | \"separator\")[]\n- `Dialog` (`@vibes.diy/pouf/interactive`) \u2014 A modal window for a focused task or form. Props: `trigger` (required) ReactNode; `title` (required) string; `description` string; `open`; `size` md|lg\n- `DropdownMenu` (`@vibes.diy/pouf/interactive`) \u2014 A menu of actions that opens from a trigger button. Props: `items` (required) (\"separator\" | MenuItem)[]; `label` string\n- `HoverCard` (`@vibes.diy/pouf/interactive`) \u2014 A preview card that appears on hover over its trigger. Props: `content` (required) ReactNode; `side` top|right|bottom|left; `align` start|center|end\n- `Menubar` (`@vibes.diy/pouf/interactive`) \u2014 An application menu bar (File / Edit / View\u2026). Props: `menus` (required) MenubarMenu[]\n- `Progress` (`@vibes.diy/pouf/interactive`) \u2014 A progress bar for a value out of a maximum. Props: `value` (required) number; `max` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `label` string\n- `RadioGroup` (`@vibes.diy/pouf/interactive`) \u2014 A labelled set of options where exactly one is chosen. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) RadioOption[]; `label` (required) string; `disabled`\n- `ScrollArea` (`@vibes.diy/pouf/interactive`) \u2014 A fixed-height region that scrolls its own content. Props: `maxHeight` string\n- `Select` (`@vibes.diy/pouf/interactive`) \u2014 A dropdown for picking one option; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) SelectOption[]; `id` string; `describedBy` string; `placeholder` string; `disabled`; `label` string\n- `Separator` (`@vibes.diy/pouf/interactive`) \u2014 A thin divider line between groups of content.\n- `Sheet` (`@vibes.diy/pouf/interactive`) \u2014 A panel that slides in from the side for secondary tasks. Props: `title` (required) string; `description` string; `open`\n- `Slider` (`@vibes.diy/pouf/interactive`) \u2014 Picks a number in a range by dragging. Props: `value` (required) number[]; `onChange` (required) (value: number[]) => void; `min` number; `max` number; `step` number; `disabled`; `label` string\n- `Switch` (`@vibes.diy/pouf/interactive`) \u2014 A labelled on/off toggle for a setting that applies at once. Props: `checked` (required); `onChange` (required) (checked: boolean) => void; `id` string; `describedBy` string; `disabled`; `label` string\n- `Tabs` (`@vibes.diy/pouf/interactive`) \u2014 Switches between panels of content under one heading. Props: `tabs` (required) Tab[]; `value` (required) string; `onChange` (required) (value: string) => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Toast` (`@vibes.diy/pouf/interactive`) \u2014 One alert message with a severity and a dismiss button. Props: `id` (required) number; `severity` (required) critical|info; `onDismiss` (required) (id: number) => void\n- `ToastViewport` (`@vibes.diy/pouf/interactive`) \u2014 Renders a list of alert messages your app keeps in state. Props: `toasts` (required) ToastItem[]; `onDismiss` (required) (id: number) => void\n- `Toaster` (`@vibes.diy/pouf/interactive`) \u2014 Mount once in the app so toast() calls appear on screen.\n- `ToggleGroup` (`@vibes.diy/pouf/interactive`) \u2014 A row of toggle buttons where several can be on at once. Props: `value` (required) string[]; `onChange` (required) (value: string[]) => void; `options` (required) ToggleOption[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Tooltip` (`@vibes.diy/pouf/interactive`) \u2014 Wraps an element with a short hint on hover or focus; needs a TooltipProvider above it. Props: `tip` (required) string\n- `TooltipProvider` (`@vibes.diy/pouf/interactive`) \u2014 Wrap the app once; every Tooltip must sit inside it.\n- `AreaChart` (`@vibes.diy/pouf/charts`) \u2014 An area chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`\n- `BarChart` (`@vibes.diy/pouf/charts`) \u2014 A bar chart of one or more series, optionally stacked. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`; `toneKey` string\n- `LineChart` (`@vibes.diy/pouf/charts`) \u2014 A line chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number\n- `PieChart` (`@vibes.diy/pouf/charts`) \u2014 A pie or donut chart of parts of a whole. Props: `data` (required) PieSlice[]; `height` number; `donut`; `labelled`";
|
|
16
|
+
export declare const POUF_CATALOG_MD = "- `AlertBell` (`@vibes.diy/ui`) \u2014 A bell button with an unread count that opens the session's alert history. Props: `alerts` (required) AlertBellItem[]; `unread` (required) number; `connected` (required); `onOpen` (required) () => void\n- `Badge` (`@vibes.diy/ui`) \u2014 A small tonal label for a count, category or state. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Breadcrumb` (`@vibes.diy/ui`) \u2014 Shows where the current page sits in a hierarchy, with links back up. Props: `items` (required) BreadcrumbItem[]\n- `Button` (`@vibes.diy/ui`) \u2014 The action button; give one primary action per area. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `block`; `disabled`; `loading`; `type` button|submit; `label` string; `tint` string\n- `CTA` (`@vibes.diy/ui`) \u2014 A call-to-action banner: a big tonal cushion with a headline and an action. Props: `title` (required) string; `description` string; `action` (required) ReactNode; `tone` purple (lead)|pink|blue|mint|yellow|surface\n- `Card` (`@vibes.diy/ui`) \u2014 The raised surface that groups related content into a panel. Props: `variant` default|flush|tight; `motion` none|lift|tilt-left|tilt-right\n- `Dot` (`@vibes.diy/ui`) \u2014 A status dot. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Empty` (`@vibes.diy/ui`) \u2014 The empty state for a list or panel with nothing in it yet. Props: `icon` IconLike; `title` (required) string\n- `ErrorBoundary` (`@vibes.diy/ui`) \u2014 Catches render crashes so one broken part can't blank the whole page. Props: `name` (required) string; `resetKey` string\n- `ErrorNote` (`@vibes.diy/ui`) \u2014 An inline message that says a request or action failed.\n- `Eyebrow` (`@vibes.diy/ui`) \u2014 A small uppercase label above a section heading.\n- `Field` (`@vibes.diy/ui`) \u2014 Wraps a form control with its label, hint and error text. Props: `label` (required) string; `children` (required) (id: string, describedBy: string | undefined) => ReactNode; `hint` string; `error` string\n- `Figure` (`@vibes.diy/ui`) \u2014 An image, framed in clay. Props: `src` (required) string; `alt` (required) string; `width` (required) number; `height` (required) number\n- `Footer` (`@vibes.diy/ui`) \u2014 A site footer on one big cushion: brand block plus columns of links, with an optional bottom note. Props: `brand` (required) ReactNode; `tagline` string\n- `Freshness` (`@vibes.diy/ui`) \u2014 Speaks only when the data on screen can no longer be trusted. Props: `at` (required) number; `isError`\n- `Grid` (`@vibes.diy/ui`) \u2014 Lays children out in columns, or main plus side, stacking on narrow screens. Props: `cols` 2|3|4|sidebar; `gap` 1|2|3|4|5|6\n- `Heading` (`@vibes.diy/ui`) \u2014 A page or section heading at level 1, 2 or 3. Props: `level` 1|2|3\n- `Highlight` (`@vibes.diy/ui`) \u2014 Puts a tonal swatch behind a word or short phrase to make it pop. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Icon` (`@vibes.diy/ui`) \u2014 A named glyph from the built-in icon set. Props: `name` (required) up|down|warn|info|idle|overview|chart|log|channels|activity|lab|history|performance|settings|database|menu|flat|ok|fail|off|live|draft|target|alerts|add|remove|search|close|expand|prev|next|photo|heart|heart-filled|comment|play|pause|rewind|forward|sun|cloud|rain|star|calendar|clock|user|users|mail|lock|send|home|trophy|flame|sparkle|music|cart|tag|dots|sword|shield|wand|smile|card|pin|wind|drop; `size` sm|md|lg; `label` string\n- `IconButton` (`@vibes.diy/ui`) \u2014 A square, labelled icon action. Props: `icon` (required) ReactNode; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `disabled`; `loading`; `type` button|submit; `tint` string\n- `IconTile` (`@vibes.diy/ui`) \u2014 A tonal icon tile that fronts a stat, list row or feature. Props: `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `label` string\n- `Input` (`@vibes.diy/ui`) \u2014 A single-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `type` string; `autoComplete` string; `inputMode` none|search|email|tel|text|url|numeric|decimal; `autoCapitalize` string; `spellCheck`; `required`; `mono`; `invalid`; `disabled`; `label` string; `bare`\n- `Metric` (`@vibes.diy/ui`) \u2014 A labelled readout: small muted label, value beneath. Props: `label` (required) string; `value` (required) ReactNode; `num`; `mono`\n- `ModeBanner` (`@vibes.diy/ui`) \u2014 The draft/live (or any two-mode) indicator. Props: `live` (required)\n- `NavLink` (`@vibes.diy/ui`) \u2014 A navigation link that marks itself active on the current path. Props: `href` (required) string; `currentPath` (required) string; `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Navbar` (`@vibes.diy/ui`) \u2014 A top navigation bar on a floating cushion. Props: `brand` (required) ReactNode; `label` string\n- `NumberInput` (`@vibes.diy/ui`) \u2014 A numeric field with step buttons; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `step` number; `min` number; `max` number; `id` string; `describedBy` string; `placeholder` string; `invalid`; `disabled`; `label` string\n- `Pagination` (`@vibes.diy/ui`) \u2014 Previous and next page controls with a page indicator for long lists. Props: `page` (required) number; `total` (required) number; `onChange` (required) (page: number) => void\n- `Row` (`@vibes.diy/ui`) \u2014 Lays children out horizontally with a gap, alignment and wrapping. Props: `gap` 1|2|3|4|5|6; `align` center|top; `justify` start|center|between|end; `wrap`\n- `RowCard` (`@vibes.diy/ui`) \u2014 One raised row per item in a list; clickable when given onClick. Props: `selected`\n- `Segmented` (`@vibes.diy/ui`) \u2014 A mutually-exclusive choice: grid vs list, draft vs live, and similar. Props: `value` (required) T; `onChange` (required) (value: T) => void; `options` (required) SegmentedOption<T>[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Shell` (`@vibes.diy/ui`) \u2014 The page frame: a sidebar column beside the main content.\n- `Sidebar` (`@vibes.diy/ui`) \u2014 The side navigation column inside Shell. Props: `mobile` show|hide\n- `Skeleton` (`@vibes.diy/ui`) \u2014 A loading placeholder shaped like the text, row or card it stands in for. Props: `variant` text|row|card; `count` number\n- `Spacer` (`@vibes.diy/ui`) \u2014 Pushes the items after it to the far end of a Row.\n- `Stack` (`@vibes.diy/ui`) \u2014 Stacks children vertically with an even gap. Props: `gap` 1|2|3|4|5|6\n- `Stat` (`@vibes.diy/ui`) \u2014 A headline figure on its own cushion. Props: `label` (required) string; `value` (required) string; `icon` (required) IconLike; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Status` (`@vibes.diy/ui`) \u2014 A labelled status dot that turns unknown when its reading goes stale. Props: `label` (required) string; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative); `at` number\n- `Table` (`@vibes.diy/ui`) \u2014 A data table with typed columns; rows can be clickable. Props: `columns` (required) TableColumn<T>[]; `rows` (required) T[]; `getKey` (required) (row: T) => string\n- `Text` (`@vibes.diy/ui`) \u2014 Body text: size, muted, numeric and monospace variants. Props: `size` sm|md; `muted`; `num`; `mono`; `truncate`\n- `Textarea` (`@vibes.diy/ui`) \u2014 A multi-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `autoComplete` string; `spellCheck`; `required`; `rows` number; `mono`; `invalid`; `disabled`; `label` string\n- `Accordion` (`@vibes.diy/ui/interactive`) \u2014 A stack of expandable sections with one open at a time. Props: `items` (required) AccordionItem[]; `defaultValue` string\n- `AspectRatio` (`@vibes.diy/ui/interactive`) \u2014 Holds media at a fixed width-to-height ratio. Props: `ratio` number\n- `Avatar` (`@vibes.diy/ui/interactive`) \u2014 A person's picture, with initials or an icon when there is none. Props: `src` string; `alt` string; `fallback` string; `icon` IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg\n- `BottomNav` (`@vibes.diy/ui/interactive`) \u2014 Mobile bottom navigation. Props: `primary` (required) NavItem[]; `groups` (required) NavGroup[]; `currentPath` (required) string\n- `Checkbox` (`@vibes.diy/ui/interactive`) \u2014 A labelled on/off checkbox. Props: `checked` (required) boolean | \"indeterminate\"; `onChange` (required) (checked: boolean | \"indeterminate\") => void; `id` string; `disabled`; `label` string; `hideLabel`\n- `Collapsible` (`@vibes.diy/ui/interactive`) \u2014 A single section that shows or hides its content from a trigger. Props: `trigger` (required) ReactNode; `open`\n- `Combobox` (`@vibes.diy/ui/interactive`) \u2014 A text field with suggestions to pick or type; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) string[]; `loading`; `error` string; `id` string; `describedBy` string; `placeholder` string; `mono`; `label` string\n- `Confirm` (`@vibes.diy/ui/interactive`) \u2014 Wraps the button that opens it; asks to confirm an irreversible action such as a delete. Props: `title` (required) string; `body` (required) string; `confirmLabel` (required) string; `cancelLabel` (required) string; `onConfirm` (required) () => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `loading`\n- `ContextMenu` (`@vibes.diy/ui/interactive`) \u2014 A menu of actions that opens on right-click or long-press. Props: `items` (required) (MenuEntry | \"separator\")[]\n- `Dialog` (`@vibes.diy/ui/interactive`) \u2014 A modal window for a focused task or form. Props: `trigger` (required) ReactNode; `title` (required) string; `description` string; `open`; `size` md|lg\n- `DropdownMenu` (`@vibes.diy/ui/interactive`) \u2014 A menu of actions that opens from a trigger button. Props: `items` (required) (\"separator\" | MenuItem)[]; `label` string\n- `HoverCard` (`@vibes.diy/ui/interactive`) \u2014 A preview card that appears on hover over its trigger. Props: `content` (required) ReactNode; `side` top|right|bottom|left; `align` start|center|end\n- `Menubar` (`@vibes.diy/ui/interactive`) \u2014 An application menu bar (File / Edit / View\u2026). Props: `menus` (required) MenubarMenu[]\n- `Pad` (`@vibes.diy/ui/interactive`) \u2014 A square instrument pad that toggles on and off, with a playhead light and beat-group shading. Props: `on` (required); `onPress` (required) () => void; `label` (required) string; `playhead`; `downbeat`; `group` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `disabled`\n- `Progress` (`@vibes.diy/ui/interactive`) \u2014 A progress bar for a value out of a maximum. Props: `value` (required) number; `max` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `label` string\n- `RadioGroup` (`@vibes.diy/ui/interactive`) \u2014 A labelled set of options where exactly one is chosen. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) RadioOption[]; `label` (required) string; `disabled`\n- `ScrollArea` (`@vibes.diy/ui/interactive`) \u2014 A fixed-height region that scrolls its own content. Props: `maxHeight` string\n- `Select` (`@vibes.diy/ui/interactive`) \u2014 A dropdown for picking one option; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) SelectOption[]; `id` string; `describedBy` string; `placeholder` string; `disabled`; `label` string\n- `Separator` (`@vibes.diy/ui/interactive`) \u2014 A thin divider line between groups of content.\n- `Sheet` (`@vibes.diy/ui/interactive`) \u2014 A panel that slides in from the side for secondary tasks. Props: `title` (required) string; `description` string; `open`\n- `Slider` (`@vibes.diy/ui/interactive`) \u2014 Picks a number in a range by dragging. Props: `value` (required) number[]; `onChange` (required) (value: number[]) => void; `min` number; `max` number; `step` number; `disabled`; `label` string\n- `StepGrid` (`@vibes.diy/ui/interactive`) \u2014 One sequencer row of Pads with a moving playhead and beat groups, wrapping to two lines on a phone. Props: `steps` (required) readonly (number | boolean)[]; `onToggle` (required) (index: number) => void; `label` (required) string; `playhead` number; `groupSize` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Switch` (`@vibes.diy/ui/interactive`) \u2014 A labelled on/off toggle for a setting that applies at once. Props: `checked` (required); `onChange` (required) (checked: boolean) => void; `id` string; `describedBy` string; `disabled`; `label` string\n- `Tabs` (`@vibes.diy/ui/interactive`) \u2014 Switches between panels of content under one heading. Props: `tabs` (required) Tab[]; `value` (required) string; `onChange` (required) (value: string) => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Toast` (`@vibes.diy/ui/interactive`) \u2014 One alert message with a severity and a dismiss button. Props: `id` (required) number; `severity` (required) critical|info; `onDismiss` (required) (id: number) => void\n- `ToastViewport` (`@vibes.diy/ui/interactive`) \u2014 Renders a list of alert messages your app keeps in state. Props: `toasts` (required) ToastItem[]; `onDismiss` (required) (id: number) => void\n- `Toaster` (`@vibes.diy/ui/interactive`) \u2014 Mount once in the app so toast() calls appear on screen.\n- `ToggleGroup` (`@vibes.diy/ui/interactive`) \u2014 A row of toggle buttons where several can be on at once. Props: `value` (required) string[]; `onChange` (required) (value: string[]) => void; `options` (required) ToggleOption[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Tooltip` (`@vibes.diy/ui/interactive`) \u2014 Wraps an element with a short hint on hover or focus; needs a TooltipProvider above it. Props: `tip` (required) string\n- `TooltipProvider` (`@vibes.diy/ui/interactive`) \u2014 Wrap the app once; every Tooltip must sit inside it.\n- `AreaChart` (`@vibes.diy/ui/charts`) \u2014 An area chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`\n- `BarChart` (`@vibes.diy/ui/charts`) \u2014 A bar chart of one or more series, optionally stacked. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`; `toneKey` string\n- `LineChart` (`@vibes.diy/ui/charts`) \u2014 A line chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number\n- `PieChart` (`@vibes.diy/ui/charts`) \u2014 A pie or donut chart of parts of a whole. Props: `data` (required) PieSlice[]; `height` number; `donut`; `labelled`";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const POUF_ENTRY_SPECIFIER = {
|
|
2
|
-
index: "@vibes.diy/
|
|
3
|
-
interactive: "@vibes.diy/
|
|
4
|
-
charts: "@vibes.diy/
|
|
2
|
+
index: "@vibes.diy/ui",
|
|
3
|
+
interactive: "@vibes.diy/ui/interactive",
|
|
4
|
+
charts: "@vibes.diy/ui/charts",
|
|
5
5
|
};
|
|
6
6
|
export const POUF_CATALOG = [
|
|
7
7
|
{
|
|
@@ -21,17 +21,6 @@ export const POUF_CATALOG = [
|
|
|
21
21
|
purpose: "A small tonal label for a count, category or state",
|
|
22
22
|
props: [{ name: "tone", values: ["up", "down", "warn", "info", "idle", "purple", "orange"], required: false }],
|
|
23
23
|
},
|
|
24
|
-
{
|
|
25
|
-
name: "Blob",
|
|
26
|
-
entry: "index",
|
|
27
|
-
purpose: "A tonal icon tile that fronts a stat, list row or feature",
|
|
28
|
-
props: [
|
|
29
|
-
{ name: "icon", type: "IconLike", required: true },
|
|
30
|
-
{ name: "tone", values: ["up", "down", "warn", "info", "idle", "purple", "orange"], required: false },
|
|
31
|
-
{ name: "size", values: ["sm", "md", "lg"], required: false },
|
|
32
|
-
{ name: "label", type: "string", required: false },
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
24
|
{
|
|
36
25
|
name: "Breadcrumb",
|
|
37
26
|
entry: "index",
|
|
@@ -258,6 +247,17 @@ export const POUF_CATALOG = [
|
|
|
258
247
|
{ name: "tint", type: "string", required: false },
|
|
259
248
|
],
|
|
260
249
|
},
|
|
250
|
+
{
|
|
251
|
+
name: "IconTile",
|
|
252
|
+
entry: "index",
|
|
253
|
+
purpose: "A tonal icon tile that fronts a stat, list row or feature",
|
|
254
|
+
props: [
|
|
255
|
+
{ name: "icon", type: "IconLike", required: true },
|
|
256
|
+
{ name: "tone", values: ["up", "down", "warn", "info", "idle", "purple", "orange"], required: false },
|
|
257
|
+
{ name: "size", values: ["sm", "md", "lg"], required: false },
|
|
258
|
+
{ name: "label", type: "string", required: false },
|
|
259
|
+
],
|
|
260
|
+
},
|
|
261
261
|
{
|
|
262
262
|
name: "Input",
|
|
263
263
|
entry: "index",
|
|
@@ -271,7 +271,7 @@ export const POUF_CATALOG = [
|
|
|
271
271
|
{ name: "placeholder", type: "string", required: false },
|
|
272
272
|
{ name: "type", type: "string", required: false },
|
|
273
273
|
{ name: "autoComplete", type: "string", required: false },
|
|
274
|
-
{ name: "inputMode", values: ["
|
|
274
|
+
{ name: "inputMode", values: ["none", "search", "email", "tel", "text", "url", "numeric", "decimal"], required: false },
|
|
275
275
|
{ name: "autoCapitalize", type: "string", required: false },
|
|
276
276
|
{ name: "spellCheck", required: false },
|
|
277
277
|
{ name: "required", required: false },
|
|
@@ -597,6 +597,21 @@ export const POUF_CATALOG = [
|
|
|
597
597
|
purpose: "An application menu bar (File / Edit / View…)",
|
|
598
598
|
props: [{ name: "menus", type: "MenubarMenu[]", required: true }],
|
|
599
599
|
},
|
|
600
|
+
{
|
|
601
|
+
name: "Pad",
|
|
602
|
+
entry: "interactive",
|
|
603
|
+
purpose: "A square instrument pad that toggles on and off, with a playhead light and beat-group shading",
|
|
604
|
+
props: [
|
|
605
|
+
{ name: "on", required: true },
|
|
606
|
+
{ name: "onPress", type: "() => void", required: true },
|
|
607
|
+
{ name: "label", type: "string", required: true },
|
|
608
|
+
{ name: "playhead", required: false },
|
|
609
|
+
{ name: "downbeat", required: false },
|
|
610
|
+
{ name: "group", type: "number", required: false },
|
|
611
|
+
{ name: "tone", values: ["up", "down", "warn", "info", "idle", "purple", "orange"], required: false },
|
|
612
|
+
{ name: "disabled", required: false },
|
|
613
|
+
],
|
|
614
|
+
},
|
|
600
615
|
{
|
|
601
616
|
name: "Progress",
|
|
602
617
|
entry: "interactive",
|
|
@@ -666,6 +681,19 @@ export const POUF_CATALOG = [
|
|
|
666
681
|
{ name: "label", type: "string", required: false },
|
|
667
682
|
],
|
|
668
683
|
},
|
|
684
|
+
{
|
|
685
|
+
name: "StepGrid",
|
|
686
|
+
entry: "interactive",
|
|
687
|
+
purpose: "One sequencer row of Pads with a moving playhead and beat groups, wrapping to two lines on a phone",
|
|
688
|
+
props: [
|
|
689
|
+
{ name: "steps", type: "readonly (number | boolean)[]", required: true },
|
|
690
|
+
{ name: "onToggle", type: "(index: number) => void", required: true },
|
|
691
|
+
{ name: "label", type: "string", required: true },
|
|
692
|
+
{ name: "playhead", type: "number", required: false },
|
|
693
|
+
{ name: "groupSize", type: "number", required: false },
|
|
694
|
+
{ name: "tone", values: ["up", "down", "warn", "info", "idle", "purple", "orange"], required: false },
|
|
695
|
+
],
|
|
696
|
+
},
|
|
669
697
|
{
|
|
670
698
|
name: "Switch",
|
|
671
699
|
entry: "interactive",
|
|
@@ -781,7 +809,6 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
781
809
|
index: [
|
|
782
810
|
"AlertBell",
|
|
783
811
|
"Badge",
|
|
784
|
-
"Blob",
|
|
785
812
|
"Breadcrumb",
|
|
786
813
|
"Button",
|
|
787
814
|
"CTA",
|
|
@@ -800,6 +827,7 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
800
827
|
"Highlight",
|
|
801
828
|
"Icon",
|
|
802
829
|
"IconButton",
|
|
830
|
+
"IconTile",
|
|
803
831
|
"Input",
|
|
804
832
|
"Metric",
|
|
805
833
|
"ModeBanner",
|
|
@@ -835,6 +863,7 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
835
863
|
"DropdownMenu",
|
|
836
864
|
"HoverCard",
|
|
837
865
|
"Menubar",
|
|
866
|
+
"Pad",
|
|
838
867
|
"Progress",
|
|
839
868
|
"RadioGroup",
|
|
840
869
|
"ScrollArea",
|
|
@@ -842,6 +871,7 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
842
871
|
"Separator",
|
|
843
872
|
"Sheet",
|
|
844
873
|
"Slider",
|
|
874
|
+
"StepGrid",
|
|
845
875
|
"Switch",
|
|
846
876
|
"Tabs",
|
|
847
877
|
"Toast",
|
|
@@ -853,5 +883,5 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
853
883
|
],
|
|
854
884
|
charts: ["AreaChart", "BarChart", "LineChart", "PieChart"],
|
|
855
885
|
};
|
|
856
|
-
export const POUF_CATALOG_MD = '- `AlertBell` (`@vibes.diy/pouf`) — A bell button with an unread count that opens the session\'s alert history. Props: `alerts` (required) AlertBellItem[]; `unread` (required) number; `connected` (required); `onOpen` (required) () => void\n- `Badge` (`@vibes.diy/pouf`) — A small tonal label for a count, category or state. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Blob` (`@vibes.diy/pouf`) — A tonal icon tile that fronts a stat, list row or feature. Props: `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `label` string\n- `Breadcrumb` (`@vibes.diy/pouf`) — Shows where the current page sits in a hierarchy, with links back up. Props: `items` (required) BreadcrumbItem[]\n- `Button` (`@vibes.diy/pouf`) — The action button; give one primary action per area. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `block`; `disabled`; `loading`; `type` button|submit; `label` string; `tint` string\n- `CTA` (`@vibes.diy/pouf`) — A call-to-action banner: a big tonal cushion with a headline and an action. Props: `title` (required) string; `description` string; `action` (required) ReactNode; `tone` purple (lead)|pink|blue|mint|yellow|surface\n- `Card` (`@vibes.diy/pouf`) — The raised surface that groups related content into a panel. Props: `variant` default|flush|tight; `motion` none|lift|tilt-left|tilt-right\n- `Dot` (`@vibes.diy/pouf`) — A status dot. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Empty` (`@vibes.diy/pouf`) — The empty state for a list or panel with nothing in it yet. Props: `icon` IconLike; `title` (required) string\n- `ErrorBoundary` (`@vibes.diy/pouf`) — Catches render crashes so one broken part can\'t blank the whole page. Props: `name` (required) string; `resetKey` string\n- `ErrorNote` (`@vibes.diy/pouf`) — An inline message that says a request or action failed.\n- `Eyebrow` (`@vibes.diy/pouf`) — A small uppercase label above a section heading.\n- `Field` (`@vibes.diy/pouf`) — Wraps a form control with its label, hint and error text. Props: `label` (required) string; `children` (required) (id: string, describedBy: string | undefined) => ReactNode; `hint` string; `error` string\n- `Figure` (`@vibes.diy/pouf`) — An image, framed in clay. Props: `src` (required) string; `alt` (required) string; `width` (required) number; `height` (required) number\n- `Footer` (`@vibes.diy/pouf`) — A site footer on one big cushion: brand block plus columns of links, with an optional bottom note. Props: `brand` (required) ReactNode; `tagline` string\n- `Freshness` (`@vibes.diy/pouf`) — Speaks only when the data on screen can no longer be trusted. Props: `at` (required) number; `isError`\n- `Grid` (`@vibes.diy/pouf`) — Lays children out in columns, or main plus side, stacking on narrow screens. Props: `cols` 2|3|4|sidebar; `gap` 1|2|3|4|5|6\n- `Heading` (`@vibes.diy/pouf`) — A page or section heading at level 1, 2 or 3. Props: `level` 1|2|3\n- `Highlight` (`@vibes.diy/pouf`) — Puts a tonal swatch behind a word or short phrase to make it pop. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Icon` (`@vibes.diy/pouf`) — A named glyph from the built-in icon set. Props: `name` (required) up|down|warn|info|idle|overview|chart|log|channels|activity|lab|history|performance|settings|database|menu|flat|ok|fail|off|live|draft|target|alerts|add|remove|search|close|expand|prev|next|photo|heart|heart-filled|comment|play|pause|rewind|forward|sun|cloud|rain|star|calendar|clock|user|users|mail|lock|send|home|trophy|flame|sparkle|music|cart|tag|dots|sword|shield|wand|smile|card|pin|wind|drop; `size` sm|md|lg; `label` string\n- `IconButton` (`@vibes.diy/pouf`) — A square, labelled icon action. Props: `icon` (required) ReactNode; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `disabled`; `loading`; `type` button|submit; `tint` string\n- `Input` (`@vibes.diy/pouf`) — A single-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `type` string; `autoComplete` string; `inputMode` search|none|email|tel|text|url|numeric|decimal; `autoCapitalize` string; `spellCheck`; `required`; `mono`; `invalid`; `disabled`; `label` string; `bare`\n- `Metric` (`@vibes.diy/pouf`) — A labelled readout: small muted label, value beneath. Props: `label` (required) string; `value` (required) ReactNode; `num`; `mono`\n- `ModeBanner` (`@vibes.diy/pouf`) — The draft/live (or any two-mode) indicator. Props: `live` (required)\n- `NavLink` (`@vibes.diy/pouf`) — A navigation link that marks itself active on the current path. Props: `href` (required) string; `currentPath` (required) string; `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Navbar` (`@vibes.diy/pouf`) — A top navigation bar on a floating cushion. Props: `brand` (required) ReactNode; `label` string\n- `NumberInput` (`@vibes.diy/pouf`) — A numeric field with step buttons; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `step` number; `min` number; `max` number; `id` string; `describedBy` string; `placeholder` string; `invalid`; `disabled`; `label` string\n- `Pagination` (`@vibes.diy/pouf`) — Previous and next page controls with a page indicator for long lists. Props: `page` (required) number; `total` (required) number; `onChange` (required) (page: number) => void\n- `Row` (`@vibes.diy/pouf`) — Lays children out horizontally with a gap, alignment and wrapping. Props: `gap` 1|2|3|4|5|6; `align` center|top; `justify` start|center|between|end; `wrap`\n- `RowCard` (`@vibes.diy/pouf`) — One raised row per item in a list; clickable when given onClick. Props: `selected`\n- `Segmented` (`@vibes.diy/pouf`) — A mutually-exclusive choice: grid vs list, draft vs live, and similar. Props: `value` (required) T; `onChange` (required) (value: T) => void; `options` (required) SegmentedOption<T>[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Shell` (`@vibes.diy/pouf`) — The page frame: a sidebar column beside the main content.\n- `Sidebar` (`@vibes.diy/pouf`) — The side navigation column inside Shell. Props: `mobile` show|hide\n- `Skeleton` (`@vibes.diy/pouf`) — A loading placeholder shaped like the text, row or card it stands in for. Props: `variant` text|row|card; `count` number\n- `Spacer` (`@vibes.diy/pouf`) — Pushes the items after it to the far end of a Row.\n- `Stack` (`@vibes.diy/pouf`) — Stacks children vertically with an even gap. Props: `gap` 1|2|3|4|5|6\n- `Stat` (`@vibes.diy/pouf`) — A headline figure on its own cushion. Props: `label` (required) string; `value` (required) string; `icon` (required) IconLike; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Status` (`@vibes.diy/pouf`) — A labelled status dot that turns unknown when its reading goes stale. Props: `label` (required) string; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative); `at` number\n- `Table` (`@vibes.diy/pouf`) — A data table with typed columns; rows can be clickable. Props: `columns` (required) TableColumn<T>[]; `rows` (required) T[]; `getKey` (required) (row: T) => string\n- `Text` (`@vibes.diy/pouf`) — Body text: size, muted, numeric and monospace variants. Props: `size` sm|md; `muted`; `num`; `mono`; `truncate`\n- `Textarea` (`@vibes.diy/pouf`) — A multi-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `autoComplete` string; `spellCheck`; `required`; `rows` number; `mono`; `invalid`; `disabled`; `label` string\n- `Accordion` (`@vibes.diy/pouf/interactive`) — A stack of expandable sections with one open at a time. Props: `items` (required) AccordionItem[]; `defaultValue` string\n- `AspectRatio` (`@vibes.diy/pouf/interactive`) — Holds media at a fixed width-to-height ratio. Props: `ratio` number\n- `Avatar` (`@vibes.diy/pouf/interactive`) — A person\'s picture, with initials or an icon when there is none. Props: `src` string; `alt` string; `fallback` string; `icon` IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg\n- `BottomNav` (`@vibes.diy/pouf/interactive`) — Mobile bottom navigation. Props: `primary` (required) NavItem[]; `groups` (required) NavGroup[]; `currentPath` (required) string\n- `Checkbox` (`@vibes.diy/pouf/interactive`) — A labelled on/off checkbox. Props: `checked` (required) boolean | "indeterminate"; `onChange` (required) (checked: boolean | "indeterminate") => void; `id` string; `disabled`; `label` string; `hideLabel`\n- `Collapsible` (`@vibes.diy/pouf/interactive`) — A single section that shows or hides its content from a trigger. Props: `trigger` (required) ReactNode; `open`\n- `Combobox` (`@vibes.diy/pouf/interactive`) — A text field with suggestions to pick or type; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) string[]; `loading`; `error` string; `id` string; `describedBy` string; `placeholder` string; `mono`; `label` string\n- `Confirm` (`@vibes.diy/pouf/interactive`) — Wraps the button that opens it; asks to confirm an irreversible action such as a delete. Props: `title` (required) string; `body` (required) string; `confirmLabel` (required) string; `cancelLabel` (required) string; `onConfirm` (required) () => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `loading`\n- `ContextMenu` (`@vibes.diy/pouf/interactive`) — A menu of actions that opens on right-click or long-press. Props: `items` (required) (MenuEntry | "separator")[]\n- `Dialog` (`@vibes.diy/pouf/interactive`) — A modal window for a focused task or form. Props: `trigger` (required) ReactNode; `title` (required) string; `description` string; `open`; `size` md|lg\n- `DropdownMenu` (`@vibes.diy/pouf/interactive`) — A menu of actions that opens from a trigger button. Props: `items` (required) ("separator" | MenuItem)[]; `label` string\n- `HoverCard` (`@vibes.diy/pouf/interactive`) — A preview card that appears on hover over its trigger. Props: `content` (required) ReactNode; `side` top|right|bottom|left; `align` start|center|end\n- `Menubar` (`@vibes.diy/pouf/interactive`) — An application menu bar (File / Edit / View…). Props: `menus` (required) MenubarMenu[]\n- `Progress` (`@vibes.diy/pouf/interactive`) — A progress bar for a value out of a maximum. Props: `value` (required) number; `max` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `label` string\n- `RadioGroup` (`@vibes.diy/pouf/interactive`) — A labelled set of options where exactly one is chosen. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) RadioOption[]; `label` (required) string; `disabled`\n- `ScrollArea` (`@vibes.diy/pouf/interactive`) — A fixed-height region that scrolls its own content. Props: `maxHeight` string\n- `Select` (`@vibes.diy/pouf/interactive`) — A dropdown for picking one option; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) SelectOption[]; `id` string; `describedBy` string; `placeholder` string; `disabled`; `label` string\n- `Separator` (`@vibes.diy/pouf/interactive`) — A thin divider line between groups of content.\n- `Sheet` (`@vibes.diy/pouf/interactive`) — A panel that slides in from the side for secondary tasks. Props: `title` (required) string; `description` string; `open`\n- `Slider` (`@vibes.diy/pouf/interactive`) — Picks a number in a range by dragging. Props: `value` (required) number[]; `onChange` (required) (value: number[]) => void; `min` number; `max` number; `step` number; `disabled`; `label` string\n- `Switch` (`@vibes.diy/pouf/interactive`) — A labelled on/off toggle for a setting that applies at once. Props: `checked` (required); `onChange` (required) (checked: boolean) => void; `id` string; `describedBy` string; `disabled`; `label` string\n- `Tabs` (`@vibes.diy/pouf/interactive`) — Switches between panels of content under one heading. Props: `tabs` (required) Tab[]; `value` (required) string; `onChange` (required) (value: string) => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Toast` (`@vibes.diy/pouf/interactive`) — One alert message with a severity and a dismiss button. Props: `id` (required) number; `severity` (required) critical|info; `onDismiss` (required) (id: number) => void\n- `ToastViewport` (`@vibes.diy/pouf/interactive`) — Renders a list of alert messages your app keeps in state. Props: `toasts` (required) ToastItem[]; `onDismiss` (required) (id: number) => void\n- `Toaster` (`@vibes.diy/pouf/interactive`) — Mount once in the app so toast() calls appear on screen.\n- `ToggleGroup` (`@vibes.diy/pouf/interactive`) — A row of toggle buttons where several can be on at once. Props: `value` (required) string[]; `onChange` (required) (value: string[]) => void; `options` (required) ToggleOption[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Tooltip` (`@vibes.diy/pouf/interactive`) — Wraps an element with a short hint on hover or focus; needs a TooltipProvider above it. Props: `tip` (required) string\n- `TooltipProvider` (`@vibes.diy/pouf/interactive`) — Wrap the app once; every Tooltip must sit inside it.\n- `AreaChart` (`@vibes.diy/pouf/charts`) — An area chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`\n- `BarChart` (`@vibes.diy/pouf/charts`) — A bar chart of one or more series, optionally stacked. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`; `toneKey` string\n- `LineChart` (`@vibes.diy/pouf/charts`) — A line chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number\n- `PieChart` (`@vibes.diy/pouf/charts`) — A pie or donut chart of parts of a whole. Props: `data` (required) PieSlice[]; `height` number; `donut`; `labelled`';
|
|
886
|
+
export const POUF_CATALOG_MD = '- `AlertBell` (`@vibes.diy/ui`) — A bell button with an unread count that opens the session\'s alert history. Props: `alerts` (required) AlertBellItem[]; `unread` (required) number; `connected` (required); `onOpen` (required) () => void\n- `Badge` (`@vibes.diy/ui`) — A small tonal label for a count, category or state. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Breadcrumb` (`@vibes.diy/ui`) — Shows where the current page sits in a hierarchy, with links back up. Props: `items` (required) BreadcrumbItem[]\n- `Button` (`@vibes.diy/ui`) — The action button; give one primary action per area. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `block`; `disabled`; `loading`; `type` button|submit; `label` string; `tint` string\n- `CTA` (`@vibes.diy/ui`) — A call-to-action banner: a big tonal cushion with a headline and an action. Props: `title` (required) string; `description` string; `action` (required) ReactNode; `tone` purple (lead)|pink|blue|mint|yellow|surface\n- `Card` (`@vibes.diy/ui`) — The raised surface that groups related content into a panel. Props: `variant` default|flush|tight; `motion` none|lift|tilt-left|tilt-right\n- `Dot` (`@vibes.diy/ui`) — A status dot. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Empty` (`@vibes.diy/ui`) — The empty state for a list or panel with nothing in it yet. Props: `icon` IconLike; `title` (required) string\n- `ErrorBoundary` (`@vibes.diy/ui`) — Catches render crashes so one broken part can\'t blank the whole page. Props: `name` (required) string; `resetKey` string\n- `ErrorNote` (`@vibes.diy/ui`) — An inline message that says a request or action failed.\n- `Eyebrow` (`@vibes.diy/ui`) — A small uppercase label above a section heading.\n- `Field` (`@vibes.diy/ui`) — Wraps a form control with its label, hint and error text. Props: `label` (required) string; `children` (required) (id: string, describedBy: string | undefined) => ReactNode; `hint` string; `error` string\n- `Figure` (`@vibes.diy/ui`) — An image, framed in clay. Props: `src` (required) string; `alt` (required) string; `width` (required) number; `height` (required) number\n- `Footer` (`@vibes.diy/ui`) — A site footer on one big cushion: brand block plus columns of links, with an optional bottom note. Props: `brand` (required) ReactNode; `tagline` string\n- `Freshness` (`@vibes.diy/ui`) — Speaks only when the data on screen can no longer be trusted. Props: `at` (required) number; `isError`\n- `Grid` (`@vibes.diy/ui`) — Lays children out in columns, or main plus side, stacking on narrow screens. Props: `cols` 2|3|4|sidebar; `gap` 1|2|3|4|5|6\n- `Heading` (`@vibes.diy/ui`) — A page or section heading at level 1, 2 or 3. Props: `level` 1|2|3\n- `Highlight` (`@vibes.diy/ui`) — Puts a tonal swatch behind a word or short phrase to make it pop. Props: `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Icon` (`@vibes.diy/ui`) — A named glyph from the built-in icon set. Props: `name` (required) up|down|warn|info|idle|overview|chart|log|channels|activity|lab|history|performance|settings|database|menu|flat|ok|fail|off|live|draft|target|alerts|add|remove|search|close|expand|prev|next|photo|heart|heart-filled|comment|play|pause|rewind|forward|sun|cloud|rain|star|calendar|clock|user|users|mail|lock|send|home|trophy|flame|sparkle|music|cart|tag|dots|sword|shield|wand|smile|card|pin|wind|drop; `size` sm|md|lg; `label` string\n- `IconButton` (`@vibes.diy/ui`) — A square, labelled icon action. Props: `icon` (required) ReactNode; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `variant` solid|quiet; `disabled`; `loading`; `type` button|submit; `tint` string\n- `IconTile` (`@vibes.diy/ui`) — A tonal icon tile that fronts a stat, list row or feature. Props: `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg; `label` string\n- `Input` (`@vibes.diy/ui`) — A single-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `type` string; `autoComplete` string; `inputMode` none|search|email|tel|text|url|numeric|decimal; `autoCapitalize` string; `spellCheck`; `required`; `mono`; `invalid`; `disabled`; `label` string; `bare`\n- `Metric` (`@vibes.diy/ui`) — A labelled readout: small muted label, value beneath. Props: `label` (required) string; `value` (required) ReactNode; `num`; `mono`\n- `ModeBanner` (`@vibes.diy/ui`) — The draft/live (or any two-mode) indicator. Props: `live` (required)\n- `NavLink` (`@vibes.diy/ui`) — A navigation link that marks itself active on the current path. Props: `href` (required) string; `currentPath` (required) string; `icon` (required) IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Navbar` (`@vibes.diy/ui`) — A top navigation bar on a floating cushion. Props: `brand` (required) ReactNode; `label` string\n- `NumberInput` (`@vibes.diy/ui`) — A numeric field with step buttons; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `step` number; `min` number; `max` number; `id` string; `describedBy` string; `placeholder` string; `invalid`; `disabled`; `label` string\n- `Pagination` (`@vibes.diy/ui`) — Previous and next page controls with a page indicator for long lists. Props: `page` (required) number; `total` (required) number; `onChange` (required) (page: number) => void\n- `Row` (`@vibes.diy/ui`) — Lays children out horizontally with a gap, alignment and wrapping. Props: `gap` 1|2|3|4|5|6; `align` center|top; `justify` start|center|between|end; `wrap`\n- `RowCard` (`@vibes.diy/ui`) — One raised row per item in a list; clickable when given onClick. Props: `selected`\n- `Segmented` (`@vibes.diy/ui`) — A mutually-exclusive choice: grid vs list, draft vs live, and similar. Props: `value` (required) T; `onChange` (required) (value: T) => void; `options` (required) SegmentedOption<T>[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Shell` (`@vibes.diy/ui`) — The page frame: a sidebar column beside the main content.\n- `Sidebar` (`@vibes.diy/ui`) — The side navigation column inside Shell. Props: `mobile` show|hide\n- `Skeleton` (`@vibes.diy/ui`) — A loading placeholder shaped like the text, row or card it stands in for. Props: `variant` text|row|card; `count` number\n- `Spacer` (`@vibes.diy/ui`) — Pushes the items after it to the far end of a Row.\n- `Stack` (`@vibes.diy/ui`) — Stacks children vertically with an even gap. Props: `gap` 1|2|3|4|5|6\n- `Stat` (`@vibes.diy/ui`) — A headline figure on its own cushion. Props: `label` (required) string; `value` (required) string; `icon` (required) IconLike; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Status` (`@vibes.diy/ui`) — A labelled status dot that turns unknown when its reading goes stale. Props: `label` (required) string; `tone` (required) up|down|warn|info|idle|purple (lead)|orange (decorative); `at` number\n- `Table` (`@vibes.diy/ui`) — A data table with typed columns; rows can be clickable. Props: `columns` (required) TableColumn<T>[]; `rows` (required) T[]; `getKey` (required) (row: T) => string\n- `Text` (`@vibes.diy/ui`) — Body text: size, muted, numeric and monospace variants. Props: `size` sm|md; `muted`; `num`; `mono`; `truncate`\n- `Textarea` (`@vibes.diy/ui`) — A multi-line text field; wrap it in Field for its label. Props: `value` (required) string; `onChange` (required) (value: string) => void; `id` string; `name` string; `describedBy` string; `placeholder` string; `autoComplete` string; `spellCheck`; `required`; `rows` number; `mono`; `invalid`; `disabled`; `label` string\n- `Accordion` (`@vibes.diy/ui/interactive`) — A stack of expandable sections with one open at a time. Props: `items` (required) AccordionItem[]; `defaultValue` string\n- `AspectRatio` (`@vibes.diy/ui/interactive`) — Holds media at a fixed width-to-height ratio. Props: `ratio` number\n- `Avatar` (`@vibes.diy/ui/interactive`) — A person\'s picture, with initials or an icon when there is none. Props: `src` string; `alt` string; `fallback` string; `icon` IconLike; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `size` sm|md|lg\n- `BottomNav` (`@vibes.diy/ui/interactive`) — Mobile bottom navigation. Props: `primary` (required) NavItem[]; `groups` (required) NavGroup[]; `currentPath` (required) string\n- `Checkbox` (`@vibes.diy/ui/interactive`) — A labelled on/off checkbox. Props: `checked` (required) boolean | "indeterminate"; `onChange` (required) (checked: boolean | "indeterminate") => void; `id` string; `disabled`; `label` string; `hideLabel`\n- `Collapsible` (`@vibes.diy/ui/interactive`) — A single section that shows or hides its content from a trigger. Props: `trigger` (required) ReactNode; `open`\n- `Combobox` (`@vibes.diy/ui/interactive`) — A text field with suggestions to pick or type; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) string[]; `loading`; `error` string; `id` string; `describedBy` string; `placeholder` string; `mono`; `label` string\n- `Confirm` (`@vibes.diy/ui/interactive`) — Wraps the button that opens it; asks to confirm an irreversible action such as a delete. Props: `title` (required) string; `body` (required) string; `confirmLabel` (required) string; `cancelLabel` (required) string; `onConfirm` (required) () => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `loading`\n- `ContextMenu` (`@vibes.diy/ui/interactive`) — A menu of actions that opens on right-click or long-press. Props: `items` (required) (MenuEntry | "separator")[]\n- `Dialog` (`@vibes.diy/ui/interactive`) — A modal window for a focused task or form. Props: `trigger` (required) ReactNode; `title` (required) string; `description` string; `open`; `size` md|lg\n- `DropdownMenu` (`@vibes.diy/ui/interactive`) — A menu of actions that opens from a trigger button. Props: `items` (required) ("separator" | MenuItem)[]; `label` string\n- `HoverCard` (`@vibes.diy/ui/interactive`) — A preview card that appears on hover over its trigger. Props: `content` (required) ReactNode; `side` top|right|bottom|left; `align` start|center|end\n- `Menubar` (`@vibes.diy/ui/interactive`) — An application menu bar (File / Edit / View…). Props: `menus` (required) MenubarMenu[]\n- `Pad` (`@vibes.diy/ui/interactive`) — A square instrument pad that toggles on and off, with a playhead light and beat-group shading. Props: `on` (required); `onPress` (required) () => void; `label` (required) string; `playhead`; `downbeat`; `group` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `disabled`\n- `Progress` (`@vibes.diy/ui/interactive`) — A progress bar for a value out of a maximum. Props: `value` (required) number; `max` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative); `label` string\n- `RadioGroup` (`@vibes.diy/ui/interactive`) — A labelled set of options where exactly one is chosen. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) RadioOption[]; `label` (required) string; `disabled`\n- `ScrollArea` (`@vibes.diy/ui/interactive`) — A fixed-height region that scrolls its own content. Props: `maxHeight` string\n- `Select` (`@vibes.diy/ui/interactive`) — A dropdown for picking one option; its default lives in `value`, not placeholder. Props: `value` (required) string; `onChange` (required) (value: string) => void; `options` (required) SelectOption[]; `id` string; `describedBy` string; `placeholder` string; `disabled`; `label` string\n- `Separator` (`@vibes.diy/ui/interactive`) — A thin divider line between groups of content.\n- `Sheet` (`@vibes.diy/ui/interactive`) — A panel that slides in from the side for secondary tasks. Props: `title` (required) string; `description` string; `open`\n- `Slider` (`@vibes.diy/ui/interactive`) — Picks a number in a range by dragging. Props: `value` (required) number[]; `onChange` (required) (value: number[]) => void; `min` number; `max` number; `step` number; `disabled`; `label` string\n- `StepGrid` (`@vibes.diy/ui/interactive`) — One sequencer row of Pads with a moving playhead and beat groups, wrapping to two lines on a phone. Props: `steps` (required) readonly (number | boolean)[]; `onToggle` (required) (index: number) => void; `label` (required) string; `playhead` number; `groupSize` number; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Switch` (`@vibes.diy/ui/interactive`) — A labelled on/off toggle for a setting that applies at once. Props: `checked` (required); `onChange` (required) (checked: boolean) => void; `id` string; `describedBy` string; `disabled`; `label` string\n- `Tabs` (`@vibes.diy/ui/interactive`) — Switches between panels of content under one heading. Props: `tabs` (required) Tab[]; `value` (required) string; `onChange` (required) (value: string) => void; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Toast` (`@vibes.diy/ui/interactive`) — One alert message with a severity and a dismiss button. Props: `id` (required) number; `severity` (required) critical|info; `onDismiss` (required) (id: number) => void\n- `ToastViewport` (`@vibes.diy/ui/interactive`) — Renders a list of alert messages your app keeps in state. Props: `toasts` (required) ToastItem[]; `onDismiss` (required) (id: number) => void\n- `Toaster` (`@vibes.diy/ui/interactive`) — Mount once in the app so toast() calls appear on screen.\n- `ToggleGroup` (`@vibes.diy/ui/interactive`) — A row of toggle buttons where several can be on at once. Props: `value` (required) string[]; `onChange` (required) (value: string[]) => void; `options` (required) ToggleOption[]; `label` (required) string; `tone` up|down|warn|info|idle|purple (lead)|orange (decorative)\n- `Tooltip` (`@vibes.diy/ui/interactive`) — Wraps an element with a short hint on hover or focus; needs a TooltipProvider above it. Props: `tip` (required) string\n- `TooltipProvider` (`@vibes.diy/ui/interactive`) — Wrap the app once; every Tooltip must sit inside it.\n- `AreaChart` (`@vibes.diy/ui/charts`) — An area chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`\n- `BarChart` (`@vibes.diy/ui/charts`) — A bar chart of one or more series, optionally stacked. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number; `stacked`; `toneKey` string\n- `LineChart` (`@vibes.diy/ui/charts`) — A line chart of one or more series over a category axis. Props: `data` (required) Record<string, unknown>[]; `dataKey` (required) string; `series` (required) ChartSeries[]; `height` number\n- `PieChart` (`@vibes.diy/ui/charts`) — A pie or donut chart of parts of a whole. Props: `data` (required) PieSlice[]; `height` number; `donut`; `labelled`';
|
|
857
887
|
//# sourceMappingURL=catalog.generated.js.map
|