@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,176 @@
1
+ import { Meta, StoryObj } from '@storybook/vue3';
2
+ import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
3
+ import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
4
+ import { action } from '@storybook/addon-actions';
5
+
6
+ // Meta configuration for the DocumentCard component
7
+ const meta: Meta<typeof DocumentCard> = {
8
+ title: 'WL/Laboratory/Cards/DocumentCard/DocumentCard',
9
+ component: DocumentCard,
10
+ tags: ['autodocs'],
11
+ argTypes: {
12
+ title: { control: 'text', description: 'The title displayed on the card.' },
13
+ 'download:all': {
14
+ action: 'download:all',
15
+ description:
16
+ 'Action triggered when the "Download all" button is clicked.',
17
+ },
18
+ },
19
+ args: {
20
+ title: 'Attachments',
21
+ },
22
+ parameters: {
23
+ docs: {
24
+ description: {
25
+ component: `
26
+ The \`DocumentCard\` component provides a list of downloadable documents, with each item representing a document entry.
27
+ It includes a main title and individual items with headers and subheaders, each with an option to trigger a download.
28
+
29
+ ### Props
30
+ - **\`title\`**: Sets the title displayed at the top of the card.
31
+
32
+ ### Events
33
+ - **\`download:all\`**: Emitted when the "Download all" button is clicked, allowing for bulk download actions.
34
+ - **\`click:icon\`** (in each \`DocumentCardItem\`): Emitted when the download icon on each document item is clicked, triggering an individual download.
35
+
36
+ ### Usage
37
+ Use this component to list documents with options for individual and bulk downloads.
38
+ `,
39
+ },
40
+ },
41
+ },
42
+ };
43
+
44
+ export default meta;
45
+ type Story = StoryObj<typeof meta>;
46
+
47
+ // Define a common render template
48
+ const Template: Story = {
49
+ render: (args) => ({
50
+ components: { DocumentCard, DocumentCardItem },
51
+ setup() {
52
+ function handleDownloadAll() {
53
+ console.log('All documents downloaded');
54
+ }
55
+
56
+ function handleDownload() {
57
+ console.log('Document downloaded');
58
+ }
59
+
60
+ return {
61
+ args,
62
+ handleDownloadAll,
63
+ handleDownload,
64
+ };
65
+ },
66
+ template: `
67
+ <DocumentCard v-bind="args" @download:all="handleDownloadAll">
68
+ <DocumentCardItem
69
+ header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
70
+ subheader="Uploaded 06.09.24 09:43"
71
+ @click:icon="handleDownload"
72
+ />
73
+ <DocumentCardItem
74
+ header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
75
+ subheader="Uploaded 07.09.24 10:15"
76
+ @click:icon="handleDownload"
77
+ />
78
+ <DocumentCardItem
79
+ header="08.09.2024 John Doe, Lzp. 33 Mandibular"
80
+ subheader="Uploaded 08.09.24 11:30"
81
+ @click:icon="handleDownload"
82
+ />
83
+ </DocumentCard>
84
+ `,
85
+ }),
86
+ parameters: {
87
+ docs: {
88
+ source: {
89
+ code: `
90
+ <template>
91
+ <DocumentCard v-bind="args" @download:all="handleDownloadAll">
92
+ <DocumentCardItem
93
+ header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
94
+ subheader="Uploaded 06.09.24 09:43"
95
+ @click:icon="handleDownload"
96
+ />
97
+ <DocumentCardItem
98
+ header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
99
+ subheader="Uploaded 07.09.24 10:15"
100
+ @click:icon="handleDownload"
101
+ />
102
+ <DocumentCardItem
103
+ header="08.09.2024 John Doe, Lzp. 33 Mandibular"
104
+ subheader="Uploaded 08.09.24 11:30"
105
+ @click:icon="handleDownload"
106
+ />
107
+ </DocumentCard>
108
+ </template>
109
+
110
+ <script setup>
111
+ import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
112
+ import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
113
+
114
+ function handleDownloadAll() {
115
+ console.log('All documents downloaded');
116
+ }
117
+
118
+ function handleDownload() {
119
+ console.log('Document downloaded');
120
+ }
121
+ </script>
122
+ `,
123
+ },
124
+ },
125
+ },
126
+ };
127
+
128
+ // Define different stories using the common template
129
+ export const Default: Story = { ...Template, args: {} };
130
+
131
+ export const CustomTitle: Story = {
132
+ ...Template,
133
+ args: {
134
+ title: 'Custom Attachments',
135
+ },
136
+ parameters: {
137
+ docs: {
138
+ source: {
139
+ code: `
140
+ <template>
141
+ <DocumentCard title="Custom Attachments" @download:all="handleDownloadAll">
142
+ <DocumentCardItem
143
+ header="06.09.2024 Rainer Zufall, Lzp. 45 Mandibular"
144
+ subheader="Uploaded 06.09.24 09:43"
145
+ @click:icon="handleDownload"
146
+ />
147
+ <DocumentCardItem
148
+ header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
149
+ subheader="Uploaded 07.09.24 10:15"
150
+ @click:icon="handleDownload"
151
+ />
152
+ <DocumentCardItem
153
+ header="08.09.2024 John Doe, Lzp. 33 Mandibular"
154
+ subheader="Uploaded 08.09.24 11:30"
155
+ @click:icon="handleDownload"
156
+ />
157
+ </DocumentCard>
158
+ </template>
159
+
160
+ <script setup>
161
+ import DocumentCard from '@components/Laboratory/DocumentCard/DocumentCard.vue';
162
+ import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
163
+
164
+ function handleDownloadAll() {
165
+ console.log('All documents downloaded');
166
+ }
167
+
168
+ function handleDownload() {
169
+ console.log('Document downloaded');
170
+ }
171
+ </script>
172
+ `,
173
+ },
174
+ },
175
+ },
176
+ };
@@ -0,0 +1,119 @@
1
+ import { Meta, StoryObj } from '@storybook/vue3';
2
+ import DocumentCardItem from '@components/Laboratory/DocumentCard/DocumentCardItem.vue';
3
+ import { action } from '@storybook/addon-actions';
4
+
5
+ // Meta configuration for the DocumentCardItem component
6
+ const meta: Meta<typeof DocumentCardItem> = {
7
+ title: 'WL/Laboratory/Cards/DocumentCard/DocumentCardItem',
8
+ component: DocumentCardItem,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ header: {
12
+ control: 'text',
13
+ description: 'The main header text displayed on the item.',
14
+ },
15
+ subheader: {
16
+ control: 'text',
17
+ description: 'Additional information displayed below the header.',
18
+ },
19
+ 'click:icon': {
20
+ action: 'click:icon',
21
+ description: 'Triggered when the icon is clicked.',
22
+ },
23
+ },
24
+ args: {
25
+ header: '06.09.2024 Rainer Zufall, Lzp. 45 Mandibular',
26
+ subheader: 'Uploaded 06.09.24 09:43',
27
+ },
28
+ parameters: {
29
+ docs: {
30
+ description: {
31
+ component: `
32
+ The \`DocumentCardItem\` component displays an individual document entry with a header and subheader.
33
+ It includes a hardcoded download icon that triggers a click event when pressed.
34
+
35
+ ### Props
36
+ - **\`header\`**: Main text for the document entry.
37
+ - **\`subheader\`**: Additional text displayed beneath the header.
38
+
39
+ ### Events
40
+ - **\`click:icon\`**: Emitted when the download icon is clicked, allowing for custom actions to be triggered.
41
+
42
+ ### Usage
43
+ Use this component to represent a document item in a list with a customizable header, subheader, and download icon actions.
44
+ `,
45
+ },
46
+ },
47
+ },
48
+ };
49
+
50
+ export default meta;
51
+ type Story = StoryObj<typeof meta>;
52
+
53
+ // Define a common render template
54
+ const Template: Story = {
55
+ render: (args) => ({
56
+ components: { DocumentCardItem },
57
+ setup() {
58
+ // Define the action for the click event
59
+ const iconClick = action('click:icon');
60
+
61
+ return {
62
+ args,
63
+ iconClick,
64
+ };
65
+ },
66
+ template: `
67
+ <div style="padding: 16px;">
68
+ <DocumentCardItem
69
+ v-bind="args"
70
+ @click:icon="iconClick"
71
+ />
72
+ </div>
73
+ `,
74
+ }),
75
+ parameters: {
76
+ docs: {
77
+ source: {
78
+ code: `
79
+ <template>
80
+ <div style="padding: 16px;">
81
+ <DocumentCardItem
82
+ v-bind="args"
83
+ @click:icon="iconClick"
84
+ />
85
+ </div>
86
+ </template>
87
+ `,
88
+ },
89
+ },
90
+ },
91
+ };
92
+
93
+ // Define different stories using the common template
94
+ export const Default: Story = { ...Template, args: {} };
95
+
96
+ export const CustomHeaderAndSubheader: Story = {
97
+ ...Template,
98
+ args: {
99
+ header: '07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary',
100
+ subheader: 'Uploaded 07.09.24 10:15',
101
+ },
102
+ parameters: {
103
+ docs: {
104
+ source: {
105
+ code: `
106
+ <template>
107
+ <div style="padding: 16px;">
108
+ <DocumentCardItem
109
+ header="07.09.2024 Anna Musterfrau, Lzp. 23 Maxillary"
110
+ subheader="Uploaded 07.09.24 10:15"
111
+ @click:icon="iconClick"
112
+ />
113
+ </div>
114
+ </template>
115
+ `,
116
+ },
117
+ },
118
+ },
119
+ };
@@ -0,0 +1,320 @@
1
+ import { Meta, StoryObj } from '@storybook/vue3';
2
+ import InfoCard from '@components/Laboratory/InfoCard/InfoCard.vue';
3
+ import TagLabelGroup from '@components/Laboratory/TagLabelGroup/TagLabelGroup.vue';
4
+ import ProgressCircle from '@components/Laboratory/ProgressCircle/ProgressCircle.vue';
5
+ import { action } from '@storybook/addon-actions';
6
+
7
+ // Meta configuration for the InfoCard component
8
+ const meta: Meta<typeof InfoCard> = {
9
+ title: 'WL/Laboratory/Cards/InfoCard',
10
+ component: InfoCard,
11
+ tags: ['autodocs'],
12
+ argTypes: {
13
+ dentist: { control: 'text', description: 'The dentist name to display.' },
14
+ material: {
15
+ control: 'text',
16
+ description: 'The material type, e.g., metal.',
17
+ },
18
+ color: {
19
+ control: 'text',
20
+ description: 'Color associated with the material.',
21
+ },
22
+ patientName: { control: 'text', description: 'Name of the patient.' },
23
+ patientNumber: {
24
+ control: 'text',
25
+ description: 'Unique identifier for the patient.',
26
+ },
27
+ header: { control: 'text', description: 'Main heading for the card.' },
28
+ subHeader: {
29
+ control: 'text',
30
+ description: 'Subheading for additional details.',
31
+ },
32
+ 'click:printer': {
33
+ action: 'click:printer',
34
+ description: 'Triggered when printer icon is clicked.',
35
+ },
36
+ 'click:pencil': {
37
+ action: 'click:pencil',
38
+ description: 'Triggered when pencil icon is clicked.',
39
+ },
40
+ },
41
+ args: {
42
+ dentist: 'Martin Paetz',
43
+ material: 'metal',
44
+ color: 'white',
45
+ patientName: 'Rainer Zufall',
46
+ patientNumber: '12345',
47
+ header: 'Implant Details',
48
+ subHeader: 'Full Dental Implant Procedure',
49
+ },
50
+ parameters: {
51
+ docs: {
52
+ description: {
53
+ component: `
54
+ The \`InfoCard\` component provides detailed information about a dental implant case, displaying dentist, patient, material, and status. This component includes custom slots for tags and progress indicators.
55
+
56
+ ### Props
57
+ - **\`dentist\`**: Name of the dentist handling the case.
58
+ - **\`material\`**: Type of material used.
59
+ - **\`color\`**: Color associated with the material.
60
+ - **\`patientName\`**: Name of the patient.
61
+ - **\`patientNumber\`**: Patient identifier.
62
+ - **\`header\`**: Main title for the card.
63
+ - **\`subHeader\`**: Secondary title for details.
64
+
65
+ ### Slots
66
+ - **\`tagLabel\`**: Slot to insert custom tag labels, typically using the \`TagLabelGroup\` component for displaying multiple tag icons and colors.
67
+ - **\`progress\`**: Slot for adding a progress indicator, such as the \`ProgressCircle\` component, to visually represent completion status.
68
+
69
+ ### Example Usage
70
+ Use this component to display a card with dynamic content, tracking actions on printer and pencil icons, with visual elements for tags and progress.
71
+ `,
72
+ },
73
+ },
74
+ },
75
+ };
76
+
77
+ export default meta;
78
+ type Story = StoryObj<typeof meta>;
79
+
80
+ // Common render template with action handlers for the click events
81
+ const Template: Story = {
82
+ render: (args) => ({
83
+ components: { InfoCard, TagLabelGroup, ProgressCircle },
84
+ setup() {
85
+ const handlePrinterClick = action('click:printer');
86
+ const handlePencilClick = action('click:pencil');
87
+
88
+ return { args, handlePrinterClick, handlePencilClick };
89
+ },
90
+ template: `
91
+ <div class="d-flex flex-column w-full ma-6 ga-2">
92
+ <InfoCard
93
+ v-bind="args"
94
+ @click:printer="handlePrinterClick"
95
+ @click:pencil="handlePencilClick"
96
+ >
97
+ <!-- Slot for tagLabel -->
98
+ <template #tagLabel>
99
+ <TagLabelGroup
100
+ :iconsAfter="[{
101
+ backgroundColor: '#FEFDBD',
102
+ borderColor: '#4F4700'
103
+ }, {
104
+ backgroundColor: '#CCE8FD',
105
+ borderColor: '#172774'
106
+ }, {
107
+ backgroundColor: '#D8FDE4',
108
+ borderColor: '#01D449'
109
+ }]"
110
+ />
111
+ </template>
112
+
113
+ <!-- Slot for progress -->
114
+ <template #progress>
115
+ <ProgressCircle
116
+ size="30"
117
+ :bgColors="['#01D449', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)']"
118
+ />
119
+ </template>
120
+ </InfoCard>
121
+ </div>
122
+ `,
123
+ }),
124
+ };
125
+
126
+ // Story with different TagLabelGroup icons
127
+ // Story with different TagLabelGroup icons
128
+ export const DraftDone: Story = {
129
+ ...Template,
130
+ render: (args) => ({
131
+ components: { InfoCard, TagLabelGroup, ProgressCircle },
132
+ setup() {
133
+ const handlePrinterClick = action('click:printer');
134
+ const handlePencilClick = action('click:pencil');
135
+
136
+ return { args, handlePrinterClick, handlePencilClick };
137
+ },
138
+ template: `
139
+ <div class="d-flex flex-column w-full ma-6 ga-2">
140
+ <InfoCard
141
+ v-bind="args"
142
+ @click:printer="handlePrinterClick"
143
+ @click:pencil="handlePencilClick"
144
+ >
145
+ <!-- Slot for tagLabel -->
146
+ <template #tagLabel>
147
+ <TagLabelGroup
148
+ status="Done"
149
+ :iconsBefore="[{
150
+ backgroundColor: '#E5E6EE',
151
+ borderColor: '#172774'
152
+ }]"
153
+ />
154
+ </template>
155
+
156
+ <!-- Slot for progress -->
157
+ <template #progress>
158
+ <ProgressCircle
159
+ size="50"
160
+ :bgColors="['#01D449', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)']"
161
+ :borderColors="['transparent', 'transparent', 'transparent', 'transparent', 'transparent']"
162
+ />
163
+ </template>
164
+ </InfoCard>
165
+ </div>
166
+ `,
167
+ }),
168
+ parameters: {
169
+ docs: {
170
+ source: {
171
+ code: `
172
+ <template>
173
+ <div class="d-flex flex-column w-full ma-6 ga-2">
174
+ <InfoCard
175
+ v-bind="args"
176
+ @click:printer="handlePrinterClick"
177
+ @click:pencil="handlePencilClick"
178
+ >
179
+ <!-- Slot for tagLabel -->
180
+ <template #tagLabel>
181
+ <TagLabelGroup
182
+ status="Done"
183
+ :iconsBefore="[
184
+ { backgroundColor: '#E5E6EE', borderColor: '#172774' }
185
+ ]"
186
+ />
187
+ </template>
188
+
189
+ <!-- Slot for progress -->
190
+ <template #progress>
191
+ <ProgressCircle
192
+ size="50"
193
+ :bgColors="[
194
+ '#01D449',
195
+ 'var(--Soft-Concrete-1)',
196
+ 'var(--Soft-Concrete-1)',
197
+ 'var(--Soft-Concrete-1)',
198
+ 'var(--Soft-Concrete-1)'
199
+ ]"
200
+ :borderColors="[
201
+ 'transparent', 'transparent', 'transparent', 'transparent', 'transparent'
202
+ ]"
203
+ />
204
+ </template>
205
+ </InfoCard>
206
+ </div>
207
+ </template>
208
+
209
+ <script setup>
210
+ import { action } from '@storybook/addon-actions';
211
+ import InfoCard from '@components/Laboratory/InfoCard/InfoCard.vue';
212
+ import TagLabelGroup from '@components/Laboratory/TagLabelGroup/TagLabelGroup.vue';
213
+ import ProgressCircle from '@components/Laboratory/ProgressCircle/ProgressCircle.vue';
214
+
215
+ const handlePrinterClick = action('click:printer');
216
+ const handlePencilClick = action('click:pencil');
217
+ </script>
218
+ `,
219
+ },
220
+ },
221
+ },
222
+ };
223
+
224
+ // Story with different ProgressCircle colors and size
225
+ // Story with different ProgressCircle colors and size
226
+ export const Draft: Story = {
227
+ ...Template,
228
+ render: (args) => ({
229
+ components: { InfoCard, TagLabelGroup, ProgressCircle },
230
+ setup() {
231
+ const handlePrinterClick = action('click:printer');
232
+ const handlePencilClick = action('click:pencil');
233
+
234
+ return { args, handlePrinterClick, handlePencilClick };
235
+ },
236
+ template: `
237
+ <div class="d-flex flex-column w-full ma-6 ga-2">
238
+ <InfoCard
239
+ v-bind="args"
240
+ @click:printer="handlePrinterClick"
241
+ @click:pencil="handlePencilClick"
242
+ >
243
+ <!-- Slot for tagLabel -->
244
+ <template #tagLabel>
245
+ <TagLabelGroup
246
+ status="Draft"
247
+ :iconsAfter="[{
248
+ backgroundColor: '#D8FDE4',
249
+ borderColor: '#01D449'
250
+ }]"
251
+ />
252
+ </template>
253
+
254
+ <!-- Slot for progress -->
255
+ <template #progress>
256
+ <ProgressCircle
257
+ size="50"
258
+ :bgColors="['#E5E6EE', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)', 'var(--Soft-Concrete-1)']"
259
+ :borderColors="['#172774', '#DDDDDF', '#DDDDDF', '#DDDDDF', '#DDDDDF']"
260
+ />
261
+ </template>
262
+ </InfoCard>
263
+ </div>
264
+ `,
265
+ }),
266
+ parameters: {
267
+ docs: {
268
+ source: {
269
+ code: `
270
+ <template>
271
+ <div class="d-flex flex-column w-full ma-6 ga-2">
272
+ <InfoCard
273
+ v-bind="args"
274
+ @click:printer="handlePrinterClick"
275
+ @click:pencil="handlePencilClick"
276
+ >
277
+ <!-- Slot for tagLabel -->
278
+ <template #tagLabel>
279
+ <TagLabelGroup
280
+ status="Draft"
281
+ :iconsAfter="[
282
+ { backgroundColor: '#D8FDE4', borderColor: '#01D449' }
283
+ ]"
284
+ />
285
+ </template>
286
+
287
+ <!-- Slot for progress -->
288
+ <template #progress>
289
+ <ProgressCircle
290
+ size="50"
291
+ :bgColors="[
292
+ '#E5E6EE',
293
+ 'var(--Soft-Concrete-1)',
294
+ 'var(--Soft-Concrete-1)',
295
+ 'var(--Soft-Concrete-1)',
296
+ 'var(--Soft-Concrete-1)'
297
+ ]"
298
+ :borderColors="[
299
+ '#172774', '#DDDDDF', '#DDDDDF', '#DDDDDF', '#DDDDDF'
300
+ ]"
301
+ />
302
+ </template>
303
+ </InfoCard>
304
+ </div>
305
+ </template>
306
+
307
+ <script setup>
308
+ import { action } from '@storybook/addon-actions';
309
+ import InfoCard from '@components/Laboratory/InfoCard/InfoCard.vue';
310
+ import TagLabelGroup from '@components/Laboratory/TagLabelGroup/TagLabelGroup.vue';
311
+ import ProgressCircle from '@components/Laboratory/ProgressCircle/ProgressCircle.vue';
312
+
313
+ const handlePrinterClick = action('click:printer');
314
+ const handlePencilClick = action('click:pencil');
315
+ </script>
316
+ `,
317
+ },
318
+ },
319
+ },
320
+ };