@usevyre/ai-context 0.1.1 → 0.2.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.
Files changed (44) hide show
  1. package/dist/anti-patterns.json +222 -0
  2. package/dist/cheat-sheets/accordion.md +25 -0
  3. package/dist/cheat-sheets/alert.md +35 -0
  4. package/dist/cheat-sheets/avatar.md +34 -0
  5. package/dist/cheat-sheets/badge.md +41 -0
  6. package/dist/cheat-sheets/breadcrumb.md +26 -0
  7. package/dist/cheat-sheets/button.md +63 -0
  8. package/dist/cheat-sheets/calendar.md +27 -0
  9. package/dist/cheat-sheets/card.md +37 -0
  10. package/dist/cheat-sheets/checkbox.md +32 -0
  11. package/dist/cheat-sheets/command.md +29 -0
  12. package/dist/cheat-sheets/dropdownmenu.md +25 -0
  13. package/dist/cheat-sheets/field.md +36 -0
  14. package/dist/cheat-sheets/index.md +34 -0
  15. package/dist/cheat-sheets/input.md +28 -0
  16. package/dist/cheat-sheets/label.md +22 -0
  17. package/dist/cheat-sheets/modal.md +33 -0
  18. package/dist/cheat-sheets/pagination.md +15 -0
  19. package/dist/cheat-sheets/popover.md +32 -0
  20. package/dist/cheat-sheets/progress.md +27 -0
  21. package/dist/cheat-sheets/select.md +32 -0
  22. package/dist/cheat-sheets/separator.md +26 -0
  23. package/dist/cheat-sheets/sheet.md +28 -0
  24. package/dist/cheat-sheets/sidebar.md +33 -0
  25. package/dist/cheat-sheets/skeleton.md +27 -0
  26. package/dist/cheat-sheets/slider.md +22 -0
  27. package/dist/cheat-sheets/switch.md +26 -0
  28. package/dist/cheat-sheets/table.md +28 -0
  29. package/dist/cheat-sheets/tabs.md +24 -0
  30. package/dist/cheat-sheets/toast.md +41 -0
  31. package/dist/cheat-sheets/tooltip.md +30 -0
  32. package/dist/cheat-sheets/typography.md +22 -0
  33. package/dist/claude-context.md +716 -40
  34. package/dist/copilot-instructions.md +716 -40
  35. package/dist/cursor-rules.md +255 -261
  36. package/dist/full-context.md +715 -40
  37. package/dist/index.js +5054 -584
  38. package/dist/schema.json +1278 -0
  39. package/dist/tokens.json +1388 -0
  40. package/dist/tokens.md +180 -0
  41. package/dist/version-info.json +233 -0
  42. package/dist/windsurf-rules.md +716 -40
  43. package/package.json +9 -3
  44. package/LICENSE +0 -21
@@ -1,9 +1,10 @@
1
1
  # useVyre Copilot Instructions
2
+ # Version: 0.2.0
2
3
 
3
4
  When generating UI code in this project, follow the useVyre design system rules below.
4
5
 
5
6
  # useVyre Design System — AI Context
6
- # Version: 0.1.0
7
+ # Version: 0.2.0
7
8
  # Include this file in your AI agent's system prompt, .cursor/rules, or CLAUDE.md
8
9
  # Source: https://usevyre.com/ai-context
9
10
 
@@ -155,35 +156,87 @@ Examples:
155
156
 
156
157
  ## Component API Reference
157
158
 
158
- ### Button
159
+ ### Accordion
160
+
161
+ Vertically stacked collapsible sections. Compose with AccordionItem, AccordionTrigger, AccordionContent.
159
162
 
160
163
  ```tsx
161
- import { Button } from "@usevyre/react"
164
+ import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "@usevyre/react"
165
+
166
+ // Examples:
167
+ <Accordion>
168
+ <AccordionItem value="item-1">
169
+ <AccordionTrigger>Section Title</AccordionTrigger>
170
+ <AccordionContent>Content goes here.</AccordionContent>
171
+ </AccordionItem>
172
+ </Accordion>
173
+ ```
174
+
175
+ **Common mistakes:**
176
+ - ❌ `Accordion without AccordionItem` → Always compose: Accordion > AccordionItem > AccordionTrigger + AccordionContent
177
+
178
+ ---
179
+
180
+ ### Alert
181
+
182
+ Inline feedback message for info, success, warning, or danger states.
183
+
184
+ ```tsx
185
+ import { Alert } from "@usevyre/react"
162
186
 
163
187
  // Props:
164
- // variant = "primary" | "secondary" | "ghost" | "accent" | "teal" | "danger"
165
- // size = "sm" | "md" | "lg" | "icon"
166
- // loading = boolean
167
- // disabled = boolean
168
- // as = React.ElementType (default: "button")
169
- // leftIcon = ReactNode
170
- // rightIcon = ReactNode
188
+ // variant = "info" | "success" | "warning" | "danger" (default: info)
189
+ // title = string
190
+ // onClose = function
171
191
 
172
192
  // Examples:
173
- <Button variant="accent" size="lg">Get Started</Button>
174
- <Button variant="ghost" size="sm">Cancel</Button>
175
- <Button variant="danger" loading>Deleting...</Button>
176
- <Button as="a" href="/docs" variant="secondary">Read Docs</Button>
193
+ <Alert variant="warning" title="Heads up" onClose={() => setOpen(false)}>
194
+ This action cannot be undone.
195
+ </Alert>
196
+ <Alert variant="success" title="Saved!">Your changes have been saved.</Alert>
177
197
  ```
178
198
 
199
+ **Common mistakes:**
200
+ - ❌ `variant="error"` → Use variant="danger"
201
+ - ❌ `variant="primary"` → Use variant="info" | "success" | "warning" | "danger"
202
+
203
+ ---
204
+
205
+ ### Avatar
206
+
207
+ User profile image with fallback initials or icon.
208
+
209
+ ```tsx
210
+ import { Avatar } from "@usevyre/react"
211
+
212
+ // Props:
213
+ // src = string
214
+ // alt = string (default: "")
215
+ // fallback = string
216
+ // size = "sm" | "md" | "lg" | "xl" (default: md)
217
+ // status = "online" | "offline" | "busy" | "away"
218
+
219
+ // Examples:
220
+ <Avatar src="/user.png" alt="Jane Doe" size="lg" status="online" />
221
+ <Avatar fallback="JD" size="md" />
222
+ ```
223
+
224
+ **Common mistakes:**
225
+ - ❌ `size="xs"` → Use size="sm"
226
+ - ❌ `size="2xl"` → Use size="xl"
227
+
228
+ ---
229
+
179
230
  ### Badge
180
231
 
232
+ Small label for status, category, or count. Use dot prop for live status indicator.
233
+
181
234
  ```tsx
182
235
  import { Badge } from "@usevyre/react"
183
236
 
184
237
  // Props:
185
- // variant = "default" | "accent" | "teal" | "success" | "warning" | "danger"
186
- // dot = boolean (live status indicator dot)
238
+ // variant = "default" | "accent" | "teal" | "success" | "warning" | "danger" (default: default)
239
+ // dot = boolean (default: false)
187
240
 
188
241
  // Examples:
189
242
  <Badge variant="success" dot>Online</Badge>
@@ -191,21 +244,107 @@ import { Badge } from "@usevyre/react"
191
244
  <Badge variant="danger">Error</Badge>
192
245
  ```
193
246
 
247
+ **Common mistakes:**
248
+ - ❌ `variant="primary"` → Use variant="accent" for brand color
249
+ - ❌ `variant="error"` → Use variant="danger"
250
+ - ❌ `variant="info"` → Use variant="teal" for info-like styling
251
+
252
+ ---
253
+
254
+ ### Breadcrumb
255
+
256
+ Navigation trail showing current page location in hierarchy.
257
+
258
+ ```tsx
259
+ import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbSeparator } from "@usevyre/react"
260
+
261
+ // Examples:
262
+ <Breadcrumb>
263
+ <BreadcrumbItem><BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>
264
+ <BreadcrumbSeparator />
265
+ <BreadcrumbItem><BreadcrumbLink href="/docs">Docs</BreadcrumbLink></BreadcrumbItem>
266
+ <BreadcrumbSeparator />
267
+ <BreadcrumbItem aria-current="page">Button</BreadcrumbItem>
268
+ </Breadcrumb>
269
+ ```
270
+
271
+ **Common mistakes:**
272
+ - ❌ `Using plain <a> tags inside Breadcrumb` → Use BreadcrumbItem > BreadcrumbLink for each crumb
273
+
274
+ ---
275
+
276
+ ### Button
277
+
278
+ Triggers actions and navigation. The most commonly used interactive element.
279
+
280
+ ```tsx
281
+ import { Button } from "@usevyre/react"
282
+
283
+ // Props:
284
+ // variant = "primary" | "secondary" | "ghost" | "accent" | "teal" | "danger" (default: secondary)
285
+ // size = "sm" | "md" | "lg" | "icon" (default: md)
286
+ // loading = boolean (default: false)
287
+ // disabled = boolean (default: false)
288
+ // as = React.ElementType (default: "button")
289
+ // leftIcon = ReactNode
290
+ // rightIcon = ReactNode
291
+
292
+ // Examples:
293
+ <Button variant="primary">Get Started</Button>
294
+ <Button variant="accent" size="lg">Launch App</Button>
295
+ <Button variant="danger" loading>Deleting...</Button>
296
+ <Button as="a" href="/docs" variant="secondary">Read Docs</Button>
297
+ <Button variant="ghost" size="icon" aria-label="Close">
298
+ <X size={16} />
299
+ </Button>
300
+ ```
301
+
302
+ **Common mistakes:**
303
+ - ❌ `variant="blue"` → Use variant="accent" for brand amber, or variant="teal" for teal
304
+ - ❌ `size="xl"` → Use size="lg"
305
+ - ❌ `color="..."` → Use variant prop instead
306
+ - ❌ `icon={...}` → Use leftIcon={...} or rightIcon={...}
307
+ - ❌ `size="icon" without aria-label` → Add aria-label describing the action
308
+
309
+ ---
310
+
311
+ ### Calendar
312
+
313
+ Date picker calendar widget for selecting single dates or ranges.
314
+
315
+ ```tsx
316
+ import { Calendar } from "@usevyre/react"
317
+
318
+ // Props:
319
+ // value = Date | null
320
+ // onChange = function
321
+ // disabled = boolean (default: false)
322
+
323
+ // Examples:
324
+ const [date, setDate] = useState(null);
325
+ <Calendar value={date} onChange={setDate} />
326
+ ```
327
+
328
+ **Common mistakes:**
329
+ - ❌ `Using Calendar for time selection` → Combine with a separate time Input if time selection is needed
330
+
331
+ ---
332
+
194
333
  ### Card
195
334
 
335
+ Content container with optional header, body, and footer sections.
336
+
196
337
  ```tsx
197
338
  import { Card, CardHeader, CardBody, CardFooter } from "@usevyre/react"
198
339
 
199
- // Card props:
200
- // variant = "default" | "elevated" | "outlined" | "ghost" | "accent"
201
- // hoverable = boolean
202
- // clickable = boolean
340
+ // Props:
341
+ // variant = "default" | "elevated" | "outlined" | "ghost" | "accent" (default: default)
342
+ // hoverable = boolean (default: false)
343
+ // clickable = boolean (default: false)
203
344
 
204
345
  // Examples:
205
346
  <Card variant="elevated">
206
- <CardHeader>
207
- <Badge variant="teal">New</Badge>
208
- </CardHeader>
347
+ <CardHeader><Badge variant="teal">New</Badge></CardHeader>
209
348
  <CardBody>
210
349
  <h3>Card Title</h3>
211
350
  <p>Description text.</p>
@@ -216,39 +355,576 @@ import { Card, CardHeader, CardBody, CardFooter } from "@usevyre/react"
216
355
  </Card>
217
356
  ```
218
357
 
219
- ### Field + Input + Textarea
358
+ **Common mistakes:**
359
+ - ❌ `variant="primary"` → Use variant="elevated" | "outlined" | "ghost" | "accent"
360
+
361
+ ---
362
+
363
+ ### Checkbox
364
+
365
+ Binary toggle for boolean form values.
220
366
 
221
367
  ```tsx
222
- import { Field, Input, Textarea } from "@usevyre/react"
368
+ import { Checkbox } from "@usevyre/react"
223
369
 
224
- // Field props:
225
- // label = string
226
- // hint = string
227
- // state = "idle" | "error" | "success" | "warning"
228
- // required = boolean
370
+ // Props:
371
+ // size = "sm" | "md" (default: md)
372
+ // checked = boolean
373
+ // onChange = function
374
+ // disabled = boolean (default: false)
375
+ // indeterminate = boolean (default: false)
229
376
 
230
- // Input props:
231
- // size = "sm" | "md" | "lg"
232
- // leftElement = ReactNode
233
- // rightElement = ReactNode
234
- // + all native input props
377
+ // Examples:
378
+ <label style={{ display: 'flex', alignItems: 'center', gap: 'var(--vyre-spacing-2)' }}>
379
+ <Checkbox checked={agreed} onChange={e => setAgreed(e.target.checked)} />
380
+ I agree to the terms
381
+ </label>
382
+ ```
383
+
384
+ **Common mistakes:**
385
+ - ❌ `size="lg"` → Use size="md"
386
+
387
+ ---
388
+
389
+ ### Command
390
+
391
+ Command palette / search dialog. Use for search-first navigation or quick actions.
392
+
393
+ ```tsx
394
+ import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandDialog } from "@usevyre/react"
395
+
396
+ // Examples:
397
+ <Command>
398
+ <CommandInput placeholder="Search..." />
399
+ <CommandList>
400
+ <CommandEmpty>No results found.</CommandEmpty>
401
+ <CommandGroup heading="Suggestions">
402
+ <CommandItem onSelect={() => handleSelect('dashboard')}>Dashboard</CommandItem>
403
+ <CommandItem onSelect={() => handleSelect('settings')}>Settings</CommandItem>
404
+ </CommandGroup>
405
+ </CommandList>
406
+ </Command>
407
+ ```
408
+
409
+ **Common mistakes:**
410
+ - ❌ `Using Input type="search" for search UI` → Use Command + CommandInput + CommandList + CommandItem
411
+
412
+ ---
413
+
414
+ ### DropdownMenu
415
+
416
+ Contextual menu triggered by a button. Supports items, separators, checkbox items, radio groups, and sub-menus.
417
+
418
+ ```tsx
419
+ import { DropdownMenu, DropdownItem, DropdownSeparator, DropdownCheckboxItem, DropdownRadioGroup, DropdownRadioItem, DropdownSub } from "@usevyre/react"
420
+
421
+ // Props:
422
+ // trigger = ReactElement
235
423
 
236
424
  // Examples:
237
- <Field label="Email" state="error" hint="Invalid format">
425
+ <DropdownMenu trigger={<Button variant="secondary">Options</Button>}>
426
+ <DropdownItem onSelect={() => handleEdit()}>Edit</DropdownItem>
427
+ <DropdownItem onSelect={() => handleDuplicate()}>Duplicate</DropdownItem>
428
+ <DropdownSeparator />
429
+ <DropdownItem variant="danger" onSelect={() => handleDelete()}>Delete</DropdownItem>
430
+ </DropdownMenu>
431
+ ```
432
+
433
+ **Common mistakes:**
434
+ - ❌ `DropdownItem variant="primary"` → Use variant="danger" for destructive items only
435
+
436
+ ---
437
+
438
+ ### Field
439
+
440
+ Form field wrapper providing label, hint text, and validation state for Input or Textarea.
441
+
442
+ ```tsx
443
+ import { Field, Input, Textarea } from "@usevyre/react"
444
+
445
+ // Props:
446
+ // label = string
447
+ // hint = string
448
+ // state = "idle" | "error" | "success" | "warning" (default: idle)
449
+ // required = boolean (default: false)
450
+
451
+ // Examples:
452
+ <Field label="Email" state="error" hint="Invalid email format">
238
453
  <Input type="email" placeholder="you@example.com" />
239
454
  </Field>
240
-
241
455
  <Field label="Search">
242
456
  <Input leftElement={<SearchIcon />} placeholder="Search..." />
243
457
  </Field>
458
+ ```
244
459
 
245
- <Field label="Bio">
246
- <Textarea rows={4} placeholder="Tell us about yourself..." />
247
- </Field>
460
+ **Common mistakes:**
461
+ - ❌ `Applying state prop directly to Input` → Wrap Input in <Field state="error"> to apply validation styling
462
+
463
+ ---
464
+
465
+ ### Input
466
+
467
+ Text input field. Wrap in Field for labels and validation. Use leftElement/rightElement for icons.
468
+
469
+ ```tsx
470
+ import { Input } from "@usevyre/react"
471
+
472
+ // Props:
473
+ // size = "sm" | "md" | "lg" (default: md)
474
+ // leftElement = ReactNode
475
+ // rightElement = ReactNode
476
+
477
+ // Examples:
478
+ <Input type="password" rightElement={<EyeIcon />} placeholder="Password" />
479
+ ```
480
+
481
+ **Common mistakes:**
482
+ - ❌ `size="icon"` → Use size="sm" | "md" | "lg"
483
+ - ❌ `type="search" for search UI` → Import Command from @usevyre/react for search palettes
484
+
485
+ ---
486
+
487
+ ### Label
488
+
489
+ Accessible form label. Associate with input via htmlFor.
490
+
491
+ ```tsx
492
+ import { Label } from "@usevyre/react"
493
+
494
+ // Props:
495
+ // htmlFor = string
496
+ // required = boolean (default: false)
497
+
498
+ // Examples:
499
+ <Label htmlFor="email">Email address</Label>
500
+ <Input id="email" type="email" />
501
+ ```
502
+
503
+ ---
504
+
505
+ ### Modal
506
+
507
+ Dialog overlay for confirmations, forms, or focused content.
508
+
509
+ ```tsx
510
+ import { Modal, ModalHeader, ModalBody, ModalFooter } from "@usevyre/react"
511
+
512
+ // Props:
513
+ // open = boolean
514
+ // onClose = function
515
+ // size = "sm" | "md" | "lg" | "full" (default: md)
516
+ // title = string
517
+
518
+ // Examples:
519
+ <Modal open={isOpen} onClose={() => setIsOpen(false)} title="Confirm Delete" size="sm">
520
+ <ModalBody>Are you sure you want to delete this item?</ModalBody>
521
+ <ModalFooter>
522
+ <Button variant="ghost" onClick={() => setIsOpen(false)}>Cancel</Button>
523
+ <Button variant="danger" onClick={handleDelete}>Delete</Button>
524
+ </ModalFooter>
525
+ </Modal>
526
+ ```
527
+
528
+ **Common mistakes:**
529
+ - ❌ `size="xl"` → Use size="lg" or size="full"
530
+
531
+ ---
532
+
533
+ ### Pagination
534
+
535
+ Page navigation for paginated lists or tables.
536
+
537
+ ```tsx
538
+ import { Pagination } from "@usevyre/react"
539
+
540
+ // Props:
541
+ // page = number
542
+ // total = number
543
+ // onChange = function
544
+
545
+ // Examples:
546
+ <Pagination page={currentPage} total={totalPages} onChange={setCurrentPage} />
547
+ ```
548
+
549
+ ---
550
+
551
+ ### Popover
552
+
553
+ Floating content panel anchored to a trigger element. For simple labels use Tooltip instead.
554
+
555
+ ```tsx
556
+ import { Popover } from "@usevyre/react"
557
+
558
+ // Props:
559
+ // trigger = ReactElement
560
+ // placement = "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end" (default: bottom)
561
+ // open = boolean
562
+ // onOpenChange = function
563
+ // closeOnOutside = boolean (default: true)
564
+
565
+ // Examples:
566
+ <Popover trigger={<Button variant="secondary">More info</Button>} placement="bottom-start">
567
+ <div style={{ padding: 'var(--vyre-spacing-4)' }}>
568
+ <p>Detailed information here.</p>
569
+ </div>
570
+ </Popover>
571
+ ```
572
+
573
+ **Common mistakes:**
574
+ - ❌ `placement="top-center"` → Use placement="top" for centered placement
575
+
576
+ ---
577
+
578
+ ### Progress
579
+
580
+ Visual progress indicator for tasks, uploads, or completion status.
581
+
582
+ ```tsx
583
+ import { Progress } from "@usevyre/react"
584
+
585
+ // Props:
586
+ // value = number
587
+ // size = "sm" | "md" | "lg" (default: md)
588
+ // variant = "default" | "accent" | "teal" | "success" | "danger" (default: default)
589
+
590
+ // Examples:
591
+ <Progress value={uploadPercent} variant="accent" size="sm" />
592
+ ```
593
+
594
+ **Common mistakes:**
595
+ - ❌ `value > 100` → Normalize your value to 0–100 range before passing
596
+
597
+ ---
598
+
599
+ ### Select
600
+
601
+ Dropdown for selecting one option from a list.
602
+
603
+ ```tsx
604
+ import { Select } from "@usevyre/react"
605
+
606
+ // Props:
607
+ // options = SelectOption[]
608
+ // value = string
609
+ // onChange = function
610
+ // size = "sm" | "md" | "lg" (default: md)
611
+ // placeholder = string
612
+ // disabled = boolean (default: false)
613
+
614
+ // Examples:
615
+ <Select
616
+ options={[{ value: 'react', label: 'React' }, { value: 'vue', label: 'Vue' }]}
617
+ value={framework}
618
+ onChange={setFramework}
619
+ placeholder="Choose framework"
620
+ />
621
+ ```
622
+
623
+ **Common mistakes:**
624
+ - ❌ `Passing strings directly as children` → Pass options={[{ value: 'a', label: 'Option A' }]}
625
+
626
+ ---
627
+
628
+ ### Separator
629
+
630
+ Horizontal or vertical divider line.
631
+
632
+ ```tsx
633
+ import { Separator } from "@usevyre/react"
634
+
635
+ // Props:
636
+ // orientation = "horizontal" | "vertical" (default: horizontal)
637
+
638
+ // Examples:
639
+ <Separator />
640
+ <Separator orientation="vertical" />
641
+ ```
642
+
643
+ ---
644
+
645
+ ### Sheet
646
+
647
+ Side panel (drawer) that slides in from the edge. For forms, detail views, or settings.
648
+
649
+ ```tsx
650
+ import { Sheet, SheetHeader, SheetBody, SheetFooter } from "@usevyre/react"
651
+
652
+ // Props:
653
+ // open = boolean
654
+ // onClose = function
655
+ // size = "sm" | "md" | "lg" | "full" (default: md)
656
+ // side = "left" | "right" (default: right)
657
+ // title = string
658
+
659
+ // Examples:
660
+ <Sheet open={isOpen} onClose={() => setIsOpen(false)} title="Settings" side="right">
661
+ <SheetBody>Settings content here.</SheetBody>
662
+ <SheetFooter>
663
+ <Button variant="accent">Save</Button>
664
+ </SheetFooter>
665
+ </Sheet>
666
+ ```
667
+
668
+ ---
669
+
670
+ ### Sidebar
671
+
672
+ App navigation sidebar. Use AppLayout as the root layout wrapper.
673
+
674
+ ```tsx
675
+ import { AppLayout, Sidebar, SidebarHeader, SidebarContent, SidebarSection, SidebarItem, SidebarFooter } from "@usevyre/react"
676
+
677
+ // Props:
678
+ // variant = "default" | "floating" (default: default)
679
+
680
+ // Examples:
681
+ <AppLayout>
682
+ <Sidebar>
683
+ <SidebarHeader>Logo</SidebarHeader>
684
+ <SidebarContent>
685
+ <SidebarSection heading="Main">
686
+ <SidebarItem href="/" active>Dashboard</SidebarItem>
687
+ <SidebarItem href="/settings">Settings</SidebarItem>
688
+ </SidebarSection>
689
+ </SidebarContent>
690
+ <SidebarFooter><Avatar fallback="JD" size="sm" /></SidebarFooter>
691
+ </Sidebar>
692
+ <main>Page content</main>
693
+ </AppLayout>
694
+ ```
695
+
696
+ ---
697
+
698
+ ### Skeleton
699
+
700
+ Loading placeholder that mimics the shape of content while data loads.
701
+
702
+ ```tsx
703
+ import { Skeleton } from "@usevyre/react"
704
+
705
+ // Props:
706
+ // variant = "rect" | "circle" | "text" (default: rect)
707
+ // width = string | number
708
+ // height = string | number
709
+
710
+ // Examples:
711
+ <Skeleton variant="circle" width={40} height={40} />
712
+ <Skeleton variant="text" width="100%" />
713
+ <Skeleton variant="text" width="60%" />
248
714
  ```
249
715
 
250
716
  ---
251
717
 
718
+ ### Slider
719
+
720
+ Range input for selecting a numeric value within a range.
721
+
722
+ ```tsx
723
+ import { Slider } from "@usevyre/react"
724
+
725
+ // Props:
726
+ // value = number
727
+ // onChange = function
728
+ // min = number (default: 0)
729
+ // max = number (default: 100)
730
+ // step = number (default: 1)
731
+ // size = "sm" | "md" (default: md)
732
+ // disabled = boolean (default: false)
733
+
734
+ // Examples:
735
+ <Slider value={volume} onChange={setVolume} min={0} max={100} step={5} />
736
+ ```
737
+
738
+ ---
739
+
740
+ ### Switch
741
+
742
+ Toggle switch for boolean on/off settings.
743
+
744
+ ```tsx
745
+ import { Switch } from "@usevyre/react"
746
+
747
+ // Props:
748
+ // checked = boolean
749
+ // onChange = function
750
+ // size = "sm" | "md" (default: md)
751
+ // disabled = boolean (default: false)
752
+
753
+ // Examples:
754
+ <label style={{ display: 'flex', alignItems: 'center', gap: 'var(--vyre-spacing-2)' }}>
755
+ <Switch checked={notifications} onChange={setNotifications} />
756
+ Enable notifications
757
+ </label>
758
+ ```
759
+
760
+ ---
761
+
762
+ ### Table
763
+
764
+ Data table with optional sorting. Compose with TableHeader, TableRow, TableCell.
765
+
766
+ ```tsx
767
+ import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from "@usevyre/react"
768
+
769
+ // Examples:
770
+ <Table>
771
+ <TableHead>
772
+ <TableRow>
773
+ <TableHeader>Name</TableHeader>
774
+ <TableHeader>Status</TableHeader>
775
+ </TableRow>
776
+ </TableHead>
777
+ <TableBody>
778
+ <TableRow>
779
+ <TableCell>Alice</TableCell>
780
+ <TableCell><Badge variant="success">Active</Badge></TableCell>
781
+ </TableRow>
782
+ </TableBody>
783
+ </Table>
784
+ ```
785
+
786
+ ---
787
+
788
+ ### Tabs
789
+
790
+ Tabbed navigation for switching between content panels.
791
+
792
+ ```tsx
793
+ import { Tabs, TabList, Tab, TabPanels, TabPanel } from "@usevyre/react"
794
+
795
+ // Props:
796
+ // defaultIndex = number (default: 0)
797
+ // index = number
798
+ // onChange = function
799
+
800
+ // Examples:
801
+ <Tabs defaultIndex={0}>
802
+ <TabList>
803
+ <Tab>Overview</Tab>
804
+ <Tab>Settings</Tab>
805
+ </TabList>
806
+ <TabPanels>
807
+ <TabPanel>Overview content</TabPanel>
808
+ <TabPanel>Settings content</TabPanel>
809
+ </TabPanels>
810
+ </Tabs>
811
+ ```
812
+
813
+ ---
814
+
815
+ ### Toast
816
+
817
+ Transient notification. Use the useToast hook to trigger toasts imperatively.
818
+
819
+ ```tsx
820
+ import { useToast, ToastProvider } from "@usevyre/react"
821
+
822
+ // Props:
823
+ // variant = "default" | "success" | "warning" | "danger" (default: default)
824
+ // title = string
825
+ // description = string
826
+ // duration = number (default: 4000)
827
+
828
+ // Examples:
829
+ const { toast } = useToast();
830
+
831
+ <Button onClick={() => toast({ title: 'Saved!', variant: 'success', duration: 3000 })}>
832
+ Save
833
+ </Button>
834
+ <ToastProvider>
835
+ <App />
836
+ </ToastProvider>
837
+ ```
838
+
839
+ **Common mistakes:**
840
+ - ❌ `Rendering <Toast> directly in JSX` → Use: const { toast } = useToast(); then toast({ title, variant })
841
+ - ❌ `variant="error"` → Use variant="danger"
842
+ - ❌ `variant="info"` → Use variant="default"
843
+
844
+ ---
845
+
846
+ ### Tooltip
847
+
848
+ Short label that appears on hover/focus. For rich content use Popover instead.
849
+
850
+ ```tsx
851
+ import { Tooltip } from "@usevyre/react"
852
+
853
+ // Props:
854
+ // content = string | ReactNode
855
+ // placement = "top" | "bottom" | "left" | "right" (default: top)
856
+ // delay = number (default: 300)
857
+
858
+ // Examples:
859
+ <Tooltip content="Close dialog" placement="bottom">
860
+ <Button variant="ghost" size="icon" aria-label="Close">
861
+ <X size={16} />
862
+ </Button>
863
+ </Tooltip>
864
+ ```
865
+
866
+ **Common mistakes:**
867
+ - ❌ `Using Tooltip for rich content (forms, buttons, etc.)` → Use Popover for rich interactive content
868
+
869
+ ---
870
+
871
+ ### Typography
872
+
873
+ Text rendering components with semantic scale. Includes Text, Heading, Lead, Code, Blockquote.
874
+
875
+ ```tsx
876
+ import { Text, Heading, Lead, Code, Blockquote } from "@usevyre/react"
877
+
878
+ // Examples:
879
+ <Heading size="2xl" as="h1">Dashboard</Heading>
880
+ <Lead>Welcome back. Here's what's happening today.</Lead>
881
+ <Text size="sm" style={{ color: 'var(--vyre-color-semantic-text-muted)' }}>Last updated 5 minutes ago.</Text>
882
+ ```
883
+
884
+ **Common mistakes:**
885
+ - ❌ `Using raw <h1>, <p> tags instead of Typography components` → Use <Heading>, <Text>, <Lead> from @usevyre/react
886
+
887
+ ---
888
+
889
+ ## Hallucination Guard — Common AI Mistakes
890
+
891
+ The following prop values and patterns do NOT exist in useVyre.
892
+ If you generate these, you are hallucinating.
893
+
894
+ - ❌ `<Accordion Accordion without AccordionItem>` → Always compose: Accordion > AccordionItem > AccordionTrigger + AccordionContent
895
+ - ❌ `<Alert variant="error">` → Use variant="danger"
896
+ - ❌ `<Alert variant="primary">` → Use variant="info" | "success" | "warning" | "danger"
897
+ - ❌ `<Avatar size="xs">` → Use size="sm"
898
+ - ❌ `<Avatar size="2xl">` → Use size="xl"
899
+ - ❌ `<Badge variant="primary">` → Use variant="accent" for brand color
900
+ - ❌ `<Badge variant="error">` → Use variant="danger"
901
+ - ❌ `<Badge variant="info">` → Use variant="teal" for info-like styling
902
+ - ❌ `<Breadcrumb Using plain <a> tags inside Breadcrumb>` → Use BreadcrumbItem > BreadcrumbLink for each crumb
903
+ - ❌ `<Button variant="blue">` → Use variant="accent" for brand amber, or variant="teal" for teal
904
+ - ❌ `<Button size="xl">` → Use size="lg"
905
+ - ❌ `<Button color="...">` → Use variant prop instead
906
+ - ❌ `<Button icon={...}>` → Use leftIcon={...} or rightIcon={...}
907
+ - ❌ `<Button size="icon" without aria-label>` → Add aria-label describing the action
908
+ - ❌ `<Calendar Using Calendar for time selection>` → Combine with a separate time Input if time selection is needed
909
+ - ❌ `<Card variant="primary">` → Use variant="elevated" | "outlined" | "ghost" | "accent"
910
+ - ❌ `<Checkbox size="lg">` → Use size="md"
911
+ - ❌ `<Command Using Input type="search" for search UI>` → Use Command + CommandInput + CommandList + CommandItem
912
+ - ❌ `<DropdownMenu DropdownItem variant="primary">` → Use variant="danger" for destructive items only
913
+ - ❌ `<Field Applying state prop directly to Input>` → Wrap Input in <Field state="error"> to apply validation styling
914
+ - ❌ `<Input size="icon">` → Use size="sm" | "md" | "lg"
915
+ - ❌ `<Input type="search" for search UI>` → Import Command from @usevyre/react for search palettes
916
+ - ❌ `<Modal size="xl">` → Use size="lg" or size="full"
917
+ - ❌ `<Popover placement="top-center">` → Use placement="top" for centered placement
918
+ - ❌ `<Progress value > 100>` → Normalize your value to 0–100 range before passing
919
+ - ❌ `<Select Passing strings directly as children>` → Pass options={[{ value: 'a', label: 'Option A' }]}
920
+ - ❌ `<Toast Rendering <Toast> directly in JSX>` → Use: const { toast } = useToast(); then toast({ title, variant })
921
+ - ❌ `<Toast variant="error">` → Use variant="danger"
922
+ - ❌ `<Toast variant="info">` → Use variant="default"
923
+ - ❌ `<Tooltip Using Tooltip for rich content (forms, buttons, etc.)>` → Use Popover for rich interactive content
924
+ - ❌ `<Typography Using raw <h1>, <p> tags instead of Typography components>` → Use <Heading>, <Text>, <Lead> from @usevyre/react
925
+
926
+ ---
927
+
252
928
  ## Styling Rules for AI Agents
253
929
 
254
930
  1. ALWAYS use semantic tokens (`--vyre-color-semantic-*`), never primitive tokens