sonance-brand-mcp 1.3.1 → 1.3.2

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 (136) hide show
  1. package/dist/assets/api/sonance-analyze/route.ts +1116 -0
  2. package/dist/assets/api/sonance-assets/route.ts +113 -0
  3. package/dist/assets/api/sonance-components/route.ts +41 -0
  4. package/dist/assets/api/sonance-inject-id/route.ts +363 -0
  5. package/dist/assets/api/sonance-save-logo/route.ts +426 -0
  6. package/dist/assets/api/sonance-theme/route.ts +106 -0
  7. package/dist/assets/brand-system.ts +1265 -0
  8. package/dist/assets/components/accordion.stories.tsx +26 -26
  9. package/dist/assets/components/accordion.tsx +3 -3
  10. package/dist/assets/components/alert-dialog.stories.tsx +7 -7
  11. package/dist/assets/components/alert-dialog.tsx +2 -1
  12. package/dist/assets/components/alert.stories.tsx +3 -3
  13. package/dist/assets/components/alert.tsx +4 -3
  14. package/dist/assets/components/aspect-ratio.stories.tsx +4 -1
  15. package/dist/assets/components/autocomplete.stories.tsx +9 -9
  16. package/dist/assets/components/autocomplete.tsx +3 -3
  17. package/dist/assets/components/avatar.stories.tsx +5 -5
  18. package/dist/assets/components/avatar.tsx +4 -4
  19. package/dist/assets/components/badge.stories.tsx +10 -10
  20. package/dist/assets/components/badge.tsx +3 -3
  21. package/dist/assets/components/breadcrumbs.stories.tsx +7 -7
  22. package/dist/assets/components/breadcrumbs.tsx +13 -8
  23. package/dist/assets/components/button.stories.tsx +74 -74
  24. package/dist/assets/components/button.tsx +2 -0
  25. package/dist/assets/components/calendar.stories.tsx +11 -11
  26. package/dist/assets/components/calendar.tsx +4 -4
  27. package/dist/assets/components/card.stories.tsx +22 -22
  28. package/dist/assets/components/card.tsx +7 -3
  29. package/dist/assets/components/carousel.stories.tsx +6 -6
  30. package/dist/assets/components/carousel.tsx +10 -8
  31. package/dist/assets/components/chart.tsx +5 -5
  32. package/dist/assets/components/checkbox-group.stories.tsx +6 -6
  33. package/dist/assets/components/checkbox-group.tsx +3 -3
  34. package/dist/assets/components/checkbox.stories.tsx +23 -20
  35. package/dist/assets/components/checkbox.tsx +13 -16
  36. package/dist/assets/components/code.stories.tsx +24 -24
  37. package/dist/assets/components/code.tsx +7 -14
  38. package/dist/assets/components/collapsible.stories.tsx +3 -3
  39. package/dist/assets/components/command.stories.tsx +14 -14
  40. package/dist/assets/components/command.tsx +4 -3
  41. package/dist/assets/components/context-menu.stories.tsx +1 -1
  42. package/dist/assets/components/context-menu.tsx +3 -7
  43. package/dist/assets/components/date-input.stories.tsx +9 -9
  44. package/dist/assets/components/date-input.tsx +2 -2
  45. package/dist/assets/components/date-picker.stories.tsx +9 -9
  46. package/dist/assets/components/date-picker.tsx +3 -3
  47. package/dist/assets/components/date-range-picker.stories.tsx +12 -12
  48. package/dist/assets/components/date-range-picker.tsx +3 -3
  49. package/dist/assets/components/dialog.stories.tsx +40 -40
  50. package/dist/assets/components/dialog.tsx +8 -12
  51. package/dist/assets/components/divider.stories.tsx +30 -30
  52. package/dist/assets/components/divider.tsx +4 -8
  53. package/dist/assets/components/drawer.stories.tsx +32 -31
  54. package/dist/assets/components/drawer.tsx +7 -6
  55. package/dist/assets/components/dropdown-menu.tsx +3 -7
  56. package/dist/assets/components/dropdown.stories.tsx +12 -12
  57. package/dist/assets/components/dropdown.tsx +5 -5
  58. package/dist/assets/components/form.stories.tsx +30 -29
  59. package/dist/assets/components/form.tsx +5 -5
  60. package/dist/assets/components/hover-card.stories.tsx +12 -10
  61. package/dist/assets/components/hover-card.tsx +1 -1
  62. package/dist/assets/components/image.stories.tsx +48 -25
  63. package/dist/assets/components/image.tsx +8 -5
  64. package/dist/assets/components/input-otp.stories.tsx +15 -15
  65. package/dist/assets/components/input-otp.tsx +5 -5
  66. package/dist/assets/components/input.stories.tsx +30 -25
  67. package/dist/assets/components/input.tsx +7 -4
  68. package/dist/assets/components/kbd.stories.tsx +34 -34
  69. package/dist/assets/components/kbd.tsx +5 -5
  70. package/dist/assets/components/link.stories.tsx +36 -36
  71. package/dist/assets/components/link.tsx +4 -0
  72. package/dist/assets/components/listbox.stories.tsx +5 -5
  73. package/dist/assets/components/listbox.tsx +4 -4
  74. package/dist/assets/components/menubar.tsx +3 -7
  75. package/dist/assets/components/navbar.stories.tsx +24 -24
  76. package/dist/assets/components/navbar.tsx +8 -14
  77. package/dist/assets/components/navigation-menu.stories.tsx +11 -9
  78. package/dist/assets/components/navigation-menu.tsx +1 -1
  79. package/dist/assets/components/number-input.stories.tsx +11 -11
  80. package/dist/assets/components/number-input.tsx +3 -3
  81. package/dist/assets/components/pagination.stories.tsx +13 -13
  82. package/dist/assets/components/pagination.tsx +6 -6
  83. package/dist/assets/components/popover.stories.tsx +35 -35
  84. package/dist/assets/components/popover.tsx +98 -15
  85. package/dist/assets/components/progress.stories.tsx +5 -5
  86. package/dist/assets/components/progress.tsx +5 -5
  87. package/dist/assets/components/radio-group.stories.tsx +7 -7
  88. package/dist/assets/components/radio-group.tsx +3 -3
  89. package/dist/assets/components/range-calendar.stories.tsx +18 -18
  90. package/dist/assets/components/range-calendar.tsx +3 -3
  91. package/dist/assets/components/resizable.stories.tsx +23 -23
  92. package/dist/assets/components/resizable.tsx +1 -1
  93. package/dist/assets/components/scroll-area.stories.tsx +15 -15
  94. package/dist/assets/components/scroll-area.tsx +1 -1
  95. package/dist/assets/components/scroll-shadow.stories.tsx +17 -17
  96. package/dist/assets/components/scroll-shadow.tsx +2 -2
  97. package/dist/assets/components/select.stories.tsx +20 -19
  98. package/dist/assets/components/select.tsx +10 -6
  99. package/dist/assets/components/separator.tsx +1 -1
  100. package/dist/assets/components/sheet.tsx +3 -7
  101. package/dist/assets/components/sidebar.stories.tsx +30 -30
  102. package/dist/assets/components/sidebar.tsx +24 -27
  103. package/dist/assets/components/skeleton.stories.tsx +3 -3
  104. package/dist/assets/components/skeleton.tsx +2 -2
  105. package/dist/assets/components/slider.stories.tsx +6 -6
  106. package/dist/assets/components/slider.tsx +3 -3
  107. package/dist/assets/components/spacer.stories.tsx +11 -11
  108. package/dist/assets/components/spacer.tsx +2 -2
  109. package/dist/assets/components/spinner.stories.tsx +8 -8
  110. package/dist/assets/components/spinner.tsx +5 -5
  111. package/dist/assets/components/switch.stories.tsx +24 -20
  112. package/dist/assets/components/switch.tsx +14 -6
  113. package/dist/assets/components/table.stories.tsx +7 -7
  114. package/dist/assets/components/table.tsx +8 -8
  115. package/dist/assets/components/tabs.stories.tsx +37 -37
  116. package/dist/assets/components/tabs.tsx +3 -3
  117. package/dist/assets/components/textarea.stories.tsx +13 -12
  118. package/dist/assets/components/textarea.tsx +3 -3
  119. package/dist/assets/components/theme-toggle.stories.tsx +31 -30
  120. package/dist/assets/components/theme-toggle.tsx +2 -2
  121. package/dist/assets/components/time-input.stories.tsx +16 -16
  122. package/dist/assets/components/time-input.tsx +2 -2
  123. package/dist/assets/components/toast.stories.tsx +8 -5
  124. package/dist/assets/components/toast.tsx +6 -6
  125. package/dist/assets/components/toggle-group.tsx +1 -1
  126. package/dist/assets/components/toggle.tsx +1 -1
  127. package/dist/assets/components/tooltip.stories.tsx +49 -27
  128. package/dist/assets/components/tooltip.tsx +1 -1
  129. package/dist/assets/components/user.stories.tsx +23 -23
  130. package/dist/assets/components/user.tsx +7 -4
  131. package/dist/assets/dev-tools/SonanceDevTools.tsx +4201 -0
  132. package/dist/assets/dev-tools/index.ts +10 -0
  133. package/dist/assets/globals.css +9 -0
  134. package/dist/assets/styles/brand-overrides.css +37 -0
  135. package/dist/index.js +1776 -7
  136. package/package.json +1 -1
@@ -1,7 +1,29 @@
1
1
  import type { Meta, StoryObj } from '@storybook/nextjs-vite';
2
- import { Tooltip } from './tooltip';
2
+ import { Tooltip as TooltipRoot, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';
3
3
  import { Button } from './button';
4
4
 
5
+ const Tooltip = ({
6
+ children,
7
+ content,
8
+ side,
9
+ delay,
10
+ ...props
11
+ }: {
12
+ children: React.ReactNode;
13
+ content: string;
14
+ side?: 'top' | 'bottom' | 'left' | 'right';
15
+ delay?: number;
16
+ } & React.ComponentProps<typeof TooltipRoot>) => {
17
+ return (
18
+ <TooltipProvider delayDuration={delay}>
19
+ <TooltipRoot data-sonance-name="tooltip.stories" {...props}>
20
+ <TooltipTrigger asChild>{children}</TooltipTrigger>
21
+ <TooltipContent side={side}>{content}</TooltipContent>
22
+ </TooltipRoot>
23
+ </TooltipProvider>
24
+ );
25
+ };
26
+
5
27
  const meta: Meta<typeof Tooltip> = {
6
28
  title: 'Components/Overlays/Tooltip',
7
29
  component: Tooltip,
@@ -44,7 +66,7 @@ type Story = StoryObj<typeof meta>;
44
66
  export const Default: Story = {
45
67
  render: () => (
46
68
  <Tooltip content="This is a tooltip">
47
- <Button variant="secondary">Hover me</Button>
69
+ <Button id="default-button-secondary" variant="secondary">Hover me</Button>
48
70
  </Tooltip>
49
71
  ),
50
72
  };
@@ -53,7 +75,7 @@ export const Default: Story = {
53
75
  export const Top: Story = {
54
76
  render: () => (
55
77
  <Tooltip content="Tooltip on top" side="top">
56
- <Button variant="secondary">Top</Button>
78
+ <Button id="top-button-secondary" variant="secondary">Top</Button>
57
79
  </Tooltip>
58
80
  ),
59
81
  };
@@ -62,7 +84,7 @@ export const Top: Story = {
62
84
  export const Bottom: Story = {
63
85
  render: () => (
64
86
  <Tooltip content="Tooltip on bottom" side="bottom">
65
- <Button variant="secondary">Bottom</Button>
87
+ <Button id="bottom-button-secondary" variant="secondary">Bottom</Button>
66
88
  </Tooltip>
67
89
  ),
68
90
  };
@@ -71,7 +93,7 @@ export const Bottom: Story = {
71
93
  export const Left: Story = {
72
94
  render: () => (
73
95
  <Tooltip content="Tooltip on left" side="left">
74
- <Button variant="secondary">Left</Button>
96
+ <Button id="left-button-secondary" variant="secondary">Left</Button>
75
97
  </Tooltip>
76
98
  ),
77
99
  };
@@ -80,7 +102,7 @@ export const Left: Story = {
80
102
  export const Right: Story = {
81
103
  render: () => (
82
104
  <Tooltip content="Tooltip on right" side="right">
83
- <Button variant="secondary">Right</Button>
105
+ <Button id="right-button-secondary" variant="secondary">Right</Button>
84
106
  </Tooltip>
85
107
  ),
86
108
  };
@@ -90,16 +112,16 @@ export const AllPositions: Story = {
90
112
  render: () => (
91
113
  <div className="flex items-center gap-8 p-8">
92
114
  <Tooltip content="Top tooltip" side="top">
93
- <Button variant="secondary">Top</Button>
115
+ <Button id="all-positions-button-secondary" variant="secondary">Top</Button>
94
116
  </Tooltip>
95
117
  <Tooltip content="Bottom tooltip" side="bottom">
96
- <Button variant="secondary">Bottom</Button>
118
+ <Button id="all-positions-button-secondary" variant="secondary">Bottom</Button>
97
119
  </Tooltip>
98
120
  <Tooltip content="Left tooltip" side="left">
99
- <Button variant="secondary">Left</Button>
121
+ <Button id="all-positions-button-secondary" variant="secondary">Left</Button>
100
122
  </Tooltip>
101
123
  <Tooltip content="Right tooltip" side="right">
102
- <Button variant="secondary">Right</Button>
124
+ <Button id="all-positions-button-secondary" variant="secondary">Right</Button>
103
125
  </Tooltip>
104
126
  </div>
105
127
  ),
@@ -110,13 +132,13 @@ export const WithDelay: Story = {
110
132
  render: () => (
111
133
  <div className="flex gap-4">
112
134
  <Tooltip content="No delay (0ms)" delay={0}>
113
- <Button variant="secondary">Instant</Button>
135
+ <Button id="with-delay-button-secondary" variant="secondary">Instant</Button>
114
136
  </Tooltip>
115
137
  <Tooltip content="Default delay (200ms)" delay={200}>
116
- <Button variant="secondary">Default</Button>
138
+ <Button id="with-delay-button-secondary" variant="secondary">Default</Button>
117
139
  </Tooltip>
118
140
  <Tooltip content="Slow delay (500ms)" delay={500}>
119
- <Button variant="secondary">Slow</Button>
141
+ <Button id="with-delay-button-secondary" variant="secondary">Slow</Button>
120
142
  </Tooltip>
121
143
  </div>
122
144
  ),
@@ -155,7 +177,7 @@ export const OnIconButton: Story = {
155
177
  export const LongContent: Story = {
156
178
  render: () => (
157
179
  <Tooltip content="This is a tooltip with longer content that explains something in more detail">
158
- <Button variant="secondary">Hover for details</Button>
180
+ <Button id="long-content-button-secondary" variant="secondary">Hover for details</Button>
159
181
  </Tooltip>
160
182
  ),
161
183
  };
@@ -163,10 +185,10 @@ export const LongContent: Story = {
163
185
  // On Text
164
186
  export const OnText: Story = {
165
187
  render: () => (
166
- <p className="text-foreground-secondary">
188
+ <p id="on-text-p" className="text-foreground-secondary">
167
189
  Hover over the{' '}
168
190
  <Tooltip content="This is additional information">
169
- <span className="text-foreground border-b border-dashed border-foreground-muted cursor-help">
191
+ <span id="on-text-span-underlined-text" className="text-foreground border-b border-dashed border-foreground-muted cursor-help">
170
192
  underlined text
171
193
  </span>
172
194
  </Tooltip>{' '}
@@ -181,43 +203,43 @@ export const ResponsiveMatrix: Story = {
181
203
  <div className="space-y-8">
182
204
  {/* Mobile */}
183
205
  <div>
184
- <h4 className="text-xs uppercase text-foreground-muted mb-2">Mobile (375px)</h4>
206
+ <h4 id="responsive-matrix-h4-mobile-375px" className="text-xs uppercase text-foreground-muted mb-2">Mobile (375px)</h4>
185
207
  <div className="w-[375px] border border-dashed border-border p-4 flex justify-center">
186
208
  <Tooltip content="Mobile tooltip">
187
- <Button variant="secondary" size="sm">Hover me</Button>
209
+ <Button id="responsive-matrix-button-secondary" variant="secondary" size="sm">Hover me</Button>
188
210
  </Tooltip>
189
211
  </div>
190
212
  </div>
191
213
  {/* Tablet */}
192
214
  <div>
193
- <h4 className="text-xs uppercase text-foreground-muted mb-2">Tablet (768px)</h4>
215
+ <h4 id="responsive-matrix-h4-tablet-768px" className="text-xs uppercase text-foreground-muted mb-2">Tablet (768px)</h4>
194
216
  <div className="w-[768px] border border-dashed border-border p-4 flex justify-center gap-4">
195
217
  <Tooltip content="Top" side="top">
196
- <Button variant="secondary">Top</Button>
218
+ <Button id="responsive-matrix-button-secondary" variant="secondary">Top</Button>
197
219
  </Tooltip>
198
220
  <Tooltip content="Bottom" side="bottom">
199
- <Button variant="secondary">Bottom</Button>
221
+ <Button id="responsive-matrix-button-secondary" variant="secondary">Bottom</Button>
200
222
  </Tooltip>
201
223
  <Tooltip content="Left" side="left">
202
- <Button variant="secondary">Left</Button>
224
+ <Button id="responsive-matrix-button-secondary" variant="secondary">Left</Button>
203
225
  </Tooltip>
204
226
  <Tooltip content="Right" side="right">
205
- <Button variant="secondary">Right</Button>
227
+ <Button id="responsive-matrix-button-secondary" variant="secondary">Right</Button>
206
228
  </Tooltip>
207
229
  </div>
208
230
  </div>
209
231
  {/* Desktop */}
210
232
  <div>
211
- <h4 className="text-xs uppercase text-foreground-muted mb-2">Desktop (1280px)</h4>
233
+ <h4 id="responsive-matrix-h4-desktop-1280px" className="text-xs uppercase text-foreground-muted mb-2">Desktop (1280px)</h4>
212
234
  <div className="w-[1280px] border border-dashed border-border p-4 flex justify-between items-center">
213
235
  <Tooltip content="Edit item">
214
- <Button variant="ghost" size="sm">Edit</Button>
236
+ <Button id="responsive-matrix-button-ghost" variant="ghost" size="sm">Edit</Button>
215
237
  </Tooltip>
216
238
  <Tooltip content="This is a longer tooltip with more detailed explanation">
217
- <Button variant="secondary">Hover for details</Button>
239
+ <Button id="responsive-matrix-button-secondary" variant="secondary">Hover for details</Button>
218
240
  </Tooltip>
219
241
  <Tooltip content="Delete permanently" side="left">
220
- <Button variant="ghost" size="sm">Delete</Button>
242
+ <Button id="responsive-matrix-button-ghost" variant="ghost" size="sm">Delete</Button>
221
243
  </Tooltip>
222
244
  </div>
223
245
  </div>
@@ -15,7 +15,7 @@ const TooltipContent = React.forwardRef<
15
15
  React.ElementRef<typeof TooltipPrimitive.Content>,
16
16
  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
17
17
  >(({ className, sideOffset = 4, ...props }, ref) => (
18
- <TooltipPrimitive.Content
18
+ <TooltipPrimitive.Content data-sonance-name="tooltip"
19
19
  ref={ref}
20
20
  sideOffset={sideOffset}
21
21
  className={cn(
@@ -43,15 +43,15 @@ export const Sizes: Story = {
43
43
  render: () => (
44
44
  <div className="space-y-4">
45
45
  <div>
46
- <p className="text-xs text-foreground-muted mb-2">Small</p>
46
+ <p id="sizes-p-small" className="text-xs text-foreground-muted mb-2">Small</p>
47
47
  <User name="John Doe" description="Designer" size="sm" />
48
48
  </div>
49
49
  <div>
50
- <p className="text-xs text-foreground-muted mb-2">Medium (default)</p>
50
+ <p id="sizes-p-medium-default" className="text-xs text-foreground-muted mb-2">Medium (default)</p>
51
51
  <User name="John Doe" description="Designer" size="md" />
52
52
  </div>
53
53
  <div>
54
- <p className="text-xs text-foreground-muted mb-2">Large</p>
54
+ <p id="sizes-p-large" className="text-xs text-foreground-muted mb-2">Large</p>
55
55
  <User name="John Doe" description="Designer" size="lg" />
56
56
  </div>
57
57
  </div>
@@ -79,7 +79,7 @@ export const Card: Story = {
79
79
  name="Sarah Wilson"
80
80
  description="sarah@sonance.com"
81
81
  avatarSrc="https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=100&h=100&fit=crop"
82
- actions={<Button size="sm" variant="secondary">Follow</Button>}
82
+ actions={<Button id="card-button-secondary" size="sm" variant="secondary">Follow</Button>}
83
83
  />
84
84
  </div>
85
85
  ),
@@ -91,7 +91,7 @@ export const CardVariations: Story = {
91
91
  <UserCard
92
92
  name="David Lee"
93
93
  description="Architect"
94
- actions={<Button size="sm" variant="secondary">Message</Button>}
94
+ actions={<Button id="card-variations-button-secondary" size="sm" variant="secondary">Message</Button>}
95
95
  />
96
96
  <UserCard
97
97
  name="Emily Chen"
@@ -99,8 +99,8 @@ export const CardVariations: Story = {
99
99
  avatarSrc="https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=100&h=100&fit=crop"
100
100
  actions={
101
101
  <div className="flex gap-2">
102
- <Button size="sm" variant="ghost">Ignore</Button>
103
- <Button size="sm">Accept</Button>
102
+ <Button id="card-variations-button-ghost" size="sm" variant="ghost">Ignore</Button>
103
+ <Button id="card-variations-button" size="sm">Accept</Button>
104
104
  </div>
105
105
  }
106
106
  />
@@ -138,17 +138,17 @@ export const ListWithActions: Story = {
138
138
  name="Alice Brown"
139
139
  description="Project Manager"
140
140
  avatarSrc="https://images.unsplash.com/photo-1580489944761-15a19d654956?w=100&h=100&fit=crop"
141
- actions={<Button size="sm" variant="ghost">Remove</Button>}
141
+ actions={<Button id="list-with-actions-button-ghost" size="sm" variant="ghost">Remove</Button>}
142
142
  />
143
143
  <UserListItem
144
144
  name="Bob Johnson"
145
145
  description="Developer"
146
- actions={<Button size="sm" variant="ghost">Remove</Button>}
146
+ actions={<Button id="list-with-actions-button-ghost" size="sm" variant="ghost">Remove</Button>}
147
147
  />
148
148
  <UserListItem
149
149
  name="Carol White"
150
150
  description="Designer"
151
- actions={<Button size="sm" variant="ghost">Remove</Button>}
151
+ actions={<Button id="list-with-actions-button-ghost" size="sm" variant="ghost">Remove</Button>}
152
152
  />
153
153
  </div>
154
154
  ),
@@ -164,8 +164,8 @@ export const TeamList: Story = {
164
164
  ];
165
165
 
166
166
  return (
167
- <div className="w-80">
168
- <h3 className="text-sm font-medium text-foreground mb-4">Leadership Team</h3>
167
+ <div data-sonance-name="user.stories" className="w-80">
168
+ <h3 id="team-list-h3-leadership-team" className="text-sm font-medium text-foreground mb-4">Leadership Team</h3>
169
169
  <div className="space-y-3">
170
170
  {team.map((member) => (
171
171
  <User
@@ -185,22 +185,22 @@ export const AllVariants: Story = {
185
185
  render: () => (
186
186
  <div className="space-y-8">
187
187
  <div>
188
- <h3 className="text-sm font-medium text-foreground mb-4">User Component</h3>
188
+ <h3 id="all-variants-h3-user-component" className="text-sm font-medium text-foreground mb-4">User Component</h3>
189
189
  <User name="Alex Johnson" description="Product Designer" />
190
190
  </div>
191
191
 
192
192
  <div>
193
- <h3 className="text-sm font-medium text-foreground mb-4">User Card</h3>
193
+ <h3 id="all-variants-h3-user-card" className="text-sm font-medium text-foreground mb-4">User Card</h3>
194
194
  <UserCard
195
195
  name="Sarah Wilson"
196
196
  description="sarah@sonance.com"
197
- actions={<Button size="sm" variant="secondary">Follow</Button>}
197
+ actions={<Button id="all-variants-button-secondary" size="sm" variant="secondary">Follow</Button>}
198
198
  className="w-80"
199
199
  />
200
200
  </div>
201
201
 
202
202
  <div>
203
- <h3 className="text-sm font-medium text-foreground mb-4">User List Items</h3>
203
+ <h3 id="all-variants-h3-user-list-items" className="text-sm font-medium text-foreground mb-4">User List Items</h3>
204
204
  <div className="w-80 border border-border">
205
205
  <UserListItem name="Chris Taylor" description="chris@example.com" />
206
206
  <UserListItem name="Sam Anderson" description="sam@example.com" selected />
@@ -217,32 +217,32 @@ export const ResponsiveMatrix: Story = {
217
217
  <div className="space-y-8">
218
218
  {/* Mobile */}
219
219
  <div>
220
- <h4 className="text-xs uppercase text-foreground-muted mb-2">Mobile (375px)</h4>
220
+ <h4 id="responsive-matrix-h4-mobile-375px" className="text-xs uppercase text-foreground-muted mb-2">Mobile (375px)</h4>
221
221
  <div className="w-[375px] border border-dashed border-border p-4">
222
222
  <User name="John Doe" description="Product Designer" size="md" />
223
223
  </div>
224
224
  </div>
225
225
  {/* Tablet */}
226
226
  <div>
227
- <h4 className="text-xs uppercase text-foreground-muted mb-2">Tablet (768px)</h4>
227
+ <h4 id="responsive-matrix-h4-tablet-768px" className="text-xs uppercase text-foreground-muted mb-2">Tablet (768px)</h4>
228
228
  <div className="w-[768px] border border-dashed border-border p-4">
229
229
  <div className="grid grid-cols-2 gap-4">
230
230
  <UserCard
231
231
  name="Sarah Wilson"
232
232
  description="sarah@sonance.com"
233
- actions={<Button size="sm" variant="secondary">Follow</Button>}
233
+ actions={<Button id="responsive-matrix-button-secondary" size="sm" variant="secondary">Follow</Button>}
234
234
  />
235
235
  <UserCard
236
236
  name="James Miller"
237
237
  description="james@sonance.com"
238
- actions={<Button size="sm" variant="secondary">Follow</Button>}
238
+ actions={<Button id="responsive-matrix-button-secondary" size="sm" variant="secondary">Follow</Button>}
239
239
  />
240
240
  </div>
241
241
  </div>
242
242
  </div>
243
243
  {/* Desktop */}
244
244
  <div>
245
- <h4 className="text-xs uppercase text-foreground-muted mb-2">Desktop (1280px)</h4>
245
+ <h4 id="responsive-matrix-h4-desktop-1280px" className="text-xs uppercase text-foreground-muted mb-2">Desktop (1280px)</h4>
246
246
  <div className="w-[1280px] border border-dashed border-border p-4">
247
247
  <div className="grid grid-cols-3 gap-4">
248
248
  <div className="border border-border">
@@ -256,8 +256,8 @@ export const ResponsiveMatrix: Story = {
256
256
  avatarSrc="https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=100&h=100&fit=crop"
257
257
  actions={
258
258
  <div className="flex gap-2">
259
- <Button size="sm" variant="ghost">Ignore</Button>
260
- <Button size="sm">Accept</Button>
259
+ <Button id="responsive-matrix-button-ghost" size="sm" variant="ghost">Ignore</Button>
260
+ <Button id="responsive-matrix-button" size="sm">Accept</Button>
261
261
  </div>
262
262
  }
263
263
  />
@@ -40,9 +40,9 @@ export const User = forwardRef<HTMLDivElement, UserProps>(
40
40
  };
41
41
 
42
42
  return (
43
- <div
43
+ <div data-sonance-name="user"
44
44
  ref={ref}
45
- className={cn(userVariants({ size }), className)}
45
+ className={cn(userVariants({ size }), className)}
46
46
  {...props}
47
47
  >
48
48
  <Avatar
@@ -52,6 +52,7 @@ export const User = forwardRef<HTMLDivElement, UserProps>(
52
52
  />
53
53
  <div className="flex flex-col min-w-0">
54
54
  <span
55
+ id="user-span-name"
55
56
  className={cn(
56
57
  "font-medium text-foreground truncate",
57
58
  nameSizeClasses[size || "md"]
@@ -61,6 +62,7 @@ export const User = forwardRef<HTMLDivElement, UserProps>(
61
62
  </span>
62
63
  {description && (
63
64
  <span
65
+ id="user-span-description"
64
66
  className={cn(
65
67
  "text-foreground-muted truncate",
66
68
  descSizeClasses[size || "md"]
@@ -96,7 +98,7 @@ export function UserCard({
96
98
  className,
97
99
  }: UserCardProps) {
98
100
  return (
99
- <div
101
+ <div data-sonance-name="user"
100
102
  className={cn(
101
103
  "flex items-center justify-between gap-4 p-4",
102
104
  "border border-border bg-card",
@@ -151,9 +153,10 @@ export function UserListItem({
151
153
  size="sm"
152
154
  />
153
155
  <div className="flex flex-col min-w-0">
154
- <span className="text-sm font-medium truncate">{name}</span>
156
+ <span id="user-list-item-span-name" className="text-sm font-medium truncate">{name}</span>
155
157
  {description && (
156
158
  <span
159
+ id="user-list-item-span-description"
157
160
  className={cn(
158
161
  "text-xs truncate",
159
162
  selected ? "text-primary-foreground/70" : "text-foreground-muted"