@vibes.diy/prompts 14.3.203 → 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 +3 -3
- 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 +2 -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.md +1 -1
- 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.md +21 -21
- 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 +12 -12
- 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 -87
- package/themes/looks/pouf/catalog.generated.d.ts +1 -1
- package/themes/looks/pouf/catalog.generated.js +17 -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,90 +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
|
-
- `Pad` (`@vibes.diy/
|
|
92
|
-
- `Progress` (`@vibes.diy/
|
|
93
|
-
- `RadioGroup` (`@vibes.diy/
|
|
94
|
-
- `ScrollArea` (`@vibes.diy/
|
|
95
|
-
- `Select` (`@vibes.diy/
|
|
96
|
-
- `Separator` (`@vibes.diy/
|
|
97
|
-
- `Sheet` (`@vibes.diy/
|
|
98
|
-
- `Slider` (`@vibes.diy/
|
|
99
|
-
- `StepGrid` (`@vibes.diy/
|
|
100
|
-
- `Switch` (`@vibes.diy/
|
|
101
|
-
- `Tabs` (`@vibes.diy/
|
|
102
|
-
- `Toast` (`@vibes.diy/
|
|
103
|
-
- `ToastViewport` (`@vibes.diy/
|
|
104
|
-
- `Toaster` (`@vibes.diy/
|
|
105
|
-
- `ToggleGroup` (`@vibes.diy/
|
|
106
|
-
- `Tooltip` (`@vibes.diy/
|
|
107
|
-
- `TooltipProvider` (`@vibes.diy/
|
|
108
|
-
- `AreaChart` (`@vibes.diy/
|
|
109
|
-
- `BarChart` (`@vibes.diy/
|
|
110
|
-
- `LineChart` (`@vibes.diy/
|
|
111
|
-
- `PieChart` (`@vibes.diy/
|
|
112
|
-
|
|
113
|
-
<!--
|
|
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 -->
|
|
114
114
|
|
|
115
115
|
What the lines above leave out:
|
|
116
116
|
|
|
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}`;
|
|
118
|
-
- 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:
|
|
119
119
|
|
|
120
120
|
```jsx
|
|
121
121
|
const AREAS = [{ href: "#/plan", label: "Plan", icon: "calendar", tone: "idle" }];
|
|
@@ -142,13 +142,13 @@ What the lines above leave out:
|
|
|
142
142
|
- `TableColumn<T>` is `{ key, header, render: (row) => node, align?, mono?, truncate?, sort?: (a, b) => number }`.
|
|
143
143
|
- `SelectOption` is `{ value, label }`, both strings.
|
|
144
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? }`.
|
|
145
|
-
- 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.
|
|
146
146
|
|
|
147
147
|
## DO
|
|
148
148
|
|
|
149
149
|
- Give each view one job and build it from cushions: `Card`, `RowCard`, `Stat`, `Empty`, `CTA`.
|
|
150
150
|
- Let exactly one element per view wear `tone="purple"`, and give every other `Button` `variant="quiet"` or a tone that states its meaning.
|
|
151
|
-
- 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.
|
|
152
152
|
- Wrap every form control in a `Field` and pass its `id` and `describedBy` through the render function.
|
|
153
153
|
- Show a `Skeleton` while data loads, an `Empty` for an empty list and an `ErrorNote` when a request fails.
|
|
154
154
|
- Ask before an irreversible action with `Confirm` around its button; acknowledge a finished one with `toast`.
|
|
@@ -156,7 +156,7 @@ What the lines above leave out:
|
|
|
156
156
|
|
|
157
157
|
## DON'T
|
|
158
158
|
|
|
159
|
-
- 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.
|
|
160
160
|
- Do not write a hex, rgb or named colour, or an arbitrary colour class such as `bg-[…]`, anywhere in the app.
|
|
161
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`.
|
|
162
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- `Pad` (`@vibes.diy/pouf/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/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- `StepGrid` (`@vibes.diy/pouf/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/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 },
|
|
@@ -809,7 +809,6 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
809
809
|
index: [
|
|
810
810
|
"AlertBell",
|
|
811
811
|
"Badge",
|
|
812
|
-
"Blob",
|
|
813
812
|
"Breadcrumb",
|
|
814
813
|
"Button",
|
|
815
814
|
"CTA",
|
|
@@ -828,6 +827,7 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
828
827
|
"Highlight",
|
|
829
828
|
"Icon",
|
|
830
829
|
"IconButton",
|
|
830
|
+
"IconTile",
|
|
831
831
|
"Input",
|
|
832
832
|
"Metric",
|
|
833
833
|
"ModeBanner",
|
|
@@ -883,5 +883,5 @@ export const POUF_COMPONENT_NAMES = {
|
|
|
883
883
|
],
|
|
884
884
|
charts: ["AreaChart", "BarChart", "LineChart", "PieChart"],
|
|
885
885
|
};
|
|
886
|
-
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- `Pad` (`@vibes.diy/pouf/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/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- `StepGrid` (`@vibes.diy/pouf/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/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`';
|
|
887
887
|
//# sourceMappingURL=catalog.generated.js.map
|