@syscore/ui-library 1.1.10 → 1.1.12

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 (100) hide show
  1. package/client/App.tsx +47 -0
  2. package/client/components/icons/ConceptIcons.tsx +667 -0
  3. package/client/components/icons/NavAccount.tsx +31 -0
  4. package/client/components/icons/NavBullet.tsx +19 -0
  5. package/client/components/icons/NavLogo.tsx +36 -0
  6. package/client/components/icons/ProviderBadges.tsx +295 -0
  7. package/client/components/icons/ProviderSeals.tsx +319 -0
  8. package/client/components/icons/SealHealthSafetyRating.tsx +65 -0
  9. package/client/components/icons/SealIwbiMember.tsx +86 -0
  10. package/client/components/icons/SealWell.tsx +84 -0
  11. package/client/components/icons/SealWellCertification.tsx +138 -0
  12. package/client/components/icons/SealWellCommunity.tsx +122 -0
  13. package/client/components/icons/SealWellResidence.tsx +122 -0
  14. package/client/components/icons/SealWorksWithWell.tsx +140 -0
  15. package/client/components/icons/UtilityAccordion.tsx +21 -0
  16. package/client/components/icons/UtilityChevronDown.tsx +36 -0
  17. package/client/components/icons/UtilityClassification.tsx +45 -0
  18. package/client/components/icons/UtilityClose.tsx +41 -0
  19. package/client/components/icons/UtilityDrag.tsx +69 -0
  20. package/client/components/icons/UtilityEdit.tsx +42 -0
  21. package/client/components/icons/UtilityOptions.tsx +45 -0
  22. package/client/components/icons/UtilityPortfolio.tsx +87 -0
  23. package/client/components/icons/UtilityReset.tsx +41 -0
  24. package/client/components/icons/UtilityScoring.tsx +43 -0
  25. package/client/components/icons/UtilitySearch.tsx +38 -0
  26. package/client/components/icons/UtilitySort.tsx +52 -0
  27. package/client/components/icons/UtilityText.tsx +34 -0
  28. package/client/components/icons/WaterMarkWWWProducts.tsx +26 -0
  29. package/client/components/icons/WaterMarkWellProjects.tsx +30 -0
  30. package/client/components/icons/WatermarkMemberOrg.tsx +59 -0
  31. package/client/components/icons/WellSeal.tsx +79 -0
  32. package/client/components/icons/X.tsx +35 -0
  33. package/client/hooks/UseTabs.tsx +35 -0
  34. package/client/hooks/use-mobile.tsx +21 -0
  35. package/client/hooks/use-segmented-control.ts +42 -0
  36. package/client/hooks/use-toast.ts +188 -0
  37. package/client/pages/Index.tsx +88 -0
  38. package/client/pages/NotFound.tsx +29 -0
  39. package/client/ui/Accordion/Accordion.stories.tsx +74 -0
  40. package/client/ui/Alert/Alert.stories.tsx +82 -0
  41. package/client/ui/AlertDialog/AlertDialog.stories.tsx +106 -0
  42. package/client/ui/AspectRatio.stories.tsx +78 -0
  43. package/client/ui/Avatar/Avatar.stories.tsx +94 -0
  44. package/client/ui/Badge/Badge.stories.tsx +60 -0
  45. package/client/ui/Breadcrumb/Breadcrumb.stories.tsx +97 -0
  46. package/client/ui/Button.stories.tsx +429 -0
  47. package/client/ui/Calendar/Calendar.stories.tsx +99 -0
  48. package/client/ui/Card.stories.tsx +84 -0
  49. package/client/ui/Carousel/Carousel.stories.tsx +85 -0
  50. package/client/ui/Chart/Chart.stories.tsx +58 -0
  51. package/client/ui/Checkbox/Checkbox.stories.tsx +112 -0
  52. package/client/ui/Collapsible/Collapsible.stories.tsx +101 -0
  53. package/client/ui/Colors.stories.tsx +1041 -0
  54. package/client/ui/Command/Command.stories.tsx +97 -0
  55. package/client/ui/ContextMenu/ContextMenu.stories.tsx +74 -0
  56. package/client/ui/Dialog.stories.tsx +69 -0
  57. package/client/ui/Drawer/Drawer.stories.tsx +87 -0
  58. package/client/ui/DropdownMenu/DropdownMenu.stories.tsx +139 -0
  59. package/client/ui/Form/Form.stories.tsx +74 -0
  60. package/client/ui/HoverCard/HoverCard.stories.tsx +94 -0
  61. package/client/ui/Icons.stories.tsx +328 -0
  62. package/client/ui/Input/Input.stories.tsx +69 -0
  63. package/client/ui/InputOTP/InputOTP.stories.tsx +85 -0
  64. package/client/ui/Label.stories.tsx +66 -0
  65. package/client/ui/Menubar/Menubar.stories.tsx +88 -0
  66. package/client/ui/Navigation.stories.tsx +57 -0
  67. package/client/ui/NavigationMenu/NavigationMenu.stories.tsx +106 -0
  68. package/client/ui/Pagination/Pagination.stories.tsx +115 -0
  69. package/client/ui/Popover/Popover.stories.tsx +99 -0
  70. package/client/ui/Progress/Progress.stories.tsx +63 -0
  71. package/client/ui/RadioGroup/RadioGroup.stories.tsx +110 -0
  72. package/client/ui/Resizable/Resizable.stories.tsx +88 -0
  73. package/client/ui/ScrollArea/ScrollArea.stories.tsx +64 -0
  74. package/client/ui/SearchField.stories.tsx +63 -0
  75. package/client/ui/Select/Select.stories.tsx +111 -0
  76. package/client/ui/Separator/Separator.stories.tsx +67 -0
  77. package/client/ui/Sheet/Sheet.stories.tsx +138 -0
  78. package/client/ui/Sidebar/Sidebar.stories.tsx +92 -0
  79. package/client/ui/Skeleton/Skeleton.stories.tsx +65 -0
  80. package/client/ui/Slider/Slider.stories.tsx +101 -0
  81. package/client/ui/Sonner/Sonner.stories.tsx +48 -0
  82. package/client/ui/StrategyTable.stories.tsx +138 -0
  83. package/client/ui/Switch/Switch.stories.tsx +96 -0
  84. package/client/ui/Table/Table.stories.tsx +135 -0
  85. package/client/ui/Tabs.stories.tsx +33 -0
  86. package/client/ui/Tag.stories.tsx +190 -0
  87. package/client/ui/Textarea/Textarea.stories.tsx +56 -0
  88. package/client/ui/Toast/Toast.stories.tsx +76 -0
  89. package/client/ui/Toaster/Toaster.stories.tsx +52 -0
  90. package/client/ui/Toggle.stories.tsx +248 -0
  91. package/client/ui/ToggleGroup/ToggleGroup.stories.tsx +88 -0
  92. package/client/ui/Tooltip.stories.tsx +72 -0
  93. package/client/ui/Typography.stories.tsx +421 -0
  94. package/client/ui/WELLDashboard/WELLDashboard.stories.tsx +115 -0
  95. package/client/ui/WELLDashboard/index.tsx +317 -0
  96. package/client/vite-env.d.ts +1 -0
  97. package/dist/ui/index.cjs.js +1 -1
  98. package/dist/ui/index.d.ts +10 -1
  99. package/dist/ui/index.es.js +2233 -447
  100. package/package.json +2 -1
@@ -0,0 +1,88 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { ToggleGroup, ToggleGroupItem } from "../../components/ui/toggle-group";
3
+ import {
4
+ Bold,
5
+ Italic,
6
+ Underline,
7
+ AlignLeft,
8
+ AlignCenter,
9
+ AlignRight,
10
+ } from "lucide-react";
11
+ import { useState } from "react";
12
+
13
+ const meta = {
14
+ title: "UI/ToggleGroup",
15
+ component: ToggleGroup,
16
+ tags: ["autodocs"],
17
+ parameters: {
18
+ layout: "padded",
19
+ },
20
+ } satisfies Meta<typeof ToggleGroup>;
21
+
22
+ export default meta;
23
+
24
+ type Story = StoryObj<typeof meta>;
25
+
26
+ export const Default: Story = {
27
+ render: () => {
28
+ const [value, setValue] = useState("");
29
+ return (
30
+ <ToggleGroup type="single" value={value} onValueChange={setValue}>
31
+ <ToggleGroupItem value="left">Left</ToggleGroupItem>
32
+ <ToggleGroupItem value="center">Center</ToggleGroupItem>
33
+ <ToggleGroupItem value="right">Right</ToggleGroupItem>
34
+ </ToggleGroup>
35
+ );
36
+ },
37
+ };
38
+
39
+ export const Multiple: Story = {
40
+ render: () => {
41
+ const [value, setValue] = useState<string[]>([]);
42
+ return (
43
+ <ToggleGroup type="multiple" value={value} onValueChange={setValue}>
44
+ <ToggleGroupItem value="bold">
45
+ <Bold className="h-4 w-4 mr-2" />
46
+ Bold
47
+ </ToggleGroupItem>
48
+ <ToggleGroupItem value="italic">
49
+ <Italic className="h-4 w-4 mr-2" />
50
+ Italic
51
+ </ToggleGroupItem>
52
+ <ToggleGroupItem value="underline">
53
+ <Underline className="h-4 w-4 mr-2" />
54
+ Underline
55
+ </ToggleGroupItem>
56
+ </ToggleGroup>
57
+ );
58
+ },
59
+ };
60
+
61
+ export const TextAlignment: Story = {
62
+ render: () => {
63
+ const [value, setValue] = useState("left");
64
+ return (
65
+ <ToggleGroup type="single" value={value} onValueChange={setValue}>
66
+ <ToggleGroupItem value="left" aria-label="Align left">
67
+ <AlignLeft className="h-4 w-4" />
68
+ </ToggleGroupItem>
69
+ <ToggleGroupItem value="center" aria-label="Align center">
70
+ <AlignCenter className="h-4 w-4" />
71
+ </ToggleGroupItem>
72
+ <ToggleGroupItem value="right" aria-label="Align right">
73
+ <AlignRight className="h-4 w-4" />
74
+ </ToggleGroupItem>
75
+ </ToggleGroup>
76
+ );
77
+ },
78
+ };
79
+
80
+ export const Disabled: Story = {
81
+ render: () => (
82
+ <ToggleGroup type="single" defaultValue="option1" disabled>
83
+ <ToggleGroupItem value="option1">Option 1</ToggleGroupItem>
84
+ <ToggleGroupItem value="option2">Option 2</ToggleGroupItem>
85
+ <ToggleGroupItem value="option3">Option 3</ToggleGroupItem>
86
+ </ToggleGroup>
87
+ ),
88
+ };
@@ -0,0 +1,72 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import {
3
+ Tooltip,
4
+ TooltipContent,
5
+ TooltipTrigger,
6
+ } from "@/components/ui/Tooltip";
7
+ import { Separator } from "@/components/ui/separator";
8
+ import { Button } from "@/components/ui/button";
9
+
10
+ const meta = {
11
+ title: "Review/Tooltip",
12
+ component: Tooltip,
13
+ tags: ["autodocs"],
14
+ parameters: {
15
+ layout: "centered",
16
+ },
17
+ } satisfies Meta<typeof Tooltip>;
18
+
19
+ export default meta;
20
+
21
+ type Story = StoryObj<typeof meta>;
22
+
23
+ export const Default: Story = {
24
+ render: () => (
25
+ <div className="p-16">
26
+ <Tooltip>
27
+ <TooltipTrigger>Hover</TooltipTrigger>
28
+ <TooltipContent>
29
+ <div className="space-y-3">
30
+ <h4 className="text-white font-semibold text-base">
31
+ Strategy Details
32
+ </h4>
33
+ <div className="space-y-1">
34
+ <p className="text-white/90 text-sm">Status: Active</p>
35
+ <p className="text-white/90 text-sm">Score: 12 PTS</p>
36
+ <p className="text-white/90 text-sm">Last updated: 2 days ago</p>
37
+ </div>
38
+ </div>
39
+ </TooltipContent>
40
+ </Tooltip>
41
+ </div>
42
+ ),
43
+ };
44
+
45
+ export const WithContent: Story = {
46
+ render: () => (
47
+ <div className="p-16">
48
+ <Tooltip>
49
+ <TooltipTrigger>Hover</TooltipTrigger>
50
+ <TooltipContent className="w-[400px]" alignOffset={500}>
51
+ <div className="space-y-4">
52
+ <h4 className="text-white font-semibold body-base">Header</h4>
53
+ <div className="space-y-4">
54
+ <p className="text-white/90 body-small">Body</p>
55
+ <Separator className="my-8" />
56
+ <p className="text-white/90 body-small">Body</p>
57
+
58
+ <div className="flex flex-row gap-4 justify-start items-start">
59
+ <Button size="utility" variant="tooltip-primary">
60
+ Action
61
+ </Button>
62
+ </div>
63
+ <Button size="utility" variant="tooltip-secondary">
64
+ Action
65
+ </Button>
66
+ </div>
67
+ </div>
68
+ </TooltipContent>
69
+ </Tooltip>
70
+ </div>
71
+ ),
72
+ };
@@ -0,0 +1,421 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+
3
+ const meta = {
4
+ title: "Review/Typography",
5
+ tags: ["autodocs"],
6
+ parameters: {
7
+ layout: "fullscreen",
8
+ },
9
+ } satisfies Meta;
10
+
11
+ export default meta;
12
+
13
+ type Story = StoryObj<typeof meta>;
14
+
15
+ // Section header component
16
+ const SectionHeader = ({ title }: { title: string }) => {
17
+ return (
18
+ <div className="flex flex-col gap-2">
19
+ <p className="text-lg font-medium text-black">{title}</p>
20
+ <div className="h-px bg-gray-200" />
21
+ </div>
22
+ );
23
+ };
24
+
25
+ // Typography row component
26
+ const TypographyRow = ({
27
+ children,
28
+ className,
29
+ }: {
30
+ children: React.ReactNode;
31
+ className?: string;
32
+ }) => {
33
+ return <div className="flex gap-8 items-start w-full">{children}</div>;
34
+ };
35
+
36
+ export const Default: Story = {
37
+ render: () => {
38
+ const sampleText = "Become a legendary designer";
39
+ const sampleBodyText =
40
+ "One of the hallmarks of the team is this sense of looking to be wrong.";
41
+ const sampleNumber = "20:04–02:54";
42
+ const sampleNumberSmall = "1, 4–6";
43
+
44
+ return (
45
+ <div className="min-h-screen bg-white">
46
+ {/* Header */}
47
+ <div className="px-20 py-16 border-b border-gray-200">
48
+ <div className="flex gap-4 items-center">
49
+ <h1 className="text-[36px] font-extrabold leading-[44px] tracking-[-0.72px] text-black">
50
+ Web
51
+ </h1>
52
+ </div>
53
+ </div>
54
+
55
+ {/* Body */}
56
+ <div className="px-20 py-16 space-y-20">
57
+ {/* Heading Large */}
58
+ <div className="space-y-8">
59
+ <SectionHeader title="Heading large" />
60
+ <TypographyRow>
61
+ <h1 className="flex-1 heading-large text-black">{sampleText}</h1>
62
+ </TypographyRow>
63
+ </div>
64
+
65
+ {/* Heading Medium */}
66
+ <div className="space-y-8">
67
+ <SectionHeader title="Heading medium" />
68
+ <TypographyRow>
69
+ <p className="flex-1 heading-medium text-black">{sampleText}</p>
70
+ </TypographyRow>
71
+ </div>
72
+
73
+ {/* Heading Small */}
74
+ <div className="space-y-8">
75
+ <SectionHeader title="Heading small" />
76
+ <TypographyRow>
77
+ <p className="flex-1 heading-small text-black">{sampleText}</p>
78
+ </TypographyRow>
79
+ </div>
80
+
81
+ {/* Heading XSmall */}
82
+ <div className="space-y-8">
83
+ <SectionHeader title="Heading xsmall" />
84
+ <TypographyRow>
85
+ <p className="flex-1 heading-xsmall text-black">{sampleText}</p>
86
+ </TypographyRow>
87
+ </div>
88
+
89
+ {/* Heading XXSmall */}
90
+ <div className="space-y-8">
91
+ <SectionHeader title="Heading xxsmall" />
92
+ <TypographyRow>
93
+ <p
94
+ className="flex-1 text-[20px] leading-[22px] tracking-[-0.2px] font-normal text-black"
95
+ style={{ fontFamily: "var(--font-ftmade)" }}
96
+ >
97
+ {sampleText}
98
+ </p>
99
+ </TypographyRow>
100
+ </div>
101
+
102
+ {/* Body Large */}
103
+ <div className="space-y-8">
104
+ <SectionHeader title="Body large" />
105
+ <TypographyRow>
106
+ <p
107
+ className="flex-1 body-large text-black font-normal"
108
+ style={{ fontFamily: "var(--font-mazzard)" }}
109
+ >
110
+ {sampleBodyText}
111
+ </p>
112
+ <p
113
+ className="flex-1 body-large text-black font-medium"
114
+ style={{ fontFamily: "var(--font-mazzard)" }}
115
+ >
116
+ {sampleBodyText}
117
+ </p>
118
+ <p
119
+ className="flex-1 body-large text-black font-semibold"
120
+ style={{ fontFamily: "var(--font-mazzard)" }}
121
+ >
122
+ {sampleBodyText}
123
+ </p>
124
+ </TypographyRow>
125
+ <TypographyRow>
126
+ <p
127
+ className="flex-1 body-large text-black font-normal italic"
128
+ style={{ fontFamily: "var(--font-mazzard)" }}
129
+ >
130
+ {sampleBodyText}
131
+ </p>
132
+ <p
133
+ className="flex-1 body-large text-black font-medium italic"
134
+ style={{ fontFamily: "var(--font-mazzard)" }}
135
+ >
136
+ {sampleBodyText}
137
+ </p>
138
+ <p
139
+ className="flex-1 body-large text-black font-semibold italic"
140
+ style={{ fontFamily: "var(--font-mazzard)" }}
141
+ >
142
+ {sampleBodyText}
143
+ </p>
144
+ </TypographyRow>
145
+ </div>
146
+
147
+ {/* Body Base */}
148
+ <div className="space-y-8">
149
+ <SectionHeader title="Body base" />
150
+ <TypographyRow>
151
+ <p
152
+ className="flex-1 body-base text-black font-normal"
153
+ style={{ fontFamily: "var(--font-mazzard)" }}
154
+ >
155
+ {sampleBodyText}
156
+ </p>
157
+ <p
158
+ className="flex-1 body-base text-black font-medium"
159
+ style={{ fontFamily: "var(--font-mazzard)" }}
160
+ >
161
+ {sampleBodyText}
162
+ </p>
163
+ <p
164
+ className="flex-1 body-base text-black font-semibold"
165
+ style={{ fontFamily: "var(--font-mazzard)" }}
166
+ >
167
+ {sampleBodyText}
168
+ </p>
169
+ </TypographyRow>
170
+ <TypographyRow>
171
+ <p
172
+ className="flex-1 body-base text-black font-normal italic"
173
+ style={{ fontFamily: "var(--font-mazzard)" }}
174
+ >
175
+ {sampleBodyText}
176
+ </p>
177
+ <p
178
+ className="flex-1 body-base text-black font-medium italic"
179
+ style={{ fontFamily: "var(--font-mazzard)" }}
180
+ >
181
+ {sampleBodyText}
182
+ </p>
183
+ <p
184
+ className="flex-1 body-base text-black font-semibold italic"
185
+ style={{ fontFamily: "var(--font-mazzard)" }}
186
+ >
187
+ {sampleBodyText}
188
+ </p>
189
+ </TypographyRow>
190
+ <TypographyRow>
191
+ <p
192
+ className="flex-1 body-base text-black font-normal underline decoration-dotted"
193
+ style={{ fontFamily: "var(--font-mazzard)" }}
194
+ >
195
+ {sampleBodyText}
196
+ </p>
197
+ <p
198
+ className="flex-1 body-base text-black font-medium underline decoration-dotted"
199
+ style={{ fontFamily: "var(--font-mazzard)" }}
200
+ >
201
+ {sampleBodyText}
202
+ </p>
203
+ <p
204
+ className="flex-1 body-base text-black font-semibold underline decoration-dotted"
205
+ style={{ fontFamily: "var(--font-mazzard)" }}
206
+ >
207
+ {sampleBodyText}
208
+ </p>
209
+ </TypographyRow>
210
+ </div>
211
+
212
+ {/* Body Small */}
213
+ <div className="space-y-8">
214
+ <SectionHeader title="Body small" />
215
+ <TypographyRow>
216
+ <p
217
+ className="flex-1 body-small text-black font-normal"
218
+ style={{ fontFamily: "var(--font-mazzard)" }}
219
+ >
220
+ {sampleBodyText}
221
+ </p>
222
+ <p
223
+ className="flex-1 body-small text-black font-medium"
224
+ style={{ fontFamily: "var(--font-mazzard)" }}
225
+ >
226
+ {sampleBodyText}
227
+ </p>
228
+ <p
229
+ className="flex-1 body-small text-black font-semibold"
230
+ style={{ fontFamily: "var(--font-mazzard)" }}
231
+ >
232
+ {sampleBodyText}
233
+ </p>
234
+ </TypographyRow>
235
+ <TypographyRow>
236
+ <p
237
+ className="flex-1 body-small text-black font-normal italic"
238
+ style={{ fontFamily: "var(--font-mazzard)" }}
239
+ >
240
+ {sampleBodyText}
241
+ </p>
242
+ <p
243
+ className="flex-1 body-small text-black font-medium italic"
244
+ style={{ fontFamily: "var(--font-mazzard)" }}
245
+ >
246
+ {sampleBodyText}
247
+ </p>
248
+ <p
249
+ className="flex-1 body-small text-black font-semibold italic"
250
+ style={{ fontFamily: "var(--font-mazzard)" }}
251
+ >
252
+ {sampleBodyText}
253
+ </p>
254
+ </TypographyRow>
255
+ </div>
256
+
257
+ {/* Body Overline */}
258
+ <div className="space-y-8">
259
+ <SectionHeader title="Body overline" />
260
+ <TypographyRow>
261
+ <p
262
+ className="flex-1 overline-large text-black font-semibold"
263
+ style={{ fontFamily: "var(--font-mazzard)" }}
264
+ >
265
+ {sampleText}
266
+ </p>
267
+ <p
268
+ className="flex-1 overline-large text-black font-semibold italic"
269
+ style={{ fontFamily: "var(--font-mazzard)" }}
270
+ >
271
+ {sampleText}
272
+ </p>
273
+ </TypographyRow>
274
+ <TypographyRow>
275
+ <p
276
+ className="flex-1 overline-medium text-black font-semibold"
277
+ style={{ fontFamily: "var(--font-mazzard)" }}
278
+ >
279
+ {sampleText}
280
+ </p>
281
+ <p
282
+ className="flex-1 overline-medium text-black font-semibold italic"
283
+ style={{ fontFamily: "var(--font-mazzard)" }}
284
+ >
285
+ {sampleText}
286
+ </p>
287
+ </TypographyRow>
288
+ <TypographyRow>
289
+ <p
290
+ className="flex-1 overline-small text-black font-semibold"
291
+ style={{ fontFamily: "var(--font-mazzard)" }}
292
+ >
293
+ {sampleText}
294
+ </p>
295
+ <p
296
+ className="flex-1 overline-small text-black font-semibold italic"
297
+ style={{ fontFamily: "var(--font-mazzard)" }}
298
+ >
299
+ {sampleText}
300
+ </p>
301
+ </TypographyRow>
302
+ </div>
303
+
304
+ {/* Body Number */}
305
+ <div className="space-y-8">
306
+ <SectionHeader title="Body number" />
307
+ <TypographyRow>
308
+ <p
309
+ className="flex-1 number-large text-black font-normal"
310
+ style={{ fontFamily: "var(--font-mazzard)" }}
311
+ >
312
+ {sampleNumber}
313
+ </p>
314
+ <p
315
+ className="flex-1 number-large text-black font-medium"
316
+ style={{ fontFamily: "var(--font-mazzard)" }}
317
+ >
318
+ {sampleNumber}
319
+ </p>
320
+ <p
321
+ className="flex-1 number-large text-black font-semibold"
322
+ style={{ fontFamily: "var(--font-mazzard)" }}
323
+ >
324
+ {sampleNumber}
325
+ </p>
326
+ </TypographyRow>
327
+ <TypographyRow>
328
+ <p
329
+ className="flex-1 number-base text-black font-normal"
330
+ style={{ fontFamily: "var(--font-mazzard)" }}
331
+ >
332
+ {sampleNumber}
333
+ </p>
334
+ <p
335
+ className="flex-1 number-base text-black font-medium"
336
+ style={{ fontFamily: "var(--font-mazzard)" }}
337
+ >
338
+ {sampleNumber}
339
+ </p>
340
+ <p
341
+ className="flex-1 number-base text-black font-semibold"
342
+ style={{ fontFamily: "var(--font-mazzard)" }}
343
+ >
344
+ {sampleNumber}
345
+ </p>
346
+ </TypographyRow>
347
+ <TypographyRow>
348
+ <p
349
+ className="flex-1 text-[10.32px] leading-[20px] text-black font-normal"
350
+ style={{
351
+ fontVariantNumeric: "lining-nums tabular-nums",
352
+ fontFamily: "var(--font-mazzard)",
353
+ }}
354
+ >
355
+ {sampleNumberSmall}
356
+ </p>
357
+ <p
358
+ className="flex-1 text-[10.32px] leading-[21px] text-black font-semibold"
359
+ style={{
360
+ fontVariantNumeric: "lining-nums tabular-nums",
361
+ fontFamily: "var(--font-mazzard)",
362
+ }}
363
+ >
364
+ {sampleNumberSmall}
365
+ </p>
366
+ <p
367
+ className="flex-1 text-[10.32px] leading-[21px] text-black font-semibold"
368
+ style={{
369
+ fontVariantNumeric: "lining-nums tabular-nums",
370
+ fontFamily: "var(--font-mazzard)",
371
+ }}
372
+ >
373
+ {sampleNumberSmall}
374
+ </p>
375
+ </TypographyRow>
376
+ <TypographyRow>
377
+ <p
378
+ className="flex-1 number-small text-black font-normal"
379
+ style={{ fontFamily: "var(--font-mazzard)" }}
380
+ >
381
+ {sampleNumber}
382
+ </p>
383
+ <p
384
+ className="flex-1 number-small text-black font-medium"
385
+ style={{ fontFamily: "var(--font-mazzard)" }}
386
+ >
387
+ {sampleNumber}
388
+ </p>
389
+ <p
390
+ className="flex-1 number-small text-black font-semibold"
391
+ style={{ fontFamily: "var(--font-mazzard)" }}
392
+ >
393
+ {sampleNumber}
394
+ </p>
395
+ </TypographyRow>
396
+ <TypographyRow>
397
+ <p
398
+ className="flex-1 number-xsmall text-black font-normal"
399
+ style={{ fontFamily: "var(--font-mazzard)" }}
400
+ >
401
+ {sampleNumber}
402
+ </p>
403
+ <p
404
+ className="flex-1 number-xsmall text-black font-medium"
405
+ style={{ fontFamily: "var(--font-mazzard)" }}
406
+ >
407
+ {sampleNumber}
408
+ </p>
409
+ <p
410
+ className="flex-1 number-xsmall text-black font-semibold"
411
+ style={{ fontFamily: "var(--font-mazzard)" }}
412
+ >
413
+ {sampleNumber}
414
+ </p>
415
+ </TypographyRow>
416
+ </div>
417
+ </div>
418
+ </div>
419
+ );
420
+ },
421
+ };
@@ -0,0 +1,115 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { WELLDashboard } from ".";
3
+
4
+ const meta = {
5
+ title: "UI/WELLDashboard",
6
+ component: WELLDashboard,
7
+ tags: ["autodocs"],
8
+ parameters: {
9
+ layout: "padded",
10
+ },
11
+ argTypes: {
12
+ certifiedPercentage: {
13
+ control: { type: "range", min: 0, max: 100, step: 1 },
14
+ description: "Percentage of locations certified (0-100)",
15
+ },
16
+ },
17
+ } satisfies Meta<typeof WELLDashboard>;
18
+
19
+ export default meta;
20
+
21
+ type Story = StoryObj<typeof meta>;
22
+
23
+ // Default dashboard with standard data
24
+ export const Default: Story = {
25
+ args: {
26
+ certifiedPercentage: 60,
27
+ },
28
+ };
29
+
30
+ // Full certification (100%)
31
+ export const FullyCertified: Story = {
32
+ args: {
33
+ certifiedPercentage: 100,
34
+ },
35
+ };
36
+
37
+ // Low certification percentage
38
+ export const LowCertification: Story = {
39
+ args: {
40
+ certifiedPercentage: 25,
41
+ },
42
+ };
43
+
44
+ // Custom data example
45
+ export const CustomData: Story = {
46
+ args: {
47
+ certifiedPercentage: 75,
48
+ certifications: [
49
+ { name: "Platinum", locations: 3, color: "#A8A7AE" },
50
+ { name: "Gold", locations: 5, color: "#D7C686" },
51
+ { name: "Silver", locations: 2, color: "#C0C2C4" },
52
+ { name: "Bronze", locations: 1, color: "#D1A778" },
53
+ ],
54
+ ratings: [
55
+ { name: "Health-Safety", locations: 8, color: "#7FB3DC", percentage: 80 },
56
+ { name: "Equity", locations: 5, color: "#41937D", percentage: 60 },
57
+ { name: "Performance", locations: 3, color: "#0B667F", percentage: 40 },
58
+ { name: "Coworking", locations: 1, color: "#AD7DA3", percentage: 15 },
59
+ ],
60
+ },
61
+ };
62
+
63
+ // All ratings active
64
+ export const AllRatingsActive: Story = {
65
+ args: {
66
+ certifiedPercentage: 85,
67
+ ratings: [
68
+ { name: "Health-Safety", locations: 10, color: "#7FB3DC", percentage: 90 },
69
+ { name: "Equity", locations: 8, color: "#41937D", percentage: 75 },
70
+ { name: "Performance", locations: 6, color: "#0B667F", percentage: 60 },
71
+ { name: "Coworking", locations: 4, color: "#AD7DA3", percentage: 45 },
72
+ ],
73
+ },
74
+ };
75
+
76
+ // Complete overview in a constrained container
77
+ export const InContainer: Story = {
78
+ render: (args) => (
79
+ <div className="max-w-6xl mx-auto p-8 bg-[#FAFAFA]">
80
+ <WELLDashboard {...args} />
81
+ </div>
82
+ ),
83
+ args: {
84
+ certifiedPercentage: 60,
85
+ },
86
+ };
87
+
88
+ // Responsive demo
89
+ export const ResponsiveDemo: Story = {
90
+ render: (args) => (
91
+ <div className="space-y-8">
92
+ <div>
93
+ <h3 className="text-lg font-semibold mb-4">Desktop (1200px)</h3>
94
+ <div className="w-full max-w-6xl border-2 border-dashed border-gray-300 p-4">
95
+ <WELLDashboard {...args} />
96
+ </div>
97
+ </div>
98
+ <div>
99
+ <h3 className="text-lg font-semibold mb-4">Tablet (768px)</h3>
100
+ <div className="w-full max-w-3xl border-2 border-dashed border-gray-300 p-4">
101
+ <WELLDashboard {...args} />
102
+ </div>
103
+ </div>
104
+ <div>
105
+ <h3 className="text-lg font-semibold mb-4">Mobile (375px)</h3>
106
+ <div className="w-full max-w-sm border-2 border-dashed border-gray-300 p-4">
107
+ <WELLDashboard {...args} />
108
+ </div>
109
+ </div>
110
+ </div>
111
+ ),
112
+ args: {
113
+ certifiedPercentage: 60,
114
+ },
115
+ };