my-you-eye 0.2.3 → 0.3.1

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 CHANGED
@@ -9,16 +9,16 @@ import { Button, Card } from "my-you-eye";
9
9
  import "my-you-eye/styles.css";
10
10
  ```
11
11
 
12
- **53 components** across 9 groups.
12
+ **54 components** across 9 groups.
13
13
 
14
14
  ## canvas
15
15
 
16
16
  | Component | Variants | Demos |
17
17
  |---|---|---|
18
18
  | `Canvas` | — | Empty grid |
19
- | `Edge` | variant: bezier / stepped / straight<br>state: connected | Path variants, Edge states |
19
+ | `ConnectionLine` | variant: bezier / stepped / straight<br>state: connected / highlighted / pending | Path variants, Edge states, Decorations (arrowheads + labels) |
20
20
  | `Graph` | type: button | Pipeline editor (drag nodes, connect ports, delete selected) |
21
- | `GraphNode` | variant: muted / selected | Variants |
21
+ | `GraphNode` | variant: muted / selected / simple | Variants, Simple variant, Free-form body |
22
22
  | `Port` | state: connected / default / highlighted | States |
23
23
 
24
24
  ## data
@@ -26,8 +26,9 @@ import "my-you-eye/styles.css";
26
26
  | Component | Variants | Demos |
27
27
  |---|---|---|
28
28
  | `CellType` | type: array / audio / badge / boolean / bytes / currency / date-human / date-system / datetime-tz / duration / email / image / json / null / number / percentage / signed / status / text / tree / url | Data Types, Project X, Project X, Numeric types |
29
- | `DataTable` | variant: striped<br>density: compact | Alice, Bob, Charlie, Diana, Eve, Frank, Grace, Ivy, Leo, Olivia, Default, Striped, Scrolling + sticky header, Truncation |
30
- | `List` | variant: compact | Default & Compact, Striped, Scrolling |
29
+ | `DataList` | variant: compact | Default & Compact, Striped, Scrolling |
30
+ | `DataTable` | variant: striped<br>density: compact | Default, Striped, Scrolling + sticky header, Truncation |
31
+ | `Table` | — | |
31
32
  | `TreeView` | type: button<br>variant: condensed | Default vs Condensed, Depth-based expand, Controlled expand state, Leading icons (click a row, then use arrow keys), Messy nested payload (hover to trace depth guides) |
32
33
 
33
34
  ## display
@@ -37,7 +38,7 @@ import "my-you-eye/styles.css";
37
38
  | `Avatar` | size: lg / md / sm | Sizes, Fallback variants, With image, With ring, With status dot |
38
39
  | `Badge` | variant: danger / neutral / primary / success / warning<br>style: soft | Variants (solid), Variants (soft) |
39
40
  | `Card` | variant: danger / default / elevated / ghost / outlined<br>size: sm | Variants, With footer actions |
40
- | `CodeBlock` | variant: elevated | Bare (no header, no language), Language-only (badge overlay, no header bar), With header + language, Elevated, Line numbers, No wrap (horizontal scroll) |
41
+ | `CodeBlock` | variant: 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, Syntax highlighting (CSS / HTML / SQL / YAML / Python) |
41
42
  | `EmptyState` | variant: secondary | Default, With icon and action |
42
43
  | `Image` | — | Fit modes, Border radius, Aspect ratio, Styles, With caption |
43
44
  | `Kbd` | — | Default, Combinations |
@@ -52,9 +53,9 @@ import "my-you-eye/styles.css";
52
53
  |---|---|---|
53
54
  | `Alert` | variant: danger / info / success / warning | Variants, With title, With icon |
54
55
  | `Progress` | variant: danger / default / success / warning | Variants, No label |
55
- | `Saved` | variant: danger / secondary | Trigger toasts |
56
56
  | `Skeleton` | shape: circle / rect / text | Shapes |
57
57
  | `Spinner` | size: lg / md / sm | Sizes |
58
+ | `Toast` | variant: danger / secondary | Trigger toasts |
58
59
 
59
60
  ## inputs
60
61
 
package/SKILL.md CHANGED
@@ -11,18 +11,22 @@ There is almost certainly already a component for it.
11
11
 
12
12
  ## Step 1 — find the component (always do this first)
13
13
 
14
- Read `components.json` (or the human-readable `COMPONENTS.md`) at the package root. It is
15
- auto-generated from the library's showcases and lists **every** component, its group, and its
16
- variant props. Pick the component whose name/group matches what you need.
14
+ Read `COMPONENTS.md` (human-readable) or `components.json` (machine-readable) at the package
15
+ root. Both are auto-generated from the library's showcases and list **every** component, its
16
+ group, and its variant props. Pick the component whose name/group matches what you need.
17
+
18
+ You can also run `npx my-you-eye list` for a quick terminal overview.
19
+
20
+ ## Component catalog
17
21
 
18
22
  ### inputs
19
23
  Button, Checkbox, Combobox, FileDrop, Input, Label, MultiSelect, RadioGroup, Select, Slider, Switch, Textarea
20
24
 
21
25
  ### display
22
- Avatar, Badge, Card, CodeBlock, DataList, EmptyState, Image, Kbd, Markdown, ScrollArea, Separator, Skeleton, StatusDot, Typography
26
+ Avatar, Badge, Card, CodeBlock, EmptyState, Image, Kbd, Markdown, ScrollArea, Separator, StatusDot
23
27
 
24
28
  ### feedback
25
- Alert, Progress, Spinner, Toast
29
+ Alert, Progress, Skeleton, Spinner, Toast
26
30
 
27
31
  ### overlay
28
32
  CommandPalette, Dialog, Drawer, DropdownMenu, Popover, Tooltip
@@ -31,13 +35,16 @@ CommandPalette, Dialog, Drawer, DropdownMenu, Popover, Tooltip
31
35
  Breadcrumbs, Pagination, Tabs
32
36
 
33
37
  ### canvas
34
- Canvas, ConnectionLine, Edge, GraphNode, Orchestrator, Port
38
+ Canvas, ConnectionLine, Graph, GraphNode, Port
35
39
 
36
40
  ### data
37
- CellValue, Table, TreeView
41
+ CellType, DataList, DataTable, Table, TreeView
38
42
 
39
43
  ### patterns
40
- ConfirmDialog, DataTable, FormField, PageShell, StatCard, Toolbar
44
+ ConfirmDialog, FormField, PageShell, StatCard, TexturedSurface, Toolbar
45
+
46
+ ### typography
47
+ Typography
41
48
 
42
49
  ## Step 2 — use it
43
50
 
@@ -48,16 +55,58 @@ import "my-you-eye/styles.css"; // once, at the app root
48
55
  <Button variant="primary" size="md">Save</Button>
49
56
  ```
50
57
 
58
+ **Setup requirements:**
59
+ - Your project must use Tailwind CSS v4 (the library's CSS imports `@import "tailwindcss"`).
60
+ - Wrap your app root in `<TooltipProvider>` if you use Tooltip.
61
+ - Render `<Toaster />` somewhere in your app if you use toasts.
62
+
51
63
  Pick behavior with **variant props** from the manifest's allowed set. Use `className` only for
52
64
  one-off **layout** (width, margin) — never to restyle. If you keep re-adding the same
53
65
  `className`, the right fix is a new variant in the library, not a local override.
54
66
 
67
+ ## Multi-part components
68
+
69
+ Some components export sub-parts. Import them by name:
70
+
71
+ **Dialog:** `Dialog, DialogTrigger, DialogClose, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter`
72
+ **Drawer:** `Drawer, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerTitle, DrawerDescription, DrawerBody, DrawerFooter`
73
+ **DropdownMenu:** `DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel`
74
+ **Popover:** `Popover, PopoverTrigger, PopoverContent, PopoverClose`
75
+ **Tooltip:** `TooltipProvider, Tooltip, TooltipContent`
76
+ **Select:** `Select, SelectTrigger, SelectContent, SelectItem, SelectValue`
77
+ **Tabs:** `Tabs, TabsList, TabsTrigger, TabsContent`
78
+ **Card:** `Card, CardHeader, CardTitle, CardContent, CardFooter`
79
+ **Table:** `Table, TableHeader, TableBody, TableRow, TableHead, TableCell`
80
+ **RadioGroup:** `RadioGroup, RadioGroupItem`
81
+ **Toast:** `Toaster, useToast` (hook — `const { toast } = useToast()`)
82
+
55
83
  ## Step 3 — customize by theme, not by fork
56
84
 
57
85
  All color, radius, spacing, typography, border, and surface values come from CSS variables.
58
86
  To restyle globally, override the tokens at your app root or set `data-theme="<name>"` /
59
87
  `.dark` on `<html>` — do not copy component code or wrap components in style overrides.
60
88
 
89
+ Available themes: `default`, `dark`, `neon`, `contrast`, `glass`, `comic`, `brutal`, `stark`, `frosted`, `metallic`.
90
+
91
+ ```tsx
92
+ // Switch theme
93
+ document.documentElement.dataset.theme = "glass";
94
+ // Toggle dark mode
95
+ document.documentElement.classList.toggle("dark");
96
+ ```
97
+
98
+ ## CLI tool
99
+
100
+ ```
101
+ npx my-you-eye init [--force] Copy SKILL.md + components.json to skills/
102
+ npx my-you-eye list List all components with groups and variants
103
+ npx my-you-eye sync Re-copy SKILL.md + components.json (overwrite)
104
+ npx my-you-eye --help Show usage
105
+ ```
106
+
107
+ `init` places `SKILL.md` and `components.json` in a local `skills/` directory so your AI
108
+ agent can discover them automatically.
109
+
61
110
  ## If a component genuinely does not exist
62
111
 
63
112
  It belongs in the library, not in the consuming app. Add it upstream in `src/ui/` following
@@ -54,14 +54,14 @@ function cmdList() {
54
54
  (groups[c.group] ??= []).push(c);
55
55
  }
56
56
 
57
- const groupOrder = ["inputs", "display", "feedback", "overlay", "navigation", "canvas", "data", "patterns"];
57
+ const groupOrder = ["inputs", "display", "feedback", "overlay", "navigation", "canvas", "data", "patterns", "typography"];
58
58
 
59
59
  for (const group of groupOrder) {
60
60
  if (!groups[group]) continue;
61
61
  console.log(`\n ${group}`);
62
62
  console.log(` ${"-".repeat(group.length)}`);
63
63
  for (const c of groups[group]) {
64
- const variants = Object.entries(c.variants)
64
+ const variants = Object.entries(c.props)
65
65
  .map(([k, v]) => `${k}: ${v.join(" | ")}`)
66
66
  .join(", ");
67
67
  console.log(` ${c.name}${variants ? ` (${variants})` : ""}`);
package/components.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "package": "my-you-eye",
3
3
  "generated": "auto — do not edit by hand; run `npm run manifest`",
4
- "count": 53,
4
+ "count": 54,
5
5
  "components": [
6
6
  {
7
7
  "name": "Canvas",
@@ -13,7 +13,7 @@
13
13
  ]
14
14
  },
15
15
  {
16
- "name": "Edge",
16
+ "name": "ConnectionLine",
17
17
  "group": "canvas",
18
18
  "folder": "ui/connection-line",
19
19
  "props": {
@@ -23,12 +23,15 @@
23
23
  "straight"
24
24
  ],
25
25
  "state": [
26
- "connected"
26
+ "connected",
27
+ "highlighted",
28
+ "pending"
27
29
  ]
28
30
  },
29
31
  "demos": [
30
32
  "Path variants",
31
- "Edge states"
33
+ "Edge states",
34
+ "Decorations (arrowheads + labels)"
32
35
  ]
33
36
  },
34
37
  {
@@ -51,11 +54,14 @@
51
54
  "props": {
52
55
  "variant": [
53
56
  "muted",
54
- "selected"
57
+ "selected",
58
+ "simple"
55
59
  ]
56
60
  },
57
61
  "demos": [
58
- "Variants"
62
+ "Variants",
63
+ "Simple variant",
64
+ "Free-form body"
59
65
  ]
60
66
  },
61
67
  {
@@ -110,49 +116,46 @@
110
116
  ]
111
117
  },
112
118
  {
113
- "name": "DataTable",
119
+ "name": "DataList",
114
120
  "group": "data",
115
- "folder": "ui/patterns/data-table",
121
+ "folder": "ui/data-list",
116
122
  "props": {
117
123
  "variant": [
118
- "striped"
119
- ],
120
- "density": [
121
124
  "compact"
122
125
  ]
123
126
  },
124
127
  "demos": [
125
- "Alice",
126
- "Bob",
127
- "Charlie",
128
- "Diana",
129
- "Eve",
130
- "Frank",
131
- "Grace",
132
- "Ivy",
133
- "Leo",
134
- "Olivia",
135
- "Default",
128
+ "Default & Compact",
136
129
  "Striped",
137
- "Scrolling + sticky header",
138
- "Truncation"
130
+ "Scrolling"
139
131
  ]
140
132
  },
141
133
  {
142
- "name": "List",
134
+ "name": "DataTable",
143
135
  "group": "data",
144
- "folder": "ui/data-list",
136
+ "folder": "ui/patterns/data-table",
145
137
  "props": {
146
138
  "variant": [
139
+ "striped"
140
+ ],
141
+ "density": [
147
142
  "compact"
148
143
  ]
149
144
  },
150
145
  "demos": [
151
- "Default & Compact",
146
+ "Default",
152
147
  "Striped",
153
- "Scrolling"
148
+ "Scrolling + sticky header",
149
+ "Truncation"
154
150
  ]
155
151
  },
152
+ {
153
+ "name": "Table",
154
+ "group": "data",
155
+ "folder": "ui/table",
156
+ "props": {},
157
+ "demos": []
158
+ },
156
159
  {
157
160
  "name": "TreeView",
158
161
  "group": "data",
@@ -249,7 +252,12 @@
249
252
  "With header + language",
250
253
  "Elevated",
251
254
  "Line numbers",
252
- "No wrap (horizontal scroll)"
255
+ "No wrap (horizontal scroll)",
256
+ "Syntax highlighting (TS)",
257
+ "Line highlights",
258
+ "Line highlights (implicit gutter)",
259
+ "Multi-color highlights",
260
+ "Syntax highlighting (CSS / HTML / SQL / YAML / Python)"
253
261
  ]
254
262
  },
255
263
  {
@@ -380,20 +388,6 @@
380
388
  "No label"
381
389
  ]
382
390
  },
383
- {
384
- "name": "Saved",
385
- "group": "feedback",
386
- "folder": "ui/toast",
387
- "props": {
388
- "variant": [
389
- "danger",
390
- "secondary"
391
- ]
392
- },
393
- "demos": [
394
- "Trigger toasts"
395
- ]
396
- },
397
391
  {
398
392
  "name": "Skeleton",
399
393
  "group": "feedback",
@@ -424,6 +418,20 @@
424
418
  "Sizes"
425
419
  ]
426
420
  },
421
+ {
422
+ "name": "Toast",
423
+ "group": "feedback",
424
+ "folder": "ui/toast",
425
+ "props": {
426
+ "variant": [
427
+ "danger",
428
+ "secondary"
429
+ ]
430
+ },
431
+ "demos": [
432
+ "Trigger toasts"
433
+ ]
434
+ },
427
435
  {
428
436
  "name": "Button",
429
437
  "group": "inputs",
package/dist/index.d.ts CHANGED
@@ -373,8 +373,14 @@ interface CellTypeProps {
373
373
  replacements?: UrlReplacement[];
374
374
  dateFormat?: Intl.DateTimeFormatOptions;
375
375
  compact?: boolean;
376
+ /** Fraction digits (0-20). Controls minimumFractionDigits and maximumFractionDigits. */
377
+ fractionDigits?: number;
378
+ /** ISO 4217 currency code for "currency" type (default "USD"). */
379
+ currency?: string;
380
+ /** Force a byte unit (e.g. "GB"). Overrides auto-scaling for "bytes" type. */
381
+ displayUnit?: string;
376
382
  }
377
- declare function CellType({ type, value, badgeVariant, badgeStyle, statusVariant, statusPulse, replacements, dateFormat, compact, }: CellTypeProps): react.JSX.Element;
383
+ declare function CellType({ type, value, badgeVariant, badgeStyle, statusVariant, statusPulse, replacements, dateFormat, compact, fractionDigits, currency, displayUnit, }: CellTypeProps): react.JSX.Element;
378
384
 
379
385
  interface CanvasProps extends HTMLAttributes<HTMLDivElement> {
380
386
  gridSize?: number;
@@ -398,7 +404,7 @@ interface CanvasProps extends HTMLAttributes<HTMLDivElement> {
398
404
  declare const Canvas: react.ForwardRefExoticComponent<CanvasProps & react.RefAttributes<HTMLDivElement>>;
399
405
 
400
406
  declare const graphNodeVariants: (props?: ({
401
- variant?: "default" | "selected" | "muted" | null | undefined;
407
+ variant?: "default" | "selected" | "muted" | "simple" | null | undefined;
402
408
  } & class_variance_authority_types.ClassProp) | undefined) => string;
403
409
  interface PortDef {
404
410
  side: "left" | "right";
@@ -466,12 +472,24 @@ declare function TreeView({ data, variant, indent, defaultExpandedDepth, expande
466
472
  declare const codeBlockVariants: (props?: ({
467
473
  variant?: "default" | "elevated" | null | undefined;
468
474
  } & class_variance_authority_types.ClassProp) | undefined) => string;
475
+ interface CodeBlockHighlightGroup {
476
+ lines: number[];
477
+ color?: "primary" | "warning" | "success" | "danger";
478
+ }
469
479
  interface CodeBlockProps extends HTMLAttributes<HTMLPreElement>, VariantProps<typeof codeBlockVariants> {
470
480
  code: string;
471
481
  language?: string;
472
482
  header?: string;
473
483
  wrap?: boolean;
474
484
  showLineNumbers?: boolean;
485
+ /** Enable syntax highlighting for supported languages (js, ts, tsx, json, bash). */
486
+ highlight?: boolean;
487
+ /** 1-indexed line numbers to highlight. Implicitly enables line numbers. */
488
+ highlightLines?: number[];
489
+ /** Color for highlightLines (default "primary"). */
490
+ highlightColor?: CodeBlockHighlightGroup["color"];
491
+ /** Multi-color highlight groups. When provided, takes precedence over highlightLines. */
492
+ highlightGroups?: CodeBlockHighlightGroup[];
475
493
  }
476
494
  declare const CodeBlock: react.ForwardRefExoticComponent<CodeBlockProps & react.RefAttributes<HTMLPreElement>>;
477
495
 
@@ -488,7 +506,7 @@ interface ComboboxProps {
488
506
  className?: string;
489
507
  disabled?: boolean;
490
508
  }
491
- declare function Combobox({ options, value, onChange, placeholder, emptyText, className, disabled, }: ComboboxProps): react.JSX.Element;
509
+ declare const Combobox: react.ForwardRefExoticComponent<ComboboxProps & react.RefAttributes<HTMLButtonElement>>;
492
510
 
493
511
  interface MultiSelectOption {
494
512
  value: string;
@@ -503,7 +521,7 @@ interface MultiSelectProps {
503
521
  className?: string;
504
522
  disabled?: boolean;
505
523
  }
506
- declare function MultiSelect({ options, value, onChange, placeholder, emptyText, className, disabled, }: MultiSelectProps): react.JSX.Element;
524
+ declare const MultiSelect: react.ForwardRefExoticComponent<MultiSelectProps & react.RefAttributes<HTMLButtonElement>>;
507
525
 
508
526
  interface CommandAction {
509
527
  id: string;
@@ -524,7 +542,7 @@ interface CommandPaletteProps {
524
542
  actionIds: string[];
525
543
  }[];
526
544
  }
527
- declare function CommandPalette({ open, onOpenChange, actions, onSelect, placeholder, emptyText, groups, }: CommandPaletteProps): react.JSX.Element;
545
+ declare const CommandPalette: react.ForwardRefExoticComponent<CommandPaletteProps & react.RefAttributes<HTMLDivElement>>;
528
546
 
529
547
  declare const drawerContentVariants: (props?: ({
530
548
  side?: "left" | "right" | null | undefined;
@@ -616,9 +634,11 @@ interface ConnectionLineProps extends VariantProps<typeof lineVariants> {
616
634
  x: number;
617
635
  y: number;
618
636
  };
637
+ arrowhead?: boolean;
638
+ label?: string;
619
639
  className?: string;
620
640
  }
621
- declare function ConnectionLine({ className, variant, state, from, to, }: ConnectionLineProps): react.JSX.Element;
641
+ declare const ConnectionLine: react.ForwardRefExoticComponent<ConnectionLineProps & react.RefAttributes<SVGSVGElement>>;
622
642
 
623
643
  interface FileDropProps extends Omit<HTMLAttributes<HTMLDivElement>, "onDrop"> {
624
644
  onDrop?: (files: File[]) => void;