sonance-brand-mcp 1.1.4 → 1.2.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 (73) hide show
  1. package/dist/assets/BRAND_GUIDELINES.md +0 -8
  2. package/dist/assets/components/accordion.stories.tsx +310 -0
  3. package/dist/assets/components/accordion.tsx +56 -30
  4. package/dist/assets/components/alert.stories.tsx +199 -0
  5. package/dist/assets/components/autocomplete.stories.tsx +307 -0
  6. package/dist/assets/components/autocomplete.tsx +28 -4
  7. package/dist/assets/components/avatar.stories.tsx +175 -0
  8. package/dist/assets/components/badge.stories.tsx +258 -0
  9. package/dist/assets/components/breadcrumbs.stories.tsx +175 -0
  10. package/dist/assets/components/button.stories.tsx +362 -0
  11. package/dist/assets/components/button.tsx +48 -3
  12. package/dist/assets/components/calendar.stories.tsx +247 -0
  13. package/dist/assets/components/card.stories.tsx +275 -0
  14. package/dist/assets/components/card.tsx +26 -1
  15. package/dist/assets/components/checkbox-group.stories.tsx +281 -0
  16. package/dist/assets/components/checkbox.stories.tsx +160 -0
  17. package/dist/assets/components/checkbox.tsx +32 -4
  18. package/dist/assets/components/code.stories.tsx +265 -0
  19. package/dist/assets/components/date-input.stories.tsx +278 -0
  20. package/dist/assets/components/date-input.tsx +24 -2
  21. package/dist/assets/components/date-picker.stories.tsx +337 -0
  22. package/dist/assets/components/date-picker.tsx +28 -4
  23. package/dist/assets/components/date-range-picker.stories.tsx +340 -0
  24. package/dist/assets/components/dialog.stories.tsx +285 -0
  25. package/dist/assets/components/divider.stories.tsx +176 -0
  26. package/dist/assets/components/drawer.stories.tsx +216 -0
  27. package/dist/assets/components/dropdown.stories.tsx +342 -0
  28. package/dist/assets/components/dropdown.tsx +55 -10
  29. package/dist/assets/components/form.stories.tsx +372 -0
  30. package/dist/assets/components/image.stories.tsx +348 -0
  31. package/dist/assets/components/input-otp.stories.tsx +336 -0
  32. package/dist/assets/components/input-otp.tsx +24 -2
  33. package/dist/assets/components/input.stories.tsx +223 -0
  34. package/dist/assets/components/input.tsx +27 -2
  35. package/dist/assets/components/kbd.stories.tsx +272 -0
  36. package/dist/assets/components/link.stories.tsx +199 -0
  37. package/dist/assets/components/link.tsx +50 -1
  38. package/dist/assets/components/listbox.stories.tsx +287 -0
  39. package/dist/assets/components/listbox.tsx +30 -7
  40. package/dist/assets/components/navbar.stories.tsx +218 -0
  41. package/dist/assets/components/number-input.stories.tsx +295 -0
  42. package/dist/assets/components/number-input.tsx +30 -8
  43. package/dist/assets/components/pagination.stories.tsx +280 -0
  44. package/dist/assets/components/pagination.tsx +45 -21
  45. package/dist/assets/components/popover.stories.tsx +219 -0
  46. package/dist/assets/components/progress.stories.tsx +153 -0
  47. package/dist/assets/components/radio-group.stories.tsx +187 -0
  48. package/dist/assets/components/radio-group.tsx +30 -6
  49. package/dist/assets/components/range-calendar.stories.tsx +334 -0
  50. package/dist/assets/components/scroll-shadow.stories.tsx +335 -0
  51. package/dist/assets/components/select.stories.tsx +192 -0
  52. package/dist/assets/components/select.tsx +54 -7
  53. package/dist/assets/components/skeleton.stories.tsx +166 -0
  54. package/dist/assets/components/slider.stories.tsx +145 -0
  55. package/dist/assets/components/slider.tsx +43 -8
  56. package/dist/assets/components/spacer.stories.tsx +216 -0
  57. package/dist/assets/components/spinner.stories.tsx +149 -0
  58. package/dist/assets/components/switch.stories.tsx +170 -0
  59. package/dist/assets/components/switch.tsx +29 -4
  60. package/dist/assets/components/table.stories.tsx +322 -0
  61. package/dist/assets/components/tabs.stories.tsx +306 -0
  62. package/dist/assets/components/tabs.tsx +25 -4
  63. package/dist/assets/components/textarea.stories.tsx +103 -0
  64. package/dist/assets/components/textarea.tsx +27 -3
  65. package/dist/assets/components/theme-toggle.stories.tsx +248 -0
  66. package/dist/assets/components/time-input.stories.tsx +365 -0
  67. package/dist/assets/components/time-input.tsx +25 -3
  68. package/dist/assets/components/toast.stories.tsx +195 -0
  69. package/dist/assets/components/tooltip.stories.tsx +226 -0
  70. package/dist/assets/components/user.stories.tsx +274 -0
  71. package/dist/assets/logo-manifest.json +0 -18
  72. package/dist/index.js +2142 -85
  73. package/package.json +1 -1
@@ -0,0 +1,176 @@
1
+ import type { Meta, StoryObj } from '@storybook/nextjs-vite';
2
+ import { Divider } from './divider';
3
+
4
+ const meta: Meta<typeof Divider> = {
5
+ title: 'Components/Utilities/Divider',
6
+ component: Divider,
7
+ tags: ['autodocs'],
8
+ parameters: {
9
+ docs: {
10
+ description: {
11
+ component: 'A visual separator for dividing content sections.',
12
+ },
13
+ },
14
+ },
15
+ argTypes: {
16
+ orientation: {
17
+ control: 'select',
18
+ options: ['horizontal', 'vertical'],
19
+ },
20
+ label: { control: 'text' },
21
+ },
22
+ };
23
+
24
+ export default meta;
25
+ type Story = StoryObj<typeof meta>;
26
+
27
+ export const Default: Story = {
28
+ render: () => (
29
+ <div className="w-full max-w-md">
30
+ <p className="text-foreground-secondary">Content above the divider</p>
31
+ <Divider className="my-4" />
32
+ <p className="text-foreground-secondary">Content below the divider</p>
33
+ </div>
34
+ ),
35
+ };
36
+
37
+ export const WithLabel: Story = {
38
+ render: () => (
39
+ <div className="w-full max-w-md">
40
+ <p className="text-foreground-secondary">Content above</p>
41
+ <Divider label="OR" className="my-4" />
42
+ <p className="text-foreground-secondary">Content below</p>
43
+ </div>
44
+ ),
45
+ };
46
+
47
+ export const Vertical: Story = {
48
+ render: () => (
49
+ <div className="flex items-center gap-4 h-12">
50
+ <span className="text-foreground-secondary">Item 1</span>
51
+ <Divider orientation="vertical" />
52
+ <span className="text-foreground-secondary">Item 2</span>
53
+ <Divider orientation="vertical" />
54
+ <span className="text-foreground-secondary">Item 3</span>
55
+ </div>
56
+ ),
57
+ };
58
+
59
+ export const InCard: Story = {
60
+ render: () => (
61
+ <div className="w-80 border border-border p-4">
62
+ <h3 className="font-medium text-foreground">Card Title</h3>
63
+ <p className="text-sm text-foreground-muted mt-1">Card subtitle or description</p>
64
+ <Divider className="my-4" />
65
+ <p className="text-sm text-foreground-secondary">
66
+ This is the main content area of the card. The divider separates the header from the content.
67
+ </p>
68
+ <Divider className="my-4" />
69
+ <div className="flex justify-end gap-2">
70
+ <button className="text-sm text-foreground-muted hover:text-foreground">Cancel</button>
71
+ <button className="text-sm text-primary hover:text-primary-hover">Confirm</button>
72
+ </div>
73
+ </div>
74
+ ),
75
+ };
76
+
77
+ export const LoginForm: Story = {
78
+ render: () => (
79
+ <div className="w-80 space-y-4">
80
+ <button className="w-full px-4 py-2 border border-border text-foreground hover:bg-secondary-hover transition-colors">
81
+ Continue with Google
82
+ </button>
83
+ <button className="w-full px-4 py-2 border border-border text-foreground hover:bg-secondary-hover transition-colors">
84
+ Continue with GitHub
85
+ </button>
86
+ <Divider label="or" className="my-6" />
87
+ <input
88
+ type="email"
89
+ placeholder="Email address"
90
+ className="w-full px-3 py-2 border border-border bg-background text-foreground"
91
+ />
92
+ <button className="w-full px-4 py-2 bg-primary text-primary-foreground hover:bg-primary-hover transition-colors">
93
+ Continue with Email
94
+ </button>
95
+ </div>
96
+ ),
97
+ };
98
+
99
+ export const NavigationBar: Story = {
100
+ render: () => (
101
+ <nav className="flex items-center gap-4 p-4 border border-border">
102
+ <a href="#" className="text-sm text-foreground hover:text-foreground-secondary">Home</a>
103
+ <a href="#" className="text-sm text-foreground hover:text-foreground-secondary">Products</a>
104
+ <a href="#" className="text-sm text-foreground hover:text-foreground-secondary">About</a>
105
+ <Divider orientation="vertical" className="h-4" />
106
+ <a href="#" className="text-sm text-foreground hover:text-foreground-secondary">Support</a>
107
+ <a href="#" className="text-sm text-foreground hover:text-foreground-secondary">Contact</a>
108
+ </nav>
109
+ ),
110
+ };
111
+
112
+ export const AllExamples: Story = {
113
+ render: () => (
114
+ <div className="space-y-8 w-full max-w-md">
115
+ <div>
116
+ <p className="text-xs text-foreground-muted mb-2">Horizontal</p>
117
+ <Divider />
118
+ </div>
119
+
120
+ <div>
121
+ <p className="text-xs text-foreground-muted mb-2">With Label</p>
122
+ <Divider label="Section" />
123
+ </div>
124
+
125
+ <div>
126
+ <p className="text-xs text-foreground-muted mb-2">Vertical (in flex container)</p>
127
+ <div className="flex items-center gap-4 h-8">
128
+ <span>Left</span>
129
+ <Divider orientation="vertical" />
130
+ <span>Center</span>
131
+ <Divider orientation="vertical" />
132
+ <span>Right</span>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ ),
137
+ };
138
+
139
+ // Responsive Matrix - Mobile, Tablet, Desktop
140
+ export const ResponsiveMatrix: Story = {
141
+ render: () => (
142
+ <div className="space-y-8">
143
+ {/* Mobile */}
144
+ <div>
145
+ <h4 className="text-xs uppercase text-foreground-muted mb-2">Mobile (375px)</h4>
146
+ <div className="w-[375px] border border-dashed border-border p-4">
147
+ <p className="text-foreground-secondary text-sm">Content above</p>
148
+ <Divider className="my-4" />
149
+ <p className="text-foreground-secondary text-sm">Content below</p>
150
+ </div>
151
+ </div>
152
+ {/* Tablet */}
153
+ <div>
154
+ <h4 className="text-xs uppercase text-foreground-muted mb-2">Tablet (768px)</h4>
155
+ <div className="w-[768px] border border-dashed border-border p-4">
156
+ <Divider label="OR" />
157
+ </div>
158
+ </div>
159
+ {/* Desktop */}
160
+ <div>
161
+ <h4 className="text-xs uppercase text-foreground-muted mb-2">Desktop (1280px)</h4>
162
+ <div className="w-[1280px] border border-dashed border-border p-4">
163
+ <div className="flex items-center gap-4 h-8">
164
+ <span className="text-foreground-secondary">Section 1</span>
165
+ <Divider orientation="vertical" />
166
+ <span className="text-foreground-secondary">Section 2</span>
167
+ <Divider orientation="vertical" />
168
+ <span className="text-foreground-secondary">Section 3</span>
169
+ <Divider orientation="vertical" />
170
+ <span className="text-foreground-secondary">Section 4</span>
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ ),
176
+ };
@@ -0,0 +1,216 @@
1
+ import type { Meta, StoryObj } from '@storybook/nextjs-vite';
2
+ import { useState } from 'react';
3
+ import { Drawer, DrawerHeader, DrawerTitle, DrawerBody, DrawerFooter } from './drawer';
4
+ import { Button } from './button';
5
+ import { Input } from './input';
6
+
7
+ const meta: Meta<typeof Drawer> = {
8
+ title: 'Components/Overlays/Drawer',
9
+ component: Drawer,
10
+ tags: ['autodocs'],
11
+ parameters: {
12
+ docs: {
13
+ description: {
14
+ component: 'A sliding panel overlay that appears from the edge of the screen.',
15
+ },
16
+ },
17
+ layout: 'centered',
18
+ },
19
+ };
20
+
21
+ export default meta;
22
+ type Story = StoryObj<typeof meta>;
23
+
24
+ export const Default: Story = {
25
+ render: () => {
26
+ const [open, setOpen] = useState(false);
27
+ return (
28
+ <>
29
+ <Button onClick={() => setOpen(true)}>Open Drawer</Button>
30
+ <Drawer open={open} onClose={() => setOpen(false)}>
31
+ <DrawerHeader onClose={() => setOpen(false)}>
32
+ <DrawerTitle>Drawer Title</DrawerTitle>
33
+ </DrawerHeader>
34
+ <DrawerBody>
35
+ <p className="text-foreground-secondary">
36
+ This is the drawer content area. You can add any content here.
37
+ </p>
38
+ </DrawerBody>
39
+ <DrawerFooter>
40
+ <Button variant="secondary" onClick={() => setOpen(false)}>Cancel</Button>
41
+ <Button onClick={() => setOpen(false)}>Save</Button>
42
+ </DrawerFooter>
43
+ </Drawer>
44
+ </>
45
+ );
46
+ },
47
+ };
48
+
49
+ export const LeftPosition: Story = {
50
+ render: () => {
51
+ const [open, setOpen] = useState(false);
52
+ return (
53
+ <>
54
+ <Button onClick={() => setOpen(true)}>Open Left Drawer</Button>
55
+ <Drawer open={open} onClose={() => setOpen(false)} position="left">
56
+ <DrawerHeader onClose={() => setOpen(false)}>
57
+ <DrawerTitle>Navigation</DrawerTitle>
58
+ </DrawerHeader>
59
+ <DrawerBody>
60
+ <nav className="space-y-2">
61
+ {['Dashboard', 'Products', 'Orders', 'Customers', 'Settings'].map((item) => (
62
+ <a
63
+ key={item}
64
+ href="#"
65
+ className="block px-4 py-2 text-foreground hover:bg-secondary-hover rounded transition-colors"
66
+ >
67
+ {item}
68
+ </a>
69
+ ))}
70
+ </nav>
71
+ </DrawerBody>
72
+ </Drawer>
73
+ </>
74
+ );
75
+ },
76
+ };
77
+
78
+ export const TopPosition: Story = {
79
+ render: () => {
80
+ const [open, setOpen] = useState(false);
81
+ return (
82
+ <>
83
+ <Button onClick={() => setOpen(true)}>Open Top Drawer</Button>
84
+ <Drawer open={open} onClose={() => setOpen(false)} position="top">
85
+ <DrawerHeader onClose={() => setOpen(false)}>
86
+ <DrawerTitle>Notifications</DrawerTitle>
87
+ </DrawerHeader>
88
+ <DrawerBody>
89
+ <p className="text-foreground-secondary">
90
+ Top drawer content appears from the top of the screen.
91
+ </p>
92
+ </DrawerBody>
93
+ </Drawer>
94
+ </>
95
+ );
96
+ },
97
+ };
98
+
99
+ export const BottomPosition: Story = {
100
+ render: () => {
101
+ const [open, setOpen] = useState(false);
102
+ return (
103
+ <>
104
+ <Button onClick={() => setOpen(true)}>Open Bottom Drawer</Button>
105
+ <Drawer open={open} onClose={() => setOpen(false)} position="bottom">
106
+ <DrawerHeader onClose={() => setOpen(false)}>
107
+ <DrawerTitle>Quick Actions</DrawerTitle>
108
+ </DrawerHeader>
109
+ <DrawerBody>
110
+ <div className="grid grid-cols-4 gap-4">
111
+ {['Share', 'Copy', 'Edit', 'Delete'].map((action) => (
112
+ <button
113
+ key={action}
114
+ className="flex flex-col items-center gap-2 p-4 hover:bg-secondary-hover rounded transition-colors"
115
+ >
116
+ <div className="w-10 h-10 rounded-full bg-primary" />
117
+ <span className="text-sm text-foreground">{action}</span>
118
+ </button>
119
+ ))}
120
+ </div>
121
+ </DrawerBody>
122
+ </Drawer>
123
+ </>
124
+ );
125
+ },
126
+ };
127
+
128
+ export const FormDrawer: Story = {
129
+ render: () => {
130
+ const [open, setOpen] = useState(false);
131
+ return (
132
+ <>
133
+ <Button onClick={() => setOpen(true)}>Edit Profile</Button>
134
+ <Drawer open={open} onClose={() => setOpen(false)}>
135
+ <DrawerHeader onClose={() => setOpen(false)}>
136
+ <DrawerTitle>Edit Profile</DrawerTitle>
137
+ </DrawerHeader>
138
+ <DrawerBody>
139
+ <form className="space-y-4">
140
+ <Input label="Full Name" placeholder="John Doe" />
141
+ <Input label="Email" type="email" placeholder="john@example.com" />
142
+ <Input label="Phone" type="tel" placeholder="+1 (555) 000-0000" />
143
+ </form>
144
+ </DrawerBody>
145
+ <DrawerFooter>
146
+ <Button variant="secondary" onClick={() => setOpen(false)}>Cancel</Button>
147
+ <Button onClick={() => setOpen(false)}>Save Changes</Button>
148
+ </DrawerFooter>
149
+ </Drawer>
150
+ </>
151
+ );
152
+ },
153
+ };
154
+
155
+ // Responsive Matrix - Mobile, Tablet, Desktop (static previews)
156
+ export const ResponsiveMatrix: Story = {
157
+ render: () => (
158
+ <div className="space-y-8">
159
+ {/* Mobile */}
160
+ <div>
161
+ <h4 className="text-xs uppercase text-foreground-muted mb-2">Mobile (375px)</h4>
162
+ <div className="w-[375px] h-[400px] border border-dashed border-border relative overflow-hidden">
163
+ <div className="absolute right-0 top-0 bottom-0 w-[280px] bg-background border-l border-border shadow-lg">
164
+ <div className="p-4 border-b border-border">
165
+ <h3 className="font-semibold">Drawer Title</h3>
166
+ </div>
167
+ <div className="p-4">
168
+ <p className="text-sm text-foreground-secondary">Full-height drawer on mobile.</p>
169
+ <div className="mt-4 space-y-4">
170
+ <Input label="Name" placeholder="Enter name" />
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ {/* Tablet */}
177
+ <div>
178
+ <h4 className="text-xs uppercase text-foreground-muted mb-2">Tablet (768px)</h4>
179
+ <div className="w-[768px] h-[300px] border border-dashed border-border relative overflow-hidden">
180
+ <div className="absolute right-0 top-0 bottom-0 w-[400px] bg-background border-l border-border shadow-lg">
181
+ <div className="p-4 border-b border-border">
182
+ <h3 className="font-semibold">Edit Profile</h3>
183
+ </div>
184
+ <div className="p-4 space-y-4">
185
+ <Input label="Name" placeholder="John Doe" />
186
+ <Input label="Email" placeholder="john@example.com" />
187
+ </div>
188
+ <div className="absolute bottom-0 left-0 right-0 p-4 border-t border-border flex justify-end gap-2">
189
+ <Button variant="secondary" size="sm">Cancel</Button>
190
+ <Button size="sm">Save</Button>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ {/* Desktop */}
196
+ <div>
197
+ <h4 className="text-xs uppercase text-foreground-muted mb-2">Desktop (1280px)</h4>
198
+ <div className="w-[1280px] h-[300px] border border-dashed border-border relative overflow-hidden bg-black/20">
199
+ <div className="absolute right-0 top-0 bottom-0 w-[480px] bg-background border-l border-border shadow-lg">
200
+ <div className="p-6 border-b border-border">
201
+ <h3 className="text-lg font-semibold">Settings Panel</h3>
202
+ </div>
203
+ <div className="p-6 space-y-4">
204
+ <Input label="Display Name" placeholder="Enter display name" />
205
+ <Input label="Email" type="email" placeholder="email@example.com" />
206
+ </div>
207
+ <div className="absolute bottom-0 left-0 right-0 p-6 border-t border-border flex justify-end gap-2">
208
+ <Button variant="secondary">Cancel</Button>
209
+ <Button>Save Changes</Button>
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ ),
216
+ };