@syscore/ui-library 1.1.12 → 1.2.0

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/components/icons/AchievementBadges.tsx +33 -0
  2. package/client/components/icons/ConceptIcons.tsx +169 -22
  3. package/client/components/icons/NavLogo.tsx +4 -4
  4. package/client/components/icons/ProviderBadges.tsx +28 -28
  5. package/client/components/icons/ProviderSeals.tsx +35 -35
  6. package/client/components/icons/StandardLogo.tsx +47 -0
  7. package/client/components/icons/UtilityChevronDown.tsx +1 -1
  8. package/client/components/icons/UtilityClearRegular.tsx +43 -0
  9. package/client/components/icons/UtilityCompare.tsx +71 -0
  10. package/client/components/icons/UtilityHome.tsx +26 -0
  11. package/client/components/icons/UtilityReset.tsx +7 -7
  12. package/client/components/icons/UtilitySave.tsx +35 -0
  13. package/client/components/icons/UtilityScopeLarge.tsx +86 -0
  14. package/client/components/icons/UtilityShow.tsx +41 -0
  15. package/client/components/icons/UtilityTarget.tsx +21 -0
  16. package/client/components/icons/UtilityTargetActive.tsx +34 -0
  17. package/client/components/icons/UtilityText.tsx +8 -8
  18. package/client/components/ui/accordion.tsx +6 -9
  19. package/client/components/ui/alert-dialog.tsx +6 -19
  20. package/client/components/ui/alert.tsx +5 -6
  21. package/client/components/ui/avatar.tsx +3 -9
  22. package/client/components/ui/badge.tsx +5 -8
  23. package/client/components/ui/breadcrumb.tsx +24 -11
  24. package/client/components/ui/button.tsx +40 -56
  25. package/client/components/ui/calendar.tsx +24 -28
  26. package/client/components/ui/card.tsx +6 -9
  27. package/client/components/ui/carousel.tsx +14 -14
  28. package/client/components/ui/chart.tsx +25 -28
  29. package/client/components/ui/checkbox.tsx +3 -8
  30. package/client/components/ui/code-badge.tsx +22 -0
  31. package/client/components/ui/command.tsx +12 -48
  32. package/client/components/ui/context-menu.tsx +17 -32
  33. package/client/components/ui/dialog.tsx +9 -18
  34. package/client/components/ui/drawer.tsx +7 -13
  35. package/client/components/ui/dropdown-menu.tsx +17 -29
  36. package/client/components/ui/form.tsx +4 -4
  37. package/client/components/ui/hover-card.tsx +1 -4
  38. package/client/components/ui/input-otp.tsx +7 -10
  39. package/client/components/ui/input.tsx +34 -9
  40. package/client/components/ui/label.tsx +2 -4
  41. package/client/components/ui/menubar.tsx +19 -40
  42. package/client/components/ui/navigation-menu.tsx +10 -27
  43. package/client/components/ui/navigation.tsx +861 -0
  44. package/client/components/ui/pagination.tsx +8 -8
  45. package/client/components/ui/popover.tsx +1 -4
  46. package/client/components/ui/progress.tsx +2 -5
  47. package/client/components/ui/radio-group.tsx +4 -7
  48. package/client/components/ui/resizable.tsx +4 -10
  49. package/client/components/ui/scroll-area.tsx +5 -8
  50. package/client/components/ui/{SearchField.tsx → search.tsx} +7 -10
  51. package/client/components/ui/select.tsx +19 -44
  52. package/client/components/ui/separator.tsx +2 -2
  53. package/client/components/ui/sheet.tsx +12 -23
  54. package/client/components/ui/sidebar.tsx +55 -82
  55. package/client/components/ui/skeleton.tsx +1 -1
  56. package/client/components/ui/slider.tsx +4 -7
  57. package/client/components/ui/sonner.tsx +5 -8
  58. package/client/components/ui/switch.tsx +2 -9
  59. package/client/components/ui/table.tsx +9 -18
  60. package/client/components/ui/tabs.tsx +43 -203
  61. package/client/components/ui/tag.tsx +68 -0
  62. package/client/components/ui/textarea.tsx +1 -4
  63. package/client/components/ui/toast.tsx +9 -19
  64. package/client/components/ui/toaster.tsx +1 -1
  65. package/client/components/ui/toggle-group.tsx +20 -3
  66. package/client/components/ui/toggle.tsx +13 -13
  67. package/client/components/ui/tooltip.tsx +147 -10
  68. package/client/global.css +5421 -1049
  69. package/client/storybook.css +1164 -0
  70. package/client/ui/AspectRatio.stories.tsx +1 -1
  71. package/client/ui/Button.stories.tsx +5 -5
  72. package/client/ui/Card.stories.tsx +223 -2
  73. package/client/ui/CodeBadge.stories.tsx +76 -0
  74. package/client/ui/Dialog.stories.tsx +52 -5
  75. package/client/ui/Icons.stories.tsx +31 -31
  76. package/client/ui/Input.stories.tsx +125 -0
  77. package/client/ui/Label.stories.tsx +8 -11
  78. package/client/ui/Navigation.stories.tsx +1 -1
  79. package/client/ui/RadioGroup/RadioGroup.stories.tsx +1 -1
  80. package/client/ui/SearchField.stories.tsx +1 -1
  81. package/client/ui/{Select/Select.stories.tsx → Select.stories.tsx} +2 -2
  82. package/client/ui/{Switch/Switch.stories.tsx → Switch.stories.tsx} +3 -3
  83. package/client/ui/Tabs.stories.tsx +174 -10
  84. package/client/ui/Tag.stories.tsx +48 -1
  85. package/client/ui/{Textarea/Textarea.stories.tsx → Textarea.stories.tsx} +9 -10
  86. package/client/ui/Toggle.stories.tsx +3 -3
  87. package/client/ui/Tooltip.stories.tsx +28 -4
  88. package/dist/ui/index.cjs.js +1 -1
  89. package/dist/ui/index.d.ts +4 -6
  90. package/dist/ui/index.es.js +1227 -2235
  91. package/dist/ui/ui-library.css +1 -0
  92. package/package.json +3 -3
  93. package/client/components/ui/Navigation.tsx +0 -958
  94. package/client/components/ui/StrategyTable.tsx +0 -303
  95. package/client/components/ui/Tag.tsx +0 -127
  96. package/client/ui/Input/Input.stories.tsx +0 -69
  97. package/client/ui/StrategyTable.stories.tsx +0 -138
  98. package/client/ui/WELLDashboard/WELLDashboard.stories.tsx +0 -115
  99. package/client/ui/WELLDashboard/index.tsx +0 -317
  100. /package/client/hooks/{UseTabs.tsx → use-tabs.tsx} +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
- import { AspectRatio } from "@/components/ui/aspect-ratio";
2
+ import { AspectRatio } from "../components/ui/aspect-ratio";
3
3
 
4
4
  const meta = {
5
5
  title: "Review/AspectRatio",
@@ -1,9 +1,9 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
- import { Button } from "@/components/ui/Button";
3
- import { UtilityReset } from "@/components/icons/UtilityReset";
4
- import { UtilityClose } from "@/components/icons/UtilityClose";
5
- import { UtilityChevronDown } from "@/components/icons/UtilityChevronDown";
6
- import { NavAccount } from "@/components/icons/NavAccount";
2
+ import { Button } from "../components/ui/button";
3
+ import { UtilityReset } from "../components/icons/UtilityReset";
4
+ import { UtilityClose } from "../components/icons/UtilityClose";
5
+ import { UtilityChevronDown } from "../components/icons/UtilityChevronDown";
6
+ import { NavAccount } from "../components/icons/NavAccount";
7
7
 
8
8
  const meta = {
9
9
  title: "Review/Button",
@@ -1,4 +1,6 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
+ import { useState } from "react";
3
+
2
4
  import {
3
5
  Card,
4
6
  CardHeader,
@@ -6,8 +8,19 @@ import {
6
8
  CardTitle,
7
9
  CardDescription,
8
10
  CardContent,
9
- } from "../components/ui/Card";
10
- import { Button } from "@/components/ui/button";
11
+ } from "../components/ui/card";
12
+ import { Button } from "../components/ui/button";
13
+ import {
14
+ Select,
15
+ SelectContent,
16
+ SelectItem,
17
+ SelectTrigger,
18
+ SelectValue,
19
+ } from "../components/ui/select";
20
+ import { Label } from "../components/ui/label";
21
+ import { Toggle } from "../components/ui/toggle";
22
+
23
+ import { UtilityReset } from "../components/icons/UtilityReset";
11
24
 
12
25
  const meta = {
13
26
  title: "Review/Card",
@@ -82,3 +95,211 @@ export const Multiple: Story = {
82
95
  </div>
83
96
  ),
84
97
  };
98
+
99
+ export const FiltersPanel: Story = {
100
+ render: () => (
101
+ <Card className="w-[344px] bg-cyan-50 border-gray-100 rounded-xl p-6 shadow-none flex flex-col gap-6">
102
+ <div className="flex items-center justify-between w-full h-8">
103
+ <Label className="text-gray-800 overline-large">Filters</Label>
104
+ <Button
105
+ variant="secondary-light"
106
+ size="icon"
107
+ className="size-8 rounded-full border-gray-100 bg-white p-0"
108
+ >
109
+ <UtilityReset className="size-4" />
110
+ </Button>
111
+ </div>
112
+
113
+ <div className="flex flex-col gap-6 w-full">
114
+ {/* Segmented Control */}
115
+ <div className="flex flex-col gap-3">
116
+ <Label className="text-gray-600">Label</Label>
117
+ <Toggle
118
+ options={[
119
+ { label: "Active", value: "active" },
120
+ { label: "Inactive", value: "inactive" },
121
+ ]}
122
+ defaultValue="active"
123
+ />
124
+ </div>
125
+
126
+ {/* Search Selects */}
127
+ {[1, 2, 3].map((i) => (
128
+ <div key={i} className="flex flex-col gap-3">
129
+ <Label className="text-gray-600">Label</Label>
130
+ <Select>
131
+ <SelectTrigger className="h-12 border-gray-200 rounded-[6px] bg-white px-4">
132
+ <SelectValue placeholder="Placeholder" />
133
+ </SelectTrigger>
134
+ <SelectContent>
135
+ <SelectItem value="option1">Option 1</SelectItem>
136
+ <SelectItem value="option2">Option 2</SelectItem>
137
+ </SelectContent>
138
+ </Select>
139
+ </div>
140
+ ))}
141
+ </div>
142
+ </Card>
143
+ ),
144
+ };
145
+
146
+ // export const AttributesPanel: Story = {
147
+ // render: () => {
148
+ // const [activeTag, setActiveTag] = useState<string>("tag1");
149
+ // const tags = [
150
+ // { id: "tag1", label: "Tag" },
151
+ // { id: "tag2", label: "Tag" },
152
+ // { id: "tag3", label: "Tag" },
153
+ // ];
154
+
155
+ // return (
156
+ // <Card className="w-[344px] bg-cyan-50 border-gray-100 rounded-xl p-6 shadow-none flex flex-col gap-6">
157
+ // <div className="flex items-center justify-between w-full h-8">
158
+ // <Label className="text-gray-800 overline-large">Attributes</Label>
159
+ // </div>
160
+
161
+ // <div className="flex flex-col gap-6 w-full">
162
+ // {/* Segmented Control */}
163
+ // <div className="flex flex-col gap-3">
164
+ // <Label className="text-gray-600">Label</Label>
165
+ // <Toggle
166
+ // options={[
167
+ // { label: "Active", value: "active" },
168
+ // { label: "Inactive", value: "inactive" },
169
+ // ]}
170
+ // defaultValue="active"
171
+ // />
172
+ // </div>
173
+
174
+ // {/* Tags */}
175
+ // <div className="flex flex-col gap-3">
176
+ // <Label className="text-gray-600">Field name</Label>
177
+ // <div className="flex flex-wrap gap-3 items-start">
178
+ // {tags.map((tag) => (
179
+ // <Tag
180
+ // key={tag.id}
181
+ // active={activeTag === tag.id}
182
+ // onClick={() => setActiveTag(tag.id)}
183
+ // >
184
+ // {tag.label}
185
+ // </Tag>
186
+ // ))}
187
+ // </div>
188
+ // </div>
189
+ // </div>
190
+ // </Card>
191
+ // );
192
+ // },
193
+ // };
194
+
195
+ import {
196
+ IconConceptAir,
197
+ IconConceptCommunity,
198
+ IconConceptLight,
199
+ IconConceptMaterials,
200
+ IconConceptMind,
201
+ IconConceptMovement,
202
+ IconConceptNourishment,
203
+ IconConceptSound,
204
+ IconConceptThermalComfort,
205
+ IconConceptWater,
206
+ } from "../components/icons/ConceptIcons";
207
+
208
+ // ... existing imports
209
+
210
+ export const NavigatorPanel: Story = {
211
+ render: () => {
212
+ const [activeConcept, setActiveConcept] = useState<string>("community");
213
+ const [activeTheme, setActiveTheme] = useState<string>("C7");
214
+ const [activeStrategy, setActiveStrategy] = useState<string>("C7.4");
215
+
216
+ const concepts = [
217
+ { id: "mind", Icon: IconConceptMind },
218
+ { id: "community", Icon: IconConceptCommunity },
219
+ { id: "movement", Icon: IconConceptMovement },
220
+ { id: "water", Icon: IconConceptWater },
221
+ { id: "air", Icon: IconConceptAir },
222
+ { id: "light", Icon: IconConceptLight },
223
+ { id: "thermal", Icon: IconConceptThermalComfort },
224
+ { id: "nourishment", Icon: IconConceptNourishment },
225
+ { id: "sound", Icon: IconConceptSound },
226
+ { id: "materials", Icon: IconConceptMaterials },
227
+ ];
228
+
229
+ const themes = Array.from({ length: 9 }, (_, i) => `C${9 - i}`).reverse();
230
+ const strategies = ["C7.1", "C7.2", "C7.3", "C7.4"];
231
+
232
+ return (
233
+ <Card className="w-[344px] bg-cyan-50 border-gray-100 rounded-xl p-6 shadow-none flex flex-col gap-6">
234
+ {/* Concepts */}
235
+ <div className="flex flex-col gap-3">
236
+ <Label className="text-gray-600">Concept</Label>
237
+ <div className="flex flex-wrap gap-2">
238
+ {concepts.map(({ id, Icon }) => (
239
+ <button
240
+ key={id}
241
+ onClick={() => setActiveConcept(id)}
242
+ className="rounded-full transition-transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-cyan-500 focus:ring-offset-2"
243
+ >
244
+ <Icon active={activeConcept === id} className="size-12" />
245
+ </button>
246
+ ))}
247
+ </div>
248
+ </div>
249
+
250
+ {/* Theme */}
251
+ <div className="flex flex-col gap-3">
252
+ <Label className="text-gray-600">Theme</Label>
253
+ <div className="flex flex-wrap gap-2">
254
+ {themes.map((theme) => (
255
+ <button
256
+ key={theme}
257
+ onClick={() => setActiveTheme(theme)}
258
+ className={`w-12 h-8 rounded-[6px] flex items-center justify-center transition-colors ${
259
+ activeTheme === theme
260
+ ? "bg-cyan-800 text-white"
261
+ : "bg-blue-100 text-blue-600 hover:bg-blue-200"
262
+ }`}
263
+ >
264
+ <span className="body-small font-semibold">{theme}</span>
265
+ </button>
266
+ ))}
267
+ </div>
268
+ </div>
269
+
270
+ {/* Strategy */}
271
+ <div className="flex flex-col gap-3">
272
+ <Label className="text-gray-600">Strategy</Label>
273
+ <div className="flex flex-wrap gap-2">
274
+ {strategies.map((strategy) => (
275
+ <button
276
+ key={strategy}
277
+ onClick={() => setActiveStrategy(strategy)}
278
+ className={`w-12 h-8 rounded-[6px] flex items-center justify-center transition-colors ${
279
+ activeStrategy === strategy
280
+ ? "bg-[#0F748A]/10 border border-[#0F748A]/20 text-cyan-900"
281
+ : "bg-blue-100 text-blue-600 hover:bg-blue-200"
282
+ }`}
283
+ >
284
+ <span className="body-small font-semibold">{strategy}</span>
285
+ </button>
286
+ ))}
287
+ </div>
288
+ </div>
289
+
290
+ {/* Scope */}
291
+ <div className="flex flex-col gap-3">
292
+ <Label className="text-gray-600">Scope</Label>
293
+ <Toggle
294
+ className="w-full h-8 border border-gray-100 bg-white rounded-full p-0 [&>button]:flex-1"
295
+ options={[
296
+ { label: "Non-core", value: "non-core" },
297
+ { label: "Core", value: "core" },
298
+ ]}
299
+ defaultValue="non-core"
300
+ />
301
+ </div>
302
+ </Card>
303
+ );
304
+ },
305
+ };
@@ -0,0 +1,76 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { CodeBadge } from "../components/ui/code-badge";
3
+
4
+ const meta = {
5
+ title: "Review/CodeBadge",
6
+ component: CodeBadge,
7
+ tags: ["autodocs"],
8
+ parameters: {
9
+ layout: "centered",
10
+ },
11
+ } satisfies Meta<typeof CodeBadge>;
12
+
13
+ export default meta;
14
+
15
+ type Story = StoryObj<typeof meta>;
16
+
17
+ export const Default: Story = {
18
+ args: {
19
+ code: "A01",
20
+ },
21
+ };
22
+
23
+ export const WithClassName: Story = {
24
+ render: () => (
25
+ <div className="flex gap-4">
26
+ <CodeBadge
27
+ code="C01"
28
+ className="bg-plum-50 border-plum-200 text-plum-800"
29
+ />
30
+ <CodeBadge
31
+ code="A02"
32
+ className="bg-cyan-50 border-cyan-200 text-cyan-800"
33
+ />
34
+ <CodeBadge
35
+ code="W03"
36
+ className="bg-blue-50 border-blue-200 text-blue-800"
37
+ />
38
+ <CodeBadge
39
+ code="N04"
40
+ className="bg-green-50 border-green-200 text-green-800"
41
+ />
42
+ </div>
43
+ ),
44
+ };
45
+
46
+ export const WithStyle: Story = {
47
+ render: () => (
48
+ <div className="flex gap-4">
49
+ <CodeBadge
50
+ code="R01"
51
+ className="border-none"
52
+ style={{
53
+ backgroundColor: "#EFF5FB",
54
+ color: "#2E74AD",
55
+ }}
56
+ />
57
+ <CodeBadge
58
+ code="R02"
59
+ className="border-none"
60
+ style={{
61
+ backgroundColor: "#7B4F9D",
62
+ color: "white",
63
+ }}
64
+ />
65
+ <CodeBadge
66
+ code="R03"
67
+ className="border-none"
68
+ style={{
69
+ backgroundColor: "#2E74AD",
70
+ color: "white",
71
+ }}
72
+ />
73
+ </div>
74
+ ),
75
+ };
76
+
@@ -1,15 +1,17 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
- import { Button } from "@/components/ui/Button";
2
+ import { Button } from "../components/ui/button";
3
+ import { Input } from "../components/ui/input";
4
+ import { Label } from "../components/ui/label";
3
5
  import { useState } from "react";
4
6
  import {
5
7
  Dialog,
6
8
  DialogContent,
7
9
  DialogDescription,
10
+ DialogFooter,
8
11
  DialogHeader,
9
12
  DialogTitle,
10
13
  DialogTrigger,
11
- } from "@/components/ui/dialog";
12
- import { cn } from "@/lib/utils";
14
+ } from "../components/ui/dialog";
13
15
 
14
16
  const meta = {
15
17
  title: "Review/Dialog",
@@ -29,7 +31,7 @@ export const Default: Story = {
29
31
  const [open, setOpen] = useState(false);
30
32
  return (
31
33
  <>
32
- <Dialog open={open}>
34
+ <Dialog open={open} onOpenChange={setOpen}>
33
35
  <DialogTrigger asChild>
34
36
  <Button
35
37
  size="large"
@@ -58,7 +60,7 @@ export const Default: Story = {
58
60
  variant="general-primary"
59
61
  onClick={() => setOpen(false)}
60
62
  >
61
- Yes
63
+ Yes, delete user
62
64
  </Button>
63
65
  </div>
64
66
  </DialogContent>
@@ -67,3 +69,48 @@ export const Default: Story = {
67
69
  );
68
70
  },
69
71
  };
72
+
73
+ export const WithForm: Story = {
74
+ render: () => {
75
+ const [open, setOpen] = useState(false);
76
+ return (
77
+ <Dialog open={open} onOpenChange={setOpen}>
78
+ <DialogTrigger asChild>
79
+ <Button variant="general-secondary">Edit Profile</Button>
80
+ </DialogTrigger>
81
+ <DialogContent className="sm:max-w-[425px]">
82
+ <DialogHeader>
83
+ <DialogTitle>Edit profile</DialogTitle>
84
+ <DialogDescription>
85
+ Make changes to your profile here. Click save when you're done.
86
+ </DialogDescription>
87
+ </DialogHeader>
88
+ <div className="grid gap-4 py-4">
89
+ <div className=" flex flex-col gap-y-3">
90
+ <Label htmlFor="name">Name</Label>
91
+ <Input id="name" defaultValue="Pedro Duarte" />
92
+ </div>
93
+ <div className=" flex flex-col gap-y-3">
94
+ <Label htmlFor="username">Username</Label>
95
+ <Input
96
+ id="username"
97
+ defaultValue="@peduarte"
98
+ className="col-span-3"
99
+ />
100
+ </div>
101
+ </div>
102
+ <DialogFooter>
103
+ <Button
104
+ size="utility"
105
+ variant="general-primary"
106
+ type="submit"
107
+ onClick={() => setOpen(false)}
108
+ >
109
+ Save changes
110
+ </Button>
111
+ </DialogFooter>
112
+ </DialogContent>
113
+ </Dialog>
114
+ );
115
+ },
116
+ };
@@ -10,45 +10,45 @@ import {
10
10
  IconConceptNourishment,
11
11
  IconConceptSound,
12
12
  IconConceptMaterials,
13
- } from "@/components/icons/ConceptIcons";
14
- import { NavLogo } from "@/components/icons/NavLogo";
15
- import { NavAccount } from "@/components/icons/NavAccount";
16
- import { NavBullet } from "@/components/icons/NavBullet";
17
- import { UtilityAccordion } from "@/components/icons/UtilityAccordion";
18
- import { UtilityChevronDown } from "@/components/icons/UtilityChevronDown";
19
- import { UtilityClassification } from "@/components/icons/UtilityClassification";
20
- import { UtilityClose } from "@/components/icons/UtilityClose";
21
- import { UtilityDrag } from "@/components/icons/UtilityDrag";
22
- import { UtilityEdit } from "@/components/icons/UtilityEdit";
23
- import { UtilityOptions } from "@/components/icons/UtilityOptions";
24
- import { UtilityPortfolio } from "@/components/icons/UtilityPortfolio";
25
- import { UtilityReset } from "@/components/icons/UtilityReset";
26
- import { UtilityScoring } from "@/components/icons/UtilityScoring";
27
- import { UtilitySearch } from "@/components/icons/UtilitySearch";
28
- import { UtilitySort } from "@/components/icons/UtilitySort";
29
- import { UtilityText } from "@/components/icons/UtilityText";
30
- import { SealWell } from "@/components/icons/SealWell";
31
- import { SealIwbiMember } from "@/components/icons/SealIwbiMember";
32
- import { SealWellCertification } from "@/components/icons/SealWellCertification";
33
- import { SealWellCommunity } from "@/components/icons/SealWellCommunity";
34
- import { SealWellResidence } from "@/components/icons/SealWellResidence";
35
- import { SealWorksWithWell } from "@/components/icons/SealWorksWithWell";
36
- import { SealEnterpriseProvider } from "@/components/icons/ProviderSeals";
37
- import { SealPerformanceTestingProvider } from "@/components/icons/ProviderSeals";
38
- import { SealSurveyProvider } from "@/components/icons/ProviderSeals";
13
+ } from "../components/icons/ConceptIcons";
14
+ import { NavLogo } from "../components/icons/NavLogo";
15
+ import { NavAccount } from "../components/icons/NavAccount";
16
+ import { NavBullet } from "../components/icons/NavBullet";
17
+ import { UtilityAccordion } from "../components/icons/UtilityAccordion";
18
+ import { UtilityChevronDown } from "../components/icons/UtilityChevronDown";
19
+ import { UtilityClassification } from "../components/icons/UtilityClassification";
20
+ import { UtilityClose } from "../components/icons/UtilityClose";
21
+ import { UtilityDrag } from "../components/icons/UtilityDrag";
22
+ import { UtilityEdit } from "../components/icons/UtilityEdit";
23
+ import { UtilityOptions } from "../components/icons/UtilityOptions";
24
+ import { UtilityPortfolio } from "../components/icons/UtilityPortfolio";
25
+ import { UtilityReset } from "../components/icons/UtilityReset";
26
+ import { UtilityScoring } from "../components/icons/UtilityScoring";
27
+ import { UtilitySearch } from "../components/icons/UtilitySearch";
28
+ import { UtilitySort } from "../components/icons/UtilitySort";
29
+ import { UtilityText } from "../components/icons/UtilityText";
30
+ import { SealWell } from "../components/icons/SealWell";
31
+ import { SealIwbiMember } from "../components/icons/SealIwbiMember";
32
+ import { SealWellCertification } from "../components/icons/SealWellCertification";
33
+ import { SealWellCommunity } from "../components/icons/SealWellCommunity";
34
+ import { SealWellResidence } from "../components/icons/SealWellResidence";
35
+ import { SealWorksWithWell } from "../components/icons/SealWorksWithWell";
36
+ import { SealEnterpriseProvider } from "../components/icons/ProviderSeals";
37
+ import { SealPerformanceTestingProvider } from "../components/icons/ProviderSeals";
38
+ import { SealSurveyProvider } from "../components/icons/ProviderSeals";
39
39
  import {
40
40
  BadgeEnterpriseProvider,
41
41
  BadgePerformanceTestingProvider,
42
42
  BadgeProductProvider,
43
43
  BadgeSurveyProvider,
44
- } from "@/components/icons/ProviderBadges";
45
- import { WatermarkMemberOrg } from "@/components/icons/WatermarkMemberOrg";
46
- import { WaterMarkWWWProducts } from "@/components/icons/WaterMarkWWWProducts";
47
- import { WaterMarkWellProjects } from "@/components/icons/WaterMarkWellProjects";
44
+ } from "../components/icons/ProviderBadges";
45
+ import { WatermarkMemberOrg } from "../components/icons/WatermarkMemberOrg";
46
+ import { WaterMarkWWWProducts } from "../components/icons/WaterMarkWWWProducts";
47
+ import { WaterMarkWellProjects } from "../components/icons/WaterMarkWellProjects";
48
48
  import {
49
49
  SealProductProvider,
50
50
  SealProviders,
51
- } from "@/components/icons/ProviderSeals";
51
+ } from "../components/icons/ProviderSeals";
52
52
 
53
53
  const meta = {
54
54
  title: "Review/Icons",
@@ -0,0 +1,125 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Input } from "../components/ui/input";
3
+ import { Label } from "../components/ui/label";
4
+ import { Button } from "../components/ui/button";
5
+ import { Search, Copy } from "lucide-react";
6
+
7
+ const meta = {
8
+ title: "Review/Input",
9
+ component: Input,
10
+ tags: ["autodocs"],
11
+ parameters: {
12
+ layout: "centered",
13
+ },
14
+ } satisfies Meta<typeof Input>;
15
+
16
+ export default meta;
17
+
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ export const Default: Story = {
21
+ args: {
22
+ placeholder: "Enter text...",
23
+ },
24
+ };
25
+
26
+ export const WithType: Story = {
27
+ render: () => (
28
+ <div className="space-y-4 w-full max-w-md">
29
+ <div className="space-y-3">
30
+ <Label>Text</Label>
31
+ <Input type="text" placeholder="Enter text..." />
32
+ </div>
33
+ <div className="space-y-3">
34
+ <Label>Email</Label>
35
+ <Input type="email" placeholder="Enter email..." />
36
+ </div>
37
+ <div className="space-y-3">
38
+ <Label>Password</Label>
39
+ <Input type="password" placeholder="Enter password..." />
40
+ </div>
41
+ <div className="space-y-3">
42
+ <Label>Number</Label>
43
+ <Input type="number" placeholder="Enter number..." />
44
+ </div>
45
+ </div>
46
+ ),
47
+ };
48
+
49
+ export const Disabled: Story = {
50
+ args: {
51
+ placeholder: "Disabled input",
52
+ disabled: true,
53
+ },
54
+ };
55
+
56
+ export const ReadOnly: Story = {
57
+ args: {
58
+ placeholder: "Read-only input",
59
+ value: "This is read-only",
60
+ readOnly: true,
61
+ },
62
+ };
63
+
64
+ export const WithIcons: Story = {
65
+ render: () => (
66
+ <div className="space-y-4 min-w-[300px]">
67
+ <div className="space-y-3">
68
+ <Label>Currency (Span)</Label>
69
+ <Input
70
+ placeholder="0.00"
71
+ type="number"
72
+ startIcon={<span>€</span>}
73
+ endIcon={<span>EUR</span>}
74
+ />
75
+ </div>
76
+
77
+ <div className="space-y-3">
78
+ <Label>Search (Icon)</Label>
79
+ <Input
80
+ placeholder="Search..."
81
+ startIcon={<Search className="h-4 w-4" />}
82
+ />
83
+ </div>
84
+ </div>
85
+ ),
86
+ };
87
+
88
+ export const WithButton: Story = {
89
+ render: () => (
90
+ <div className="space-y-4 min-w-[400px]">
91
+ <div className="space-y-3">
92
+ <Label>Icon Button</Label>
93
+ <Input
94
+ placeholder="Copy link"
95
+ value="https://example.com/share/123"
96
+ readOnly
97
+ endIcon={
98
+ <button
99
+ className="hover:text-gray-900 transition-colors"
100
+ onClick={() => alert("Copied!")}
101
+ >
102
+ <Copy className="h-4 w-4" />
103
+ </button>
104
+ }
105
+ />
106
+ </div>
107
+
108
+ <div className="space-y-3">
109
+ <Label>Wide Button (Auto-fit)</Label>
110
+ <Input
111
+ placeholder="Enter email"
112
+ endIcon={
113
+ <Button
114
+ size="utility"
115
+ className="h-8 px-3"
116
+ onClick={() => alert("Subscribed!")}
117
+ >
118
+ Subscribe
119
+ </Button>
120
+ }
121
+ />
122
+ </div>
123
+ </div>
124
+ ),
125
+ };