@usevyre/ai-context 0.1.0 → 0.2.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.
Files changed (42) hide show
  1. package/README.md +81 -0
  2. package/dist/anti-patterns.json +222 -0
  3. package/dist/cheat-sheets/accordion.md +25 -0
  4. package/dist/cheat-sheets/alert.md +35 -0
  5. package/dist/cheat-sheets/avatar.md +34 -0
  6. package/dist/cheat-sheets/badge.md +41 -0
  7. package/dist/cheat-sheets/breadcrumb.md +26 -0
  8. package/dist/cheat-sheets/button.md +63 -0
  9. package/dist/cheat-sheets/calendar.md +27 -0
  10. package/dist/cheat-sheets/card.md +37 -0
  11. package/dist/cheat-sheets/checkbox.md +32 -0
  12. package/dist/cheat-sheets/command.md +29 -0
  13. package/dist/cheat-sheets/dropdownmenu.md +25 -0
  14. package/dist/cheat-sheets/field.md +36 -0
  15. package/dist/cheat-sheets/index.md +34 -0
  16. package/dist/cheat-sheets/input.md +28 -0
  17. package/dist/cheat-sheets/label.md +22 -0
  18. package/dist/cheat-sheets/modal.md +33 -0
  19. package/dist/cheat-sheets/pagination.md +15 -0
  20. package/dist/cheat-sheets/popover.md +32 -0
  21. package/dist/cheat-sheets/progress.md +27 -0
  22. package/dist/cheat-sheets/select.md +32 -0
  23. package/dist/cheat-sheets/separator.md +26 -0
  24. package/dist/cheat-sheets/sheet.md +28 -0
  25. package/dist/cheat-sheets/sidebar.md +33 -0
  26. package/dist/cheat-sheets/skeleton.md +27 -0
  27. package/dist/cheat-sheets/slider.md +22 -0
  28. package/dist/cheat-sheets/switch.md +26 -0
  29. package/dist/cheat-sheets/table.md +28 -0
  30. package/dist/cheat-sheets/tabs.md +24 -0
  31. package/dist/cheat-sheets/toast.md +41 -0
  32. package/dist/cheat-sheets/tooltip.md +30 -0
  33. package/dist/cheat-sheets/typography.md +22 -0
  34. package/dist/claude-context.md +716 -40
  35. package/dist/copilot-instructions.md +716 -40
  36. package/dist/cursor-rules.md +255 -261
  37. package/dist/full-context.md +715 -40
  38. package/dist/index.js +5054 -584
  39. package/dist/schema.json +1278 -0
  40. package/dist/version-info.json +233 -0
  41. package/dist/windsurf-rules.md +716 -40
  42. package/package.json +11 -2
@@ -3,294 +3,288 @@ description: useVyre design system rules — follow these when writing UI code
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
- # useVyre Design System — AI Context
7
- # Version: 0.1.0
8
- # Include this file in your AI agent's system prompt, .cursor/rules, or CLAUDE.md
9
- # Source: https://usevyre.com/ai-context
6
+ # useVyre Design System — Cursor Rules
7
+ # Version: 0.2.0
10
8
 
11
- ---
9
+ You are working in a project using the useVyre design system (@usevyre/react).
10
+ Follow these rules strictly when generating any UI code.
12
11
 
13
- ## What is useVyre?
12
+ ## Critical Rules
13
+ - NEVER use color/size values that are not in the valid prop lists below
14
+ - ALWAYS use semantic tokens (--vyre-color-semantic-*), never hardcode colors
15
+ - ALWAYS add aria-label to Button size="icon" (no visible text)
16
+ - NEVER render <Toast> directly — use useToast() hook
17
+ - NEVER use <Input type="search"> for search UI — use Command component
14
18
 
15
- useVyre is an AI-native design system for React and Vue. It uses CSS custom properties
16
- (variables) as its single source of truth, making it inherently AI-friendly — no magic,
17
- no runtime transforms, just semantic token names that describe intent.
19
+ ## Component Rules
18
20
 
19
- ---
21
+ ## Accordion
22
+ Vertically stacked collapsible sections. Compose with AccordionItem, AccordionTrigger, AccordionContent.
23
+ Import: `import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "@usevyre/react"`
20
24
 
21
- ## Installation
25
+ Never do:
26
+ - ❌ Accordion without AccordionItem → ✅ Always compose: Accordion > AccordionItem > AccordionTrigger + AccordionContent
22
27
 
23
- ```bash
24
- # Tokens (required by everything)
25
- pnpm add @usevyre/tokens
28
+ ## Alert
29
+ Inline feedback message for info, success, warning, or danger states.
30
+ Import: `import { Alert } from "@usevyre/react"`
26
31
 
27
- # React components
28
- pnpm add @usevyre/react
32
+ Valid props:
33
+ - variant: "info" | "success" | "warning" | "danger" [default: info]
29
34
 
30
- # Vue components
31
- pnpm add @usevyre/vue
32
- ```
35
+ Never do:
36
+ - variant="error" → ✅ Use variant="danger"
37
+ - ❌ variant="primary" → ✅ Use variant="info" | "success" | "warning" | "danger"
33
38
 
34
- ## CSS Setup
39
+ ## Avatar
40
+ User profile image with fallback initials or icon.
41
+ Import: `import { Avatar } from "@usevyre/react"`
35
42
 
36
- ```css
37
- /* In your global CSS entry point */
38
- @import "@usevyre/tokens/css"; /* design tokens */
39
- @import "@usevyre/react/styles"; /* component styles (React) */
40
- /* or */
41
- @import "@usevyre/vue/styles"; /* component styles (Vue) */
42
- ```
43
+ Valid props:
44
+ - size: "sm" | "md" | "lg" | "xl" [default: md]
45
+ - status: "online" | "offline" | "busy" | "away"
43
46
 
44
- ---
47
+ Never do:
48
+ - ❌ size="xs" → ✅ Use size="sm"
49
+ - ❌ size="2xl" → ✅ Use size="xl"
45
50
 
46
- ## Token Naming Convention
51
+ ## Badge
52
+ Small label for status, category, or count. Use dot prop for live status indicator.
53
+ Import: `import { Badge } from "@usevyre/react"`
47
54
 
48
- ALL tokens follow this pattern:
49
- ```
50
- --vyre-[category]-[subcategory]-[variant]
51
- ```
55
+ Valid props:
56
+ - variant: "default" | "accent" | "teal" | "success" | "warning" | "danger" [default: default]
52
57
 
53
- Examples:
54
- - `--vyre-color-semantic-accent` ✅ Use this
55
- - `--vyre-color-primitive-amber-400` Never use primitives in components
56
- - `--vyre-spacing-4` 16px spacing
57
- - `--vyre-typography-font-size-sm` ✅ 13px font size
58
+ Never do:
59
+ - ❌ variant="primary" → ✅ Use variant="accent" for brand color
60
+ - ❌ variant="error" Use variant="danger"
61
+ - ❌ variant="info" → Use variant="teal" for info-like styling
58
62
 
59
- ---
63
+ ## Breadcrumb
64
+ Navigation trail showing current page location in hierarchy.
65
+ Import: `import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbSeparator } from "@usevyre/react"`
60
66
 
61
- ## Semantic Color Tokens (use these in ALL component styling)
62
-
63
- ### Surface layers (background → foreground)
64
- - `--vyre-color-semantic-background` Page background. Deepest layer.
65
- - `--vyre-color-semantic-surface` Cards, panels, sidebars.
66
- - `--vyre-color-semantic-surface-raised` Dropdowns, inputs, elevated cards.
67
- - `--vyre-color-semantic-surface-overlay` Modals, tooltips.
68
-
69
- ### Borders
70
- - `--vyre-color-semantic-border-subtle` Dividers, subtle separators.
71
- - `--vyre-color-semantic-border` Default card/input borders.
72
- - `--vyre-color-semantic-border-strong` Focus rings, selected states.
73
-
74
- ### Text hierarchy
75
- - `--vyre-color-semantic-text-primary` Headings, body text.
76
- - `--vyre-color-semantic-text-secondary` Subtitles, descriptions.
77
- - `--vyre-color-semantic-text-muted` Placeholders, helper text.
78
- - `--vyre-color-semantic-text-disabled` Disabled state text.
79
- - `--vyre-color-semantic-text-inverse` Text on light/accent backgrounds.
80
-
81
- ### Brand colors
82
- - `--vyre-color-semantic-accent` Primary CTA, highlights. (amber)
83
- - `--vyre-color-semantic-accent-hover` Hover for accent elements.
84
- - `--vyre-color-semantic-accent-subtle` Low-opacity accent backgrounds.
85
- - `--vyre-color-semantic-teal` Secondary accent. Code, success. (teal)
86
- - `--vyre-color-semantic-teal-hover` Hover for teal elements.
87
- - `--vyre-color-semantic-teal-subtle` Low-opacity teal backgrounds.
88
-
89
- ### Semantic status colors
90
- - `--vyre-color-semantic-success` Confirmations, complete states.
91
- - `--vyre-color-semantic-success-subtle` Success badge backgrounds.
92
- - `--vyre-color-semantic-warning` Warnings, beta indicators.
93
- - `--vyre-color-semantic-warning-subtle` Warning badge backgrounds.
94
- - `--vyre-color-semantic-danger` Errors, destructive actions.
95
- - `--vyre-color-semantic-danger-hover` Hover for danger elements.
96
- - `--vyre-color-semantic-danger-subtle` Error badge backgrounds.
67
+ Never do:
68
+ - ❌ Using plain <a> tags inside Breadcrumb → ✅ Use BreadcrumbItem > BreadcrumbLink for each crumb
97
69
 
98
- ---
70
+ ## Button
71
+ Triggers actions and navigation. The most commonly used interactive element.
72
+ Import: `import { Button } from "@usevyre/react"`
99
73
 
100
- ## Typography Tokens
101
-
102
- ### Font families
103
- - `--vyre-typography-font-family-display` Headlines, hero text (serif)
104
- - `--vyre-typography-font-family-body` UI text, labels, body copy (sans-serif)
105
- - `--vyre-typography-font-family-mono` Code, tokens, technical text (monospace)
106
-
107
- ### Font sizes
108
- - `--vyre-typography-font-size-2xs` 10px — tiny labels
109
- - `--vyre-typography-font-size-xs` 11px — badge text, captions
110
- - `--vyre-typography-font-size-sm` 13px — default UI text, buttons
111
- - `--vyre-typography-font-size-md` 15px — body text
112
- - `--vyre-typography-font-size-lg` 18px — large body, small headings
113
- - `--vyre-typography-font-size-xl` 22px — section headings
114
- - `--vyre-typography-font-size-2xl` 28px — page headings
115
- - `--vyre-typography-font-size-3xl` 36px — large headings
116
- - `--vyre-typography-font-size-4xl` 48px — hero headings
117
- - `--vyre-typography-font-size-5xl` 64px — display headings
118
-
119
- ### Font weights
120
- - `--vyre-typography-font-weight-light` 300
121
- - `--vyre-typography-font-weight-regular` 400
122
- - `--vyre-typography-font-weight-medium` 500
123
- - `--vyre-typography-font-weight-semibold` 600
124
- - `--vyre-typography-font-weight-bold` 700
74
+ Valid props:
75
+ - variant: "primary" | "secondary" | "ghost" | "accent" | "teal" | "danger" [default: secondary]
76
+ - size: "sm" | "md" | "lg" | "icon" [default: md]
125
77
 
126
- ---
78
+ Never do:
79
+ - ❌ variant="blue" → ✅ Use variant="accent" for brand amber, or variant="teal" for teal
80
+ - ❌ size="xl" → ✅ Use size="lg"
81
+ - ❌ color="..." → ✅ Use variant prop instead
82
+ - ❌ icon={...} → ✅ Use leftIcon={...} or rightIcon={...}
83
+ - ❌ size="icon" without aria-label → ✅ Add aria-label describing the action
127
84
 
128
- ## Spacing Tokens (4px base grid)
129
-
130
- - `--vyre-spacing-1` 4px
131
- - `--vyre-spacing-2` 8px
132
- - `--vyre-spacing-3` 12px
133
- - `--vyre-spacing-4` 16px
134
- - `--vyre-spacing-5` 20px
135
- - `--vyre-spacing-6` 24px
136
- - `--vyre-spacing-8` 32px
137
- - `--vyre-spacing-10` 40px
138
- - `--vyre-spacing-12` 48px
139
- - `--vyre-spacing-16` 64px
140
- - `--vyre-spacing-20` 80px
141
- - `--vyre-spacing-24` 96px
85
+ ## Calendar
86
+ Date picker calendar widget for selecting single dates or ranges.
87
+ Import: `import { Calendar } from "@usevyre/react"`
142
88
 
143
- ---
89
+ Valid props:
144
90
 
145
- ## Border Radius Tokens
91
+ Never do:
92
+ - ❌ Using Calendar for time selection → ✅ Combine with a separate time Input if time selection is needed
146
93
 
147
- - `--vyre-border-radius-none` 0
148
- - `--vyre-border-radius-sm` 4px — tight corners
149
- - `--vyre-border-radius-md` 8px — default components
150
- - `--vyre-border-radius-lg` 12px — cards, panels
151
- - `--vyre-border-radius-xl` 16px — large cards
152
- - `--vyre-border-radius-2xl` 24px — modals, sheets
153
- - `--vyre-border-radius-full` 9999px — badges, pills, avatars
94
+ ## Card
95
+ Content container with optional header, body, and footer sections.
96
+ Import: `import { Card, CardHeader, CardBody, CardFooter } from "@usevyre/react"`
154
97
 
155
- ---
98
+ Valid props:
99
+ - variant: "default" | "elevated" | "outlined" | "ghost" | "accent" [default: default]
156
100
 
157
- ## Component API Reference
158
-
159
- ### Button
160
-
161
- ```tsx
162
- import { Button } from "@usevyre/react"
163
-
164
- // Props:
165
- // variant = "primary" | "secondary" | "ghost" | "accent" | "teal" | "danger"
166
- // size = "sm" | "md" | "lg" | "icon"
167
- // loading = boolean
168
- // disabled = boolean
169
- // as = React.ElementType (default: "button")
170
- // leftIcon = ReactNode
171
- // rightIcon = ReactNode
172
-
173
- // Examples:
174
- <Button variant="accent" size="lg">Get Started</Button>
175
- <Button variant="ghost" size="sm">Cancel</Button>
176
- <Button variant="danger" loading>Deleting...</Button>
177
- <Button as="a" href="/docs" variant="secondary">Read Docs</Button>
178
- ```
179
-
180
- ### Badge
181
-
182
- ```tsx
183
- import { Badge } from "@usevyre/react"
184
-
185
- // Props:
186
- // variant = "default" | "accent" | "teal" | "success" | "warning" | "danger"
187
- // dot = boolean (live status indicator dot)
188
-
189
- // Examples:
190
- <Badge variant="success" dot>Online</Badge>
191
- <Badge variant="warning">Beta</Badge>
192
- <Badge variant="danger">Error</Badge>
193
- ```
194
-
195
- ### Card
196
-
197
- ```tsx
198
- import { Card, CardHeader, CardBody, CardFooter } from "@usevyre/react"
199
-
200
- // Card props:
201
- // variant = "default" | "elevated" | "outlined" | "ghost" | "accent"
202
- // hoverable = boolean
203
- // clickable = boolean
204
-
205
- // Examples:
206
- <Card variant="elevated">
207
- <CardHeader>
208
- <Badge variant="teal">New</Badge>
209
- </CardHeader>
210
- <CardBody>
211
- <h3>Card Title</h3>
212
- <p>Description text.</p>
213
- </CardBody>
214
- <CardFooter>
215
- <Button variant="ghost" size="sm">Learn more</Button>
216
- </CardFooter>
217
- </Card>
218
- ```
219
-
220
- ### Field + Input + Textarea
221
-
222
- ```tsx
223
- import { Field, Input, Textarea } from "@usevyre/react"
224
-
225
- // Field props:
226
- // label = string
227
- // hint = string
228
- // state = "idle" | "error" | "success" | "warning"
229
- // required = boolean
230
-
231
- // Input props:
232
- // size = "sm" | "md" | "lg"
233
- // leftElement = ReactNode
234
- // rightElement = ReactNode
235
- // + all native input props
236
-
237
- // Examples:
238
- <Field label="Email" state="error" hint="Invalid format">
239
- <Input type="email" placeholder="you@example.com" />
240
- </Field>
241
-
242
- <Field label="Search">
243
- <Input leftElement={<SearchIcon />} placeholder="Search..." />
244
- </Field>
245
-
246
- <Field label="Bio">
247
- <Textarea rows={4} placeholder="Tell us about yourself..." />
248
- </Field>
249
- ```
101
+ Never do:
102
+ - ❌ variant="primary" → ✅ Use variant="elevated" | "outlined" | "ghost" | "accent"
250
103
 
251
- ---
104
+ ## Checkbox
105
+ Binary toggle for boolean form values.
106
+ Import: `import { Checkbox } from "@usevyre/react"`
252
107
 
253
- ## Styling Rules for AI Agents
108
+ Valid props:
109
+ - size: "sm" | "md" [default: md]
254
110
 
255
- 1. ALWAYS use semantic tokens (`--vyre-color-semantic-*`), never primitive tokens
256
- 2. NEVER hardcode colors every color decision has a semantic token
257
- 3. Text hierarchy: `text-primary` → `text-secondary` → `text-muted` → `text-disabled`
258
- 4. Interactive hover states: add `-hover` suffix to base token
259
- 5. Low-opacity backgrounds: use `-subtle` suffix tokens
260
- 6. Spacing: always use `--vyre-spacing-*` — never raw px values in component code
261
- 7. Transitions: use `--vyre-transition-duration-*` and `--vyre-transition-easing-*`
111
+ Never do:
112
+ - size="lg" Use size="md"
262
113
 
263
- ---
114
+ ## Command
115
+ Command palette / search dialog. Use for search-first navigation or quick actions.
116
+ Import: `import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandDialog } from "@usevyre/react"`
117
+
118
+ Never do:
119
+ - ❌ Using Input type="search" for search UI → ✅ Use Command + CommandInput + CommandList + CommandItem
120
+
121
+ ## DropdownMenu
122
+ Contextual menu triggered by a button. Supports items, separators, checkbox items, radio groups, and sub-menus.
123
+ Import: `import { DropdownMenu, DropdownItem, DropdownSeparator, DropdownCheckboxItem, DropdownRadioGroup, DropdownRadioItem, DropdownSub } from "@usevyre/react"`
124
+
125
+ Valid props:
126
+
127
+ Never do:
128
+ - ❌ DropdownItem variant="primary" → ✅ Use variant="danger" for destructive items only
129
+
130
+ ## Field
131
+ Form field wrapper providing label, hint text, and validation state for Input or Textarea.
132
+ Import: `import { Field, Input, Textarea } from "@usevyre/react"`
133
+
134
+ Valid props:
135
+ - state: "idle" | "error" | "success" | "warning" [default: idle]
136
+
137
+ Never do:
138
+ - ❌ Applying state prop directly to Input → ✅ Wrap Input in <Field state="error"> to apply validation styling
139
+
140
+ ## Input
141
+ Text input field. Wrap in Field for labels and validation. Use leftElement/rightElement for icons.
142
+ Import: `import { Input } from "@usevyre/react"`
143
+
144
+ Valid props:
145
+ - size: "sm" | "md" | "lg" [default: md]
146
+
147
+ Never do:
148
+ - ❌ size="icon" → ✅ Use size="sm" | "md" | "lg"
149
+ - ❌ type="search" for search UI → ✅ Import Command from @usevyre/react for search palettes
150
+
151
+ ## Label
152
+ Accessible form label. Associate with input via htmlFor.
153
+ Import: `import { Label } from "@usevyre/react"`
154
+
155
+ Valid props:
156
+
157
+ ## Modal
158
+ Dialog overlay for confirmations, forms, or focused content.
159
+ Import: `import { Modal, ModalHeader, ModalBody, ModalFooter } from "@usevyre/react"`
160
+
161
+ Valid props:
162
+ - size: "sm" | "md" | "lg" | "full" [default: md]
163
+
164
+ Never do:
165
+ - ❌ size="xl" → ✅ Use size="lg" or size="full"
166
+
167
+ ## Pagination
168
+ Page navigation for paginated lists or tables.
169
+ Import: `import { Pagination } from "@usevyre/react"`
170
+
171
+ Valid props:
172
+
173
+ ## Popover
174
+ Floating content panel anchored to a trigger element. For simple labels use Tooltip instead.
175
+ Import: `import { Popover } from "@usevyre/react"`
176
+
177
+ Valid props:
178
+ - placement: "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end" [default: bottom]
179
+
180
+ Never do:
181
+ - ❌ placement="top-center" → ✅ Use placement="top" for centered placement
182
+
183
+ ## Progress
184
+ Visual progress indicator for tasks, uploads, or completion status.
185
+ Import: `import { Progress } from "@usevyre/react"`
186
+
187
+ Valid props:
188
+ - size: "sm" | "md" | "lg" [default: md]
189
+ - variant: "default" | "accent" | "teal" | "success" | "danger" [default: default]
190
+
191
+ Never do:
192
+ - ❌ value > 100 → ✅ Normalize your value to 0–100 range before passing
193
+
194
+ ## Select
195
+ Dropdown for selecting one option from a list.
196
+ Import: `import { Select } from "@usevyre/react"`
197
+
198
+ Valid props:
199
+ - size: "sm" | "md" | "lg" [default: md]
200
+
201
+ Never do:
202
+ - ❌ Passing strings directly as children → ✅ Pass options={[{ value: 'a', label: 'Option A' }]}
203
+
204
+ ## Separator
205
+ Horizontal or vertical divider line.
206
+ Import: `import { Separator } from "@usevyre/react"`
207
+
208
+ Valid props:
209
+ - orientation: "horizontal" | "vertical" [default: horizontal]
210
+
211
+ ## Sheet
212
+ Side panel (drawer) that slides in from the edge. For forms, detail views, or settings.
213
+ Import: `import { Sheet, SheetHeader, SheetBody, SheetFooter } from "@usevyre/react"`
214
+
215
+ Valid props:
216
+ - size: "sm" | "md" | "lg" | "full" [default: md]
217
+ - side: "left" | "right" [default: right]
218
+
219
+ ## Sidebar
220
+ App navigation sidebar. Use AppLayout as the root layout wrapper.
221
+ Import: `import { AppLayout, Sidebar, SidebarHeader, SidebarContent, SidebarSection, SidebarItem, SidebarFooter } from "@usevyre/react"`
222
+
223
+ Valid props:
224
+ - variant: "default" | "floating" [default: default]
225
+
226
+ ## Skeleton
227
+ Loading placeholder that mimics the shape of content while data loads.
228
+ Import: `import { Skeleton } from "@usevyre/react"`
229
+
230
+ Valid props:
231
+ - variant: "rect" | "circle" | "text" [default: rect]
232
+
233
+ ## Slider
234
+ Range input for selecting a numeric value within a range.
235
+ Import: `import { Slider } from "@usevyre/react"`
236
+
237
+ Valid props:
238
+ - size: "sm" | "md" [default: md]
239
+
240
+ ## Switch
241
+ Toggle switch for boolean on/off settings.
242
+ Import: `import { Switch } from "@usevyre/react"`
243
+
244
+ Valid props:
245
+ - size: "sm" | "md" [default: md]
246
+
247
+ ## Table
248
+ Data table with optional sorting. Compose with TableHeader, TableRow, TableCell.
249
+ Import: `import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from "@usevyre/react"`
250
+
251
+ ## Tabs
252
+ Tabbed navigation for switching between content panels.
253
+ Import: `import { Tabs, TabList, Tab, TabPanels, TabPanel } from "@usevyre/react"`
254
+
255
+ Valid props:
256
+
257
+ ## Toast
258
+ Transient notification. Use the useToast hook to trigger toasts imperatively.
259
+ Import: `import { useToast, ToastProvider } from "@usevyre/react"`
260
+
261
+ Valid props:
262
+ - variant: "default" | "success" | "warning" | "danger" [default: default]
263
+
264
+ Never do:
265
+ - ❌ Rendering <Toast> directly in JSX → ✅ Use: const { toast } = useToast(); then toast({ title, variant })
266
+ - ❌ variant="error" → ✅ Use variant="danger"
267
+ - ❌ variant="info" → ✅ Use variant="default"
268
+
269
+ ## Tooltip
270
+ Short label that appears on hover/focus. For rich content use Popover instead.
271
+ Import: `import { Tooltip } from "@usevyre/react"`
272
+
273
+ Valid props:
274
+ - placement: "top" | "bottom" | "left" | "right" [default: top]
275
+
276
+ Never do:
277
+ - ❌ Using Tooltip for rich content (forms, buttons, etc.) → ✅ Use Popover for rich interactive content
278
+
279
+ ## Typography
280
+ Text rendering components with semantic scale. Includes Text, Heading, Lead, Code, Blockquote.
281
+ Import: `import { Text, Heading, Lead, Code, Blockquote } from "@usevyre/react"`
282
+
283
+ Never do:
284
+ - ❌ Using raw <h1>, <p> tags instead of Typography components → ✅ Use <Heading>, <Text>, <Lead> from @usevyre/react
285
+
286
+ ## Token Rules
264
287
 
265
- ## Common Patterns
266
-
267
- ### Page layout with sidebar
268
- ```tsx
269
- <div style={{ display: "grid", gridTemplateColumns: "260px 1fr", minHeight: "100vh" }}>
270
- <aside style={{ background: "var(--vyre-color-semantic-surface)", borderRight: "1px solid var(--vyre-color-semantic-border-subtle)" }}>
271
- {/* sidebar content */}
272
- </aside>
273
- <main style={{ padding: "var(--vyre-spacing-12)" }}>
274
- {/* main content */}
275
- </main>
276
- </div>
277
- ```
278
-
279
- ### Form with validation
280
- ```tsx
281
- <form>
282
- <Field label="Email" state={errors.email ? "error" : "idle"} hint={errors.email}>
283
- <Input type="email" value={email} onChange={e => setEmail(e.target.value)} />
284
- </Field>
285
- <Button variant="accent" type="submit" loading={isSubmitting}>
286
- Submit
287
- </Button>
288
- </form>
289
- ```
290
-
291
- ### Status badge with live indicator
292
- ```tsx
293
- <Badge variant="success" dot>Live</Badge>
294
- <Badge variant="danger" dot>Offline</Badge>
295
- <Badge variant="warning">Beta</Badge>
296
- ```
288
+ Use --vyre-color-semantic-* for all colors. Never use primitive tokens.
289
+ Use --vyre-spacing-* for all spacing. Never use raw px in component code.
290
+ Use --vyre-border-radius-* for border radius.