@syscore/ui-library 1.1.10 → 1.1.11
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.
- package/client/App.tsx +47 -0
- package/client/components/icons/ConceptIcons.tsx +667 -0
- package/client/components/icons/NavAccount.tsx +31 -0
- package/client/components/icons/NavBullet.tsx +19 -0
- package/client/components/icons/NavLogo.tsx +36 -0
- package/client/components/icons/ProviderBadges.tsx +295 -0
- package/client/components/icons/ProviderSeals.tsx +319 -0
- package/client/components/icons/SealHealthSafetyRating.tsx +65 -0
- package/client/components/icons/SealIwbiMember.tsx +86 -0
- package/client/components/icons/SealWell.tsx +84 -0
- package/client/components/icons/SealWellCertification.tsx +138 -0
- package/client/components/icons/SealWellCommunity.tsx +122 -0
- package/client/components/icons/SealWellResidence.tsx +122 -0
- package/client/components/icons/SealWorksWithWell.tsx +140 -0
- package/client/components/icons/UtilityAccordion.tsx +21 -0
- package/client/components/icons/UtilityChevronDown.tsx +36 -0
- package/client/components/icons/UtilityClassification.tsx +45 -0
- package/client/components/icons/UtilityClose.tsx +41 -0
- package/client/components/icons/UtilityDrag.tsx +69 -0
- package/client/components/icons/UtilityEdit.tsx +42 -0
- package/client/components/icons/UtilityOptions.tsx +45 -0
- package/client/components/icons/UtilityPortfolio.tsx +87 -0
- package/client/components/icons/UtilityReset.tsx +41 -0
- package/client/components/icons/UtilityScoring.tsx +43 -0
- package/client/components/icons/UtilitySearch.tsx +38 -0
- package/client/components/icons/UtilitySort.tsx +52 -0
- package/client/components/icons/UtilityText.tsx +34 -0
- package/client/components/icons/WaterMarkWWWProducts.tsx +26 -0
- package/client/components/icons/WaterMarkWellProjects.tsx +30 -0
- package/client/components/icons/WatermarkMemberOrg.tsx +59 -0
- package/client/components/icons/WellSeal.tsx +79 -0
- package/client/components/icons/X.tsx +35 -0
- package/client/hooks/UseTabs.tsx +35 -0
- package/client/hooks/use-mobile.tsx +21 -0
- package/client/hooks/use-segmented-control.ts +42 -0
- package/client/hooks/use-toast.ts +188 -0
- package/client/pages/Index.tsx +88 -0
- package/client/pages/NotFound.tsx +29 -0
- package/client/ui/Accordion/Accordion.stories.tsx +74 -0
- package/client/ui/Alert/Alert.stories.tsx +82 -0
- package/client/ui/AlertDialog/AlertDialog.stories.tsx +106 -0
- package/client/ui/AspectRatio.stories.tsx +78 -0
- package/client/ui/Avatar/Avatar.stories.tsx +94 -0
- package/client/ui/Badge/Badge.stories.tsx +60 -0
- package/client/ui/Breadcrumb/Breadcrumb.stories.tsx +97 -0
- package/client/ui/Button.stories.tsx +429 -0
- package/client/ui/Calendar/Calendar.stories.tsx +99 -0
- package/client/ui/Card.stories.tsx +84 -0
- package/client/ui/Carousel/Carousel.stories.tsx +85 -0
- package/client/ui/Chart/Chart.stories.tsx +58 -0
- package/client/ui/Checkbox/Checkbox.stories.tsx +112 -0
- package/client/ui/Collapsible/Collapsible.stories.tsx +101 -0
- package/client/ui/Colors.stories.tsx +1041 -0
- package/client/ui/Command/Command.stories.tsx +97 -0
- package/client/ui/ContextMenu/ContextMenu.stories.tsx +74 -0
- package/client/ui/Dialog.stories.tsx +69 -0
- package/client/ui/Drawer/Drawer.stories.tsx +87 -0
- package/client/ui/DropdownMenu/DropdownMenu.stories.tsx +139 -0
- package/client/ui/Form/Form.stories.tsx +74 -0
- package/client/ui/HoverCard/HoverCard.stories.tsx +94 -0
- package/client/ui/Icons.stories.tsx +328 -0
- package/client/ui/Input/Input.stories.tsx +69 -0
- package/client/ui/InputOTP/InputOTP.stories.tsx +85 -0
- package/client/ui/Label.stories.tsx +66 -0
- package/client/ui/Menubar/Menubar.stories.tsx +88 -0
- package/client/ui/Navigation.stories.tsx +57 -0
- package/client/ui/NavigationMenu/NavigationMenu.stories.tsx +106 -0
- package/client/ui/Pagination/Pagination.stories.tsx +115 -0
- package/client/ui/Popover/Popover.stories.tsx +99 -0
- package/client/ui/Progress/Progress.stories.tsx +63 -0
- package/client/ui/RadioGroup/RadioGroup.stories.tsx +110 -0
- package/client/ui/Resizable/Resizable.stories.tsx +88 -0
- package/client/ui/ScrollArea/ScrollArea.stories.tsx +64 -0
- package/client/ui/SearchField.stories.tsx +63 -0
- package/client/ui/Select/Select.stories.tsx +111 -0
- package/client/ui/Separator/Separator.stories.tsx +67 -0
- package/client/ui/Sheet/Sheet.stories.tsx +138 -0
- package/client/ui/Sidebar/Sidebar.stories.tsx +92 -0
- package/client/ui/Skeleton/Skeleton.stories.tsx +65 -0
- package/client/ui/Slider/Slider.stories.tsx +101 -0
- package/client/ui/Sonner/Sonner.stories.tsx +48 -0
- package/client/ui/StrategyTable.stories.tsx +138 -0
- package/client/ui/Switch/Switch.stories.tsx +96 -0
- package/client/ui/Table/Table.stories.tsx +135 -0
- package/client/ui/Tabs.stories.tsx +33 -0
- package/client/ui/Tag.stories.tsx +190 -0
- package/client/ui/Textarea/Textarea.stories.tsx +56 -0
- package/client/ui/Toast/Toast.stories.tsx +76 -0
- package/client/ui/Toaster/Toaster.stories.tsx +52 -0
- package/client/ui/Toggle.stories.tsx +248 -0
- package/client/ui/ToggleGroup/ToggleGroup.stories.tsx +88 -0
- package/client/ui/Tooltip.stories.tsx +72 -0
- package/client/ui/Typography.stories.tsx +421 -0
- package/client/ui/WELLDashboard/WELLDashboard.stories.tsx +115 -0
- package/client/ui/WELLDashboard/index.tsx +221 -0
- package/client/vite-env.d.ts +1 -0
- package/dist/ui/index.cjs.js +1 -1
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.es.js +163 -1
- package/package.json +2 -1
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import {
|
|
3
|
+
IconConceptMind,
|
|
4
|
+
IconConceptCommunity,
|
|
5
|
+
IconConceptMovement,
|
|
6
|
+
IconConceptWater,
|
|
7
|
+
IconConceptAir,
|
|
8
|
+
IconConceptLight,
|
|
9
|
+
IconConceptThermalComfort,
|
|
10
|
+
IconConceptNourishment,
|
|
11
|
+
IconConceptSound,
|
|
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";
|
|
39
|
+
import {
|
|
40
|
+
BadgeEnterpriseProvider,
|
|
41
|
+
BadgePerformanceTestingProvider,
|
|
42
|
+
BadgeProductProvider,
|
|
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";
|
|
48
|
+
import {
|
|
49
|
+
SealProductProvider,
|
|
50
|
+
SealProviders,
|
|
51
|
+
} from "@/components/icons/ProviderSeals";
|
|
52
|
+
|
|
53
|
+
const meta = {
|
|
54
|
+
title: "Review/Icons",
|
|
55
|
+
tags: ["autodocs"],
|
|
56
|
+
parameters: {
|
|
57
|
+
layout: "padded",
|
|
58
|
+
},
|
|
59
|
+
} satisfies Meta;
|
|
60
|
+
|
|
61
|
+
export default meta;
|
|
62
|
+
|
|
63
|
+
type Story = StoryObj<typeof meta>;
|
|
64
|
+
|
|
65
|
+
export const ConceptIcons: Story = {
|
|
66
|
+
render: () => (
|
|
67
|
+
<div className="space-y-8 p-8">
|
|
68
|
+
<div>
|
|
69
|
+
<h2 className="text-2xl font-bold mb-6">Concept Icons</h2>
|
|
70
|
+
<div className="space-y-12">
|
|
71
|
+
<div className="grid grid-cols-2 md:grid-cols-5 gap-6">
|
|
72
|
+
<div className="flex flex-col items-center gap-2">
|
|
73
|
+
<IconConceptMind active />
|
|
74
|
+
<span className="text-sm font-medium">Mind (Active)</span>
|
|
75
|
+
</div>
|
|
76
|
+
<div className="flex flex-col items-center gap-2">
|
|
77
|
+
<IconConceptCommunity active />
|
|
78
|
+
<span className="text-sm font-medium">Community (Active)</span>
|
|
79
|
+
</div>
|
|
80
|
+
<div className="flex flex-col items-center gap-2">
|
|
81
|
+
<IconConceptMovement active />
|
|
82
|
+
<span className="text-sm font-medium">Movement (Active)</span>
|
|
83
|
+
</div>
|
|
84
|
+
<div className="flex flex-col items-center gap-2">
|
|
85
|
+
<IconConceptWater active />
|
|
86
|
+
<span className="text-sm font-medium">Water (Active)</span>
|
|
87
|
+
</div>
|
|
88
|
+
<div className="flex flex-col items-center gap-2">
|
|
89
|
+
<IconConceptAir active />
|
|
90
|
+
<span className="text-sm font-medium">Air (Active)</span>
|
|
91
|
+
</div>
|
|
92
|
+
<div className="flex flex-col items-center gap-2">
|
|
93
|
+
<IconConceptLight active />
|
|
94
|
+
<span className="text-sm font-medium">Light (Active)</span>
|
|
95
|
+
</div>
|
|
96
|
+
<div className="flex flex-col items-center gap-2">
|
|
97
|
+
<IconConceptThermalComfort active />
|
|
98
|
+
<span className="text-sm font-medium">
|
|
99
|
+
Thermal Comfort (Active)
|
|
100
|
+
</span>
|
|
101
|
+
</div>
|
|
102
|
+
<div className="flex flex-col items-center gap-2">
|
|
103
|
+
<IconConceptNourishment active />
|
|
104
|
+
<span className="text-sm font-medium">Nourishment (Active)</span>
|
|
105
|
+
</div>
|
|
106
|
+
<div className="flex flex-col items-center gap-2">
|
|
107
|
+
<IconConceptSound active />
|
|
108
|
+
<span className="text-sm font-medium">Sound (Active)</span>
|
|
109
|
+
</div>
|
|
110
|
+
<div className="flex flex-col items-center gap-2">
|
|
111
|
+
<IconConceptMaterials active />
|
|
112
|
+
<span className="text-sm font-medium">Materials (Active)</span>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
<div className="grid grid-cols-2 md:grid-cols-5 gap-6">
|
|
116
|
+
<div className="flex flex-col items-center gap-2">
|
|
117
|
+
<IconConceptMind active={false} />
|
|
118
|
+
<span className="text-sm font-medium">Mind (Inactive)</span>
|
|
119
|
+
</div>
|
|
120
|
+
<div className="flex flex-col items-center gap-2">
|
|
121
|
+
<IconConceptCommunity active={false} />
|
|
122
|
+
<span className="text-sm font-medium">Community (Inactive)</span>
|
|
123
|
+
</div>
|
|
124
|
+
<div className="flex flex-col items-center gap-2">
|
|
125
|
+
<IconConceptMovement active={false} />
|
|
126
|
+
<span className="text-sm font-medium">Movement (Inactive)</span>
|
|
127
|
+
</div>
|
|
128
|
+
<div className="flex flex-col items-center gap-2">
|
|
129
|
+
<IconConceptWater active={false} />
|
|
130
|
+
<span className="text-sm font-medium">Water (Inactive)</span>
|
|
131
|
+
</div>
|
|
132
|
+
<div className="flex flex-col items-center gap-2">
|
|
133
|
+
<IconConceptAir active={false} />
|
|
134
|
+
<span className="text-sm font-medium">Air (Inactive)</span>
|
|
135
|
+
</div>
|
|
136
|
+
<div className="flex flex-col items-center gap-2">
|
|
137
|
+
<IconConceptLight active={false} />
|
|
138
|
+
<span className="text-sm font-medium">Light (Inactive)</span>
|
|
139
|
+
</div>
|
|
140
|
+
<div className="flex flex-col items-center gap-2">
|
|
141
|
+
<IconConceptThermalComfort active={false} />
|
|
142
|
+
<span className="text-sm font-medium">
|
|
143
|
+
Thermal Comfort (Inactive)
|
|
144
|
+
</span>
|
|
145
|
+
</div>
|
|
146
|
+
<div className="flex flex-col items-center gap-2">
|
|
147
|
+
<IconConceptNourishment active={false} />
|
|
148
|
+
<span className="text-sm font-medium">
|
|
149
|
+
Nourishment (Inactive)
|
|
150
|
+
</span>
|
|
151
|
+
</div>
|
|
152
|
+
<div className="flex flex-col items-center gap-2">
|
|
153
|
+
<IconConceptSound active={false} />
|
|
154
|
+
<span className="text-sm font-medium">Sound (Inactive)</span>
|
|
155
|
+
</div>
|
|
156
|
+
<div className="flex flex-col items-center gap-2">
|
|
157
|
+
<IconConceptMaterials active={false} />
|
|
158
|
+
<span className="text-sm font-medium">Materials (Inactive)</span>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
),
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export const NavigationIcons: Story = {
|
|
168
|
+
render: () => (
|
|
169
|
+
<div className="space-y-8 p-8">
|
|
170
|
+
<div>
|
|
171
|
+
<h2 className="text-2xl font-bold mb-6">Navigation Icons</h2>
|
|
172
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
173
|
+
<div className="flex flex-col items-start gap-4">
|
|
174
|
+
<div className="flex items-center gap-3">
|
|
175
|
+
<NavLogo />
|
|
176
|
+
<span className="text-sm font-medium">NavLogo</span>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
<div className="flex flex-col items-start gap-4">
|
|
180
|
+
<div className="flex items-center gap-3">
|
|
181
|
+
<NavAccount />
|
|
182
|
+
<span className="text-sm font-medium">NavAccount</span>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
<div className="flex flex-col items-start gap-4">
|
|
186
|
+
<div className="flex items-center gap-3">
|
|
187
|
+
<NavBullet color="#F3E7D8" />
|
|
188
|
+
<span className="text-sm font-medium">NavBullet</span>
|
|
189
|
+
</div>
|
|
190
|
+
<div className="flex items-center gap-3">
|
|
191
|
+
<NavBullet color="#0F748A" />
|
|
192
|
+
<span className="text-sm font-medium">NavBullet (Cyan)</span>
|
|
193
|
+
</div>
|
|
194
|
+
<div className="flex items-center gap-3">
|
|
195
|
+
<NavBullet color="#17AA8D" />
|
|
196
|
+
<span className="text-sm font-medium">NavBullet (Green)</span>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
),
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
export const UtilityIcons: Story = {
|
|
206
|
+
render: () => (
|
|
207
|
+
<div className="space-y-8 p-8">
|
|
208
|
+
<div>
|
|
209
|
+
<h2 className="text-2xl font-bold mb-6">Utility Icons</h2>
|
|
210
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
|
|
211
|
+
<div className="flex flex-col items-center gap-2">
|
|
212
|
+
<UtilityAccordion />
|
|
213
|
+
<span className="text-sm font-medium">Accordion</span>
|
|
214
|
+
</div>
|
|
215
|
+
<div className="flex flex-col items-center gap-2">
|
|
216
|
+
<UtilityChevronDown />
|
|
217
|
+
<span className="text-sm font-medium">ChevronDown</span>
|
|
218
|
+
</div>
|
|
219
|
+
<div className="flex flex-col items-center gap-2">
|
|
220
|
+
<UtilityClassification />
|
|
221
|
+
<span className="text-sm font-medium">Classification</span>
|
|
222
|
+
</div>
|
|
223
|
+
<div className="flex flex-col items-center gap-2">
|
|
224
|
+
<UtilityClose />
|
|
225
|
+
<span className="text-sm font-medium">Close</span>
|
|
226
|
+
</div>
|
|
227
|
+
<div className="flex flex-col items-center gap-2">
|
|
228
|
+
<UtilityDrag />
|
|
229
|
+
<span className="text-sm font-medium">Drag</span>
|
|
230
|
+
</div>
|
|
231
|
+
<div className="flex flex-col items-center gap-2">
|
|
232
|
+
<UtilityEdit />
|
|
233
|
+
<span className="text-sm font-medium">Edit</span>
|
|
234
|
+
</div>
|
|
235
|
+
<div className="flex flex-col items-center gap-2">
|
|
236
|
+
<UtilityOptions />
|
|
237
|
+
<span className="text-sm font-medium">Options</span>
|
|
238
|
+
</div>
|
|
239
|
+
<div className="flex flex-col items-center gap-2">
|
|
240
|
+
<UtilityPortfolio />
|
|
241
|
+
<span className="text-sm font-medium">Portfolio</span>
|
|
242
|
+
</div>
|
|
243
|
+
<div className="flex flex-col items-center gap-2">
|
|
244
|
+
<UtilityReset />
|
|
245
|
+
<span className="text-sm font-medium">Reset</span>
|
|
246
|
+
</div>
|
|
247
|
+
<div className="flex flex-col items-center gap-2">
|
|
248
|
+
<UtilityScoring />
|
|
249
|
+
<span className="text-sm font-medium">Scoring</span>
|
|
250
|
+
</div>
|
|
251
|
+
<div className="flex flex-col items-center gap-2">
|
|
252
|
+
<UtilitySearch />
|
|
253
|
+
<span className="text-sm font-medium">Search</span>
|
|
254
|
+
</div>
|
|
255
|
+
<div className="flex flex-col items-center gap-2">
|
|
256
|
+
<UtilitySort />
|
|
257
|
+
<span className="text-sm font-medium">Sort</span>
|
|
258
|
+
</div>
|
|
259
|
+
<div className="flex flex-col items-center gap-2">
|
|
260
|
+
<UtilityText />
|
|
261
|
+
<span className="text-sm font-medium">Text</span>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
),
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
export const MarkIcons: Story = {
|
|
270
|
+
render: () => (
|
|
271
|
+
<div className="space-y-8 p-8 bg-cyan-50">
|
|
272
|
+
<div>
|
|
273
|
+
<h2 className="text-2xl font-bold mb-6">Mark Icons</h2>
|
|
274
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
275
|
+
<div className="flex flex-col items-center gap-4">
|
|
276
|
+
<SealWell />
|
|
277
|
+
<SealIwbiMember />
|
|
278
|
+
<SealWellCertification />
|
|
279
|
+
<SealWellCommunity />
|
|
280
|
+
<SealWellResidence />
|
|
281
|
+
<SealWorksWithWell />
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
),
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
export const ProviderBadges: Story = {
|
|
290
|
+
render: () => (
|
|
291
|
+
<div className="space-y-8 p-8 bg-cyan-50">
|
|
292
|
+
<BadgeProductProvider />
|
|
293
|
+
<BadgeEnterpriseProvider />
|
|
294
|
+
<BadgePerformanceTestingProvider />
|
|
295
|
+
<BadgeSurveyProvider />
|
|
296
|
+
</div>
|
|
297
|
+
),
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
export const WatermarkIcons: Story = {
|
|
301
|
+
render: () => (
|
|
302
|
+
<div className="space-y-8 p-8 bg-cyan-50">
|
|
303
|
+
<p>Member Org</p>
|
|
304
|
+
<WatermarkMemberOrg />
|
|
305
|
+
<p>WWW Products</p>
|
|
306
|
+
<WaterMarkWWWProducts />
|
|
307
|
+
<p>Well Projects</p>
|
|
308
|
+
<WaterMarkWellProjects />
|
|
309
|
+
</div>
|
|
310
|
+
),
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
export const ProviderSeals: Story = {
|
|
314
|
+
render: () => (
|
|
315
|
+
<div className="space-y-8 p-8 bg-cyan-50">
|
|
316
|
+
<p>Providers</p>
|
|
317
|
+
<SealProviders />
|
|
318
|
+
<p>Product Provider</p>
|
|
319
|
+
<SealProductProvider />
|
|
320
|
+
<p>Enterprise Provider</p>
|
|
321
|
+
<SealEnterpriseProvider />
|
|
322
|
+
<p>Performance Testing Provider</p>
|
|
323
|
+
<SealPerformanceTestingProvider />
|
|
324
|
+
<p>Survey Provider</p>
|
|
325
|
+
<SealSurveyProvider />
|
|
326
|
+
</div>
|
|
327
|
+
),
|
|
328
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { Input } from "../../components/ui/input";
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: "UI/Input",
|
|
6
|
+
component: Input,
|
|
7
|
+
tags: ["autodocs"],
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "centered",
|
|
10
|
+
},
|
|
11
|
+
} satisfies Meta<typeof Input>;
|
|
12
|
+
|
|
13
|
+
export default meta;
|
|
14
|
+
|
|
15
|
+
type Story = StoryObj<typeof meta>;
|
|
16
|
+
|
|
17
|
+
export const Default: Story = {
|
|
18
|
+
args: {
|
|
19
|
+
placeholder: "Enter text...",
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const WithType: Story = {
|
|
24
|
+
render: () => (
|
|
25
|
+
<div className="space-y-4 w-full max-w-md">
|
|
26
|
+
<div>
|
|
27
|
+
<label className="text-sm font-medium mb-2 block">Text</label>
|
|
28
|
+
<Input type="text" placeholder="Enter text..." />
|
|
29
|
+
</div>
|
|
30
|
+
<div>
|
|
31
|
+
<label className="text-sm font-medium mb-2 block">Email</label>
|
|
32
|
+
<Input type="email" placeholder="Enter email..." />
|
|
33
|
+
</div>
|
|
34
|
+
<div>
|
|
35
|
+
<label className="text-sm font-medium mb-2 block">Password</label>
|
|
36
|
+
<Input type="password" placeholder="Enter password..." />
|
|
37
|
+
</div>
|
|
38
|
+
<div>
|
|
39
|
+
<label className="text-sm font-medium mb-2 block">Number</label>
|
|
40
|
+
<Input type="number" placeholder="Enter number..." />
|
|
41
|
+
</div>
|
|
42
|
+
<div>
|
|
43
|
+
<label className="text-sm font-medium mb-2 block">Date</label>
|
|
44
|
+
<Input type="date" />
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
),
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const Disabled: Story = {
|
|
51
|
+
args: {
|
|
52
|
+
placeholder: "Disabled input",
|
|
53
|
+
disabled: true,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const ReadOnly: Story = {
|
|
58
|
+
args: {
|
|
59
|
+
placeholder: "Read-only input",
|
|
60
|
+
value: "This is read-only",
|
|
61
|
+
readOnly: true,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const WithFile: Story = {
|
|
66
|
+
args: {
|
|
67
|
+
type: "file",
|
|
68
|
+
},
|
|
69
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import {
|
|
3
|
+
InputOTP,
|
|
4
|
+
InputOTPGroup,
|
|
5
|
+
InputOTPSlot,
|
|
6
|
+
InputOTPSeparator,
|
|
7
|
+
} from "../../components/ui/input-otp";
|
|
8
|
+
import { useState } from "react";
|
|
9
|
+
|
|
10
|
+
const meta = {
|
|
11
|
+
title: "UI/InputOTP",
|
|
12
|
+
component: InputOTP,
|
|
13
|
+
tags: ["autodocs"],
|
|
14
|
+
parameters: {
|
|
15
|
+
layout: "centered",
|
|
16
|
+
},
|
|
17
|
+
} satisfies Meta<typeof InputOTP>;
|
|
18
|
+
|
|
19
|
+
export default meta;
|
|
20
|
+
|
|
21
|
+
type Story = StoryObj<typeof meta>;
|
|
22
|
+
|
|
23
|
+
export const Default: Story = {
|
|
24
|
+
render: () => {
|
|
25
|
+
const [value, setValue] = useState("");
|
|
26
|
+
return (
|
|
27
|
+
<div className="space-y-2">
|
|
28
|
+
<label className="text-sm font-medium">Enter OTP</label>
|
|
29
|
+
<InputOTP maxLength={6} value={value} onChange={setValue}>
|
|
30
|
+
<InputOTPGroup>
|
|
31
|
+
<InputOTPSlot index={0} />
|
|
32
|
+
<InputOTPSlot index={1} />
|
|
33
|
+
<InputOTPSlot index={2} />
|
|
34
|
+
<InputOTPSlot index={3} />
|
|
35
|
+
<InputOTPSlot index={4} />
|
|
36
|
+
<InputOTPSlot index={5} />
|
|
37
|
+
</InputOTPGroup>
|
|
38
|
+
</InputOTP>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const WithSeparator: Story = {
|
|
45
|
+
render: () => {
|
|
46
|
+
const [value, setValue] = useState("");
|
|
47
|
+
return (
|
|
48
|
+
<div className="space-y-2">
|
|
49
|
+
<label className="text-sm font-medium">Enter Code</label>
|
|
50
|
+
<InputOTP maxLength={6} value={value} onChange={setValue}>
|
|
51
|
+
<InputOTPGroup>
|
|
52
|
+
<InputOTPSlot index={0} />
|
|
53
|
+
<InputOTPSlot index={1} />
|
|
54
|
+
<InputOTPSlot index={2} />
|
|
55
|
+
</InputOTPGroup>
|
|
56
|
+
<InputOTPSeparator />
|
|
57
|
+
<InputOTPGroup>
|
|
58
|
+
<InputOTPSlot index={3} />
|
|
59
|
+
<InputOTPSlot index={4} />
|
|
60
|
+
<InputOTPSlot index={5} />
|
|
61
|
+
</InputOTPGroup>
|
|
62
|
+
</InputOTP>
|
|
63
|
+
</div>
|
|
64
|
+
);
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const FourDigits: Story = {
|
|
69
|
+
render: () => {
|
|
70
|
+
const [value, setValue] = useState("");
|
|
71
|
+
return (
|
|
72
|
+
<div className="space-y-2">
|
|
73
|
+
<label className="text-sm font-medium">PIN Code</label>
|
|
74
|
+
<InputOTP maxLength={4} value={value} onChange={setValue}>
|
|
75
|
+
<InputOTPGroup>
|
|
76
|
+
<InputOTPSlot index={0} />
|
|
77
|
+
<InputOTPSlot index={1} />
|
|
78
|
+
<InputOTPSlot index={2} />
|
|
79
|
+
<InputOTPSlot index={3} />
|
|
80
|
+
</InputOTPGroup>
|
|
81
|
+
</InputOTP>
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import { Label } from "../components/ui/Label";
|
|
3
|
+
import { Input } from "../components/ui/input";
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: "Review/Label",
|
|
7
|
+
component: Label,
|
|
8
|
+
tags: ["autodocs"],
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: "centered",
|
|
11
|
+
},
|
|
12
|
+
} satisfies Meta<typeof Label>;
|
|
13
|
+
|
|
14
|
+
export default meta;
|
|
15
|
+
|
|
16
|
+
type Story = StoryObj<typeof meta>;
|
|
17
|
+
|
|
18
|
+
export const Default: Story = {
|
|
19
|
+
args: {
|
|
20
|
+
children: "Label",
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const WithInput: Story = {
|
|
25
|
+
render: () => (
|
|
26
|
+
<div className="space-y-2 w-full max-w-md">
|
|
27
|
+
<Label htmlFor="email">Email</Label>
|
|
28
|
+
<Input id="email" type="email" placeholder="Enter your email" />
|
|
29
|
+
</div>
|
|
30
|
+
),
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const Multiple: Story = {
|
|
34
|
+
render: () => (
|
|
35
|
+
<div className="space-y-6 w-full max-w-md">
|
|
36
|
+
<div className="space-y-2">
|
|
37
|
+
<Label htmlFor="name">Name</Label>
|
|
38
|
+
<Input id="name" placeholder="Enter your name" />
|
|
39
|
+
</div>
|
|
40
|
+
<div className="space-y-2">
|
|
41
|
+
<Label htmlFor="email">Email</Label>
|
|
42
|
+
<Input id="email" type="email" placeholder="Enter your email" />
|
|
43
|
+
</div>
|
|
44
|
+
<div className="space-y-2">
|
|
45
|
+
<Label htmlFor="message">Message</Label>
|
|
46
|
+
<textarea
|
|
47
|
+
id="message"
|
|
48
|
+
className="flex h-20 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
|
|
49
|
+
placeholder="Enter your message"
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
),
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const Required: Story = {
|
|
57
|
+
render: () => (
|
|
58
|
+
<div className="space-y-2 w-full max-w-md">
|
|
59
|
+
<Label htmlFor="required">
|
|
60
|
+
Field Name
|
|
61
|
+
<span className="text-red-500 ml-1">*</span>
|
|
62
|
+
</Label>
|
|
63
|
+
<Input id="required" placeholder="This field is required" />
|
|
64
|
+
</div>
|
|
65
|
+
),
|
|
66
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
+
import {
|
|
3
|
+
Menubar,
|
|
4
|
+
MenubarContent,
|
|
5
|
+
MenubarItem,
|
|
6
|
+
MenubarMenu,
|
|
7
|
+
MenubarSeparator,
|
|
8
|
+
MenubarTrigger,
|
|
9
|
+
MenubarCheckboxItem,
|
|
10
|
+
MenubarRadioGroup,
|
|
11
|
+
MenubarRadioItem,
|
|
12
|
+
} from "../../components/ui/menubar";
|
|
13
|
+
import { useState } from "react";
|
|
14
|
+
|
|
15
|
+
const meta = {
|
|
16
|
+
title: "UI/Menubar",
|
|
17
|
+
component: Menubar,
|
|
18
|
+
tags: ["autodocs"],
|
|
19
|
+
parameters: {
|
|
20
|
+
layout: "padded",
|
|
21
|
+
},
|
|
22
|
+
} satisfies Meta<typeof Menubar>;
|
|
23
|
+
|
|
24
|
+
export default meta;
|
|
25
|
+
|
|
26
|
+
type Story = StoryObj<typeof meta>;
|
|
27
|
+
|
|
28
|
+
export const Default: Story = {
|
|
29
|
+
render: () => (
|
|
30
|
+
<Menubar>
|
|
31
|
+
<MenubarMenu>
|
|
32
|
+
<MenubarTrigger>File</MenubarTrigger>
|
|
33
|
+
<MenubarContent>
|
|
34
|
+
<MenubarItem>New</MenubarItem>
|
|
35
|
+
<MenubarItem>Open</MenubarItem>
|
|
36
|
+
<MenubarSeparator />
|
|
37
|
+
<MenubarItem>Save</MenubarItem>
|
|
38
|
+
<MenubarItem>Exit</MenubarItem>
|
|
39
|
+
</MenubarContent>
|
|
40
|
+
</MenubarMenu>
|
|
41
|
+
<MenubarMenu>
|
|
42
|
+
<MenubarTrigger>Edit</MenubarTrigger>
|
|
43
|
+
<MenubarContent>
|
|
44
|
+
<MenubarItem>Undo</MenubarItem>
|
|
45
|
+
<MenubarItem>Redo</MenubarItem>
|
|
46
|
+
<MenubarSeparator />
|
|
47
|
+
<MenubarItem>Cut</MenubarItem>
|
|
48
|
+
<MenubarItem>Copy</MenubarItem>
|
|
49
|
+
<MenubarItem>Paste</MenubarItem>
|
|
50
|
+
</MenubarContent>
|
|
51
|
+
</MenubarMenu>
|
|
52
|
+
<MenubarMenu>
|
|
53
|
+
<MenubarTrigger>View</MenubarTrigger>
|
|
54
|
+
<MenubarContent>
|
|
55
|
+
<MenubarCheckboxItem>Show Sidebar</MenubarCheckboxItem>
|
|
56
|
+
<MenubarCheckboxItem>Show Statusbar</MenubarCheckboxItem>
|
|
57
|
+
</MenubarContent>
|
|
58
|
+
</MenubarMenu>
|
|
59
|
+
</Menubar>
|
|
60
|
+
),
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const WithRadio: Story = {
|
|
64
|
+
render: () => {
|
|
65
|
+
const [theme, setTheme] = useState("light");
|
|
66
|
+
return (
|
|
67
|
+
<Menubar>
|
|
68
|
+
<MenubarMenu>
|
|
69
|
+
<MenubarTrigger>View</MenubarTrigger>
|
|
70
|
+
<MenubarContent>
|
|
71
|
+
<MenubarRadioGroup value={theme} onValueChange={setTheme}>
|
|
72
|
+
<MenubarRadioItem value="light">Light</MenubarRadioItem>
|
|
73
|
+
<MenubarRadioItem value="dark">Dark</MenubarRadioItem>
|
|
74
|
+
<MenubarRadioItem value="auto">Auto</MenubarRadioItem>
|
|
75
|
+
</MenubarRadioGroup>
|
|
76
|
+
</MenubarContent>
|
|
77
|
+
</MenubarMenu>
|
|
78
|
+
<MenubarMenu>
|
|
79
|
+
<MenubarTrigger>Help</MenubarTrigger>
|
|
80
|
+
<MenubarContent>
|
|
81
|
+
<MenubarItem>Documentation</MenubarItem>
|
|
82
|
+
<MenubarItem>Report Issue</MenubarItem>
|
|
83
|
+
</MenubarContent>
|
|
84
|
+
</MenubarMenu>
|
|
85
|
+
</Menubar>
|
|
86
|
+
);
|
|
87
|
+
},
|
|
88
|
+
};
|