@zap-wunschlachen/wl-shared-components 1.0.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 (254) hide show
  1. package/.github/workflows/playwright.yml +215 -0
  2. package/.github/workflows/static.yml +62 -0
  3. package/.prettierrc +5 -0
  4. package/.storybook/main.ts +18 -0
  5. package/.storybook/preview.ts +37 -0
  6. package/.storybook/storyWrapper.vue +18 -0
  7. package/.storybook/withVuetifyTheme.decorator.ts +21 -0
  8. package/App.vue +95 -0
  9. package/README.md +56 -0
  10. package/heroicons.ts +75 -0
  11. package/index.html +19 -0
  12. package/package.json +66 -0
  13. package/playwright.config.ts +35 -0
  14. package/public/audio/dummy_pink_noise.wav +0 -0
  15. package/public/background.svg +60 -0
  16. package/public/javascript.svg +1 -0
  17. package/public/style.css +187 -0
  18. package/public/technologies.svg +22 -0
  19. package/src/assets/css/base.css +235 -0
  20. package/src/assets/css/variables.css +96 -0
  21. package/src/assets/fonts/Outfit-Black.ttf +0 -0
  22. package/src/assets/fonts/Outfit-Bold.ttf +0 -0
  23. package/src/assets/fonts/Outfit-ExtraBold.ttf +0 -0
  24. package/src/assets/fonts/Outfit-ExtraLight.ttf +0 -0
  25. package/src/assets/fonts/Outfit-Light.ttf +0 -0
  26. package/src/assets/fonts/Outfit-Medium.ttf +0 -0
  27. package/src/assets/fonts/Outfit-Regular.ttf +0 -0
  28. package/src/assets/fonts/Outfit-SemiBold.ttf +0 -0
  29. package/src/assets/fonts/Outfit-Thin.ttf +0 -0
  30. package/src/components/Accordion/Accordion.css +59 -0
  31. package/src/components/Accordion/AccordionGroup.vue +51 -0
  32. package/src/components/Accordion/AccordionItem.vue +66 -0
  33. package/src/components/Appointment/Card/Actions.css +30 -0
  34. package/src/components/Appointment/Card/Actions.vue +66 -0
  35. package/src/components/Appointment/Card/Card.css +49 -0
  36. package/src/components/Appointment/Card/Card.vue +55 -0
  37. package/src/components/Appointment/Card/Details.css +51 -0
  38. package/src/components/Appointment/Card/Details.vue +44 -0
  39. package/src/components/Audio/Audio.vue +188 -0
  40. package/src/components/Audio/Waveform.vue +118 -0
  41. package/src/components/Button/Button.vue +119 -0
  42. package/src/components/CheckBox/CheckBox.css +185 -0
  43. package/src/components/CheckBox/Checkbox.vue +130 -0
  44. package/src/components/DateInput/DateInput.css +3 -0
  45. package/src/components/DateInput/DateInput.vue +263 -0
  46. package/src/components/Dialog/Dialog.css +6 -0
  47. package/src/components/Dialog/Dialog.vue +29 -0
  48. package/src/components/EditField/EditField.css +20 -0
  49. package/src/components/EditField/EditField.vue +202 -0
  50. package/src/components/IconBullet/IconBullet.vue +86 -0
  51. package/src/components/IconBullet/IconBulletList.vue +41 -0
  52. package/src/components/Icons/Audio/CloudFailed.vue +21 -0
  53. package/src/components/Icons/Audio/CloudSaved.vue +22 -0
  54. package/src/components/Icons/Audio/Delete.vue +16 -0
  55. package/src/components/Icons/Audio/Pause.vue +19 -0
  56. package/src/components/Icons/Audio/Play.vue +16 -0
  57. package/src/components/Icons/CalendarNotification.vue +126 -0
  58. package/src/components/Icons/Chair.vue +32 -0
  59. package/src/components/Icons/ChairNotification.vue +35 -0
  60. package/src/components/Icons/Circle.vue +66 -0
  61. package/src/components/Icons/FavIcon.vue +22 -0
  62. package/src/components/Icons/FilledCircle.vue +11 -0
  63. package/src/components/Icons/Group3.vue +46 -0
  64. package/src/components/Icons/RingNotification.vue +54 -0
  65. package/src/components/Icons/SolidArrowRight.vue +14 -0
  66. package/src/components/Icons/calendar.vue +17 -0
  67. package/src/components/Icons/checkbox.vue +19 -0
  68. package/src/components/Icons/outlineChecked.vue +27 -0
  69. package/src/components/Icons/play.vue +6 -0
  70. package/src/components/Input/Input.css +187 -0
  71. package/src/components/Input/Input.vue +247 -0
  72. package/src/components/Laboratory/AppointmentCard/AppointmentCard.css +7 -0
  73. package/src/components/Laboratory/AppointmentCard/AppointmentCard.vue +116 -0
  74. package/src/components/Laboratory/ChatBoxImage/ChatBoxImage.vue +81 -0
  75. package/src/components/Laboratory/ChatMessage/ChatMessage.vue +113 -0
  76. package/src/components/Laboratory/ChatMessage/ChatMessageBadge.css +4 -0
  77. package/src/components/Laboratory/ChatMessage/ChatMessageBadge.vue +99 -0
  78. package/src/components/Laboratory/ChatNotification/ChatNotification.vue +130 -0
  79. package/src/components/Laboratory/DocumentCard/DocumentCard.css +3 -0
  80. package/src/components/Laboratory/DocumentCard/DocumentCard.vue +50 -0
  81. package/src/components/Laboratory/DocumentCard/DocumentCardItem.vue +53 -0
  82. package/src/components/Laboratory/InfoCard/InfoCard.vue +162 -0
  83. package/src/components/Laboratory/MainColumnsBar/MainColumnsBar.vue +102 -0
  84. package/src/components/Laboratory/ProgressCircle/ProgressCircle.vue +152 -0
  85. package/src/components/Laboratory/ProgressLinear/ProgressLinear.css +33 -0
  86. package/src/components/Laboratory/ProgressLinear/ProgressLinear.vue +75 -0
  87. package/src/components/Laboratory/SelectionColumnBar/SelectionColumnBar.vue +92 -0
  88. package/src/components/Laboratory/StatusNotification/StatusNotification.vue +49 -0
  89. package/src/components/Laboratory/TagLabel/TagLabel.vue +126 -0
  90. package/src/components/Laboratory/TagLabelGroup/TagLabelGroup.vue +97 -0
  91. package/src/components/Laboratory/TicketCard/TicketCard.css +3 -0
  92. package/src/components/Laboratory/TicketCard/TicketCard.vue +143 -0
  93. package/src/components/Laboratory/TimeLine/TimeLineEvent.css +18 -0
  94. package/src/components/Laboratory/TimeLine/TimeLineEvent.vue +119 -0
  95. package/src/components/Laboratory/TimeLine/Timeline.css +4 -0
  96. package/src/components/Laboratory/TimeLine/Timeline.vue +30 -0
  97. package/src/components/Modal/Modal.css +6 -0
  98. package/src/components/Modal/Modal.vue +23 -0
  99. package/src/components/NotificationBubble/NotificationBubble.css +4 -0
  100. package/src/components/NotificationBubble/NotificationBubble.vue +90 -0
  101. package/src/components/OtpInput/OtpInput.css +39 -0
  102. package/src/components/OtpInput/OtpInput.vue +144 -0
  103. package/src/components/PhoneInput/PhoneInput.css +32 -0
  104. package/src/components/PhoneInput/PhoneInput.vue +114 -0
  105. package/src/components/Select/Select.css +150 -0
  106. package/src/components/Select/Select.vue +304 -0
  107. package/src/components/TextArea/TextArea.css +3 -0
  108. package/src/components/TextArea/TextArea.vue +126 -0
  109. package/src/components/TickBox/TickBox.css +49 -0
  110. package/src/components/TickBox/TickBox.vue +126 -0
  111. package/src/components/index.ts +20 -0
  112. package/src/constants/buttonEnums.ts +0 -0
  113. package/src/constants/iconEnums.ts +4 -0
  114. package/src/i18n/i18n.ts +16 -0
  115. package/src/i18n/locales/de.json +19 -0
  116. package/src/i18n/locales/en.json +19 -0
  117. package/src/index.ts +31 -0
  118. package/src/main.ts +11 -0
  119. package/src/plugins/vuetify.ts +131 -0
  120. package/src/shims-vue.d.ts +10 -0
  121. package/src/stories/Accordion.stories.ts +650 -0
  122. package/src/stories/Audio.stories.ts +29 -0
  123. package/src/stories/Button.stories.ts +263 -0
  124. package/src/stories/CheckBox.stories.ts +348 -0
  125. package/src/stories/DateInput.stories.ts +54 -0
  126. package/src/stories/Dialog.stories.ts +147 -0
  127. package/src/stories/EditField.stories.ts +79 -0
  128. package/src/stories/IconBullet/IconBullet.stories.ts +201 -0
  129. package/src/stories/IconBullet/IconBulletList.stories.ts +275 -0
  130. package/src/stories/Input.stories.ts +351 -0
  131. package/src/stories/Laboratory/Cards/AppointmentCard/AppointmentCard.stories.ts +260 -0
  132. package/src/stories/Laboratory/Cards/DocumentCard/DocumentCard.stories.ts +176 -0
  133. package/src/stories/Laboratory/Cards/DocumentCard/DocumentCardItem.stories.ts +119 -0
  134. package/src/stories/Laboratory/Cards/InfoCard/InfoCard.stories.ts +320 -0
  135. package/src/stories/Laboratory/Cards/TicketCard/TicketCard.stories.ts +335 -0
  136. package/src/stories/Laboratory/Chat/ChatBoxImage.stories.ts +82 -0
  137. package/src/stories/Laboratory/Chat/ChatMessage.stories.ts +198 -0
  138. package/src/stories/Laboratory/Chat/ChatMessageBadge.stories.ts +204 -0
  139. package/src/stories/Laboratory/Chat/ChatNotification.stories.ts +144 -0
  140. package/src/stories/Laboratory/Chat/ProgressLinear.stories.ts +186 -0
  141. package/src/stories/Laboratory/Chat/StatusNotification.stories.ts +111 -0
  142. package/src/stories/Laboratory/MainColumnsBar.stories.ts +48 -0
  143. package/src/stories/Laboratory/ProgressCircle.stories.ts +261 -0
  144. package/src/stories/Laboratory/SelectionColumnBar.stories.ts +234 -0
  145. package/src/stories/Laboratory/TagLabel.stories.ts +418 -0
  146. package/src/stories/Laboratory/TagLabelGroup.stories.ts +234 -0
  147. package/src/stories/Laboratory/Timeline.stories.ts +403 -0
  148. package/src/stories/NotificationBubble.stories.ts +194 -0
  149. package/src/stories/OtpInput.stories.ts +101 -0
  150. package/src/stories/PhoneInput.stories.ts +53 -0
  151. package/src/stories/Select.stories.ts +419 -0
  152. package/src/stories/TextArea.stories.ts +112 -0
  153. package/src/stories/TickBox.stories.ts +294 -0
  154. package/src/stories/assets/accessibility.png +0 -0
  155. package/src/stories/assets/accessibility.svg +1 -0
  156. package/src/stories/assets/addon-library.png +0 -0
  157. package/src/stories/assets/assets.png +0 -0
  158. package/src/stories/assets/avif-test-image.avif +0 -0
  159. package/src/stories/assets/context.png +0 -0
  160. package/src/stories/assets/discord.svg +1 -0
  161. package/src/stories/assets/docs.png +0 -0
  162. package/src/stories/assets/figma-plugin.png +0 -0
  163. package/src/stories/assets/github.svg +1 -0
  164. package/src/stories/assets/share.png +0 -0
  165. package/src/stories/assets/styling.png +0 -0
  166. package/src/stories/assets/testing.png +0 -0
  167. package/src/stories/assets/theming.png +0 -0
  168. package/src/stories/assets/tutorials.svg +1 -0
  169. package/src/stories/assets/youtube.svg +1 -0
  170. package/src/stories/v-icon.stories.ts +91 -0
  171. package/src/types/index.ts +21 -0
  172. package/src/vite-env.d.ts +1 -0
  173. package/tests/e2e/README.md +221 -0
  174. package/tests/e2e/accessibility.spec.ts +639 -0
  175. package/tests/e2e/accordion.spec.ts +42 -0
  176. package/tests/e2e/additional-components.spec.ts +438 -0
  177. package/tests/e2e/all-components.spec.ts +135 -0
  178. package/tests/e2e/button-fixed.spec.ts +59 -0
  179. package/tests/e2e/button.spec.ts +76 -0
  180. package/tests/e2e/checkbox.spec.ts +50 -0
  181. package/tests/e2e/date-input.spec.ts +46 -0
  182. package/tests/e2e/debug.spec.ts +52 -0
  183. package/tests/e2e/dialog.spec.ts +58 -0
  184. package/tests/e2e/input.spec.ts +55 -0
  185. package/tests/e2e/laboratory-components.spec.ts +321 -0
  186. package/tests/e2e/otp-input.spec.ts +50 -0
  187. package/tests/e2e/select.spec.ts +52 -0
  188. package/tests/e2e/storybook-utils.ts +59 -0
  189. package/tests/e2e/test-basic.spec.ts +34 -0
  190. package/tests/e2e/visual-regression.spec.ts +351 -0
  191. package/tests/unit/components/Accordion/AccordionGroup.spec.ts +343 -0
  192. package/tests/unit/components/Accordion/AccordionItem.spec.ts +384 -0
  193. package/tests/unit/components/Audio/Audio.spec.ts +404 -0
  194. package/tests/unit/components/Audio/Waveform.spec.ts +484 -0
  195. package/tests/unit/components/Core/Button.spec.ts +337 -0
  196. package/tests/unit/components/Core/Checkbox.spec.ts +545 -0
  197. package/tests/unit/components/Core/DateInput.spec.ts +691 -0
  198. package/tests/unit/components/Core/Dialog.spec.ts +486 -0
  199. package/tests/unit/components/Core/EditField.spec.ts +783 -0
  200. package/tests/unit/components/Core/Input.spec.ts +513 -0
  201. package/tests/unit/components/Core/Modal.spec.ts +519 -0
  202. package/tests/unit/components/Core/NotificationBubble.spec.ts +607 -0
  203. package/tests/unit/components/Core/OtpInput.spec.ts +709 -0
  204. package/tests/unit/components/Core/PhoneInput.spec.ts +620 -0
  205. package/tests/unit/components/Core/Select.spec.ts +713 -0
  206. package/tests/unit/components/Core/TextArea.spec.ts +566 -0
  207. package/tests/unit/components/Core/TickBox.spec.ts +780 -0
  208. package/tests/unit/components/IconBullet/IconBullet.spec.ts +357 -0
  209. package/tests/unit/components/IconBullet/IconBulletList.spec.ts +372 -0
  210. package/tests/unit/components/Icons/Audio/CloudFailed.spec.ts +109 -0
  211. package/tests/unit/components/Icons/Audio/CloudSaved.spec.ts +150 -0
  212. package/tests/unit/components/Icons/Audio/Delete.spec.ts +159 -0
  213. package/tests/unit/components/Icons/Audio/Pause.spec.ts +209 -0
  214. package/tests/unit/components/Icons/Audio/Play.spec.ts +218 -0
  215. package/tests/unit/components/Icons/CalendarNotification.spec.ts +187 -0
  216. package/tests/unit/components/Icons/Chair.spec.ts +235 -0
  217. package/tests/unit/components/Icons/ChairNotification.spec.ts +312 -0
  218. package/tests/unit/components/Icons/Circle.spec.ts +256 -0
  219. package/tests/unit/components/Icons/FavIcon.spec.ts +252 -0
  220. package/tests/unit/components/Icons/FilledCircle.spec.ts +275 -0
  221. package/tests/unit/components/Icons/Group3.spec.ts +356 -0
  222. package/tests/unit/components/Icons/RingNotification.spec.ts +394 -0
  223. package/tests/unit/components/Icons/calendar.spec.ts +287 -0
  224. package/tests/unit/components/Icons/checkbox.spec.ts +316 -0
  225. package/tests/unit/components/Icons/outlineChecked.spec.ts +435 -0
  226. package/tests/unit/components/Icons/play.spec.ts +309 -0
  227. package/tests/unit/components/Laboratory/AppointmentCard.spec.ts +168 -0
  228. package/tests/unit/components/Laboratory/ChatBoxImage.spec.ts +180 -0
  229. package/tests/unit/components/Laboratory/ChatMessage.spec.ts +264 -0
  230. package/tests/unit/components/Laboratory/ChatMessageBadge.spec.ts +283 -0
  231. package/tests/unit/components/Laboratory/ChatNotification.spec.ts +257 -0
  232. package/tests/unit/components/Laboratory/DocumentCard.spec.ts +229 -0
  233. package/tests/unit/components/Laboratory/DocumentCardItem.spec.ts +237 -0
  234. package/tests/unit/components/Laboratory/InfoCard.spec.ts +309 -0
  235. package/tests/unit/components/Laboratory/MainColumnsBar.spec.ts +252 -0
  236. package/tests/unit/components/Laboratory/ProgressCircle.spec.ts +291 -0
  237. package/tests/unit/components/Laboratory/ProgressLinear.spec.ts +276 -0
  238. package/tests/unit/components/Laboratory/SelectionColumnBar.spec.ts +289 -0
  239. package/tests/unit/components/Laboratory/StatusNotification.spec.ts +297 -0
  240. package/tests/unit/components/Laboratory/TagLabel.spec.ts +354 -0
  241. package/tests/unit/components/Laboratory/TagLabelGroup.spec.ts +378 -0
  242. package/tests/unit/components/Laboratory/TicketCard.spec.ts +352 -0
  243. package/tests/unit/components/Laboratory/TimeLineEvent.spec.ts +382 -0
  244. package/tests/unit/components/Laboratory/Timeline.spec.ts +420 -0
  245. package/tests/unit/constants/iconEnums.spec.ts +40 -0
  246. package/tests/unit/i18n/i18n.spec.ts +89 -0
  247. package/tests/unit/plugins/vuetify.spec.ts +221 -0
  248. package/tests/unit/setup.ts +190 -0
  249. package/tests/unit/src/components/index.spec.ts +193 -0
  250. package/tests/unit/src/index.spec.ts +183 -0
  251. package/tests/unit/src/main.spec.ts +152 -0
  252. package/tsconfig.json +26 -0
  253. package/vite.config.ts +29 -0
  254. package/vitest.config.ts +84 -0
@@ -0,0 +1,263 @@
1
+ import { Meta, StoryObj } from '@storybook/vue3';
2
+ import Button from '@components/Button/Button.vue';
3
+
4
+ export default {
5
+ title: 'Wl/Button',
6
+ component: Button,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ color: { control: 'color', description: 'Button color' },
10
+ prependIcon: { control: 'text', description: 'Prepend icon' },
11
+ appendIcon: { control: 'text', description: 'Append icon' },
12
+ loading: { control: 'boolean', description: 'Loading state of the button' },
13
+ density: {
14
+ control: 'select',
15
+ options: ['default', 'comfortable', 'compact'],
16
+ description: 'Density of the button',
17
+ },
18
+ variant: {
19
+ control: 'select',
20
+ options: ['flat', 'outlined', 'elevated', 'text', 'tonal'],
21
+ description: 'Button variant',
22
+ },
23
+ size: {
24
+ control: 'select',
25
+ options: ['x-small', 'small', 'default', 'large', 'x-large'],
26
+ description: 'Button size',
27
+ },
28
+ label: { control: 'text', description: 'Button label text' },
29
+ disabled: { control: 'boolean', description: 'Disables the button' },
30
+ },
31
+ args: {
32
+ color: '#172774',
33
+ prependIcon: 'heroicons:calendar',
34
+ appendIcon: 'heroicons:calendar',
35
+ loading: false,
36
+ density: 'default',
37
+ variant: 'flat',
38
+ size: 'x-large',
39
+ label: 'Button',
40
+ disabled: false,
41
+ },
42
+ parameters: {
43
+ docs: {
44
+ description: {
45
+ component: `
46
+ The \`Button\` component offers customizable button styles, sizes, icons, and loading states to enhance user interaction.
47
+
48
+ ### Props
49
+ - **\`color\`**: Sets the background color of the button.
50
+ - **\`prependIcon\`**: Icon displayed at the start of the button.
51
+ - **\`appendIcon\`**: Icon displayed at the end of the button.
52
+ - **\`loading\`**: When true, displays a loading spinner.
53
+ - **\`density\`**: Adjusts padding and margins (options: \`default\`, \`comfortable\`, \`compact\`).
54
+ - **\`variant\`**: Specifies the button style (options: \`flat\`, \`outlined\`, \`elevated\`, \`text\`, \`tonal\`).
55
+ - **\`size\`**: Sets the button size (options: \`x-small\`, \`small\`, \`default\`, \`large\`, \`x-large\`).
56
+ - **\`label\`**: Text displayed inside the button.
57
+ - **\`disabled\`**: Disables button functionality.
58
+
59
+ ### Example Usage
60
+ Examples below demonstrate various configurations of the \`Button\` component with options for icons, colors, sizes, and variants.
61
+ `,
62
+ },
63
+ },
64
+ },
65
+ } as Meta<typeof Button>;
66
+
67
+ type Story = StoryObj<typeof Button>;
68
+
69
+ export const Default: Story = {
70
+ args: { label: 'Button' },
71
+ parameters: {
72
+ docs: {
73
+ source: {
74
+ code: `
75
+ <template>
76
+ <Button label="Button" />
77
+ </template>
78
+ `,
79
+ },
80
+ },
81
+ },
82
+ };
83
+
84
+ export const WithPrependIcon: Story = {
85
+ args: {
86
+ prependIcon: '$vuetify',
87
+ label: 'With Icon',
88
+ },
89
+ parameters: {
90
+ docs: {
91
+ source: {
92
+ code: `
93
+ <template>
94
+ <Button prependIcon="$vuetify" label="With Icon" />
95
+ </template>
96
+ `,
97
+ },
98
+ },
99
+ },
100
+ };
101
+
102
+ export const LoadingState: Story = {
103
+ args: {
104
+ loading: true,
105
+ label: 'Loading...',
106
+ },
107
+ parameters: {
108
+ docs: {
109
+ source: {
110
+ code: `
111
+ <template>
112
+ <Button loading label="Loading..." />
113
+ </template>
114
+ `,
115
+ },
116
+ },
117
+ },
118
+ };
119
+
120
+ export const CustomColor: Story = {
121
+ args: {
122
+ color: '#FF5733',
123
+ label: 'Custom Color',
124
+ },
125
+ parameters: {
126
+ docs: {
127
+ source: {
128
+ code: `
129
+ <template>
130
+ <Button color="#FF5733" label="Custom Color" />
131
+ </template>
132
+ `,
133
+ },
134
+ },
135
+ },
136
+ };
137
+
138
+ export const OutlinedVariant: Story = {
139
+ args: {
140
+ variant: 'outlined',
141
+ label: 'Outlined Button',
142
+ },
143
+ parameters: {
144
+ docs: {
145
+ source: {
146
+ code: `
147
+ <template>
148
+ <Button variant="outlined" label="Outlined Button" />
149
+ </template>
150
+ `,
151
+ },
152
+ },
153
+ },
154
+ };
155
+
156
+ export const TextVariant: Story = {
157
+ args: {
158
+ variant: 'text',
159
+ label: 'Text Button',
160
+ },
161
+ parameters: {
162
+ docs: {
163
+ source: {
164
+ code: `
165
+ <template>
166
+ <Button variant="text" label="Text Button" />
167
+ </template>
168
+ `,
169
+ },
170
+ },
171
+ },
172
+ };
173
+
174
+ export const ElevatedVariant: Story = {
175
+ args: {
176
+ variant: 'elevated',
177
+ label: 'Elevated Button',
178
+ },
179
+ parameters: {
180
+ docs: {
181
+ source: {
182
+ code: `
183
+ <template>
184
+ <Button variant="elevated" label="Elevated Button" />
185
+ </template>
186
+ `,
187
+ },
188
+ },
189
+ },
190
+ };
191
+
192
+ export const TonalVariant: Story = {
193
+ args: {
194
+ variant: 'tonal',
195
+ label: 'Tonal Button',
196
+ },
197
+ parameters: {
198
+ docs: {
199
+ source: {
200
+ code: `
201
+ <template>
202
+ <Button variant="tonal" label="Tonal Button" />
203
+ </template>
204
+ `,
205
+ },
206
+ },
207
+ },
208
+ };
209
+
210
+ export const DisabledState: Story = {
211
+ args: {
212
+ disabled: true,
213
+ label: 'Disabled Button',
214
+ },
215
+ parameters: {
216
+ docs: {
217
+ source: {
218
+ code: `
219
+ <template>
220
+ <Button disabled label="Disabled Button" />
221
+ </template>
222
+ `,
223
+ },
224
+ },
225
+ },
226
+ };
227
+
228
+ export const DisabledOutlined: Story = {
229
+ args: {
230
+ disabled: true,
231
+ variant: 'outlined',
232
+ label: 'Disabled Outlined',
233
+ },
234
+ parameters: {
235
+ docs: {
236
+ source: {
237
+ code: `
238
+ <template>
239
+ <Button disabled variant="outlined" label="Disabled Outlined" />
240
+ </template>
241
+ `,
242
+ },
243
+ },
244
+ },
245
+ };
246
+
247
+ export const SmallButton: Story = {
248
+ args: {
249
+ size: 'small',
250
+ label: 'Small Button',
251
+ },
252
+ parameters: {
253
+ docs: {
254
+ source: {
255
+ code: `
256
+ <template>
257
+ <Button size="small" label="Small Button" />
258
+ </template>
259
+ `,
260
+ },
261
+ },
262
+ },
263
+ };
@@ -0,0 +1,348 @@
1
+ import { Meta, StoryObj } from '@storybook/vue3';
2
+ import Checkbox from '../components/CheckBox/Checkbox.vue';
3
+ import { ref } from 'vue';
4
+ import { action } from '@storybook/addon-actions';
5
+
6
+ const meta: Meta<typeof Checkbox> = {
7
+ title: 'Wl/Checkbox',
8
+ component: Checkbox,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ success: { control: 'boolean' },
12
+ error: { control: 'boolean' },
13
+ disabled: { control: 'boolean' },
14
+ density: {
15
+ control: 'select',
16
+ options: ['comfortable', 'default', 'compact'],
17
+ },
18
+ value: { control: 'text' },
19
+ modelValue: { control: 'boolean' },
20
+ label: { control: 'text' },
21
+ 'update:modelValue': { action: 'update:modelValue' },
22
+ 'input-error': { action: 'input-error' },
23
+ },
24
+ args: {
25
+ density: 'default',
26
+ success: false,
27
+ error: false,
28
+ disabled: false,
29
+ value: 'checkbox',
30
+ modelValue: false,
31
+ label: 'Checkbox Label',
32
+ },
33
+ parameters: {
34
+ docs: {
35
+ description: {
36
+ component: `
37
+ The \`Checkbox\` component offers customizable checkbox styles with options for success, error, and disabled states. It supports both boolean and array-based models for single and multiple checkbox selections.
38
+
39
+ ### Props
40
+ - **\`success\`**: Applies a success styling to the checkbox.
41
+ - **\`error\`**: Applies an error styling to the checkbox.
42
+ - **\`disabled\`**: Disables the checkbox input.
43
+ - **\`density\`**: Adjusts the padding around the checkbox (comfortable, default, compact).
44
+ - **\`value\`**: Used for array binding; represents a unique item in an array.
45
+ - **\`modelValue\`**: Boolean value that binds the checkbox state.
46
+ - **\`label\`**: The label text for the checkbox.
47
+
48
+ ### Example Usage
49
+ Examples below demonstrate various configurations of the \`Checkbox\` component, including single and multiple checkbox options with boolean and array model binding.
50
+ `,
51
+ },
52
+ },
53
+ },
54
+ };
55
+
56
+ export default meta;
57
+ type Story = StoryObj<typeof meta>;
58
+
59
+ const Template: Story = {
60
+ render: (args) => ({
61
+ components: { Checkbox },
62
+ setup() {
63
+ const modelValue = ref(args.modelValue);
64
+ const updateModelValue = action('update:modelValue');
65
+ const inputError = action('input-error');
66
+
67
+ return {
68
+ args,
69
+ modelValue,
70
+ updateModelValue,
71
+ inputError,
72
+ };
73
+ },
74
+ template: `
75
+ <div style="padding: 16px;">
76
+ <Checkbox
77
+ v-bind="args"
78
+ v-model="modelValue"
79
+ @update:modelValue="updateModelValue"
80
+ @input-error="inputError"
81
+ />
82
+ </div>
83
+ `,
84
+ }),
85
+ };
86
+
87
+ export const Default: Story = {
88
+ ...Template,
89
+ args: {
90
+ label: 'Default Checkbox',
91
+ },
92
+ parameters: {
93
+ docs: {
94
+ source: {
95
+ code: `
96
+ <template>
97
+ <Checkbox label="Default Checkbox" />
98
+ </template>
99
+ `,
100
+ },
101
+ },
102
+ },
103
+ };
104
+
105
+ export const SuccessState: Story = {
106
+ ...Template,
107
+ args: {
108
+ success: true,
109
+ label: 'Success Checkbox',
110
+ },
111
+ parameters: {
112
+ docs: {
113
+ source: {
114
+ code: `
115
+ <template>
116
+ <Checkbox success label="Success Checkbox" />
117
+ </template>
118
+ `,
119
+ },
120
+ },
121
+ },
122
+ };
123
+
124
+ export const ErrorState: Story = {
125
+ ...Template,
126
+ args: {
127
+ error: true,
128
+ label: 'Error Checkbox',
129
+ },
130
+ parameters: {
131
+ docs: {
132
+ source: {
133
+ code: `
134
+ <template>
135
+ <Checkbox error label="Error Checkbox" />
136
+ </template>
137
+ `,
138
+ },
139
+ },
140
+ },
141
+ };
142
+
143
+ export const Disabled: Story = {
144
+ ...Template,
145
+ args: {
146
+ disabled: true,
147
+ label: 'Disabled Checkbox',
148
+ },
149
+ parameters: {
150
+ docs: {
151
+ source: {
152
+ code: `
153
+ <template>
154
+ <Checkbox disabled label="Disabled Checkbox" />
155
+ </template>
156
+ `,
157
+ },
158
+ },
159
+ },
160
+ };
161
+
162
+ export const DensityComfortable: Story = {
163
+ ...Template,
164
+ args: {
165
+ density: 'comfortable',
166
+ label: 'Comfortable Density',
167
+ },
168
+ parameters: {
169
+ docs: {
170
+ source: {
171
+ code: `
172
+ <template>
173
+ <Checkbox density="comfortable" label="Comfortable Density" />
174
+ </template>
175
+ `,
176
+ },
177
+ },
178
+ },
179
+ };
180
+
181
+ export const DensityCompact: Story = {
182
+ ...Template,
183
+ args: {
184
+ density: 'compact',
185
+ label: 'Compact Density',
186
+ },
187
+ parameters: {
188
+ docs: {
189
+ source: {
190
+ code: `
191
+ <template>
192
+ <Checkbox density="compact" label="Compact Density" />
193
+ </template>
194
+ `,
195
+ },
196
+ },
197
+ },
198
+ };
199
+
200
+ export const MultipleCheckboxes: Story = {
201
+ render: (args) => ({
202
+ components: { Checkbox },
203
+ setup() {
204
+ const selected = ref(['John']);
205
+ const updateModelValue = action('update:modelValue');
206
+ const inputError = action('input-error');
207
+
208
+ return {
209
+ args,
210
+ selected,
211
+ updateModelValue,
212
+ inputError,
213
+ };
214
+ },
215
+ template: `
216
+ <div style="padding: 16px; display: flex; flex-direction: column; gap: 8px;">
217
+ <Checkbox
218
+ v-bind="args"
219
+ v-model="selected"
220
+ value="John"
221
+ @update:modelValue="updateModelValue"
222
+ @input-error="inputError"
223
+ label="John"
224
+ />
225
+ <Checkbox
226
+ v-bind="args"
227
+ v-model="selected"
228
+ value="Emma"
229
+ @update:modelValue="updateModelValue"
230
+ @input-error="inputError"
231
+ label="Emma"
232
+ />
233
+ <Checkbox
234
+ v-bind="args"
235
+ v-model="selected"
236
+ value="Steve"
237
+ @update:modelValue="updateModelValue"
238
+ @input-error="inputError"
239
+ label="Steve"
240
+ />
241
+ <p>Selected: {{ selected }}</p>
242
+ </div>
243
+ `,
244
+ }),
245
+ parameters: {
246
+ docs: {
247
+ source: {
248
+ code: `
249
+ <template>
250
+ <div style="display: flex; flex-direction: column; gap: 8px;">
251
+ <Checkbox v-model="selected" value="John" label="John" />
252
+ <Checkbox v-model="selected" value="Emma" label="Emma" />
253
+ <Checkbox v-model="selected" value="Steve" label="Steve" />
254
+ </div>
255
+ </template>
256
+
257
+ <script>
258
+ export default {
259
+ data() {
260
+ return {
261
+ selected: ['John'],
262
+ };
263
+ },
264
+ };
265
+ </script>
266
+ `,
267
+ },
268
+ },
269
+ },
270
+ };
271
+
272
+ export const BooleanCheckboxes: Story = {
273
+ render: (args) => ({
274
+ components: { Checkbox },
275
+ setup() {
276
+ const johnChecked = ref(false);
277
+ const emmaChecked = ref(false);
278
+ const steveChecked = ref(false);
279
+
280
+ const updateModelValue = action('update:modelValue');
281
+ const inputError = action('input-error');
282
+
283
+ return {
284
+ args,
285
+ johnChecked,
286
+ emmaChecked,
287
+ steveChecked,
288
+ updateModelValue,
289
+ inputError,
290
+ };
291
+ },
292
+ template: `
293
+ <div style="padding: 16px; display: flex; flex-direction: column; gap: 8px;">
294
+ <Checkbox
295
+ v-bind="args"
296
+ v-model="johnChecked"
297
+ @update:modelValue="updateModelValue"
298
+ @input-error="inputError"
299
+ label="John"
300
+ />
301
+ <Checkbox
302
+ v-bind="args"
303
+ v-model="emmaChecked"
304
+ @update:modelValue="updateModelValue"
305
+ @input-error="inputError"
306
+ label="Emma"
307
+ />
308
+ <Checkbox
309
+ v-bind="args"
310
+ v-model="steveChecked"
311
+ @update:modelValue="updateModelValue"
312
+ @input-error="inputError"
313
+ label="Steve"
314
+ />
315
+ <p>John Checked: {{ johnChecked }}</p>
316
+ <p>Emma Checked: {{ emmaChecked }}</p>
317
+ <p>Steve Checked: {{ steveChecked }}</p>
318
+ </div>
319
+ `,
320
+ }),
321
+ parameters: {
322
+ docs: {
323
+ source: {
324
+ code: `
325
+ <template>
326
+ <div style="display: flex; flex-direction: column; gap: 8px;">
327
+ <Checkbox v-model="johnChecked" label="John" />
328
+ <Checkbox v-model="emmaChecked" label="Emma" />
329
+ <Checkbox v-model="steveChecked" label="Steve" />
330
+ </div>
331
+ </template>
332
+
333
+ <script>
334
+ export default {
335
+ data() {
336
+ return {
337
+ johnChecked: false,
338
+ emmaChecked: false,
339
+ steveChecked: false,
340
+ };
341
+ },
342
+ };
343
+ </script>
344
+ `,
345
+ },
346
+ },
347
+ },
348
+ };
@@ -0,0 +1,54 @@
1
+ import DateInput from '@components/DateInput/DateInput.vue';
2
+ import { Meta, StoryObj } from '@storybook/vue3';
3
+
4
+ const meta: Meta<typeof DateInput> = {
5
+ title: 'WL/DateInput',
6
+ component: DateInput,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ isoDate: { control: 'text', description: 'The ISO date string' },
10
+ layout: { control: 'select', options: ['default', 'edit-field'], description: 'The layout of the input' },
11
+ minDate: { control: 'date', description: 'The minimum selectable date' },
12
+ minDateErrorMessage: { control: 'text', description: 'Error message for min date' },
13
+ maxDate: { control: 'date', description: 'The maximum selectable date' },
14
+ maxDateErrorMessage: { control: 'text', description: 'Error message for max date' },
15
+ variant: { control: 'text', description: 'The variant of the input' },
16
+ placeholder: { control: 'text', description: 'The placeholder text' },
17
+ invalidDateErrorMessage: { control: 'text', description: 'Error message for invalid date' },
18
+ },
19
+ args: {
20
+ isoDate: new Date().toISOString(),
21
+ minDate: new Date(new Date().getFullYear(), new Date().getMonth(), 1),
22
+ maxDate: new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0),
23
+ variant: 'outlined',
24
+
25
+ },
26
+ parameters: {
27
+ docs: {
28
+ description: {
29
+ component: ''
30
+ },
31
+ },
32
+ },
33
+ };
34
+
35
+ export default meta;
36
+ type Story = StoryObj<typeof meta>;
37
+
38
+ const Template: Story = {
39
+ render: (args) => ({
40
+ components: { DateInput },
41
+ setup() {
42
+ return {
43
+ args,
44
+ };
45
+ },
46
+ template: `<div style="padding: 16px;">
47
+ <DateInput
48
+ v-bind="args"
49
+ />
50
+ </div>`,
51
+ }),
52
+ };
53
+
54
+ export const Default: Story = { ...Template, args: {} };