my-you-eye 0.3.2 → 0.4.0
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/COMPONENTS.md +1528 -68
- package/README.md +31 -0
- package/SKILL.md +323 -49
- package/bin/my-you-eye.mjs +53 -23
- package/components.json +4660 -178
- package/dist/ScatterPlot-CJG-DVYz.d.ts +195 -0
- package/dist/chunk-CTIFISBJ.js +170 -0
- package/dist/chunk-N7IUSENM.js +91 -0
- package/dist/chunk-NZO3FHA7.js +5601 -0
- package/dist/chunk-SUZOLDQP.js +16 -0
- package/dist/chunk-VFEYYIUB.js +1143 -0
- package/dist/chunk-VU2IBHKV.js +2426 -0
- package/dist/chunk-X6RR4BGL.js +21 -0
- package/dist/chunk-ZWLDKVXQ.js +144 -0
- package/dist/index.d.ts +1767 -445
- package/dist/index.js +3169 -4185
- package/dist/interaction-nsKMyML1.d.ts +32 -0
- package/dist/motion-remotion.d.ts +16 -0
- package/dist/motion-remotion.js +7 -0
- package/dist/motion.d.ts +813 -0
- package/dist/motion.js +101 -0
- package/dist/present-player.d.ts +34 -0
- package/dist/present-player.js +42 -0
- package/dist/present.d.ts +120 -0
- package/dist/present.js +555 -0
- package/dist/scenes.d.ts +323 -0
- package/dist/scenes.js +50 -0
- package/dist/styles.css +65 -3
- package/dist/themes/brutal.css +10 -0
- package/dist/themes/comic.css +9 -0
- package/dist/themes/contrast.css +2 -0
- package/dist/themes/dark.css +1 -0
- package/dist/themes/frosted.css +9 -0
- package/dist/themes/glass.css +8 -0
- package/dist/themes/metallic.css +2 -0
- package/dist/themes/neon.css +11 -0
- package/dist/themes/stark.css +2 -0
- package/dist/tokens.css +139 -3
- package/dist/useSequence-C-eG3OvH.d.ts +69 -0
- package/dist/video-DaZDielA.d.ts +602 -0
- package/dist/video.d.ts +87 -0
- package/dist/video.js +22 -0
- package/package.json +58 -4
- package/references/data-display.md +253 -0
- package/references/diagrams.md +456 -0
- package/references/motion.md +223 -0
- package/references/scenes.md +381 -0
package/COMPONENTS.md
CHANGED
|
@@ -1,112 +1,1572 @@
|
|
|
1
1
|
# Components
|
|
2
2
|
|
|
3
|
-
> Auto-generated from `*.showcase.tsx` by `scripts/gen-manifest.mjs`. Do not edit by hand.
|
|
3
|
+
> Auto-generated from `*.showcase.tsx` and `src/scenes/schema/*.ts` by `scripts/gen-manifest.mjs`. Do not edit by hand.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Import from whichever subpath matches what you need:
|
|
6
6
|
|
|
7
7
|
```tsx
|
|
8
8
|
import { Button, Card } from "my-you-eye";
|
|
9
|
+
import { Reveal, Stagger } from "my-you-eye/motion";
|
|
10
|
+
import { CodeScene, DiagramScene, SceneRenderer } from "my-you-eye/scenes";
|
|
11
|
+
import { Presenter, SpeakerView, useSteps } from "my-you-eye/present";
|
|
12
|
+
import { PlayerEmbed } from "my-you-eye/present/player";
|
|
13
|
+
import { VideoRoot } from "my-you-eye/video";
|
|
9
14
|
import "my-you-eye/styles.css";
|
|
10
15
|
```
|
|
11
16
|
|
|
12
|
-
**
|
|
17
|
+
**114 components** across 12 groups and 4 tiers (`ui` / `motion` / `scenes` / `present`).
|
|
18
|
+
|
|
19
|
+
## Video schema
|
|
20
|
+
|
|
21
|
+
`my-you-eye/scenes` is the entire authoring surface for a video: one `Video` object, described field-by-field below. Nothing in this schema is a `className`, `style`, color, frame count, or pixel coordinate — appearance and pacing are the library's job, not the caller's (TODO.md D5). `<VideoRoot video={video} />` (`my-you-eye/video`) renders it to MP4; `<Presenter video={video} />` / `<PlayerEmbed video={video} />` (`my-you-eye/present`, `my-you-eye/present/player`) render the same object live, with identical pacing.
|
|
22
|
+
|
|
23
|
+
### `Video`
|
|
24
|
+
|
|
25
|
+
| Field | Type | Description |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| `meta?` | `VideoMeta` | — |
|
|
28
|
+
| `scenes` | `Scene[]` | — |
|
|
29
|
+
|
|
30
|
+
### `VideoMeta` (`Video.meta`)
|
|
31
|
+
|
|
32
|
+
| Field | Type | Description |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `fps?` | `24 \| 30 \| 60` | Frames per second. Default 30. |
|
|
35
|
+
| `size?` | `VideoSize` | Output dimensions. Default "1080p". |
|
|
36
|
+
| `theme?` | `VideoTheme` | Theme profile. Default "default". |
|
|
37
|
+
| `appearance?` | `"light" \| "dark"` | Light or dark rendering of the chosen theme. Default "dark" — video content is watched on a bright screen in a dark room far more often than the reverse. |
|
|
38
|
+
| `font?` | `FontMode` | Typeface set, from the same list the showcase's font picker uses. Default "sans". |
|
|
39
|
+
| `title?` | `string` | Video title. Used for the Remotion composition id and the presenter's document title; never rendered into a frame (author a `title` scene for that). |
|
|
40
|
+
| `watermark?` | `string` | Persistent corner handle/watermark, e.g. "@yourchannel". |
|
|
41
|
+
| `progressBar?` | `boolean` | Thin progress bar along the bottom edge of every frame. Default true. |
|
|
42
|
+
| `chapters?` | `boolean` | Chapter markers derived from `title` scenes. Default true. |
|
|
43
|
+
|
|
44
|
+
### Fields every scene accepts (`SceneBase`)
|
|
45
|
+
|
|
46
|
+
| Field | Type | Description |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `id?` | `string` | Stable id — used for chapter markers, presenter deep-links, and to name the scene in validation errors. Derived from the index when omitted. |
|
|
49
|
+
| `pace?` | `Pace` | Coarse pacing for every step in this scene. Default "normal". This is the only timing dial: everything else is derived from how much you wrote in `say`. |
|
|
50
|
+
| `transition?` | `SceneTransition` | Transition into this scene from the previous one. Default "fade". |
|
|
51
|
+
| `notes?` | `string` | Speaker-view note for the scene as a whole. Never rendered on screen. |
|
|
52
|
+
|
|
53
|
+
### Fields every step accepts (`StepBase`)
|
|
54
|
+
|
|
55
|
+
| Field | Type | Description |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| `id?` | `string` | Stable id. Auto-derived from the step's index when omitted; only worth setting for a step you want to deep-link to from the presenter. |
|
|
58
|
+
| `say?` | `string` | The narration line for this step. It does three jobs at once: speaker-view script, the content-length input that derives this step's duration (longer line → longer step), and the reserved anchor for narration/TTS timing later (TODO.md Phase G). Writing it is how you control pacing — there is no duration field. |
|
|
59
|
+
| `hold?` | `Beat` | Extra hold after the step's animation finishes, before the next step begins. For letting a reveal land. |
|
|
60
|
+
| `caption?` | `string` | Lower-third caption rendered on screen for this step's duration. Use for a key term, not for a transcript of `say`. |
|
|
61
|
+
|
|
62
|
+
### Scene kinds
|
|
63
|
+
|
|
64
|
+
Each `Video.scenes[]` entry is one of these eleven, discriminated by `kind`. Every scene's own fields are listed below IN ADDITION to `SceneBase` above; every step type's own fields are listed IN ADDITION to `StepBase` above.
|
|
65
|
+
|
|
66
|
+
#### `kind: "title"` — `TitleScene`
|
|
67
|
+
|
|
68
|
+
| Field | Type | Description |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `kind` | `"title"` | — |
|
|
71
|
+
| `title` | `string` | — |
|
|
72
|
+
| `subtitle?` | `string` | — |
|
|
73
|
+
| `chapter?` | `string` | Eyebrow above the title, e.g. "Part 3" or "01". |
|
|
74
|
+
| `align?` | `"center" \| "left"` | — |
|
|
75
|
+
|
|
76
|
+
#### `kind: "bullets"` — `BulletScene`
|
|
77
|
+
|
|
78
|
+
| Field | Type | Description |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `kind` | `"bullets"` | — |
|
|
81
|
+
| `heading?` | `string` | — |
|
|
82
|
+
| `bullets` | `BulletItem[]` | — |
|
|
83
|
+
|
|
84
|
+
Step (`BulletItem`):
|
|
85
|
+
|
|
86
|
+
| Field | Type | Description |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `text` | `string` | — |
|
|
89
|
+
| `children?` | `string[]` | Sub-points revealed together with their parent. |
|
|
90
|
+
| `emphasis?` | `"none" \| "strong"` | Marks the bullet that lands the point. Default "none". |
|
|
91
|
+
|
|
92
|
+
#### `kind: "code"` — `CodeScene`
|
|
93
|
+
|
|
94
|
+
| Field | Type | Description |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| `kind` | `"code"` | — |
|
|
97
|
+
| `code` | `string` | Source shown before the first step runs. |
|
|
98
|
+
| `lang?` | `string` | Language id for the highlighter, e.g. "ts", "tsx", "python". |
|
|
99
|
+
| `file?` | `string` | Filename shown in the header tab. |
|
|
100
|
+
| `lineNumbers?` | `boolean` | Show the line-number gutter. Default true. |
|
|
101
|
+
| `steps` | `CodeStep[]` | — |
|
|
102
|
+
|
|
103
|
+
Step (`CodeStep`):
|
|
104
|
+
|
|
105
|
+
| Field | Type | Description |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| `focus?` | `LineRange` | Lines to focus. Everything else dims and the camera frames the range. |
|
|
108
|
+
| `highlight?` | `string[]` | Substrings inside the focused lines to highlight inline. Matched literally, not as a regex. |
|
|
109
|
+
| `code?` | `string` | Replaces the source for this step. Rendered as an animated diff from whatever was on screen before it — that diff is the whole reason to split a walkthrough into steps rather than showing the final file. |
|
|
110
|
+
| `typed?` | `boolean` | Types the source in character by character instead of cutting to it. Meaningful on the first step, or on any step that supplies `code`. |
|
|
111
|
+
| `annotate?` | `CodeAnnotation[]` | Leader-line callouts pinned to source lines. |
|
|
112
|
+
|
|
113
|
+
#### `kind: "terminal"` — `TerminalScene`
|
|
114
|
+
|
|
115
|
+
| Field | Type | Description |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| `kind` | `"terminal"` | — |
|
|
118
|
+
| `entries` | `TerminalStep[]` | — |
|
|
119
|
+
| `cwd?` | `string` | — |
|
|
120
|
+
| `user?` | `string` | — |
|
|
121
|
+
| `host?` | `string` | — |
|
|
122
|
+
| `title?` | `string` | Caption for the window title bar. Defaults to `cwd`. |
|
|
123
|
+
| `prompt?` | `"$" \| ">" \| "#" \| "❯"` | — |
|
|
124
|
+
| `scheme?` | `"default" \| "matrix" \| "amber"` | Color decorator — forwarded to `Terminal`'s `scheme`. Default "default". |
|
|
125
|
+
| `chrome?` | `"dots" \| "none"` | Window-chrome decorator — forwarded to `Terminal`'s `chrome`. Default "dots". |
|
|
126
|
+
| `rows?` | `number` | Fixed visible height in lines — forwarded to `Terminal`'s `rows`. Defaults to 12: a scene draws into a fixed video frame, so the terminal always holds a constant height and scrolls its content rather than growing as it types. This only tunes how tall it holds. |
|
|
127
|
+
|
|
128
|
+
Step (`TerminalStep`):
|
|
129
|
+
|
|
130
|
+
| Field | Type | Description |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| `command?` | `string` | Command typed after the prompt. Omit for an output-only entry (a banner, a log tail). |
|
|
133
|
+
| `output?` | `string` | Output body shown under the command. |
|
|
134
|
+
| `language?` | `string` | Language id for highlighting `output`. |
|
|
135
|
+
| `exitCode?` | `number` | Process exit code — renders a badge (0 reads success, non-zero danger). |
|
|
136
|
+
| `spinner?` | `string` | Shows a spinner with this label while the step runs, before `output` lands. For a step that should read as "this takes a while". |
|
|
137
|
+
| `cwd?` | `string` | Per-entry overrides of the prompt chrome — each independently optional, and each PERSISTS to every following entry until overridden again, mirroring `Terminal`'s own per-entry override semantics (a real shell's `cd`/`ssh` changes the prompt for every command after it, not just that one line). Falls back to the scene-level prop of the same name when never set by any entry up to this point. |
|
|
138
|
+
| `user?` | `string` | — |
|
|
139
|
+
| `host?` | `string` | — |
|
|
140
|
+
| `promptGlyph?` | `"$" \| ">" \| "#" \| "❯"` | — |
|
|
141
|
+
|
|
142
|
+
#### `kind: "diagram"` — `DiagramScene`
|
|
143
|
+
|
|
144
|
+
| Field | Type | Description |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| `kind` | `"diagram"` | — |
|
|
147
|
+
| `preset?` | `DiagramPreset` | Default "architecture". |
|
|
148
|
+
| `title?` | `string` | — |
|
|
149
|
+
| `nodes` | `DiagramNode[]` | — |
|
|
150
|
+
| `edges` | `DiagramEdge[]` | — |
|
|
151
|
+
| `groups?` | `DiagramGroup[]` | — |
|
|
152
|
+
| `layout?` | `DiagramLayout` | Overrides the preset's default placement strategy. |
|
|
153
|
+
| `steps` | `DiagramStep[]` | — |
|
|
154
|
+
|
|
155
|
+
Step (`DiagramStep`):
|
|
156
|
+
|
|
157
|
+
| Field | Type | Description |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| `reveal?` | `string[]` | Node and group ids that appear on this step. Anything never named in any step's `reveal` is present from the first frame. |
|
|
160
|
+
| `connect?` | `string[]` | Edge ids whose line draws on this step. |
|
|
161
|
+
| `flow?` | `string[]` | Edge ids that carry animated flow tokens for this step's duration — the "watch the request travel" beat. |
|
|
162
|
+
| `focus?` | `string[]` | Node ids to spotlight; everything else dims. |
|
|
163
|
+
| `annotate?` | `DiagramAnnotation[]` | Leader-line callouts pinned to nodes. |
|
|
164
|
+
|
|
165
|
+
#### `kind: "sequence"` — `SequenceScene`
|
|
166
|
+
|
|
167
|
+
| Field | Type | Description |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| `kind` | `"sequence"` | — |
|
|
170
|
+
| `title?` | `string` | — |
|
|
171
|
+
| `participants` | `SequenceParticipantSpec[]` | — |
|
|
172
|
+
| `messages` | `SequenceStep[]` | Ordered messages and notes. Order is both the vertical stacking order and the reveal order. Activation bars are derived from it. |
|
|
173
|
+
|
|
174
|
+
Step variant (`SequenceMessageStep`):
|
|
175
|
+
|
|
176
|
+
| Field | Type | Description |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| `type` | `"message"` | — |
|
|
179
|
+
| `from` | `string` | Participant id the message leaves from. |
|
|
180
|
+
| `to` | `string` | Participant id it arrives at. Equal to `from` draws a self-call loop. |
|
|
181
|
+
| `label?` | `string` | — |
|
|
182
|
+
| `kind?` | `"sync" \| "async" \| "data" \| "error"` | Default "sync". Use "data" for a return/reply and "error" for a failure path — that is what makes the diagram readable at a glance. |
|
|
183
|
+
|
|
184
|
+
Step variant (`SequenceNoteStep`):
|
|
185
|
+
|
|
186
|
+
| Field | Type | Description |
|
|
187
|
+
|---|---|---|
|
|
188
|
+
| `type` | `"note"` | — |
|
|
189
|
+
| `text` | `string` | — |
|
|
190
|
+
| `on` | `string[]` | Participant ids the note attaches to. One anchors it to that lane; two or more span from the leftmost to the rightmost. |
|
|
191
|
+
|
|
192
|
+
#### `kind: "chart"` — `ChartScene`
|
|
193
|
+
|
|
194
|
+
| Field | Type | Description |
|
|
195
|
+
|---|---|---|
|
|
196
|
+
| `kind` | `"chart"` | — |
|
|
197
|
+
| `title?` | `string` | — |
|
|
198
|
+
| `subtitle?` | `string` | — |
|
|
199
|
+
| `chart` | `ChartSpec` | — |
|
|
200
|
+
| `steps?` | `ChartStep[]` | Omit for a single-beat scene that just draws the chart on. |
|
|
201
|
+
|
|
202
|
+
Step (`ChartStep`):
|
|
203
|
+
|
|
204
|
+
| Field | Type | Description |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| `series?` | `string[]` | Series labels revealed on this step. Omitted on every step means the whole chart draws on over the scene's first step. |
|
|
207
|
+
| `callout?` | `{ value: number; label: string; format?: NumberFormat; }` | A number to pull out as a counted-up callout while this step runs. |
|
|
208
|
+
| `focus?` | `string` | Category label to spotlight — its bar/point/slice stays lit and the rest dim. |
|
|
209
|
+
|
|
210
|
+
#### `kind: "stat"` — `StatScene`
|
|
211
|
+
|
|
212
|
+
| Field | Type | Description |
|
|
213
|
+
|---|---|---|
|
|
214
|
+
| `kind` | `"stat"` | — |
|
|
215
|
+
| `heading?` | `string` | — |
|
|
216
|
+
| `stats` | `StatItem[]` | — |
|
|
217
|
+
| `columns?` | `2 \| 3 \| 4 \| 5 \| 6` | Tiles per row at the widest breakpoint. Default 4. |
|
|
218
|
+
|
|
219
|
+
Step (`StatItem`):
|
|
220
|
+
|
|
221
|
+
| Field | Type | Description |
|
|
222
|
+
|---|---|---|
|
|
223
|
+
| `label` | `string` | — |
|
|
224
|
+
| `value?` | `number` | Numeric target — counted up from zero. |
|
|
225
|
+
| `text?` | `string` | Non-numeric value ("Healthy", "us-east-1"). Use instead of `value`. |
|
|
226
|
+
| `format?` | `NumberFormat` | — |
|
|
227
|
+
| `delta?` | `number` | Change against the previous period, signed. |
|
|
228
|
+
| `positiveIsGood?` | `boolean` | Whether a positive `delta` should read as good. Default true — set false for metrics like latency or error rate. |
|
|
229
|
+
| `sparkline?` | `number[]` | Trend series drawn as an inline sparkline. |
|
|
230
|
+
|
|
231
|
+
#### `kind: "compare"` — `CompareScene`
|
|
232
|
+
|
|
233
|
+
| Field | Type | Description |
|
|
234
|
+
|---|---|---|
|
|
235
|
+
| `kind` | `"compare"` | — |
|
|
236
|
+
| `mode?` | `"columns" \| "wipe"` | "columns" sets them side by side; "wipe" overlays them under a divider that sweeps across. Default "columns". |
|
|
237
|
+
| `heading?` | `string` | — |
|
|
238
|
+
| `before` | `ComparePane` | — |
|
|
239
|
+
| `after` | `ComparePane` | — |
|
|
240
|
+
| `say?` | `string` | Narration for the reveal of `after`. |
|
|
241
|
+
|
|
242
|
+
`ComparePane`:
|
|
243
|
+
|
|
244
|
+
```ts
|
|
245
|
+
type ComparePane =
|
|
246
|
+
| { content: "code"; label: string; code: string; lang?: string }
|
|
247
|
+
| { content: "text"; label: string; text: string }
|
|
248
|
+
| { content: "image"; label: string; src: string; alt?: string };
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
#### `kind: "walkthrough"` — `WalkthroughScene`
|
|
252
|
+
|
|
253
|
+
| Field | Type | Description |
|
|
254
|
+
|---|---|---|
|
|
255
|
+
| `kind` | `"walkthrough"` | — |
|
|
256
|
+
| `frame?` | `"browser" \| "window" \| "phone"` | Chrome drawn around the screenshot. Default "browser". |
|
|
257
|
+
| `image` | `string` | Image rendered inside the frame — a URL or a data URI. |
|
|
258
|
+
| `url?` | `string` | Address shown in the browser chrome. |
|
|
259
|
+
| `title?` | `string` | Caption for window/phone chrome. |
|
|
260
|
+
| `steps` | `WalkthroughStep[]` | — |
|
|
261
|
+
|
|
262
|
+
Step (`WalkthroughStep`):
|
|
263
|
+
|
|
264
|
+
| Field | Type | Description |
|
|
265
|
+
|---|---|---|
|
|
266
|
+
| `to?` | `PercentPoint` | Where the cursor travels to, in percent of the frame. |
|
|
267
|
+
| `action?` | `"none" \| "click" \| "double-click" \| "drag"` | What the cursor does on arrival. Default "none". |
|
|
268
|
+
| `type?` | `string` | Text typed after the action lands. |
|
|
269
|
+
| `spotlight?` | `PercentRect` | Region to spotlight — everything outside it dims. |
|
|
270
|
+
| `annotate?` | `string` | Callout pinned at the cursor. |
|
|
271
|
+
|
|
272
|
+
#### `kind: "outro"` — `OutroScene`
|
|
273
|
+
|
|
274
|
+
| Field | Type | Description |
|
|
275
|
+
|---|---|---|
|
|
276
|
+
| `kind` | `"outro"` | — |
|
|
277
|
+
| `title?` | `string` | — |
|
|
278
|
+
| `subtitle?` | `string` | — |
|
|
279
|
+
| `links?` | `OutroLink[]` | — |
|
|
280
|
+
| `cta?` | `string` | Closing call to action, e.g. "Subscribe for part 4". |
|
|
13
281
|
|
|
14
282
|
## canvas
|
|
15
283
|
|
|
16
|
-
| Component | Variants | Demos |
|
|
284
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
285
|
+
|---|---|---|---|
|
|
286
|
+
| `Annotation` | `my-you-eye` | — | Marker variants, Auto-flip near the container edge, Vertical sides (top/bottom), Progress reveal |
|
|
287
|
+
| `Canvas` | `my-you-eye` | — | Empty grid, Populated graph, Edge states |
|
|
288
|
+
| `ConnectionLayer` | `my-you-eye` | — | Many edges, one svg, Parallel edges (automatic bundling), Edge states share the same visual language as ConnectionLine |
|
|
289
|
+
| `ConnectionLine` | `my-you-eye` | — | Path variants, Edge states, Decorations (arrowheads + labels), Label positions, Label on a genuinely curved path, ConnectionLayer (one svg, many edges), Shape anchoring (from/to as a rect, not a point), Arrowhead shapes, Orthogonal routing avoids obstacles, Waypoints, Edge kind (semantic styling), Draw-on progress |
|
|
290
|
+
| `Graph` | `my-you-eye` | — | Pipeline editor (drag nodes, connect ports, delete selected) |
|
|
291
|
+
| `GraphGroup` | `my-you-eye` | border: **dashed** / solid | Architecture boundaries, Label placement |
|
|
292
|
+
| `GraphNode` | `my-you-eye` | variant: **default** / muted / selected / simple<br>shape: **box** / pill | Variants, Simple variant, Legacy ports on a tall node, Free-form body, Header variations, Accent bar color, Footer variations, Shape (state-machine pill), All variations together |
|
|
293
|
+
| `Port` | `my-you-eye` | side: **in** / out<br>state: connected / **default** / highlighted | States (circle), Socket shape — mounted on a border, Socket mount — outward vs inward, Socket shape — all states, Circle vs socket, side by side |
|
|
294
|
+
|
|
295
|
+
### canvas — props
|
|
296
|
+
|
|
297
|
+
#### `Annotation`
|
|
298
|
+
|
|
299
|
+
Also accepts everything from `Omit<HTMLAttributes<HTMLDivElement>, "children">`.
|
|
300
|
+
|
|
301
|
+
| Prop | Type | Description |
|
|
302
|
+
|---|---|---|
|
|
303
|
+
| `target` | `Point` | Point being annotated, in the same coordinate space as the nearest `position: relative` ancestor (e.g. a `Canvas`'s canvas-space, or a screenshot `Image`'s own pixel space). |
|
|
304
|
+
| `label` | `ReactNode` | — |
|
|
305
|
+
| `side?` | `"left" \| "right" \| "top" \| "bottom"` | Preferred side the label sits on. "left"/"right" (default "right") are auto-flipped near a container edge when `containerWidth` is given; "top"/"bottom" anchor the label directly above/below `target` instead (no auto-flip — there's no `containerHeight` prop to flip against, so a vertical leader alw… |
|
|
306
|
+
| `distance?` | `number` | Distance (px) from `target` to the label's near edge, before flip. |
|
|
307
|
+
| `marker?` | `"none" \| "arrow" \| "pin" \| ArrowheadShape` | Pointer-end decoration at `target`. |
|
|
308
|
+
| `leaderVariant?` | `Extract<ConnectionVariant, "straight" \| "stepped">` | Leader-line shape — reuses `connection-line/geometry.ts`'s own variant names (a subset: a callout leader is either direct or right-angled, never a curve). |
|
|
309
|
+
| `containerWidth?` | `number` | Width (px) of the space Annotation overlays — used only to flip the label to the opposite side of `target` before it would run past this edge. |
|
|
310
|
+
| `progress?` | `number` | 0→1 reveal progress, default 1. |
|
|
311
|
+
| `accentColor?` | `"primary" \| "success" \| "warning" \| "danger" \| "muted"` | — |
|
|
312
|
+
|
|
313
|
+
#### `Canvas`
|
|
314
|
+
|
|
315
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
316
|
+
|
|
317
|
+
| Prop | Type | Description |
|
|
318
|
+
|---|---|---|
|
|
319
|
+
| `gridSize?` | `number` | — |
|
|
320
|
+
| `initialZoom?` | `number` | — |
|
|
321
|
+
| `minZoom?` | `number` | — |
|
|
322
|
+
| `maxZoom?` | `number` | — |
|
|
323
|
+
| `zoomStep?` | `number` | — |
|
|
324
|
+
| `controls?` | `ReactNode` | — |
|
|
325
|
+
| `onBackgroundClick?` | `() => void` | — |
|
|
326
|
+
| `offset?` | `{ x: number; y: number }` | — |
|
|
327
|
+
| `zoom?` | `number` | — |
|
|
328
|
+
| `onOffsetChange?` | `(o: { x: number; y: number }) => void` | — |
|
|
329
|
+
| `onZoomChange?` | `(z: number) => void` | — |
|
|
330
|
+
|
|
331
|
+
#### `ConnectionLayer`
|
|
332
|
+
|
|
333
|
+
Also accepts everything from `Omit<SVGAttributes<SVGSVGElement>, "id">`.
|
|
334
|
+
|
|
335
|
+
| Prop | Type | Description |
|
|
336
|
+
|---|---|---|
|
|
337
|
+
| `edges` | `ConnectionLayerEdge[]` | Edges to render. |
|
|
338
|
+
| `bundleParallelEdges?` | `boolean` | Automatically nudges apart edges that share an endpoint pair (default true). |
|
|
339
|
+
| `autoLabelPlacement?` | `boolean` | Automatically searches for a label position clear of every other edge's path when an edge has a `label` but no explicit `labelPosition` (default true). |
|
|
340
|
+
|
|
341
|
+
#### `ConnectionLine`
|
|
342
|
+
|
|
343
|
+
Also accepts everything from `VariantProps<typeof connectionLineVariants>`.
|
|
344
|
+
|
|
345
|
+
| Prop | Type | Description |
|
|
346
|
+
|---|---|---|
|
|
347
|
+
| `from` | `EdgeEnd` | A bare `{x, y}` (the route starts exactly there), or an `AnchoredEnd` `{ rect, anchor?, inset? }` — a shape the edge attaches to. |
|
|
348
|
+
| `to` | `EdgeEnd` | — |
|
|
349
|
+
| `arrowhead?` | `ArrowheadProp` | `true` draws the default solid triangle; a shape name selects another terminator (`"open"`, `"circle"`, `"diamond"`, `"bar"`, `"crow"`, …). |
|
|
350
|
+
| `label?` | `string` | — |
|
|
351
|
+
| `labelPosition?` | `number` | Position along the actual rendered path (0–100), default 50 (midpoint). |
|
|
352
|
+
| `labelElevated?` | `boolean` | Toggles a subtle drop shadow on the label badge (default true). |
|
|
353
|
+
| `waypoints?` | `Point[]` | Points the route must pass through, in order, between `from` and `to`. |
|
|
354
|
+
| `obstacles?` | `ObstacleRect[]` | Rects an `orthogonal` route detours around. |
|
|
355
|
+
| `kind?` | `ConnectionKind` | Semantic edge type — see `KIND_STYLES`. |
|
|
356
|
+
| `offset?` | `number` | Perpendicular offset (px) applied to the whole route. |
|
|
357
|
+
| `progress?` | `number` | 0→1 draw-on progress (TODO.md D4's progress-in convention). |
|
|
358
|
+
| `className?` | `string` | — |
|
|
359
|
+
|
|
360
|
+
#### `Graph`
|
|
361
|
+
|
|
362
|
+
| Prop | Type | Description |
|
|
363
|
+
|---|---|---|
|
|
364
|
+
| `initialNodes` | `EditorNode[]` | — |
|
|
365
|
+
| `initialEdges?` | `EditorEdge[]` | — |
|
|
366
|
+
| `snapToGrid?` | `boolean` | — |
|
|
367
|
+
| `className?` | `string` | — |
|
|
368
|
+
| `controls?` | `ReactNode` | — |
|
|
369
|
+
| `onChange?` | `(state: { nodes: EditorNode[]; edges: EditorEdge[] }) => void` | — |
|
|
370
|
+
|
|
371
|
+
#### `GraphGroup`
|
|
372
|
+
|
|
373
|
+
Also accepts everything from `Omit<HTMLAttributes<HTMLDivElement>, "children">`, `VariantProps<typeof graphGroupVariants>`.
|
|
374
|
+
|
|
375
|
+
| Prop | Type | Description |
|
|
376
|
+
|---|---|---|
|
|
377
|
+
| `x` | `number` | Canvas-space position/size, same coordinate space as `GraphNode`'s `x`/`y`. |
|
|
378
|
+
| `y` | `number` | — |
|
|
379
|
+
| `width` | `number` | — |
|
|
380
|
+
| `height` | `number` | — |
|
|
381
|
+
| `label?` | `ReactNode` | — |
|
|
382
|
+
| `icon?` | `ReactNode` | Icon shown before the label text. |
|
|
383
|
+
| `labelPlacement?` | `"top-left" \| "top-center" \| "top-right" \| "outside-top"` | Where the label chip sits relative to the region. "top-left" (default) is the usual choice for architecture diagrams ("VPC", "Cluster", …). "outside-top" floats the chip entirely above the box instead of inset, for when the group's own top-left corner needs to stay clear (e.g. a node is positioned … |
|
|
384
|
+
| `accentColor?` | `"primary" \| "success" \| "warning" \| "danger" \| "muted"` | — |
|
|
385
|
+
|
|
386
|
+
#### `GraphNode`
|
|
387
|
+
|
|
388
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof graphNodeVariants>`.
|
|
389
|
+
|
|
390
|
+
| Prop | Type | Description |
|
|
17
391
|
|---|---|---|
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
392
|
+
| `x` | `number` | — |
|
|
393
|
+
| `y` | `number` | — |
|
|
394
|
+
| `header?` | `ReactNode` | — |
|
|
395
|
+
| `accent?` | `boolean` | — |
|
|
396
|
+
| `ports?` | `PortDef[]` | — |
|
|
397
|
+
| `footer?` | `ReactNode` | — |
|
|
398
|
+
| `rows?` | `GraphNodeRow[]` | — |
|
|
399
|
+
| `headerIcon?` | `ReactNode` | Icon shown at the start of the header, before the title — rendered in a small tinted tile in `accentColor`. |
|
|
400
|
+
| `headerStatus?` | `ReactNode` | Status/badge slot shown at the end of the header, after the title — e.g. a `StatusDot` or `Badge`. |
|
|
401
|
+
| `subtitle?` | `ReactNode` | Second, muted line under the header title. |
|
|
402
|
+
| `headerDots?` | `boolean` | Mac-style red/amber/green window buttons at the start of the header. **Off by default**, and deliberately so: they are the chrome of a macOS window, and on a service/queue/database node they say nothing — three decorations sitting in the one place a reader looks first (owner: "they kinda feel rando… |
|
|
403
|
+
| `accentColor?` | `"primary" \| "success" \| "warning" \| "danger" \| "muted"` | Accent bar color, only visible when `accent` is true. |
|
|
404
|
+
| `footerMetric?` | `ReactNode` | Metric/count shown at the end of the footer row (e.g. "42 items"). |
|
|
405
|
+
| `footerAction?` | `ReactNode` | Small action slot (e.g. a `Button`) at the end of the footer row, after `footerMetric` if both are given. |
|
|
406
|
+
| `footerProgress?` | `number` | 0–100 progress value rendered as a compact inline bar in the footer, alongside `footer`'s text. |
|
|
407
|
+
|
|
408
|
+
#### `Port`
|
|
409
|
+
|
|
410
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof portVariants>`.
|
|
411
|
+
|
|
412
|
+
| Prop | Type | Description |
|
|
413
|
+
|---|---|---|
|
|
414
|
+
| `label?` | `string` | — |
|
|
415
|
+
| `shape?` | `"circle" \| "socket"` | "circle" (default) renders a full disc — the original look, unchanged, for a freestanding port that isn't mounted on any edge (e.g. a legend swatch, or GraphNode's legacy `ports` prop which already floats beside the node with its own label). "socket" renders a true half-disc via SVG path geometry —… |
|
|
416
|
+
| `mount?` | `"outward" \| "inward"` | Which way a `socket`'s rounded half bulges, relative to the border it's mounted on. `"outward"` (default) bulges away from the node — correct for a freestanding mount where nothing clips it. `"inward"` bulges into the node. |
|
|
417
|
+
|
|
418
|
+
## charts
|
|
419
|
+
|
|
420
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
421
|
+
|---|---|---|---|
|
|
422
|
+
| `BarChart` | `my-you-eye` | — | Single series (vertical), Grouped, multi-series, Stacked, Horizontal, Horizontal, grouped, Long category label, Empty, Draw-on progress (50%), Focus a category |
|
|
423
|
+
| `ChartFrame` | `my-you-eye` | — | Axes, gridlines & a custom plot, Loading, Empty |
|
|
424
|
+
| `Funnel` | `my-you-eye` | — | Four stages, Two stages, Long stage labels, Empty, Draw-on progress (50%) |
|
|
425
|
+
| `Gauge` | `my-you-eye` | — | Basic, Threshold bands — healthy, Threshold bands — critical, Custom range, Long label, Draw-on progress (50%) |
|
|
426
|
+
| `Heatmap` | `my-you-eye` | — | Activity calendar, Single column, Long row label, Empty, Draw-on progress (50%) |
|
|
427
|
+
| `Legend` | `my-you-eye` | — | Rect swatches (bar / area fills), Line swatches, Dot swatches (scatter / points), Vertical orientation |
|
|
428
|
+
| `LineChart` | `my-you-eye` | — | Single series, Multi-series, Area fill, No point markers, Long category label, Empty, Draw-on progress (50%), Focus a category |
|
|
429
|
+
| `PieChart` | `my-you-eye` | — | Pie, Donut with center label, Single category (no legend), Long labels, Empty, Draw-on progress (50%) |
|
|
430
|
+
| `ScatterPlot` | `my-you-eye` | — | Single series, With trend line, Multi-series (3, all-pairs cap), Long point label (tooltip), Loading, Empty, Draw-on progress (50%) |
|
|
431
|
+
| `Sparkline` | `my-you-eye` | — | Basic, Area fill, Downward trend, danger token, Inside StatCard, Empty, Draw-on progress (50%) |
|
|
432
|
+
|
|
433
|
+
### charts — props
|
|
434
|
+
|
|
435
|
+
#### `BarChart`
|
|
436
|
+
|
|
437
|
+
| Prop | Type | Description |
|
|
438
|
+
|---|---|---|
|
|
439
|
+
| `categories` | `string[]` | One label per data point — the category axis. |
|
|
440
|
+
| `series` | `BarChartSeries[]` | — |
|
|
441
|
+
| `orientation?` | `"vertical" \| "horizontal"` | — |
|
|
442
|
+
| `mode?` | `"grouped" \| "stacked"` | Only meaningful with 2+ series. |
|
|
443
|
+
| `title?` | `string` | — |
|
|
444
|
+
| `subtitle?` | `string` | — |
|
|
445
|
+
| `height?` | `number` | — |
|
|
446
|
+
| `valueFormat?` | `(value: number) => string` | — |
|
|
447
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
448
|
+
| `focus?` | `string` | Category label to spotlight — every other category's bars dim to `opacity-muted`. |
|
|
449
|
+
| `className?` | `string` | — |
|
|
450
|
+
|
|
451
|
+
#### `ChartFrame`
|
|
452
|
+
|
|
453
|
+
| Prop | Type | Description |
|
|
454
|
+
|---|---|---|
|
|
455
|
+
| `title?` | `string` | — |
|
|
456
|
+
| `subtitle?` | `string` | — |
|
|
457
|
+
| `height?` | `number` | Total SVG height in px, INCLUDING the x-axis band (dataviz rule: a fixed height must include the axis band, never just the plot). |
|
|
458
|
+
| `xLabels?` | `string[]` | Category labels for the x-axis. |
|
|
459
|
+
| `yTicks?` | `number[]` | Clean, already-rounded tick values for the y-axis (0 / 1,000 / 2,000…). |
|
|
460
|
+
| `yDomain?` | `[number, number]` | [min, max] the y-axis spans. |
|
|
461
|
+
| `formatYTick?` | `(value: number) => string` | — |
|
|
462
|
+
| `yAxisWidth?` | `number` | Explicit left-band width (px), reserved regardless of `yTicks`. |
|
|
463
|
+
| `legend?` | `ChartFrameLegendItem[]` | — |
|
|
464
|
+
| `loading?` | `boolean` | — |
|
|
465
|
+
| `empty?` | `boolean` | — |
|
|
466
|
+
| `emptyTitle?` | `string` | — |
|
|
467
|
+
| `emptyDescription?` | `string` | — |
|
|
468
|
+
| `children?` | `(ctx: ChartFrameRenderCtx) => ReactNode` | Optional because `loading` and `empty` short-circuit before the plot is ever rendered — a caller in either of those states has no marks to draw and was previously forced to pass a dummy render function to satisfy the type. |
|
|
469
|
+
| `tooltip?` | `ReactNode` | Tooltip content for the current hover target; ChartFrame owns positioning, the chart owns content and calls `onHover` from its marks. |
|
|
470
|
+
| `className?` | `string` | — |
|
|
471
|
+
|
|
472
|
+
#### `Funnel`
|
|
473
|
+
|
|
474
|
+
| Prop | Type | Description |
|
|
475
|
+
|---|---|---|
|
|
476
|
+
| `stages` | `FunnelStage[]` | Stages in order, first = the widest / entry stage. |
|
|
477
|
+
| `title?` | `string` | — |
|
|
478
|
+
| `subtitle?` | `string` | — |
|
|
479
|
+
| `valueFormat?` | `(value: number) => string` | — |
|
|
480
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
481
|
+
| `className?` | `string` | — |
|
|
482
|
+
|
|
483
|
+
#### `Gauge`
|
|
484
|
+
|
|
485
|
+
| Prop | Type | Description |
|
|
486
|
+
|---|---|---|
|
|
487
|
+
| `value` | `number` | — |
|
|
488
|
+
| `min?` | `number` | — |
|
|
489
|
+
| `max?` | `number` | — |
|
|
490
|
+
| `bands?` | `GaugeThresholdBand[]` | Threshold bands, ascending by `upTo`. |
|
|
491
|
+
| `label?` | `string` | — |
|
|
492
|
+
| `valueFormat?` | `(value: number) => string` | — |
|
|
493
|
+
| `size?` | `number` | — |
|
|
494
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
495
|
+
| `className?` | `string` | — |
|
|
496
|
+
|
|
497
|
+
#### `Heatmap`
|
|
498
|
+
|
|
499
|
+
| Prop | Type | Description |
|
|
500
|
+
|---|---|---|
|
|
501
|
+
| `xLabels` | `string[]` | Column labels (e.g. hours, days). |
|
|
502
|
+
| `yLabels` | `string[]` | Row labels (e.g. days, services). |
|
|
503
|
+
| `values` | `number[][]` | Row-major values: `values[row][col]`. |
|
|
504
|
+
| `title?` | `string` | — |
|
|
505
|
+
| `subtitle?` | `string` | — |
|
|
506
|
+
| `valueFormat?` | `(value: number) => string` | — |
|
|
507
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
508
|
+
| `className?` | `string` | — |
|
|
509
|
+
|
|
510
|
+
#### `Legend`
|
|
511
|
+
|
|
512
|
+
Also accepts everything from `Omit<HTMLAttributes<HTMLUListElement>, "children">`.
|
|
513
|
+
|
|
514
|
+
| Prop | Type | Description |
|
|
515
|
+
|---|---|---|
|
|
516
|
+
| `items` | `LegendItem[]` | — |
|
|
517
|
+
| `swatch?` | `"rect" \| "line" \| "dot"` | Swatch shape — "rect" for bar/area fills, "line" for line series, "dot" for point/scatter series. |
|
|
518
|
+
| `orientation?` | `"horizontal" \| "vertical"` | — |
|
|
519
|
+
|
|
520
|
+
#### `LineChart`
|
|
521
|
+
|
|
522
|
+
| Prop | Type | Description |
|
|
523
|
+
|---|---|---|
|
|
524
|
+
| `categories` | `string[]` | — |
|
|
525
|
+
| `series` | `LineChartSeries[]` | — |
|
|
526
|
+
| `area?` | `boolean` | Fill the area under each line at a light wash. |
|
|
527
|
+
| `showPoints?` | `boolean` | Show a marker dot at every data point. |
|
|
528
|
+
| `title?` | `string` | — |
|
|
529
|
+
| `subtitle?` | `string` | — |
|
|
530
|
+
| `height?` | `number` | — |
|
|
531
|
+
| `valueFormat?` | `(value: number) => string` | — |
|
|
532
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
533
|
+
| `focus?` | `string` | Category label to spotlight — every series' point marker at every other category dims to `opacity-muted` (the lines themselves, which span every category, stay at full opacity). |
|
|
534
|
+
| `className?` | `string` | — |
|
|
535
|
+
|
|
536
|
+
#### `PieChart`
|
|
537
|
+
|
|
538
|
+
| Prop | Type | Description |
|
|
539
|
+
|---|---|---|
|
|
540
|
+
| `slices` | `PieChartSlice[]` | — |
|
|
541
|
+
| `innerRadius?` | `number` | Donut hole radius as a fraction of the outer radius (0 = pie, default 0). |
|
|
542
|
+
| `centerLabel?` | `string` | Text shown at the center — only meaningful with `innerRadius > 0`. |
|
|
543
|
+
| `centerValue?` | `string` | — |
|
|
544
|
+
| `title?` | `string` | — |
|
|
545
|
+
| `size?` | `number` | — |
|
|
546
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
547
|
+
| `className?` | `string` | — |
|
|
548
|
+
|
|
549
|
+
#### `ScatterPlot`
|
|
550
|
+
|
|
551
|
+
| Prop | Type | Description |
|
|
552
|
+
|---|---|---|
|
|
553
|
+
| `series` | `ScatterSeries[]` | — |
|
|
554
|
+
| `trendLine?` | `boolean` | Draw a linear least-squares trend line through every point (all series pooled). |
|
|
555
|
+
| `title?` | `string` | — |
|
|
556
|
+
| `subtitle?` | `string` | — |
|
|
557
|
+
| `height?` | `number` | — |
|
|
558
|
+
| `width?` | `number` | — |
|
|
559
|
+
| `xFormat?` | `(value: number) => string` | — |
|
|
560
|
+
| `yFormat?` | `(value: number) => string` | — |
|
|
561
|
+
| `loading?` | `boolean` | — |
|
|
562
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
563
|
+
| `className?` | `string` | — |
|
|
564
|
+
|
|
565
|
+
#### `Sparkline`
|
|
566
|
+
|
|
567
|
+
| Prop | Type | Description |
|
|
568
|
+
|---|---|---|
|
|
569
|
+
| `data` | `number[]` | Plain numeric series — no axes, no categories (feeds StatCard's inline trend slot). |
|
|
570
|
+
| `token?` | `ChartColorToken` | — |
|
|
571
|
+
| `area?` | `boolean` | — |
|
|
572
|
+
| `width?` | `number` | SVG pixel width. |
|
|
573
|
+
| `height?` | `number` | SVG pixel height. |
|
|
574
|
+
| `progress?` | `number` | 0→1 draw-on progress. |
|
|
575
|
+
| `className?` | `string` | — |
|
|
23
576
|
|
|
24
577
|
## data
|
|
25
578
|
|
|
26
|
-
| Component | Variants | Demos |
|
|
579
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
580
|
+
|---|---|---|---|
|
|
581
|
+
| `CellType` | `my-you-eye` | — | Data Types, New data types, Numeric types, Column alignment |
|
|
582
|
+
| `DataList` | `my-you-eye` | striped: false / true | Density (normal vs compact), Striped, Label width, Alignment, Scrolling |
|
|
583
|
+
| `DataTable` | `my-you-eye` | variant: **default** / striped<br>density: compact / **normal** | Default, Striped, Scrolling + sticky header, Alignment, Truncation |
|
|
584
|
+
| `Table` | `my-you-eye` | variant: **default** / striped | Composition, Variants, Density, Truncation & expand, Sticky header |
|
|
585
|
+
| `Timeline` | `my-you-eye` | — | Horizontal — single lane, Horizontal — lanes, Spans — events with a duration, Shared scale across lanes, Label placement, Density, Progress (playhead reveal), Vertical — single lane, Vertical — lanes |
|
|
586
|
+
| `TreeView` | `my-you-eye` | — | Density (normal vs compact), Tall values (elbow/chevron alignment), Depth-based expand, Controlled expand state, Leading icons (click a row, then use arrow keys), Messy nested payload (hover to trace depth guides) |
|
|
587
|
+
|
|
588
|
+
### data — props
|
|
589
|
+
|
|
590
|
+
#### `CellType`
|
|
591
|
+
|
|
592
|
+
| Prop | Type | Description |
|
|
593
|
+
|---|---|---|
|
|
594
|
+
| `type?` | `CellValueType` | — |
|
|
595
|
+
| `value?` | `unknown` | — |
|
|
596
|
+
| `badgeVariant?` | `BadgeProps["variant"]` | — |
|
|
597
|
+
| `badgeStyle?` | `BadgeProps["tone"]` | — |
|
|
598
|
+
| `statusVariant?` | `StatusDotProps["variant"]` | — |
|
|
599
|
+
| `statusPulse?` | `boolean` | — |
|
|
600
|
+
| `replacements?` | `UrlReplacement[]` | — |
|
|
601
|
+
| `dateFormat?` | `Intl.DateTimeFormatOptions` | — |
|
|
602
|
+
| `compact?` | `boolean` | — |
|
|
603
|
+
| `fractionDigits?` | `number` | Fraction digits (0-20). |
|
|
604
|
+
| `currency?` | `string` | ISO 4217 currency code for "currency" type (default "USD"). |
|
|
605
|
+
| `displayUnit?` | `string` | Force a byte unit (e.g. "GB"). |
|
|
606
|
+
| `codeLanguage?` | `string` | Highlight language for "code" type (e.g. "ts", "sql"). |
|
|
607
|
+
| `avatarSrc?` | `string` | Optional photo URL for "user" type — falls back to initials (Avatar's own fallback behavior) when omitted. |
|
|
608
|
+
|
|
609
|
+
#### `DataList`
|
|
610
|
+
|
|
611
|
+
Also accepts everything from `HTMLAttributes<HTMLDListElement>`, `VariantProps<typeof dataListVariants>`.
|
|
612
|
+
|
|
613
|
+
| Prop | Type | Description |
|
|
614
|
+
|---|---|---|
|
|
615
|
+
| `items` | `DataListItem[]` | — |
|
|
616
|
+
| `replacements?` | `UrlReplacement[]` | — |
|
|
617
|
+
| `variant?` | `"default" \| "compact"` | — |
|
|
618
|
+
| `density?` | `"normal" \| "compact"` | — |
|
|
619
|
+
| `labelWidth?` | `"sm" \| "md" \| "lg"` | Label ("dt") column width. |
|
|
620
|
+
|
|
621
|
+
#### `DataTable`
|
|
622
|
+
|
|
623
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof dataTableVariants>`.
|
|
624
|
+
|
|
625
|
+
| Prop | Type | Description |
|
|
27
626
|
|---|---|---|
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
627
|
+
| `columns` | `DataTableColumn[]` | — |
|
|
628
|
+
| `rows` | `Record<string, unknown>[]` | — |
|
|
629
|
+
| `stickyHeader?` | `boolean` | — |
|
|
630
|
+
| `replacements?` | `UrlReplacement[]` | — |
|
|
631
|
+
| `layout?` | `"fixed" \| "auto"` | "fixed" locks columns to width hints/equal share (default). "auto" sizes columns to content and enables horizontal scroll — use for rows with divergent content widths (e.g. a type smoke test) where fixed columns would clip legitimate content. |
|
|
632
|
+
| `rowKey?` | `(row: Record<string, unknown>, index: number) => string \| number` | Stable React key for a row. |
|
|
633
|
+
|
|
634
|
+
#### `Table`
|
|
635
|
+
|
|
636
|
+
Also accepts everything from `HTMLAttributes<HTMLTableElement>`, `VariantProps<typeof tableVariants>`.
|
|
637
|
+
|
|
638
|
+
#### `Timeline`
|
|
639
|
+
|
|
640
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
641
|
+
|
|
642
|
+
| Prop | Type | Description |
|
|
643
|
+
|---|---|---|
|
|
644
|
+
| `events` | `TimelineEvent[]` | — |
|
|
645
|
+
| `orientation?` | `"horizontal" \| "vertical"` | "horizontal" (default): lanes stack as rows, events spaced proportionally to `at` along the row — for roadmaps and request traces. "vertical": lanes sit as columns, events stack sequentially top-to-bottom — for a git-history/changelog read. |
|
|
646
|
+
| `lanes?` | `string[]` | Explicit lane display order. |
|
|
647
|
+
| `density?` | `TimelineDensity` | Row height and text scale. `compact` also drops event descriptions in the vertical orientation — at that density they're what overflows. |
|
|
648
|
+
| `labelPlacement?` | `TimelineLabelPlacement` | Horizontal only. `"stagger"` (default) alternates labels above and below the rule so neighbouring events can't collide; `"below"` puts them all under it, which is tighter but only safe when events are well separated. |
|
|
649
|
+
| `axis?` | `(at: number) => string` | Horizontal only. |
|
|
650
|
+
| `progress?` | `number` | 0→1 reveal (TODO.md D4's progress-in convention). |
|
|
651
|
+
|
|
652
|
+
#### `TreeView`
|
|
653
|
+
|
|
654
|
+
| Prop | Type | Description |
|
|
655
|
+
|---|---|---|
|
|
656
|
+
| `data` | `TreeNode[]` | — |
|
|
657
|
+
| `indent?` | `IndentSize \| number` | "sm" \| "md" \| "lg", mapped to --grid-unit multiples (12 / 16 / 24px). |
|
|
658
|
+
| `variant?` | `"default" \| "condensed"` | — |
|
|
659
|
+
| `density?` | `"normal" \| "compact"` | — |
|
|
660
|
+
| `defaultExpandedDepth?` | `number` | — |
|
|
661
|
+
| `expandedKeys?` | `Set<string>` | — |
|
|
662
|
+
| `onToggle?` | `(id: string) => void` | — |
|
|
663
|
+
| `replacements?` | `UrlReplacement[]` | — |
|
|
664
|
+
| `className?` | `string` | Merged onto the root `<ul>`. |
|
|
33
665
|
|
|
34
666
|
## display
|
|
35
667
|
|
|
36
|
-
| Component | Variants | Demos |
|
|
668
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
669
|
+
|---|---|---|---|
|
|
670
|
+
| `Avatar` | `my-you-eye` | size: lg / **md** / sm | Sizes, Fallback variants, With image, With ring, With status dot |
|
|
671
|
+
| `Badge` | `my-you-eye` | variant: danger / **neutral** / primary / success / warning<br>tone: soft / **solid** | Variants (solid), Variants (soft) |
|
|
672
|
+
| `Card` | `my-you-eye` | variant: **default** / elevated / outlined | Variants, With footer actions, Size |
|
|
673
|
+
| `CodeBlock` | `my-you-eye` | variant: **default** / elevated | Bare (no header, no language), Language-only (badge overlay, no header bar), With header + language, Elevated, Line numbers, No wrap (horizontal scroll), Syntax highlighting (TS), Line highlights, Line highlights (implicit gutter), Multi-color highlights, Substring highlights, Substring highlights on a long line (wrap forced off), Merged highlights, Focus range (dims everything outside it), Bare (embedded in another surface), Syntax highlighting (CSS / HTML / SQL / YAML / Python) |
|
|
674
|
+
| `DeviceFrame` | `my-you-eye` | variant: **browser** / phone / window | Browser, Window, Phone |
|
|
675
|
+
| `DiffBlock` | `my-you-eye` | variant: **default** / elevated | Unified, Unified — word diff, Split, Split — word diff, Elevated |
|
|
676
|
+
| `EmptyState` | `my-you-eye` | — | Default, With icon and action |
|
|
677
|
+
| `Image` | `my-you-eye` | fit: contain / **cover** / fill / none / scaleDown<br>radius: full / lg / **md** / none / sm<br>aspect: **auto** / square / tall / video / wide<br>bordered: true<br>shadowed: true | Fit modes, Border radius, Aspect ratio, Styles, With caption |
|
|
678
|
+
| `Kbd` | `my-you-eye` | — | Default, Combinations |
|
|
679
|
+
| `Markdown` | `my-you-eye` | — | Rendered markdown |
|
|
680
|
+
| `ScrollArea` | `my-you-eye` | orientation: **both** / horizontal / vertical | Vertical scroll, Horizontal scroll, Both axes, Rounded corners (radius on ScrollArea itself, not a wrapper), Edge fade |
|
|
681
|
+
| `Separator` | `my-you-eye` | orientation: **horizontal** / vertical | Horizontal, Vertical |
|
|
682
|
+
| `StatusDot` | `my-you-eye` | variant: danger / info / **neutral** / success / warning<br>size: **md** / sm | Variants, Sizes, Pulsing |
|
|
683
|
+
| `Terminal` | `my-you-eye` | variant: **default** / elevated<br>scheme: amber / **default** / matrix<br>chrome: **dots** / none | Prompt glyphs, Title bar, Variant, Color schemes, Chrome decorator, Fixed height, scrolls as content grows, Prompt segments, changed mid-session |
|
|
684
|
+
|
|
685
|
+
### display — props
|
|
686
|
+
|
|
687
|
+
#### `Avatar`
|
|
688
|
+
|
|
689
|
+
Also accepts everything from `React.ComponentPropsWithoutRef<typeof Root>`, `VariantProps<typeof avatarVariants>`.
|
|
690
|
+
|
|
691
|
+
| Prop | Type | Description |
|
|
692
|
+
|---|---|---|
|
|
693
|
+
| `src?` | `string` | — |
|
|
694
|
+
| `alt?` | `string` | — |
|
|
695
|
+
| `fallback` | `string` | — |
|
|
696
|
+
|
|
697
|
+
#### `Badge`
|
|
698
|
+
|
|
699
|
+
Also accepts everything from `HTMLAttributes<HTMLSpanElement>`, `VariantProps<typeof badgeVariants>`.
|
|
700
|
+
|
|
701
|
+
#### `Card`
|
|
702
|
+
|
|
703
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof cardVariants>`.
|
|
704
|
+
|
|
705
|
+
#### `CodeBlock`
|
|
706
|
+
|
|
707
|
+
Also accepts everything from `HTMLAttributes<HTMLPreElement>`, `VariantProps<typeof codeBlockVariants>`.
|
|
708
|
+
|
|
709
|
+
| Prop | Type | Description |
|
|
710
|
+
|---|---|---|
|
|
711
|
+
| `code` | `string` | — |
|
|
712
|
+
| `language?` | `string` | — |
|
|
713
|
+
| `header?` | `string` | — |
|
|
714
|
+
| `wrap?` | `boolean` | — |
|
|
715
|
+
| `showLineNumbers?` | `boolean` | — |
|
|
716
|
+
| `highlight?` | `boolean` | Enable syntax highlighting for supported languages (js, ts, tsx, json, bash). |
|
|
717
|
+
| `highlightLines?` | `number[]` | 1-indexed line numbers to highlight. |
|
|
718
|
+
| `highlightColor?` | `CodeBlockHighlightGroup["color"]` | Color for highlightLines (default "primary"). |
|
|
719
|
+
| `highlightGroups?` | `CodeBlockHighlightGroup[]` | Multi-color highlight groups. |
|
|
720
|
+
| `highlightRanges?` | `HighlightRangeDef[]` | Substring-level highlight ranges (0-indexed char positions within each line). |
|
|
721
|
+
| `focusRange?` | `[number, number]` | 1-based line numbers outside this `[start, end]` range get a reduced opacity (the `opacity-muted` token) instead of full contrast — the "focus on this range, dim the rest" treatment a code walkthrough needs. |
|
|
722
|
+
| `lineId?` | `(lineNumber: number) => string` | Assigns an `id` to each rendered line's row element, keyed by its 1-based line number. |
|
|
723
|
+
| `bare?` | `boolean` | Strips the persistent header bar (filename/language badge) and the block's own opaque background/border, leaving only a hover-revealed copy button in the corner. |
|
|
724
|
+
|
|
725
|
+
#### `DeviceFrame`
|
|
726
|
+
|
|
727
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof deviceFrameVariants>`.
|
|
728
|
+
|
|
729
|
+
| Prop | Type | Description |
|
|
730
|
+
|---|---|---|
|
|
731
|
+
| `url?` | `string` | Address shown in the browser variant's URL bar. |
|
|
732
|
+
| `title?` | `string` | Title shown in the window variant's centered title bar (and the browser tab, if given alongside `url`). |
|
|
733
|
+
| `children` | `ReactNode` | — |
|
|
734
|
+
|
|
735
|
+
#### `DiffBlock`
|
|
736
|
+
|
|
737
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof diffBlockVariants>`.
|
|
738
|
+
|
|
739
|
+
| Prop | Type | Description |
|
|
740
|
+
|---|---|---|
|
|
741
|
+
| `lines` | `DiffLine[]` | — |
|
|
742
|
+
| `language?` | `string` | — |
|
|
743
|
+
| `header?` | `string` | — |
|
|
744
|
+
| `mode?` | `"unified" \| "split"` | "unified" (default): single column with +/- markers. "split": two-column side-by-side. |
|
|
745
|
+
| `highlight?` | `boolean` | Syntax-highlight line content via CodeBlock's tokenizer (js/ts/json/bash/css/html/py/yaml/sql). |
|
|
746
|
+
| `wordDiff?` | `boolean` | Word-level intra-line diff for a removed line immediately followed by an added line (a 1:1 changed pair). |
|
|
747
|
+
|
|
748
|
+
#### `EmptyState`
|
|
749
|
+
|
|
750
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
751
|
+
|
|
752
|
+
| Prop | Type | Description |
|
|
753
|
+
|---|---|---|
|
|
754
|
+
| `icon?` | `ReactNode` | — |
|
|
755
|
+
| `title` | `string` | — |
|
|
756
|
+
| `description?` | `string` | — |
|
|
757
|
+
| `action?` | `ReactNode` | — |
|
|
758
|
+
|
|
759
|
+
#### `Image`
|
|
760
|
+
|
|
761
|
+
Also accepts everything from `ImgHTMLAttributes<HTMLImageElement>`, `VariantProps<typeof imageVariants>`.
|
|
762
|
+
|
|
763
|
+
| Prop | Type | Description |
|
|
764
|
+
|---|---|---|
|
|
765
|
+
| `caption?` | `string` | — |
|
|
766
|
+
|
|
767
|
+
#### `Kbd`
|
|
768
|
+
|
|
769
|
+
Also accepts everything from `HTMLAttributes<HTMLElement>`.
|
|
770
|
+
|
|
771
|
+
#### `Markdown`
|
|
772
|
+
|
|
773
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
774
|
+
|
|
775
|
+
| Prop | Type | Description |
|
|
776
|
+
|---|---|---|
|
|
777
|
+
| `content` | `string` | — |
|
|
778
|
+
|
|
779
|
+
#### `ScrollArea`
|
|
780
|
+
|
|
781
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof scrollAreaVariants>`.
|
|
782
|
+
|
|
783
|
+
| Prop | Type | Description |
|
|
784
|
+
|---|---|---|
|
|
785
|
+
| `children` | `ReactNode` | — |
|
|
786
|
+
| `fade?` | `boolean` | Adds a CSS-mask fade at the scrollable edge(s) so a scrollable region visibly reads as scrollable even before it's touched. |
|
|
787
|
+
|
|
788
|
+
#### `Separator`
|
|
789
|
+
|
|
790
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof separatorVariants>`.
|
|
791
|
+
|
|
792
|
+
#### `StatusDot`
|
|
793
|
+
|
|
794
|
+
Also accepts everything from `HTMLAttributes<HTMLSpanElement>`, `VariantProps<typeof statusDotVariants>`.
|
|
795
|
+
|
|
796
|
+
| Prop | Type | Description |
|
|
797
|
+
|---|---|---|
|
|
798
|
+
| `pulse?` | `boolean` | — |
|
|
799
|
+
|
|
800
|
+
#### `Terminal`
|
|
801
|
+
|
|
802
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof terminalVariants>`.
|
|
803
|
+
|
|
804
|
+
| Prop | Type | Description |
|
|
37
805
|
|---|---|---|
|
|
38
|
-
| `
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
44
|
-
| `
|
|
45
|
-
| `Markdown` | — | Rendered markdown |
|
|
46
|
-
| `ScrollArea` | — | Vertical scroll, Horizontal scroll |
|
|
47
|
-
| `Separator` | orientation: vertical | Horizontal, Vertical |
|
|
48
|
-
| `StatusDot` | variant: danger / info / neutral / success / warning<br>size: md / sm | Variants, Sizes, Pulsing |
|
|
806
|
+
| `entries` | `TerminalEntry[]` | — |
|
|
807
|
+
| `prompt?` | `TerminalPromptGlyph` | Prompt glyph before each command. |
|
|
808
|
+
| `cwd?` | `string` | Working directory shown in the prompt chrome (and the title bar, if no `title` is given). |
|
|
809
|
+
| `user?` | `string` | Username shown before an "@host" segment in the prompt chrome. |
|
|
810
|
+
| `host?` | `string` | Hostname shown after "user@" in the prompt chrome. |
|
|
811
|
+
| `title?` | `string` | Caption for an optional window-style title bar above the entries. |
|
|
812
|
+
| `rows?` | `number` | Fixed visible height, expressed as a whole number of text lines (owner feedback: "I want to see a constant height terminal that does not change or move, and the content gets added within it ... like a scrolling action"). |
|
|
49
813
|
|
|
50
814
|
## feedback
|
|
51
815
|
|
|
52
|
-
| Component | Variants | Demos |
|
|
816
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
817
|
+
|---|---|---|---|
|
|
818
|
+
| `Alert` | `my-you-eye` | variant: danger / **info** / note / success / tip / warning<br>size: lg / **md** / sm / xl | Variants, With title, With icon, Size, Note & tip, Presentation size (xl) |
|
|
819
|
+
| `Progress` | `my-you-eye` | variant: danger / **default** / success / warning | Variants, No label |
|
|
820
|
+
| `Skeleton` | `my-you-eye` | shape: circle / rect / **text** | Shapes |
|
|
821
|
+
| `Spinner` | `my-you-eye` | size: lg / **md** / sm | Sizes |
|
|
822
|
+
| `Toast` | `my-you-eye` | variant: danger / **default** / success | Trigger toasts |
|
|
823
|
+
|
|
824
|
+
### feedback — props
|
|
825
|
+
|
|
826
|
+
#### `Alert`
|
|
827
|
+
|
|
828
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof alertVariants>`.
|
|
829
|
+
|
|
830
|
+
| Prop | Type | Description |
|
|
831
|
+
|---|---|---|
|
|
832
|
+
| `title?` | `string` | — |
|
|
833
|
+
| `icon?` | `ReactNode` | — |
|
|
834
|
+
|
|
835
|
+
#### `Progress`
|
|
836
|
+
|
|
837
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof barVariants>`.
|
|
838
|
+
|
|
839
|
+
| Prop | Type | Description |
|
|
53
840
|
|---|---|---|
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
841
|
+
| `value` | `number` | — |
|
|
842
|
+
| `label?` | `string` | — |
|
|
843
|
+
|
|
844
|
+
#### `Skeleton`
|
|
845
|
+
|
|
846
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof skeletonVariants>`.
|
|
847
|
+
|
|
848
|
+
| Prop | Type | Description |
|
|
849
|
+
|---|---|---|
|
|
850
|
+
| `width?` | `string` | — |
|
|
851
|
+
| `height?` | `string` | — |
|
|
852
|
+
|
|
853
|
+
#### `Spinner`
|
|
854
|
+
|
|
855
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof spinnerVariants>`.
|
|
59
856
|
|
|
60
857
|
## inputs
|
|
61
858
|
|
|
62
|
-
| Component | Variants | Demos |
|
|
63
|
-
|
|
64
|
-
| `Button` | variant: danger / ghost / primary / secondary<br>size: lg / md / sm | Variants, Sizes, Disabled & loading |
|
|
65
|
-
| `Checkbox` | size: md / sm | Sizes, States |
|
|
66
|
-
| `Combobox` | — | Basic, Disabled |
|
|
67
|
-
| `FileDrop` |
|
|
68
|
-
| `Input` | variant: filled<br>size: md / sm | Variants, Sizes, States |
|
|
69
|
-
| `Label` | — | Default |
|
|
70
|
-
| `MultiSelect` | — | Basic, Empty, Disabled |
|
|
71
|
-
| `RadioGroup` | — | Default |
|
|
72
|
-
| `Select` | size: md / sm | Sizes, States, No indicator |
|
|
73
|
-
| `Slider` |
|
|
74
|
-
| `Switch` | size: md / sm | Sizes, States |
|
|
75
|
-
| `Textarea` | variant: filled | Variants, States |
|
|
859
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
860
|
+
|---|---|---|---|
|
|
861
|
+
| `Button` | `my-you-eye` | variant: danger / ghost / **primary** / secondary<br>size: icon-sm / lg / **md** / sm | Variants, Sizes, Icon-only (compact), Disabled & loading |
|
|
862
|
+
| `Checkbox` | `my-you-eye` | size: **md** / sm | Sizes, States |
|
|
863
|
+
| `Combobox` | `my-you-eye` | — | Basic, Uncontrolled, Disabled |
|
|
864
|
+
| `FileDrop` | `my-you-eye` | state: **default** / dragging / error / success<br>size: lg / **md** / sm | Default, Sizes, States, Disabled, Single image only |
|
|
865
|
+
| `Input` | `my-you-eye` | variant: **default** / filled<br>size: **md** / sm<br>invalid: true | Variants, Sizes, States |
|
|
866
|
+
| `Label` | `my-you-eye` | — | Default |
|
|
867
|
+
| `MultiSelect` | `my-you-eye` | — | Basic, Uncontrolled, Empty, Disabled |
|
|
868
|
+
| `RadioGroup` | `my-you-eye` | — | Default |
|
|
869
|
+
| `Select` | `my-you-eye` | size: **md** / sm<br>invalid: true | Sizes, States, No indicator |
|
|
870
|
+
| `Slider` | `my-you-eye` | size: **md** / sm | Basic slider, Sizes |
|
|
871
|
+
| `Switch` | `my-you-eye` | size: **md** / sm | Sizes, States |
|
|
872
|
+
| `Textarea` | `my-you-eye` | variant: **default** / filled<br>invalid: true | Variants, States |
|
|
873
|
+
|
|
874
|
+
### inputs — props
|
|
875
|
+
|
|
876
|
+
#### `Button`
|
|
877
|
+
|
|
878
|
+
Also accepts everything from `ButtonHTMLAttributes<HTMLButtonElement>`, `VariantProps<typeof buttonVariants>`.
|
|
879
|
+
|
|
880
|
+
| Prop | Type | Description |
|
|
881
|
+
|---|---|---|
|
|
882
|
+
| `loading?` | `boolean` | — |
|
|
883
|
+
|
|
884
|
+
#### `Checkbox`
|
|
885
|
+
|
|
886
|
+
Also accepts everything from `React.ComponentPropsWithoutRef<typeof Root>`, `VariantProps<typeof checkboxVariants>`.
|
|
887
|
+
|
|
888
|
+
#### `Combobox`
|
|
889
|
+
|
|
890
|
+
| Prop | Type | Description |
|
|
891
|
+
|---|---|---|
|
|
892
|
+
| `options` | `ComboboxOption[]` | — |
|
|
893
|
+
| `value?` | `string` | Controlled selection. |
|
|
894
|
+
| `defaultValue?` | `string` | Initial selection for uncontrolled use. |
|
|
895
|
+
| `onChange?` | `(value: string) => void` | — |
|
|
896
|
+
| `placeholder?` | `string` | — |
|
|
897
|
+
| `emptyText?` | `string` | — |
|
|
898
|
+
| `className?` | `string` | — |
|
|
899
|
+
| `disabled?` | `boolean` | — |
|
|
900
|
+
|
|
901
|
+
#### `FileDrop`
|
|
902
|
+
|
|
903
|
+
Also accepts everything from `Omit<HTMLAttributes<HTMLDivElement>, "onDrop">`.
|
|
904
|
+
|
|
905
|
+
| Prop | Type | Description |
|
|
906
|
+
|---|---|---|
|
|
907
|
+
| `onDrop?` | `(files: File[]) => void` | — |
|
|
908
|
+
| `accept?` | `string` | — |
|
|
909
|
+
| `multiple?` | `boolean` | — |
|
|
910
|
+
| `maxSize?` | `number` | — |
|
|
911
|
+
| `size?` | `"sm" \| "md" \| "lg"` | — |
|
|
912
|
+
| `disabled?` | `boolean` | — |
|
|
913
|
+
|
|
914
|
+
#### `Input`
|
|
915
|
+
|
|
916
|
+
Also accepts everything from `Omit<InputHTMLAttributes<HTMLInputElement>, "size">`, `VariantProps<typeof inputVariants>`.
|
|
917
|
+
|
|
918
|
+
#### `Label`
|
|
919
|
+
|
|
920
|
+
Also accepts everything from `ComponentPropsWithoutRef<typeof Root>`, `VariantProps<typeof labelVariants>`.
|
|
921
|
+
|
|
922
|
+
#### `MultiSelect`
|
|
923
|
+
|
|
924
|
+
| Prop | Type | Description |
|
|
925
|
+
|---|---|---|
|
|
926
|
+
| `options` | `MultiSelectOption[]` | — |
|
|
927
|
+
| `value?` | `string[]` | Controlled selection. |
|
|
928
|
+
| `defaultValue?` | `string[]` | Initial selection for uncontrolled use. |
|
|
929
|
+
| `onChange?` | `(value: string[]) => void` | — |
|
|
930
|
+
| `placeholder?` | `string` | — |
|
|
931
|
+
| `emptyText?` | `string` | — |
|
|
932
|
+
| `className?` | `string` | — |
|
|
933
|
+
| `disabled?` | `boolean` | — |
|
|
934
|
+
|
|
935
|
+
#### `RadioGroup`
|
|
936
|
+
|
|
937
|
+
Also accepts everything from `React.ComponentPropsWithoutRef<typeof Root>`.
|
|
938
|
+
|
|
939
|
+
#### `Slider`
|
|
940
|
+
|
|
941
|
+
Also accepts everything from `Omit<InputHTMLAttributes<HTMLInputElement>, "type" \| "size">`, `VariantProps<typeof sliderTrackVariants>`.
|
|
942
|
+
|
|
943
|
+
| Prop | Type | Description |
|
|
944
|
+
|---|---|---|
|
|
945
|
+
| `label?` | `string` | — |
|
|
946
|
+
| `showValue?` | `boolean` | — |
|
|
947
|
+
|
|
948
|
+
#### `Switch`
|
|
949
|
+
|
|
950
|
+
Also accepts everything from `React.ComponentPropsWithoutRef<typeof Root>`, `VariantProps<typeof switchVariants>`.
|
|
951
|
+
|
|
952
|
+
#### `Textarea`
|
|
953
|
+
|
|
954
|
+
Also accepts everything from `Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "size">`, `VariantProps<typeof textareaVariants>`.
|
|
955
|
+
|
|
956
|
+
| Prop | Type | Description |
|
|
957
|
+
|---|---|---|
|
|
958
|
+
| `autoResize?` | `boolean` | — |
|
|
959
|
+
|
|
960
|
+
## motion
|
|
961
|
+
|
|
962
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
963
|
+
|---|---|---|---|
|
|
964
|
+
| `Beat` | `my-you-eye/motion` | — | Hold between reveals |
|
|
965
|
+
| `Camera` | `my-you-eye/motion` | — | Pan and fit zoom, spring="bouncy" |
|
|
966
|
+
| `Caption` | `my-you-eye/motion` | — | Positions, Bottom center |
|
|
967
|
+
| `CountUp` | `my-you-eye/motion` | — | Formats, Signed & duration |
|
|
968
|
+
| `Cursor` | `my-you-eye/motion` | — | Move, click, type, Shapes, Custom cursor node, Click effect variants |
|
|
969
|
+
| `Draw` | `my-you-eye/motion` | — | Basic path, Colors & stroke widths |
|
|
970
|
+
| `Highlight` | `my-you-eye/motion` | — | Modes, Overlay radius |
|
|
971
|
+
| `Morph` | `my-you-eye/motion` | — | Between layout slots, Cross-fade two elements, Row expanding into a panel |
|
|
972
|
+
| `Motion Core` | `my-you-eye/motion` | — | useTimeline / useProgress, Beat values, Easing vs spring, Seek & scrub |
|
|
973
|
+
| `Pulse` | `my-you-eye/motion` | — | Infinite, Loop=3, then settles, Pulse a non-text sibling |
|
|
974
|
+
| `Reveal` | `my-you-eye/motion` | — | from variants, asChild (no layout box) |
|
|
975
|
+
| `Ripple` | `my-you-eye/motion` | — | Click — ring, Click — solid vs double |
|
|
976
|
+
| `Shake` | `my-you-eye/motion` | — | Axis variants |
|
|
977
|
+
| `Slide` | `my-you-eye/motion` | — | mode="in" — 4 directions, mode="out" |
|
|
978
|
+
| `Spotlight` | `my-you-eye/motion` | — | One line of code, One node in a diagram, One card in a dashboard |
|
|
979
|
+
| `Stagger` | `my-you-eye/motion` | — | Reveal vs Stagger, from="first", from="center" |
|
|
980
|
+
| `TextSwap` | `my-you-eye/motion` | — | Fade, Roll |
|
|
981
|
+
| `Trace` | `my-you-eye/motion` | — | Single token, looping, Multiple tokens, spaced |
|
|
982
|
+
| `TypeText` | `my-you-eye/motion` | — | Char mode, Word mode, Caret variants, preserveLayout (no reflow) |
|
|
983
|
+
| `Unmask` | `my-you-eye/motion` | — | Directions & softness |
|
|
984
|
+
| `Wipe` | `my-you-eye/motion` | — | Linear — 4 directions, Radial |
|
|
985
|
+
|
|
986
|
+
### motion — props
|
|
987
|
+
|
|
988
|
+
#### `Beat`
|
|
989
|
+
|
|
990
|
+
| Prop | Type | Description |
|
|
991
|
+
|---|---|---|
|
|
992
|
+
| `children` | `ReactNode` | — |
|
|
993
|
+
| `hold?` | `BeatUnit` | Purely descriptive — documents how long this hold lasts in a step sequence. |
|
|
994
|
+
| `className?` | `string` | — |
|
|
995
|
+
|
|
996
|
+
#### `Camera`
|
|
997
|
+
|
|
998
|
+
Also accepts everything from `MovementTiming`.
|
|
999
|
+
|
|
1000
|
+
| Prop | Type | Description |
|
|
1001
|
+
|---|---|---|
|
|
1002
|
+
| `children` | `ReactNode` | — |
|
|
1003
|
+
| `keyframes` | `CameraKeyframe[]` | Camera moves, in frame order. `focus` is an explicit rect or the `id` of a descendant element to measure. |
|
|
1004
|
+
| `fit?` | `boolean` | Compute zoom automatically to fit the focused rect when a keyframe doesn't specify one. |
|
|
1005
|
+
| `className?` | `string` | — |
|
|
1006
|
+
|
|
1007
|
+
#### `Caption`
|
|
1008
|
+
|
|
1009
|
+
Also accepts everything from `Timing`.
|
|
1010
|
+
|
|
1011
|
+
| Prop | Type | Description |
|
|
1012
|
+
|---|---|---|
|
|
1013
|
+
| `text` | `string` | — |
|
|
1014
|
+
| `subtitle?` | `string` | — |
|
|
1015
|
+
| `position?` | `CaptionPosition` | Default "bottom-left". |
|
|
1016
|
+
| `className?` | `string` | — |
|
|
1017
|
+
|
|
1018
|
+
#### `CountUp`
|
|
1019
|
+
|
|
1020
|
+
Also accepts everything from `Timing`.
|
|
1021
|
+
|
|
1022
|
+
| Prop | Type | Description |
|
|
1023
|
+
|---|---|---|
|
|
1024
|
+
| `from?` | `number` | Starting value. |
|
|
1025
|
+
| `to` | `number` | Ending value. |
|
|
1026
|
+
| `format?` | `CountUpFormat` | Default "number". |
|
|
1027
|
+
| `formatOptions?` | `CountUpFormatOptions` | — |
|
|
1028
|
+
| `className?` | `string` | — |
|
|
1029
|
+
|
|
1030
|
+
#### `Cursor`
|
|
1031
|
+
|
|
1032
|
+
Also accepts everything from `Timing`.
|
|
1033
|
+
|
|
1034
|
+
| Prop | Type | Description |
|
|
1035
|
+
|---|---|---|
|
|
1036
|
+
| `events` | `CursorEvent[]` | Timed positions/actions, in frame order. |
|
|
1037
|
+
| `color?` | `MotionColor` | — |
|
|
1038
|
+
| `shape?` | `CursorShape` | Pointer appearance. |
|
|
1039
|
+
| `clickEffect?` | `RippleVariant` | Ripple treatment rendered on click/dblclick — forwarded straight to `Ripple`'s `variant`, never a second, hand-rolled click effect. |
|
|
1040
|
+
| `children?` | `ReactNode` | Escape hatch: a custom cursor node (an icon, an avatar, anything) replacing the built-in `shape` glyph entirely — `shape`/`color` are then ignored for the glyph itself (though `color` still tints the click `Ripple`). |
|
|
1041
|
+
| `className?` | `string` | — |
|
|
1042
|
+
|
|
1043
|
+
#### `Draw`
|
|
1044
|
+
|
|
1045
|
+
Also accepts everything from `Timing`.
|
|
1046
|
+
|
|
1047
|
+
| Prop | Type | Description |
|
|
1048
|
+
|---|---|---|
|
|
1049
|
+
| `d` | `string` | SVG path data to draw. |
|
|
1050
|
+
| `viewBox?` | `string` | viewBox for the wrapping <svg>. |
|
|
1051
|
+
| `color?` | `MotionColor` | — |
|
|
1052
|
+
| `strokeWidth?` | `DrawStrokeWidth` | — |
|
|
1053
|
+
| `className?` | `string` | — |
|
|
1054
|
+
|
|
1055
|
+
#### `Highlight`
|
|
1056
|
+
|
|
1057
|
+
Also accepts everything from `Timing`.
|
|
1058
|
+
|
|
1059
|
+
| Prop | Type | Description |
|
|
1060
|
+
|---|---|---|
|
|
1061
|
+
| `children` | `ReactNode` | — |
|
|
1062
|
+
| `mode?` | `HighlightMode` | Default "fill". |
|
|
1063
|
+
| `color?` | `HighlightColor` | Token color only — no arbitrary values. |
|
|
1064
|
+
| `as?` | `"span" \| "div"` | Host element. |
|
|
1065
|
+
| `className?` | `string` | — |
|
|
1066
|
+
|
|
1067
|
+
#### `Morph`
|
|
1068
|
+
|
|
1069
|
+
Also accepts everything from `Timing`.
|
|
1070
|
+
|
|
1071
|
+
| Prop | Type | Description |
|
|
1072
|
+
|---|---|---|
|
|
1073
|
+
| `children` | `ReactNode` | — |
|
|
1074
|
+
| `from` | `MorphSnapshot` | — |
|
|
1075
|
+
| `to` | `MorphSnapshot` | — |
|
|
1076
|
+
| `toChildren?` | `ReactNode` | A second node cross-faded in as `children` cross-fades out, both sharing the same interpolated position/size (e.g. a list row's summary cross-fading into its own detail panel while the box resizes). |
|
|
1077
|
+
| `className?` | `string` | — |
|
|
1078
|
+
|
|
1079
|
+
#### `Pulse`
|
|
1080
|
+
|
|
1081
|
+
Also accepts everything from `Timing`.
|
|
1082
|
+
|
|
1083
|
+
| Prop | Type | Description |
|
|
1084
|
+
|---|---|---|
|
|
1085
|
+
| `children` | `ReactNode` | — |
|
|
1086
|
+
| `loop?` | `number` | Finite number of breaths. |
|
|
1087
|
+
| `asChild?` | `boolean` | — |
|
|
1088
|
+
| `as?` | `"div" \| "span"` | — |
|
|
1089
|
+
| `className?` | `string` | — |
|
|
1090
|
+
|
|
1091
|
+
#### `Reveal`
|
|
1092
|
+
|
|
1093
|
+
Also accepts everything from `Timing`.
|
|
1094
|
+
|
|
1095
|
+
| Prop | Type | Description |
|
|
1096
|
+
|---|---|---|
|
|
1097
|
+
| `children` | `ReactNode` | — |
|
|
1098
|
+
| `from?` | `RevealFrom` | What the entrance animates from. |
|
|
1099
|
+
| `distance?` | `DistanceToken` | Travel distance for the directional variants, as a grid-unit multiple. |
|
|
1100
|
+
| `asChild?` | `boolean` | Render the animated style onto the single child element instead of wrapping it in a `<div>` — so Reveal never injects a layout box that could break a flex/grid parent. |
|
|
1101
|
+
| `as?` | `"div" \| "span"` | Host element when not using `asChild`. |
|
|
1102
|
+
| `className?` | `string` | — |
|
|
1103
|
+
|
|
1104
|
+
#### `Ripple`
|
|
1105
|
+
|
|
1106
|
+
Also accepts everything from `Timing`.
|
|
1107
|
+
|
|
1108
|
+
| Prop | Type | Description |
|
|
1109
|
+
|---|---|---|
|
|
1110
|
+
| `x` | `number` | Position within a `position: relative` ancestor — Ripple renders `position: absolute; left: x; top: y`. |
|
|
1111
|
+
| `y` | `number` | — |
|
|
1112
|
+
| `color?` | `MotionColor` | — |
|
|
1113
|
+
| `size?` | `DistanceToken` | Ring size at full expansion, as a grid-unit multiple. |
|
|
1114
|
+
| `variant?` | `RippleVariant` | Visual treatment (TODO.md C2 / Cursor's click feedback, extended rather than duplicated — Cursor forwards its own `clickEffect` prop straight through to this). "ring" (default, unchanged) is a single expanding, fading outline. "solid" is a filled disc fading out — reads as a firmer tap than an outl… |
|
|
1115
|
+
| `className?` | `string` | — |
|
|
1116
|
+
|
|
1117
|
+
#### `Shake`
|
|
1118
|
+
|
|
1119
|
+
Also accepts everything from `Timing`.
|
|
1120
|
+
|
|
1121
|
+
| Prop | Type | Description |
|
|
1122
|
+
|---|---|---|
|
|
1123
|
+
| `children` | `ReactNode` | — |
|
|
1124
|
+
| `axis?` | `ShakeAxis` | Default "x". |
|
|
1125
|
+
| `cycles?` | `number` | Oscillations across the full `duration`. |
|
|
1126
|
+
| `seed?` | `string \| number` | Deterministic jitter seed — same seed always produces the same shake. |
|
|
1127
|
+
| `asChild?` | `boolean` | — |
|
|
1128
|
+
| `as?` | `"div" \| "span"` | — |
|
|
1129
|
+
| `className?` | `string` | — |
|
|
1130
|
+
|
|
1131
|
+
#### `Slide`
|
|
1132
|
+
|
|
1133
|
+
Also accepts everything from `Timing`.
|
|
1134
|
+
|
|
1135
|
+
| Prop | Type | Description |
|
|
1136
|
+
|---|---|---|
|
|
1137
|
+
| `children` | `ReactNode` | — |
|
|
1138
|
+
| `direction?` | `SlideDirection` | Default "left". |
|
|
1139
|
+
| `mode?` | `SlideMode` | "in" slides content from offscreen to its resting place; "out" slides it from resting place offscreen. |
|
|
1140
|
+
| `className?` | `string` | — |
|
|
1141
|
+
|
|
1142
|
+
#### `Spotlight`
|
|
1143
|
+
|
|
1144
|
+
Also accepts everything from `Timing`.
|
|
1145
|
+
|
|
1146
|
+
| Prop | Type | Description |
|
|
1147
|
+
|---|---|---|
|
|
1148
|
+
| `children` | `ReactNode` | — |
|
|
1149
|
+
| `focus` | `SpotlightRect` | Focused rect, in the wrapping container's own layout coordinates — Spotlight doesn't measure the DOM itself (same "caller supplies the rect" convention as Camera/Morph). |
|
|
1150
|
+
| `feather?` | `BlurToken` | Softness of the cut-out edge. |
|
|
1151
|
+
| `dim?` | `number` | Maximum dim strength, 0-1. |
|
|
1152
|
+
| `className?` | `string` | — |
|
|
1153
|
+
|
|
1154
|
+
#### `Stagger`
|
|
1155
|
+
|
|
1156
|
+
Also accepts everything from `Timing`.
|
|
1157
|
+
|
|
1158
|
+
| Prop | Type | Description |
|
|
1159
|
+
|---|---|---|
|
|
1160
|
+
| `children` | `ReactNode` | — |
|
|
1161
|
+
| `each?` | `Beat` | Offset between successive children's reveals. |
|
|
1162
|
+
| `from?` | `StaggerOrigin` | Which child reveals first: index 0, index N-1, or the middle child outward. |
|
|
1163
|
+
| `revealFrom?` | `RevealFrom` | Forwarded to each child's Reveal. |
|
|
1164
|
+
| `distance?` | `DistanceToken` | — |
|
|
1165
|
+
|
|
1166
|
+
#### `TextSwap`
|
|
1167
|
+
|
|
1168
|
+
Also accepts everything from `Timing`.
|
|
1169
|
+
|
|
1170
|
+
| Prop | Type | Description |
|
|
1171
|
+
|---|---|---|
|
|
1172
|
+
| `from` | `string` | — |
|
|
1173
|
+
| `to` | `string` | — |
|
|
1174
|
+
| `mode?` | `TextSwapMode` | "fade" cross-fades; "roll" translates old text out / new text in (an odometer look). |
|
|
1175
|
+
| `className?` | `string` | — |
|
|
1176
|
+
|
|
1177
|
+
#### `Trace`
|
|
1178
|
+
|
|
1179
|
+
Also accepts everything from `Timing`.
|
|
1180
|
+
|
|
1181
|
+
| Prop | Type | Description |
|
|
1182
|
+
|---|---|---|
|
|
1183
|
+
| `d` | `string` | SVG path data the tokens travel along. |
|
|
1184
|
+
| `viewBox?` | `string` | viewBox for the wrapping <svg>. |
|
|
1185
|
+
| `count?` | `number` | How many tokens travel at once, evenly spaced. |
|
|
1186
|
+
| `spacing?` | `number` | Spacing between tokens, as a 0-1 fraction of the path. |
|
|
1187
|
+
| `loop?` | `boolean` | Loop continuously (each token cycles start-to-end every `duration`) instead of running once and stopping. |
|
|
1188
|
+
| `shape?` | `TraceShape` | — |
|
|
1189
|
+
| `color?` | `MotionColor` | — |
|
|
1190
|
+
| `size?` | `number` | Token size, in the path's own SVG user-space units. |
|
|
1191
|
+
| `className?` | `string` | — |
|
|
1192
|
+
|
|
1193
|
+
#### `TypeText`
|
|
1194
|
+
|
|
1195
|
+
Also accepts everything from `Timing`.
|
|
1196
|
+
|
|
1197
|
+
| Prop | Type | Description |
|
|
1198
|
+
|---|---|---|
|
|
1199
|
+
| `text` | `string` | — |
|
|
1200
|
+
| `mode?` | `TypeTextMode` | Reveal unit. |
|
|
1201
|
+
| `cursor?` | `boolean` | Show a caret while (and briefly after) typing. |
|
|
1202
|
+
| `caret?` | `TypeTextCaret` | Caret shape. "bar" (default, unchanged) is the classic "\|". "block" is a filled character cell, "underline" a low bar, "none" renders nothing regardless of `cursor`. |
|
|
1203
|
+
| `blinkRate?` | `Beat` | Caret blink half-period, once typing has finished (the caret is solid while actively typing). |
|
|
1204
|
+
| `preserveLayout?` | `boolean` | Reserve the fully-typed box size up front so surrounding content never reflows while typing — critical for video, where a reflowing neighbour is a visible pop. |
|
|
1205
|
+
| `className?` | `string` | — |
|
|
1206
|
+
|
|
1207
|
+
#### `Unmask`
|
|
1208
|
+
|
|
1209
|
+
Also accepts everything from `Timing`.
|
|
1210
|
+
|
|
1211
|
+
| Prop | Type | Description |
|
|
1212
|
+
|---|---|---|
|
|
1213
|
+
| `children` | `ReactNode` | — |
|
|
1214
|
+
| `direction?` | `UnmaskDirection` | Sweep direction. |
|
|
1215
|
+
| `softness?` | `number` | Softness of the leading edge, as a 0-1 fraction of the sweep. |
|
|
1216
|
+
| `className?` | `string` | — |
|
|
1217
|
+
|
|
1218
|
+
#### `Wipe`
|
|
1219
|
+
|
|
1220
|
+
Also accepts everything from `Timing`.
|
|
1221
|
+
|
|
1222
|
+
| Prop | Type | Description |
|
|
1223
|
+
|---|---|---|
|
|
1224
|
+
| `children` | `ReactNode` | — |
|
|
1225
|
+
| `direction?` | `WipeDirection` | Which edge the reveal grows from. |
|
|
1226
|
+
| `variant?` | `WipeVariant` | "linear" is a hard-edged sweep; "radial" grows a circle from the direction's edge. |
|
|
1227
|
+
| `className?` | `string` | — |
|
|
76
1228
|
|
|
77
1229
|
## navigation
|
|
78
1230
|
|
|
79
|
-
| Component | Variants | Demos |
|
|
1231
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
1232
|
+
|---|---|---|---|
|
|
1233
|
+
| `Breadcrumbs` | `my-you-eye` | — | Default, Custom separator |
|
|
1234
|
+
| `Link` | `my-you-eye` | variant: muted / **primary** | Variants, In a sentence |
|
|
1235
|
+
| `Pagination` | `my-you-eye` | — | Default (10 pages), Few pages |
|
|
1236
|
+
| `Tabs` | `my-you-eye` | variant: filing / pills / **underline** | Underline, Pills, Filing |
|
|
1237
|
+
|
|
1238
|
+
### navigation — props
|
|
1239
|
+
|
|
1240
|
+
#### `Breadcrumbs`
|
|
1241
|
+
|
|
1242
|
+
Also accepts everything from `HTMLAttributes<HTMLElement>`.
|
|
1243
|
+
|
|
1244
|
+
| Prop | Type | Description |
|
|
80
1245
|
|---|---|---|
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
|
|
1246
|
+
| `items` | `BreadcrumbItem[]` | — |
|
|
1247
|
+
| `separator?` | `ReactNode` | — |
|
|
1248
|
+
|
|
1249
|
+
#### `Link`
|
|
1250
|
+
|
|
1251
|
+
Also accepts everything from `AnchorHTMLAttributes<HTMLAnchorElement>`, `VariantProps<typeof linkVariants>`.
|
|
1252
|
+
|
|
1253
|
+
#### `Pagination`
|
|
1254
|
+
|
|
1255
|
+
Also accepts everything from `HTMLAttributes<HTMLElement>`.
|
|
1256
|
+
|
|
1257
|
+
| Prop | Type | Description |
|
|
1258
|
+
|---|---|---|
|
|
1259
|
+
| `currentPage` | `number` | — |
|
|
1260
|
+
| `totalPages` | `number` | — |
|
|
1261
|
+
| `onPageChange` | `(page: number) => void` | — |
|
|
1262
|
+
|
|
1263
|
+
#### `Tabs`
|
|
1264
|
+
|
|
1265
|
+
Also accepts everything from `React.ComponentPropsWithoutRef<typeof Root>`, `VariantProps<typeof tabsListVariants>`.
|
|
84
1266
|
|
|
85
1267
|
## overlay
|
|
86
1268
|
|
|
87
|
-
| Component | Variants | Demos |
|
|
1269
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
1270
|
+
|---|---|---|---|
|
|
1271
|
+
| `CommandPalette` | `my-you-eye` | — | Basic, With groups |
|
|
1272
|
+
| `Dialog` | `my-you-eye` | size: lg / **md** / sm | Sizes, Form example |
|
|
1273
|
+
| `Drawer` | `my-you-eye` | side: left / **right**<br>size: lg / **md** / sm | Left & Right, Sizes |
|
|
1274
|
+
| `DropdownMenu` | `my-you-eye` | — | Default |
|
|
1275
|
+
| `Popover` | `my-you-eye` | — | Default, Positioning, With close button |
|
|
1276
|
+
| `Tooltip` | `my-you-eye` | — | Directions |
|
|
1277
|
+
|
|
1278
|
+
### overlay — props
|
|
1279
|
+
|
|
1280
|
+
#### `CommandPalette`
|
|
1281
|
+
|
|
1282
|
+
| Prop | Type | Description |
|
|
1283
|
+
|---|---|---|
|
|
1284
|
+
| `open` | `boolean` | — |
|
|
1285
|
+
| `onOpenChange` | `(open: boolean) => void` | — |
|
|
1286
|
+
| `actions` | `CommandAction[]` | — |
|
|
1287
|
+
| `onSelect` | `(action: CommandAction) => void` | — |
|
|
1288
|
+
| `placeholder?` | `string` | — |
|
|
1289
|
+
| `emptyText?` | `string` | — |
|
|
1290
|
+
| `groups?` | `{ label: string; actionIds: string[] }[]` | — |
|
|
1291
|
+
|
|
1292
|
+
#### `Tooltip`
|
|
1293
|
+
|
|
1294
|
+
| Prop | Type | Description |
|
|
88
1295
|
|---|---|---|
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `DropdownMenu` | variant: secondary | Default |
|
|
93
|
-
| `Popover` | variant: secondary<br>size: sm | Default |
|
|
94
|
-
| `Tooltip` | side: bottom / left / right / top<br>variant: secondary | Directions |
|
|
1296
|
+
| `content` | `string` | — |
|
|
1297
|
+
| `side?` | `"top" \| "right" \| "bottom" \| "left"` | — |
|
|
1298
|
+
| `children` | `React.ReactNode` | — |
|
|
95
1299
|
|
|
96
1300
|
## patterns
|
|
97
1301
|
|
|
98
|
-
| Component | Variants | Demos |
|
|
1302
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
1303
|
+
|---|---|---|---|
|
|
1304
|
+
| `Comparison` | `my-you-eye` | — | Side-by-side, Wipe (draggable), Wipe — progress-driven |
|
|
1305
|
+
| `ConfirmDialog` | `my-you-eye` | — | Variants |
|
|
1306
|
+
| `FileTree` | `my-you-eye` | — | Project tree with git status, Compact density |
|
|
1307
|
+
| `FormField` | `my-you-eye` | — | Default, With hint, Required with error |
|
|
1308
|
+
| `PageShell` | `my-you-eye` | — | Default, With actions |
|
|
1309
|
+
| `SequenceDiagram` | `my-you-eye` | — | Request flow, Self-messages, spanning note, error path, Progress reveal |
|
|
1310
|
+
| `StatCard` | `my-you-eye` | — | Default, Size, Numeric delta, Icon + sparkline |
|
|
1311
|
+
| `StatGrid` | `my-you-eye` | — | 4-column KPI row, 3-column with sparklines, Size, positiveIsGood |
|
|
1312
|
+
| `TexturedSurface` | `my-you-eye` | variant: elevated / **surface**<br>radius: **default** / lg / none / sm | Tuner, Paper grain, Frosted glass, Brushed aluminium, Paper grain — full matrix, Frosted glass — full matrix, Brushed aluminium — full matrix, Theme-driven, Composed |
|
|
1313
|
+
| `Toolbar` | `my-you-eye` | — | All slots filled, With leading label, Result count + removable filter chips, Narrow / responsive collapse |
|
|
1314
|
+
|
|
1315
|
+
### patterns — props
|
|
1316
|
+
|
|
1317
|
+
#### `Comparison`
|
|
1318
|
+
|
|
1319
|
+
Also accepts everything from `Omit<HTMLAttributes<HTMLDivElement>, "onChange">`.
|
|
1320
|
+
|
|
1321
|
+
| Prop | Type | Description |
|
|
99
1322
|
|---|---|---|
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
1323
|
+
| `before` | `ReactNode` | — |
|
|
1324
|
+
| `after` | `ReactNode` | — |
|
|
1325
|
+
| `beforeLabel?` | `string` | — |
|
|
1326
|
+
| `afterLabel?` | `string` | — |
|
|
1327
|
+
| `mode?` | `"side-by-side" \| "wipe"` | "side-by-side" (default): two columns. "wipe": before/after stacked with a draggable reveal divider. |
|
|
1328
|
+
| `value?` | `number` | Controlled divider position, 0-100 (wipe mode only). |
|
|
1329
|
+
| `defaultValue?` | `number` | Uncontrolled initial divider position, 0-100. |
|
|
1330
|
+
| `onValueChange?` | `(value: number) => void` | — |
|
|
1331
|
+
| `progress?` | `number` | 0→1 animation-in progress (TODO.md D4's progress-in convention) — lets a video/live scene animate the reveal without ever importing src/motion/. |
|
|
106
1332
|
|
|
107
|
-
|
|
1333
|
+
#### `ConfirmDialog`
|
|
1334
|
+
|
|
1335
|
+
| Prop | Type | Description |
|
|
1336
|
+
|---|---|---|
|
|
1337
|
+
| `title` | `string` | — |
|
|
1338
|
+
| `description?` | `string` | — |
|
|
1339
|
+
| `confirmLabel?` | `string` | — |
|
|
1340
|
+
| `destructive?` | `boolean` | — |
|
|
1341
|
+
| `onConfirm` | `() => void` | — |
|
|
1342
|
+
| `trigger?` | `ReactNode` | — |
|
|
1343
|
+
| `open?` | `boolean` | — |
|
|
1344
|
+
| `onOpenChange?` | `(open: boolean) => void` | — |
|
|
1345
|
+
|
|
1346
|
+
#### `FileTree`
|
|
1347
|
+
|
|
1348
|
+
Also accepts everything from `Pick<TreeViewProps, "defaultExpandedDepth" \| "expandedKeys" \| "onToggle" \| "density" \| "indent">`.
|
|
1349
|
+
|
|
1350
|
+
| Prop | Type | Description |
|
|
1351
|
+
|---|---|---|
|
|
1352
|
+
| `data` | `FileTreeNode[]` | — |
|
|
1353
|
+
| `className?` | `string` | — |
|
|
1354
|
+
|
|
1355
|
+
#### `FormField`
|
|
1356
|
+
|
|
1357
|
+
| Prop | Type | Description |
|
|
1358
|
+
|---|---|---|
|
|
1359
|
+
| `label` | `string` | — |
|
|
1360
|
+
| `error?` | `string` | — |
|
|
1361
|
+
| `hint?` | `string` | — |
|
|
1362
|
+
| `required?` | `boolean` | — |
|
|
1363
|
+
| `className?` | `string` | — |
|
|
1364
|
+
| `children` | `ReactNode` | — |
|
|
1365
|
+
|
|
1366
|
+
#### `PageShell`
|
|
1367
|
+
|
|
1368
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
1369
|
+
|
|
1370
|
+
| Prop | Type | Description |
|
|
1371
|
+
|---|---|---|
|
|
1372
|
+
| `title` | `string` | — |
|
|
1373
|
+
| `description?` | `string` | — |
|
|
1374
|
+
| `actions?` | `ReactNode` | — |
|
|
1375
|
+
|
|
1376
|
+
#### `SequenceDiagram`
|
|
1377
|
+
|
|
1378
|
+
Also accepts everything from `Omit<HTMLAttributes<HTMLDivElement>, "children">`.
|
|
1379
|
+
|
|
1380
|
+
| Prop | Type | Description |
|
|
1381
|
+
|---|---|---|
|
|
1382
|
+
| `participants` | `SequenceParticipant[]` | — |
|
|
1383
|
+
| `items` | `SequenceItem[]` | Ordered messages and notes — order is both the vertical stacking order and the order `progress` reveals them in. |
|
|
1384
|
+
| `activations?` | `SequenceActivation[]` | — |
|
|
1385
|
+
| `laneWidth?` | `number` | Lane (participant column) width in px. |
|
|
1386
|
+
| `progress?` | `number` | 0→1 reveal progress, default 1 (fully drawn). |
|
|
1387
|
+
|
|
1388
|
+
#### `StatCard`
|
|
1389
|
+
|
|
1390
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
1391
|
+
|
|
1392
|
+
| Prop | Type | Description |
|
|
1393
|
+
|---|---|---|
|
|
1394
|
+
| `label` | `string` | — |
|
|
1395
|
+
| `value` | `ReactNode` | Widened from `string` to `ReactNode` so a caller can drop in a live numeric tween (e.g. `my-you-eye/motion`'s `CountUp`) instead of a static string — a plain string still works exactly as before (TODO.md D4's progress-in convention: StatCard itself stays a pure presentational component, no motion i… |
|
|
1396
|
+
| `delta?` | `StatCardDelta` | — |
|
|
1397
|
+
| `icon?` | `ReactNode` | — |
|
|
1398
|
+
| `size?` | `"sm" \| "md" \| "lg"` | Padding density, forwarded to CardContent. |
|
|
1399
|
+
| `sparkline?` | `StatCardSparklineProps` | Inline trend chart under the value/delta, composing Sparkline. |
|
|
1400
|
+
|
|
1401
|
+
#### `StatGrid`
|
|
1402
|
+
|
|
1403
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
1404
|
+
|
|
1405
|
+
| Prop | Type | Description |
|
|
1406
|
+
|---|---|---|
|
|
1407
|
+
| `items` | `StatGridItem[]` | — |
|
|
1408
|
+
| `columns?` | `2 \| 3 \| 4 \| 5 \| 6` | Column count at the widest breakpoint. |
|
|
1409
|
+
| `size?` | `"sm" \| "md" \| "lg"` | Forwarded to every StatCard. |
|
|
1410
|
+
|
|
1411
|
+
#### `TexturedSurface`
|
|
1412
|
+
|
|
1413
|
+
Also accepts everything from `VariantProps<typeof texturedSurfaceVariants>`, `Omit<HTMLAttributes<HTMLDivElement>, "color">`.
|
|
1414
|
+
|
|
1415
|
+
| Prop | Type | Description |
|
|
1416
|
+
|---|---|---|
|
|
1417
|
+
| `color?` | `string` | — |
|
|
1418
|
+
| `texture?` | `TextureName` | — |
|
|
1419
|
+
| `strength?` | `"subtle" \| "medium" \| "strong"` | — |
|
|
1420
|
+
| `layer?` | `TextureLayer` | — |
|
|
1421
|
+
|
|
1422
|
+
#### `Toolbar`
|
|
108
1423
|
|
|
109
|
-
|
|
1424
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
1425
|
+
|
|
1426
|
+
| Prop | Type | Description |
|
|
1427
|
+
|---|---|---|
|
|
1428
|
+
| `leading?` | `ReactNode` | — |
|
|
1429
|
+
| `search?` | `ReactNode` | — |
|
|
1430
|
+
| `filters?` | `ReactNode` | — |
|
|
1431
|
+
| `actions?` | `ReactNode` | — |
|
|
1432
|
+
| `resultCount?` | `ReactNode` | — |
|
|
1433
|
+
| `chips?` | `ToolbarFilterChip[]` | — |
|
|
1434
|
+
| `onClearAll?` | `() => void` | — |
|
|
1435
|
+
|
|
1436
|
+
## scenes
|
|
1437
|
+
|
|
1438
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
1439
|
+
|---|---|---|---|
|
|
1440
|
+
| `Presenter` | `my-you-eye/present` | — | Click-through presenter |
|
|
1441
|
+
| `SpeakerView` | `my-you-eye/present` | — | Now / next / notes / elapsed timer |
|
|
1442
|
+
| `useSteps` | `my-you-eye/present` | — | Custom controls built from useSteps |
|
|
1443
|
+
| `BulletScene` | `my-you-eye/scenes` | — | Playing, Pinned mid-sequence (frame 179/280), Pinned at rest (frame 280/280) |
|
|
1444
|
+
| `ChartScene` | `my-you-eye/scenes` | — | Bar — playing, Gauge — no steps (single-beat draw-on) |
|
|
1445
|
+
| `CodeDiff` | `my-you-eye/scenes` | — | Playing, Pinned mid-transition (frame 70/150), Pinned at rest (frame 150/150) |
|
|
1446
|
+
| `CodeScene` | `my-you-eye/scenes` | — | Playing |
|
|
1447
|
+
| `CompareScene` | `my-you-eye/scenes` | — | Columns (code panes) — playing, Wipe (image panes) — playing |
|
|
1448
|
+
| `DiagramScene` | `my-you-eye/scenes` | — | Architecture — playing, State machine ("state" preset), Dataflow ("dataflow" preset) |
|
|
1449
|
+
| `OutroScene` | `my-you-eye/scenes` | — | Playing, Pinned mid-stagger (frame 10/90), Pinned at rest (frame 90/90) |
|
|
1450
|
+
| `SceneRenderer` | `my-you-eye/scenes` | — | Title, Bullets, Diagram, chart, stat |
|
|
1451
|
+
| `SequenceScene` | `my-you-eye/scenes` | — | Playing |
|
|
1452
|
+
| `StatScene` | `my-you-eye/scenes` | — | Playing |
|
|
1453
|
+
| `TerminalScene` | `my-you-eye/scenes` | — | Playing, Pinned mid-typing, entry 1 (frame 12/160), Pinned on entry 2's spinner (frame 72/160), Pinned at rest (frame 160/160), Prompt change (rows + scheme) |
|
|
1454
|
+
| `TitleScene` | `my-you-eye/scenes` | — | Centered, playing, Left-aligned, no chapter/subtitle, Pinned mid-stagger (frame 12/90), Pinned at rest (frame 90/90) |
|
|
1455
|
+
| `Validation` | `my-you-eye/scenes` | — | Deliberately broken video, Valid, minimal video |
|
|
1456
|
+
| `WalkthroughScene` | `my-you-eye/scenes` | — | Playing |
|
|
1457
|
+
|
|
1458
|
+
### scenes — props
|
|
1459
|
+
|
|
1460
|
+
#### `Presenter`
|
|
1461
|
+
|
|
1462
|
+
| Prop | Type | Description |
|
|
1463
|
+
|---|---|---|
|
|
1464
|
+
| `video` | `Video` | — |
|
|
1465
|
+
| `className?` | `string` | — |
|
|
1466
|
+
| `onStepChange?` | `(info: PresenterStepInfo) => void` | Called whenever the active step changes — for a consumer syncing their own chrome (e.g. a `SpeakerView` they've opened some other way) to Presenter's position. |
|
|
1467
|
+
|
|
1468
|
+
#### `SpeakerView`
|
|
1469
|
+
|
|
1470
|
+
| Prop | Type | Description |
|
|
1471
|
+
|---|---|---|
|
|
1472
|
+
| `video` | `Video` | — |
|
|
1473
|
+
| `sceneIndex` | `number` | Currently-showing scene, as an index into `video.scenes` — the same position `Presenter` (or a consumer's own `useSteps`-driven UI) is at. |
|
|
1474
|
+
| `stepIndex` | `number` | Currently-showing step, as an index into that scene's own step list. |
|
|
1475
|
+
| `className?` | `string` | — |
|
|
1476
|
+
|
|
1477
|
+
#### `BulletScene`
|
|
1478
|
+
|
|
1479
|
+
| Prop | Type | Description |
|
|
1480
|
+
|---|---|---|
|
|
1481
|
+
| `scene` | `BulletSceneData` | — |
|
|
1482
|
+
|
|
1483
|
+
#### `ChartScene`
|
|
1484
|
+
|
|
1485
|
+
| Prop | Type | Description |
|
|
1486
|
+
|---|---|---|
|
|
1487
|
+
| `scene` | `ChartSceneData` | — |
|
|
1488
|
+
|
|
1489
|
+
#### `CodeDiff`
|
|
1490
|
+
|
|
1491
|
+
Also accepts everything from `Timing`.
|
|
1492
|
+
|
|
1493
|
+
| Prop | Type | Description |
|
|
1494
|
+
|---|---|---|
|
|
1495
|
+
| `from` | `string` | Source as it was before this diff. |
|
|
1496
|
+
| `to` | `string` | Source after this diff. |
|
|
1497
|
+
| `language?` | `string` | — |
|
|
1498
|
+
| `header?` | `string` | Filename shown in the header tab, matching CodeBlock's header. |
|
|
1499
|
+
| `className?` | `string` | — |
|
|
1500
|
+
|
|
1501
|
+
#### `CodeScene`
|
|
1502
|
+
|
|
1503
|
+
| Prop | Type | Description |
|
|
1504
|
+
|---|---|---|
|
|
1505
|
+
| `scene` | `CodeSceneData` | — |
|
|
1506
|
+
|
|
1507
|
+
#### `CompareScene`
|
|
1508
|
+
|
|
1509
|
+
| Prop | Type | Description |
|
|
1510
|
+
|---|---|---|
|
|
1511
|
+
| `scene` | `CompareSceneData` | — |
|
|
1512
|
+
|
|
1513
|
+
#### `DiagramScene`
|
|
1514
|
+
|
|
1515
|
+
| Prop | Type | Description |
|
|
1516
|
+
|---|---|---|
|
|
1517
|
+
| `scene` | `DiagramSceneData` | — |
|
|
1518
|
+
|
|
1519
|
+
#### `OutroScene`
|
|
1520
|
+
|
|
1521
|
+
| Prop | Type | Description |
|
|
1522
|
+
|---|---|---|
|
|
1523
|
+
| `scene` | `OutroSceneData` | — |
|
|
1524
|
+
|
|
1525
|
+
#### `SceneRenderer`
|
|
1526
|
+
|
|
1527
|
+
| Prop | Type | Description |
|
|
1528
|
+
|---|---|---|
|
|
1529
|
+
| `scene` | `Scene` | — |
|
|
1530
|
+
|
|
1531
|
+
#### `SequenceScene`
|
|
1532
|
+
|
|
1533
|
+
| Prop | Type | Description |
|
|
1534
|
+
|---|---|---|
|
|
1535
|
+
| `scene` | `SequenceSceneData` | — |
|
|
1536
|
+
|
|
1537
|
+
#### `StatScene`
|
|
1538
|
+
|
|
1539
|
+
| Prop | Type | Description |
|
|
1540
|
+
|---|---|---|
|
|
1541
|
+
| `scene` | `StatSceneData` | — |
|
|
1542
|
+
|
|
1543
|
+
#### `TerminalScene`
|
|
1544
|
+
|
|
1545
|
+
| Prop | Type | Description |
|
|
1546
|
+
|---|---|---|
|
|
1547
|
+
| `scene` | `TerminalSceneData` | — |
|
|
1548
|
+
|
|
1549
|
+
#### `TitleScene`
|
|
1550
|
+
|
|
1551
|
+
| Prop | Type | Description |
|
|
1552
|
+
|---|---|---|
|
|
1553
|
+
| `scene` | `TitleSceneData` | — |
|
|
1554
|
+
|
|
1555
|
+
#### `WalkthroughScene`
|
|
1556
|
+
|
|
1557
|
+
| Prop | Type | Description |
|
|
110
1558
|
|---|---|---|
|
|
111
|
-
| `
|
|
1559
|
+
| `scene` | `WalkthroughSceneData` | — |
|
|
1560
|
+
|
|
1561
|
+
## typography
|
|
1562
|
+
|
|
1563
|
+
| Component | Tier | Variants (**default**) | Demos |
|
|
1564
|
+
|---|---|---|---|
|
|
1565
|
+
| `Typography & Tokens` | `my-you-eye` | — | Prose block, Font families, Text sizes, Colors, Radius & spacing |
|
|
1566
|
+
|
|
1567
|
+
### typography — props
|
|
1568
|
+
|
|
1569
|
+
#### `Typography & Tokens`
|
|
1570
|
+
|
|
1571
|
+
Also accepts everything from `HTMLAttributes<HTMLDivElement>`.
|
|
112
1572
|
|