sonance-brand-mcp 1.2.5 → 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 (189) 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 +142 -0
  11. package/dist/assets/components/alert-dialog.tsx +143 -0
  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 +70 -0
  15. package/dist/assets/components/aspect-ratio.tsx +8 -0
  16. package/dist/assets/components/autocomplete.stories.tsx +9 -9
  17. package/dist/assets/components/autocomplete.tsx +3 -3
  18. package/dist/assets/components/avatar.stories.tsx +5 -5
  19. package/dist/assets/components/avatar.tsx +67 -23
  20. package/dist/assets/components/badge.stories.tsx +10 -10
  21. package/dist/assets/components/badge.tsx +3 -3
  22. package/dist/assets/components/breadcrumbs.stories.tsx +7 -7
  23. package/dist/assets/components/breadcrumbs.tsx +13 -8
  24. package/dist/assets/components/button.stories.tsx +74 -74
  25. package/dist/assets/components/button.tsx +2 -0
  26. package/dist/assets/components/calendar.stories.tsx +11 -11
  27. package/dist/assets/components/calendar.tsx +4 -4
  28. package/dist/assets/components/card.stories.tsx +22 -22
  29. package/dist/assets/components/card.tsx +7 -3
  30. package/dist/assets/components/carousel.stories.tsx +158 -0
  31. package/dist/assets/components/carousel.tsx +264 -0
  32. package/dist/assets/components/chart.stories.tsx +376 -0
  33. package/dist/assets/components/chart.tsx +384 -0
  34. package/dist/assets/components/checkbox-group.stories.tsx +6 -6
  35. package/dist/assets/components/checkbox-group.tsx +3 -3
  36. package/dist/assets/components/checkbox.stories.tsx +23 -20
  37. package/dist/assets/components/checkbox.tsx +13 -6
  38. package/dist/assets/components/code.stories.tsx +24 -24
  39. package/dist/assets/components/code.tsx +22 -27
  40. package/dist/assets/components/collapsible.stories.tsx +128 -0
  41. package/dist/assets/components/collapsible.tsx +10 -0
  42. package/dist/assets/components/command.stories.tsx +183 -0
  43. package/dist/assets/components/command.tsx +171 -0
  44. package/dist/assets/components/context-menu.stories.tsx +159 -0
  45. package/dist/assets/components/context-menu.tsx +214 -0
  46. package/dist/assets/components/date-input.stories.tsx +9 -9
  47. package/dist/assets/components/date-input.tsx +2 -2
  48. package/dist/assets/components/date-picker.stories.tsx +9 -9
  49. package/dist/assets/components/date-picker.tsx +3 -3
  50. package/dist/assets/components/date-range-picker.stories.tsx +12 -12
  51. package/dist/assets/components/date-range-picker.tsx +3 -3
  52. package/dist/assets/components/dialog.stories.tsx +40 -40
  53. package/dist/assets/components/dialog.tsx +8 -12
  54. package/dist/assets/components/divider.stories.tsx +30 -30
  55. package/dist/assets/components/divider.tsx +34 -35
  56. package/dist/assets/components/drawer.stories.tsx +32 -31
  57. package/dist/assets/components/drawer.tsx +7 -6
  58. package/dist/assets/components/dropdown-menu.tsx +213 -0
  59. package/dist/assets/components/dropdown.stories.tsx +12 -12
  60. package/dist/assets/components/dropdown.tsx +5 -5
  61. package/dist/assets/components/form.stories.tsx +30 -29
  62. package/dist/assets/components/form.tsx +5 -5
  63. package/dist/assets/components/hover-card.stories.tsx +115 -0
  64. package/dist/assets/components/hover-card.tsx +35 -0
  65. package/dist/assets/components/image.stories.tsx +48 -25
  66. package/dist/assets/components/image.tsx +8 -5
  67. package/dist/assets/components/input-otp.stories.tsx +15 -15
  68. package/dist/assets/components/input-otp.tsx +5 -5
  69. package/dist/assets/components/input.stories.tsx +30 -25
  70. package/dist/assets/components/input.tsx +7 -4
  71. package/dist/assets/components/kbd.stories.tsx +34 -34
  72. package/dist/assets/components/kbd.tsx +9 -9
  73. package/dist/assets/components/link.stories.tsx +36 -36
  74. package/dist/assets/components/link.tsx +4 -0
  75. package/dist/assets/components/listbox.stories.tsx +5 -5
  76. package/dist/assets/components/listbox.tsx +4 -4
  77. package/dist/assets/components/menubar.stories.tsx +208 -0
  78. package/dist/assets/components/menubar.tsx +247 -0
  79. package/dist/assets/components/navbar.stories.tsx +24 -24
  80. package/dist/assets/components/navbar.tsx +8 -14
  81. package/dist/assets/components/navigation-menu.stories.tsx +239 -0
  82. package/dist/assets/components/navigation-menu.tsx +135 -0
  83. package/dist/assets/components/number-input.stories.tsx +11 -11
  84. package/dist/assets/components/number-input.tsx +3 -3
  85. package/dist/assets/components/pagination.stories.tsx +13 -13
  86. package/dist/assets/components/pagination.tsx +6 -6
  87. package/dist/assets/components/popover.stories.tsx +35 -35
  88. package/dist/assets/components/popover.tsx +98 -15
  89. package/dist/assets/components/progress.stories.tsx +5 -5
  90. package/dist/assets/components/progress.tsx +5 -5
  91. package/dist/assets/components/radio-group.stories.tsx +7 -7
  92. package/dist/assets/components/radio-group.tsx +3 -3
  93. package/dist/assets/components/range-calendar.stories.tsx +18 -18
  94. package/dist/assets/components/range-calendar.tsx +3 -3
  95. package/dist/assets/components/resizable.stories.tsx +197 -0
  96. package/dist/assets/components/resizable.tsx +47 -0
  97. package/dist/assets/components/scroll-area.stories.tsx +123 -0
  98. package/dist/assets/components/scroll-area.tsx +48 -0
  99. package/dist/assets/components/scroll-shadow.stories.tsx +17 -17
  100. package/dist/assets/components/scroll-shadow.tsx +31 -9
  101. package/dist/assets/components/select.stories.tsx +20 -19
  102. package/dist/assets/components/select.tsx +10 -6
  103. package/dist/assets/components/separator.tsx +32 -0
  104. package/dist/assets/components/sheet.tsx +137 -0
  105. package/dist/assets/components/sidebar.stories.tsx +351 -0
  106. package/dist/assets/components/sidebar.tsx +757 -0
  107. package/dist/assets/components/skeleton.stories.tsx +3 -3
  108. package/dist/assets/components/skeleton.tsx +2 -2
  109. package/dist/assets/components/slider.stories.tsx +6 -6
  110. package/dist/assets/components/slider.tsx +3 -3
  111. package/dist/assets/components/spacer.stories.tsx +11 -11
  112. package/dist/assets/components/spacer.tsx +2 -2
  113. package/dist/assets/components/spinner.stories.tsx +8 -8
  114. package/dist/assets/components/spinner.tsx +5 -5
  115. package/dist/assets/components/switch.stories.tsx +24 -20
  116. package/dist/assets/components/switch.tsx +14 -6
  117. package/dist/assets/components/table.stories.tsx +7 -7
  118. package/dist/assets/components/table.tsx +8 -8
  119. package/dist/assets/components/tabs.stories.tsx +37 -37
  120. package/dist/assets/components/tabs.tsx +3 -3
  121. package/dist/assets/components/textarea.stories.tsx +13 -12
  122. package/dist/assets/components/textarea.tsx +3 -3
  123. package/dist/assets/components/theme-toggle.stories.tsx +31 -30
  124. package/dist/assets/components/theme-toggle.tsx +2 -2
  125. package/dist/assets/components/time-input.stories.tsx +16 -16
  126. package/dist/assets/components/time-input.tsx +2 -2
  127. package/dist/assets/components/toast.stories.tsx +8 -5
  128. package/dist/assets/components/toast.tsx +6 -6
  129. package/dist/assets/components/toggle-group.stories.tsx +153 -0
  130. package/dist/assets/components/toggle-group.tsx +61 -0
  131. package/dist/assets/components/toggle.stories.tsx +77 -0
  132. package/dist/assets/components/toggle.tsx +46 -0
  133. package/dist/assets/components/tooltip.stories.tsx +49 -27
  134. package/dist/assets/components/tooltip.tsx +23 -90
  135. package/dist/assets/components/user.stories.tsx +23 -23
  136. package/dist/assets/components/user.tsx +7 -4
  137. package/dist/assets/dev-tools/SonanceDevTools.tsx +4201 -0
  138. package/dist/assets/dev-tools/index.ts +10 -0
  139. package/dist/assets/globals.css +39 -0
  140. package/dist/assets/logos/40th-anniversary/Sonance_40_Logo_CMYK_BEAM_BLUE_40_AND_BEAM_DARK.png +0 -0
  141. package/dist/assets/logos/Sonance logo dark mode.png +0 -0
  142. package/dist/assets/logos/Sonance logo light mode.png +0 -0
  143. package/dist/assets/logos/blaze/BlazeBySonance_Logo_Lockup_2C_Light_RGB_05162025.png +0 -0
  144. package/dist/assets/logos/blaze/BlazeBySonance_Logo_Lockup_3C_Dark_RGB_05162025.png +0 -0
  145. package/dist/assets/logos/blaze/BlazeBySonance_Logo_Lockup_White_RGB_05162025.png +0 -0
  146. package/dist/assets/logos/iport/IPORT_Sonance_LockUp_2C_Dark_RGB.png +0 -0
  147. package/dist/assets/logos/iport/IPORT_Sonance_LockUp_2C_Light_RGB.png +0 -0
  148. package/dist/assets/logos/james/James_Logo_Black_CMYK.png +0 -0
  149. package/dist/assets/logos/james/James_Logo_Black_RGB.png +0 -0
  150. package/dist/assets/logos/james/James_Logo_LtGray_CMYK.png +0 -0
  151. package/dist/assets/logos/james/James_Logo_LtGray_RGB.png +0 -0
  152. package/dist/assets/logos/james/James_Logo_Polished_RGB.png +0 -0
  153. package/dist/assets/logos/james/James_Logo_Reverse_CMYK.png +0 -0
  154. package/dist/assets/logos/james/James_Logo_Reverse_RGB.png +0 -0
  155. package/dist/assets/logos/james/James_Logo_White_CMYK.png +0 -0
  156. package/dist/assets/logos/life-is-better/Sonance_LifeisBetter_Dark_RGB.png +0 -0
  157. package/dist/assets/logos/life-is-better/Sonance_LifeisBetter_Light_RGB.png +0 -0
  158. package/dist/assets/logos/my-sonance/My.Sonance_Logo_2C_Dark_RGB.png +0 -0
  159. package/dist/assets/logos/my-sonance/My.Sonance_Logo_2C_Light_RGB.png +0 -0
  160. package/dist/assets/logos/my-sonance/My.Sonance_Logo_2C_Reverse_RGB.png +0 -0
  161. package/dist/assets/logos/my-sonance/My.Sonance_Logo_Black_RGB.png +0 -0
  162. package/dist/assets/logos/my-sonance/My.Sonance_Logo_Reverse_RGB.png +0 -0
  163. package/dist/assets/logos/sonance/Sonance_Logo_2C_Dark_RGB.png +0 -0
  164. package/dist/assets/logos/sonance/Sonance_Logo_2C_Light_RGB.png +0 -0
  165. package/dist/assets/logos/sonance/Sonance_Logo_2C_Reverse_RGB.png +0 -0
  166. package/dist/assets/logos/sonance/Sonance_Logo_Black_RGB.png +0 -0
  167. package/dist/assets/logos/sonance/Sonance_Logo_Grayscale_RGB.png +0 -0
  168. package/dist/assets/logos/sonance/Sonance_Logo_Reverse_RGB.png +0 -0
  169. package/dist/assets/logos/sonance-academy/SonanceAcademy_Logo_Dark_CMYK.png +0 -0
  170. package/dist/assets/logos/sonance-academy/SonanceAcademy_Logo_Light_CMYK.png +0 -0
  171. package/dist/assets/logos/sonance-iport/Sonance_IPORT_LockUp_3C_Dark_RGB.png +0 -0
  172. package/dist/assets/logos/sonance-iport/Sonance_IPORT_LockUp_3C_Light_RGB.png +0 -0
  173. package/dist/assets/logos/sonance-iport/Sonance_IPORT_LockUp_3C_Reverse_RGB.png +0 -0
  174. package/dist/assets/logos/sonance-iport/Sonance_IPORT_LockUp_Black_RGB.png +0 -0
  175. package/dist/assets/logos/sonance-iport/Sonance_IPORT_LockUp_Grayscale_RGB.png +0 -0
  176. package/dist/assets/logos/sonance-iport/Sonance_IPORT_LockUp_Reverse_RGB.png +0 -0
  177. package/dist/assets/logos/sonance-james/Sonance_James_Lockup_Dark.png +0 -0
  178. package/dist/assets/logos/sonance-james/Sonance_James_Lockup_Light.png +0 -0
  179. package/dist/assets/logos/sonance-james-iport/Sonance_James_IPORT_LockupStacked_Dark.png +0 -0
  180. package/dist/assets/logos/sonance-james-iport/Sonance_James_IPORT_LockupStacked_Light.png +0 -0
  181. package/dist/assets/logos/sonance-james-iport/Sonance_James_IPORT_Lockup_Dark.png +0 -0
  182. package/dist/assets/logos/sonance-james-iport/Sonance_James_IPORT_Lockup_Light.png +0 -0
  183. package/dist/assets/logos/trufig/TrufigLogo_Black.png +0 -0
  184. package/dist/assets/logos/trufig/TrufigLogo_Light.png +0 -0
  185. package/dist/assets/logos/trufig/TrufigWatermark_Black.png +0 -0
  186. package/dist/assets/logos/trufig/TrufigWatermark_Light.png +0 -0
  187. package/dist/assets/styles/brand-overrides.css +37 -0
  188. package/dist/index.js +2055 -15
  189. package/package.json +1 -1
@@ -0,0 +1,376 @@
1
+ "use client";
2
+
3
+ import type { Meta, StoryObj } from "@storybook/react";
4
+ import {
5
+ Area,
6
+ AreaChart,
7
+ Bar,
8
+ BarChart,
9
+ CartesianGrid,
10
+ Line,
11
+ LineChart,
12
+ Pie,
13
+ PieChart,
14
+ XAxis,
15
+ YAxis,
16
+ } from "recharts";
17
+ import {
18
+ ChartConfig,
19
+ ChartContainer,
20
+ ChartLegend,
21
+ ChartLegendContent,
22
+ ChartTooltip,
23
+ ChartTooltipContent,
24
+ } from "./chart";
25
+
26
+ const meta: Meta<typeof ChartContainer> = {
27
+ title: "Components/Data Display/Chart",
28
+ component: ChartContainer,
29
+ parameters: {
30
+ layout: "centered",
31
+ },
32
+ tags: ["autodocs"],
33
+ };
34
+
35
+ export default meta;
36
+ type Story = StoryObj<typeof ChartContainer>;
37
+
38
+ // Sample data
39
+ const lineData = [
40
+ { month: "January", desktop: 186, mobile: 80 },
41
+ { month: "February", desktop: 305, mobile: 200 },
42
+ { month: "March", desktop: 237, mobile: 120 },
43
+ { month: "April", desktop: 73, mobile: 190 },
44
+ { month: "May", desktop: 209, mobile: 130 },
45
+ { month: "June", desktop: 214, mobile: 140 },
46
+ ];
47
+
48
+ const lineChartConfig = {
49
+ desktop: {
50
+ label: "Desktop",
51
+ color: "hsl(var(--primary))",
52
+ },
53
+ mobile: {
54
+ label: "Mobile",
55
+ color: "hsl(var(--accent))",
56
+ },
57
+ } satisfies ChartConfig;
58
+
59
+ export const LineChartExample: Story = {
60
+ render: () => (
61
+ <div className="w-[600px]">
62
+ <ChartContainer config={lineChartConfig}>
63
+ <LineChart
64
+ accessibilityLayer
65
+ data={lineData}
66
+ margin={{
67
+ left: 12,
68
+ right: 12,
69
+ }}
70
+ >
71
+ <CartesianGrid vertical={false} />
72
+ <XAxis
73
+ dataKey="month"
74
+ tickLine={false}
75
+ axisLine={false}
76
+ tickMargin={8}
77
+ tickFormatter={(value) => value.slice(0, 3)}
78
+ />
79
+ <ChartTooltip cursor={false} content={<ChartTooltipContent />} />
80
+ <Line
81
+ dataKey="desktop"
82
+ type="monotone"
83
+ stroke="var(--color-desktop)"
84
+ strokeWidth={2}
85
+ dot={false}
86
+ />
87
+ <Line
88
+ dataKey="mobile"
89
+ type="monotone"
90
+ stroke="var(--color-mobile)"
91
+ strokeWidth={2}
92
+ dot={false}
93
+ />
94
+ </LineChart>
95
+ </ChartContainer>
96
+ </div>
97
+ ),
98
+ };
99
+
100
+ const barData = [
101
+ { month: "January", desktop: 186 },
102
+ { month: "February", desktop: 305 },
103
+ { month: "March", desktop: 237 },
104
+ { month: "April", desktop: 73 },
105
+ { month: "May", desktop: 209 },
106
+ { month: "June", desktop: 214 },
107
+ ];
108
+
109
+ const barChartConfig = {
110
+ desktop: {
111
+ label: "Desktop",
112
+ color: "hsl(var(--primary))",
113
+ },
114
+ } satisfies ChartConfig;
115
+
116
+ export const BarChartExample: Story = {
117
+ render: () => (
118
+ <div className="w-[600px]">
119
+ <ChartContainer config={barChartConfig}>
120
+ <BarChart accessibilityLayer data={barData}>
121
+ <CartesianGrid vertical={false} />
122
+ <XAxis
123
+ dataKey="month"
124
+ tickLine={false}
125
+ tickMargin={10}
126
+ axisLine={false}
127
+ tickFormatter={(value) => value.slice(0, 3)}
128
+ />
129
+ <ChartTooltip
130
+ cursor={false}
131
+ content={<ChartTooltipContent hideLabel />}
132
+ />
133
+ <Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
134
+ </BarChart>
135
+ </ChartContainer>
136
+ </div>
137
+ ),
138
+ };
139
+
140
+ const areaData = [
141
+ { month: "January", desktop: 186, mobile: 80 },
142
+ { month: "February", desktop: 305, mobile: 200 },
143
+ { month: "March", desktop: 237, mobile: 120 },
144
+ { month: "April", desktop: 73, mobile: 190 },
145
+ { month: "May", desktop: 209, mobile: 130 },
146
+ { month: "June", desktop: 214, mobile: 140 },
147
+ ];
148
+
149
+ const areaChartConfig = {
150
+ desktop: {
151
+ label: "Desktop",
152
+ color: "hsl(var(--primary))",
153
+ },
154
+ mobile: {
155
+ label: "Mobile",
156
+ color: "hsl(var(--accent))",
157
+ },
158
+ } satisfies ChartConfig;
159
+
160
+ export const AreaChartExample: Story = {
161
+ render: () => (
162
+ <div className="w-[600px]">
163
+ <ChartContainer config={areaChartConfig}>
164
+ <AreaChart
165
+ accessibilityLayer
166
+ data={areaData}
167
+ margin={{
168
+ left: 12,
169
+ right: 12,
170
+ }}
171
+ >
172
+ <CartesianGrid vertical={false} />
173
+ <XAxis
174
+ dataKey="month"
175
+ tickLine={false}
176
+ axisLine={false}
177
+ tickMargin={8}
178
+ tickFormatter={(value) => value.slice(0, 3)}
179
+ />
180
+ <ChartTooltip cursor={false} content={<ChartTooltipContent />} />
181
+ <defs>
182
+ <linearGradient id="fillDesktop" x1="0" y1="0" x2="0" y2="1">
183
+ <stop
184
+ offset="5%"
185
+ stopColor="var(--color-desktop)"
186
+ stopOpacity={0.8}
187
+ />
188
+ <stop
189
+ offset="95%"
190
+ stopColor="var(--color-desktop)"
191
+ stopOpacity={0.1}
192
+ />
193
+ </linearGradient>
194
+ <linearGradient id="fillMobile" x1="0" y1="0" x2="0" y2="1">
195
+ <stop
196
+ offset="5%"
197
+ stopColor="var(--color-mobile)"
198
+ stopOpacity={0.8}
199
+ />
200
+ <stop
201
+ offset="95%"
202
+ stopColor="var(--color-mobile)"
203
+ stopOpacity={0.1}
204
+ />
205
+ </linearGradient>
206
+ </defs>
207
+ <Area
208
+ dataKey="mobile"
209
+ type="natural"
210
+ fill="url(#fillMobile)"
211
+ fillOpacity={0.4}
212
+ stroke="var(--color-mobile)"
213
+ stackId="a"
214
+ />
215
+ <Area
216
+ dataKey="desktop"
217
+ type="natural"
218
+ fill="url(#fillDesktop)"
219
+ fillOpacity={0.4}
220
+ stroke="var(--color-desktop)"
221
+ stackId="a"
222
+ />
223
+ </AreaChart>
224
+ </ChartContainer>
225
+ </div>
226
+ ),
227
+ };
228
+
229
+ const pieData = [
230
+ { browser: "chrome", visitors: 275, fill: "var(--color-chrome)" },
231
+ { browser: "safari", visitors: 200, fill: "var(--color-safari)" },
232
+ { browser: "firefox", visitors: 287, fill: "var(--color-firefox)" },
233
+ { browser: "edge", visitors: 173, fill: "var(--color-edge)" },
234
+ { browser: "other", visitors: 190, fill: "var(--color-other)" },
235
+ ];
236
+
237
+ const pieChartConfig = {
238
+ visitors: {
239
+ label: "Visitors",
240
+ },
241
+ chrome: {
242
+ label: "Chrome",
243
+ color: "hsl(var(--primary))",
244
+ },
245
+ safari: {
246
+ label: "Safari",
247
+ color: "hsl(var(--accent))",
248
+ },
249
+ firefox: {
250
+ label: "Firefox",
251
+ color: "#ef4444",
252
+ },
253
+ edge: {
254
+ label: "Edge",
255
+ color: "#f97316",
256
+ },
257
+ other: {
258
+ label: "Other",
259
+ color: "#a855f7",
260
+ },
261
+ } satisfies ChartConfig;
262
+
263
+ export const PieChartExample: Story = {
264
+ render: () => (
265
+ <div className="w-[400px]">
266
+ <ChartContainer
267
+ config={pieChartConfig}
268
+ className="mx-auto aspect-square max-h-[300px]"
269
+ >
270
+ <PieChart>
271
+ <ChartTooltip
272
+ cursor={false}
273
+ content={<ChartTooltipContent hideLabel />}
274
+ />
275
+ <Pie
276
+ data={pieData}
277
+ dataKey="visitors"
278
+ nameKey="browser"
279
+ innerRadius={60}
280
+ strokeWidth={5}
281
+ />
282
+ </PieChart>
283
+ </ChartContainer>
284
+ </div>
285
+ ),
286
+ };
287
+
288
+ const salesData = [
289
+ { product: "Architectural", sales: 4000 },
290
+ { product: "Outdoor", sales: 3000 },
291
+ { product: "Invisible", sales: 2000 },
292
+ { product: "Subwoofers", sales: 2780 },
293
+ { product: "Amplifiers", sales: 1890 },
294
+ ];
295
+
296
+ const salesChartConfig = {
297
+ sales: {
298
+ label: "Sales",
299
+ color: "hsl(var(--primary))",
300
+ },
301
+ } satisfies ChartConfig;
302
+
303
+ export const HorizontalBarChart: Story = {
304
+ render: () => (
305
+ <div className="w-[600px]">
306
+ <ChartContainer config={salesChartConfig}>
307
+ <BarChart
308
+ accessibilityLayer
309
+ data={salesData}
310
+ layout="vertical"
311
+ margin={{
312
+ left: 20,
313
+ }}
314
+ >
315
+ <CartesianGrid horizontal={false} />
316
+ <YAxis
317
+ dataKey="product"
318
+ type="category"
319
+ tickLine={false}
320
+ tickMargin={10}
321
+ axisLine={false}
322
+ />
323
+ <XAxis dataKey="sales" type="number" hide />
324
+ <ChartTooltip
325
+ cursor={false}
326
+ content={<ChartTooltipContent hideLabel />}
327
+ />
328
+ <Bar dataKey="sales" fill="var(--color-sales)" radius={4} />
329
+ </BarChart>
330
+ </ChartContainer>
331
+ </div>
332
+ ),
333
+ };
334
+
335
+ const monthlyRevenueData = [
336
+ { month: "Jan", revenue: 12000, target: 10000 },
337
+ { month: "Feb", revenue: 15000, target: 12000 },
338
+ { month: "Mar", revenue: 18000, target: 15000 },
339
+ { month: "Apr", revenue: 14000, target: 16000 },
340
+ { month: "May", revenue: 22000, target: 18000 },
341
+ { month: "Jun", revenue: 28000, target: 20000 },
342
+ ];
343
+
344
+ const revenueChartConfig = {
345
+ revenue: {
346
+ label: "Revenue",
347
+ color: "hsl(var(--primary))",
348
+ },
349
+ target: {
350
+ label: "Target",
351
+ color: "hsl(var(--accent))",
352
+ },
353
+ } satisfies ChartConfig;
354
+
355
+ export const WithLegend: Story = {
356
+ render: () => (
357
+ <div className="w-[600px]">
358
+ <ChartContainer config={revenueChartConfig}>
359
+ <BarChart accessibilityLayer data={monthlyRevenueData}>
360
+ <CartesianGrid vertical={false} />
361
+ <XAxis
362
+ dataKey="month"
363
+ tickLine={false}
364
+ tickMargin={10}
365
+ axisLine={false}
366
+ />
367
+ <ChartTooltip content={<ChartTooltipContent />} />
368
+ <ChartLegend content={<ChartLegendContent payload={[]} />} />
369
+ <Bar dataKey="revenue" fill="var(--color-revenue)" radius={4} />
370
+ <Bar dataKey="target" fill="var(--color-target)" radius={4} />
371
+ </BarChart>
372
+ </ChartContainer>
373
+ </div>
374
+ ),
375
+ };
376
+