@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.
- package/.github/workflows/playwright.yml +215 -0
- package/.github/workflows/static.yml +62 -0
- package/.prettierrc +5 -0
- package/.storybook/main.ts +18 -0
- package/.storybook/preview.ts +37 -0
- package/.storybook/storyWrapper.vue +18 -0
- package/.storybook/withVuetifyTheme.decorator.ts +21 -0
- package/App.vue +95 -0
- package/README.md +56 -0
- package/heroicons.ts +75 -0
- package/index.html +19 -0
- package/package.json +66 -0
- package/playwright.config.ts +35 -0
- package/public/audio/dummy_pink_noise.wav +0 -0
- package/public/background.svg +60 -0
- package/public/javascript.svg +1 -0
- package/public/style.css +187 -0
- package/public/technologies.svg +22 -0
- package/src/assets/css/base.css +235 -0
- package/src/assets/css/variables.css +96 -0
- package/src/assets/fonts/Outfit-Black.ttf +0 -0
- package/src/assets/fonts/Outfit-Bold.ttf +0 -0
- package/src/assets/fonts/Outfit-ExtraBold.ttf +0 -0
- package/src/assets/fonts/Outfit-ExtraLight.ttf +0 -0
- package/src/assets/fonts/Outfit-Light.ttf +0 -0
- package/src/assets/fonts/Outfit-Medium.ttf +0 -0
- package/src/assets/fonts/Outfit-Regular.ttf +0 -0
- package/src/assets/fonts/Outfit-SemiBold.ttf +0 -0
- package/src/assets/fonts/Outfit-Thin.ttf +0 -0
- package/src/components/Accordion/Accordion.css +59 -0
- package/src/components/Accordion/AccordionGroup.vue +51 -0
- package/src/components/Accordion/AccordionItem.vue +66 -0
- package/src/components/Appointment/Card/Actions.css +30 -0
- package/src/components/Appointment/Card/Actions.vue +66 -0
- package/src/components/Appointment/Card/Card.css +49 -0
- package/src/components/Appointment/Card/Card.vue +55 -0
- package/src/components/Appointment/Card/Details.css +51 -0
- package/src/components/Appointment/Card/Details.vue +44 -0
- package/src/components/Audio/Audio.vue +188 -0
- package/src/components/Audio/Waveform.vue +118 -0
- package/src/components/Button/Button.vue +119 -0
- package/src/components/CheckBox/CheckBox.css +185 -0
- package/src/components/CheckBox/Checkbox.vue +130 -0
- package/src/components/DateInput/DateInput.css +3 -0
- package/src/components/DateInput/DateInput.vue +263 -0
- package/src/components/Dialog/Dialog.css +6 -0
- package/src/components/Dialog/Dialog.vue +29 -0
- package/src/components/EditField/EditField.css +20 -0
- package/src/components/EditField/EditField.vue +202 -0
- package/src/components/IconBullet/IconBullet.vue +86 -0
- package/src/components/IconBullet/IconBulletList.vue +41 -0
- package/src/components/Icons/Audio/CloudFailed.vue +21 -0
- package/src/components/Icons/Audio/CloudSaved.vue +22 -0
- package/src/components/Icons/Audio/Delete.vue +16 -0
- package/src/components/Icons/Audio/Pause.vue +19 -0
- package/src/components/Icons/Audio/Play.vue +16 -0
- package/src/components/Icons/CalendarNotification.vue +126 -0
- package/src/components/Icons/Chair.vue +32 -0
- package/src/components/Icons/ChairNotification.vue +35 -0
- package/src/components/Icons/Circle.vue +66 -0
- package/src/components/Icons/FavIcon.vue +22 -0
- package/src/components/Icons/FilledCircle.vue +11 -0
- package/src/components/Icons/Group3.vue +46 -0
- package/src/components/Icons/RingNotification.vue +54 -0
- package/src/components/Icons/SolidArrowRight.vue +14 -0
- package/src/components/Icons/calendar.vue +17 -0
- package/src/components/Icons/checkbox.vue +19 -0
- package/src/components/Icons/outlineChecked.vue +27 -0
- package/src/components/Icons/play.vue +6 -0
- package/src/components/Input/Input.css +187 -0
- package/src/components/Input/Input.vue +247 -0
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.css +7 -0
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.vue +116 -0
- package/src/components/Laboratory/ChatBoxImage/ChatBoxImage.vue +81 -0
- package/src/components/Laboratory/ChatMessage/ChatMessage.vue +113 -0
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.css +4 -0
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.vue +99 -0
- package/src/components/Laboratory/ChatNotification/ChatNotification.vue +130 -0
- package/src/components/Laboratory/DocumentCard/DocumentCard.css +3 -0
- package/src/components/Laboratory/DocumentCard/DocumentCard.vue +50 -0
- package/src/components/Laboratory/DocumentCard/DocumentCardItem.vue +53 -0
- package/src/components/Laboratory/InfoCard/InfoCard.vue +162 -0
- package/src/components/Laboratory/MainColumnsBar/MainColumnsBar.vue +102 -0
- package/src/components/Laboratory/ProgressCircle/ProgressCircle.vue +152 -0
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.css +33 -0
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.vue +75 -0
- package/src/components/Laboratory/SelectionColumnBar/SelectionColumnBar.vue +92 -0
- package/src/components/Laboratory/StatusNotification/StatusNotification.vue +49 -0
- package/src/components/Laboratory/TagLabel/TagLabel.vue +126 -0
- package/src/components/Laboratory/TagLabelGroup/TagLabelGroup.vue +97 -0
- package/src/components/Laboratory/TicketCard/TicketCard.css +3 -0
- package/src/components/Laboratory/TicketCard/TicketCard.vue +143 -0
- package/src/components/Laboratory/TimeLine/TimeLineEvent.css +18 -0
- package/src/components/Laboratory/TimeLine/TimeLineEvent.vue +119 -0
- package/src/components/Laboratory/TimeLine/Timeline.css +4 -0
- package/src/components/Laboratory/TimeLine/Timeline.vue +30 -0
- package/src/components/Modal/Modal.css +6 -0
- package/src/components/Modal/Modal.vue +23 -0
- package/src/components/NotificationBubble/NotificationBubble.css +4 -0
- package/src/components/NotificationBubble/NotificationBubble.vue +90 -0
- package/src/components/OtpInput/OtpInput.css +39 -0
- package/src/components/OtpInput/OtpInput.vue +144 -0
- package/src/components/PhoneInput/PhoneInput.css +32 -0
- package/src/components/PhoneInput/PhoneInput.vue +114 -0
- package/src/components/Select/Select.css +150 -0
- package/src/components/Select/Select.vue +304 -0
- package/src/components/TextArea/TextArea.css +3 -0
- package/src/components/TextArea/TextArea.vue +126 -0
- package/src/components/TickBox/TickBox.css +49 -0
- package/src/components/TickBox/TickBox.vue +126 -0
- package/src/components/index.ts +20 -0
- package/src/constants/buttonEnums.ts +0 -0
- package/src/constants/iconEnums.ts +4 -0
- package/src/i18n/i18n.ts +16 -0
- package/src/i18n/locales/de.json +19 -0
- package/src/i18n/locales/en.json +19 -0
- package/src/index.ts +31 -0
- package/src/main.ts +11 -0
- package/src/plugins/vuetify.ts +131 -0
- package/src/shims-vue.d.ts +10 -0
- package/src/stories/Accordion.stories.ts +650 -0
- package/src/stories/Audio.stories.ts +29 -0
- package/src/stories/Button.stories.ts +263 -0
- package/src/stories/CheckBox.stories.ts +348 -0
- package/src/stories/DateInput.stories.ts +54 -0
- package/src/stories/Dialog.stories.ts +147 -0
- package/src/stories/EditField.stories.ts +79 -0
- package/src/stories/IconBullet/IconBullet.stories.ts +201 -0
- package/src/stories/IconBullet/IconBulletList.stories.ts +275 -0
- package/src/stories/Input.stories.ts +351 -0
- package/src/stories/Laboratory/Cards/AppointmentCard/AppointmentCard.stories.ts +260 -0
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCard.stories.ts +176 -0
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCardItem.stories.ts +119 -0
- package/src/stories/Laboratory/Cards/InfoCard/InfoCard.stories.ts +320 -0
- package/src/stories/Laboratory/Cards/TicketCard/TicketCard.stories.ts +335 -0
- package/src/stories/Laboratory/Chat/ChatBoxImage.stories.ts +82 -0
- package/src/stories/Laboratory/Chat/ChatMessage.stories.ts +198 -0
- package/src/stories/Laboratory/Chat/ChatMessageBadge.stories.ts +204 -0
- package/src/stories/Laboratory/Chat/ChatNotification.stories.ts +144 -0
- package/src/stories/Laboratory/Chat/ProgressLinear.stories.ts +186 -0
- package/src/stories/Laboratory/Chat/StatusNotification.stories.ts +111 -0
- package/src/stories/Laboratory/MainColumnsBar.stories.ts +48 -0
- package/src/stories/Laboratory/ProgressCircle.stories.ts +261 -0
- package/src/stories/Laboratory/SelectionColumnBar.stories.ts +234 -0
- package/src/stories/Laboratory/TagLabel.stories.ts +418 -0
- package/src/stories/Laboratory/TagLabelGroup.stories.ts +234 -0
- package/src/stories/Laboratory/Timeline.stories.ts +403 -0
- package/src/stories/NotificationBubble.stories.ts +194 -0
- package/src/stories/OtpInput.stories.ts +101 -0
- package/src/stories/PhoneInput.stories.ts +53 -0
- package/src/stories/Select.stories.ts +419 -0
- package/src/stories/TextArea.stories.ts +112 -0
- package/src/stories/TickBox.stories.ts +294 -0
- package/src/stories/assets/accessibility.png +0 -0
- package/src/stories/assets/accessibility.svg +1 -0
- package/src/stories/assets/addon-library.png +0 -0
- package/src/stories/assets/assets.png +0 -0
- package/src/stories/assets/avif-test-image.avif +0 -0
- package/src/stories/assets/context.png +0 -0
- package/src/stories/assets/discord.svg +1 -0
- package/src/stories/assets/docs.png +0 -0
- package/src/stories/assets/figma-plugin.png +0 -0
- package/src/stories/assets/github.svg +1 -0
- package/src/stories/assets/share.png +0 -0
- package/src/stories/assets/styling.png +0 -0
- package/src/stories/assets/testing.png +0 -0
- package/src/stories/assets/theming.png +0 -0
- package/src/stories/assets/tutorials.svg +1 -0
- package/src/stories/assets/youtube.svg +1 -0
- package/src/stories/v-icon.stories.ts +91 -0
- package/src/types/index.ts +21 -0
- package/src/vite-env.d.ts +1 -0
- package/tests/e2e/README.md +221 -0
- package/tests/e2e/accessibility.spec.ts +639 -0
- package/tests/e2e/accordion.spec.ts +42 -0
- package/tests/e2e/additional-components.spec.ts +438 -0
- package/tests/e2e/all-components.spec.ts +135 -0
- package/tests/e2e/button-fixed.spec.ts +59 -0
- package/tests/e2e/button.spec.ts +76 -0
- package/tests/e2e/checkbox.spec.ts +50 -0
- package/tests/e2e/date-input.spec.ts +46 -0
- package/tests/e2e/debug.spec.ts +52 -0
- package/tests/e2e/dialog.spec.ts +58 -0
- package/tests/e2e/input.spec.ts +55 -0
- package/tests/e2e/laboratory-components.spec.ts +321 -0
- package/tests/e2e/otp-input.spec.ts +50 -0
- package/tests/e2e/select.spec.ts +52 -0
- package/tests/e2e/storybook-utils.ts +59 -0
- package/tests/e2e/test-basic.spec.ts +34 -0
- package/tests/e2e/visual-regression.spec.ts +351 -0
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts +343 -0
- package/tests/unit/components/Accordion/AccordionItem.spec.ts +384 -0
- package/tests/unit/components/Audio/Audio.spec.ts +404 -0
- package/tests/unit/components/Audio/Waveform.spec.ts +484 -0
- package/tests/unit/components/Core/Button.spec.ts +337 -0
- package/tests/unit/components/Core/Checkbox.spec.ts +545 -0
- package/tests/unit/components/Core/DateInput.spec.ts +691 -0
- package/tests/unit/components/Core/Dialog.spec.ts +486 -0
- package/tests/unit/components/Core/EditField.spec.ts +783 -0
- package/tests/unit/components/Core/Input.spec.ts +513 -0
- package/tests/unit/components/Core/Modal.spec.ts +519 -0
- package/tests/unit/components/Core/NotificationBubble.spec.ts +607 -0
- package/tests/unit/components/Core/OtpInput.spec.ts +709 -0
- package/tests/unit/components/Core/PhoneInput.spec.ts +620 -0
- package/tests/unit/components/Core/Select.spec.ts +713 -0
- package/tests/unit/components/Core/TextArea.spec.ts +566 -0
- package/tests/unit/components/Core/TickBox.spec.ts +780 -0
- package/tests/unit/components/IconBullet/IconBullet.spec.ts +357 -0
- package/tests/unit/components/IconBullet/IconBulletList.spec.ts +372 -0
- package/tests/unit/components/Icons/Audio/CloudFailed.spec.ts +109 -0
- package/tests/unit/components/Icons/Audio/CloudSaved.spec.ts +150 -0
- package/tests/unit/components/Icons/Audio/Delete.spec.ts +159 -0
- package/tests/unit/components/Icons/Audio/Pause.spec.ts +209 -0
- package/tests/unit/components/Icons/Audio/Play.spec.ts +218 -0
- package/tests/unit/components/Icons/CalendarNotification.spec.ts +187 -0
- package/tests/unit/components/Icons/Chair.spec.ts +235 -0
- package/tests/unit/components/Icons/ChairNotification.spec.ts +312 -0
- package/tests/unit/components/Icons/Circle.spec.ts +256 -0
- package/tests/unit/components/Icons/FavIcon.spec.ts +252 -0
- package/tests/unit/components/Icons/FilledCircle.spec.ts +275 -0
- package/tests/unit/components/Icons/Group3.spec.ts +356 -0
- package/tests/unit/components/Icons/RingNotification.spec.ts +394 -0
- package/tests/unit/components/Icons/calendar.spec.ts +287 -0
- package/tests/unit/components/Icons/checkbox.spec.ts +316 -0
- package/tests/unit/components/Icons/outlineChecked.spec.ts +435 -0
- package/tests/unit/components/Icons/play.spec.ts +309 -0
- package/tests/unit/components/Laboratory/AppointmentCard.spec.ts +168 -0
- package/tests/unit/components/Laboratory/ChatBoxImage.spec.ts +180 -0
- package/tests/unit/components/Laboratory/ChatMessage.spec.ts +264 -0
- package/tests/unit/components/Laboratory/ChatMessageBadge.spec.ts +283 -0
- package/tests/unit/components/Laboratory/ChatNotification.spec.ts +257 -0
- package/tests/unit/components/Laboratory/DocumentCard.spec.ts +229 -0
- package/tests/unit/components/Laboratory/DocumentCardItem.spec.ts +237 -0
- package/tests/unit/components/Laboratory/InfoCard.spec.ts +309 -0
- package/tests/unit/components/Laboratory/MainColumnsBar.spec.ts +252 -0
- package/tests/unit/components/Laboratory/ProgressCircle.spec.ts +291 -0
- package/tests/unit/components/Laboratory/ProgressLinear.spec.ts +276 -0
- package/tests/unit/components/Laboratory/SelectionColumnBar.spec.ts +289 -0
- package/tests/unit/components/Laboratory/StatusNotification.spec.ts +297 -0
- package/tests/unit/components/Laboratory/TagLabel.spec.ts +354 -0
- package/tests/unit/components/Laboratory/TagLabelGroup.spec.ts +378 -0
- package/tests/unit/components/Laboratory/TicketCard.spec.ts +352 -0
- package/tests/unit/components/Laboratory/TimeLineEvent.spec.ts +382 -0
- package/tests/unit/components/Laboratory/Timeline.spec.ts +420 -0
- package/tests/unit/constants/iconEnums.spec.ts +40 -0
- package/tests/unit/i18n/i18n.spec.ts +89 -0
- package/tests/unit/plugins/vuetify.spec.ts +221 -0
- package/tests/unit/setup.ts +190 -0
- package/tests/unit/src/components/index.spec.ts +193 -0
- package/tests/unit/src/index.spec.ts +183 -0
- package/tests/unit/src/main.spec.ts +152 -0
- package/tsconfig.json +26 -0
- package/vite.config.ts +29 -0
- 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
|
+
};
|