@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,403 @@
|
|
|
1
|
+
import { Meta, Story } from '@storybook/vue3';
|
|
2
|
+
import Timeline from '@components/Laboratory/TimeLine/Timeline.vue';
|
|
3
|
+
import TimelineEvent from '@components/Laboratory/TimeLine/TimeLineEvent.vue';
|
|
4
|
+
import TagLabel from '@components/Laboratory/TagLabel/TagLabel.vue';
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof Timeline> = {
|
|
7
|
+
title: 'WL/Laboratory/Timeline',
|
|
8
|
+
component: Timeline,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
argTypes: {
|
|
11
|
+
events: {
|
|
12
|
+
control: 'object',
|
|
13
|
+
description: 'An array of event objects to display in the timeline.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
parameters: {
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component: `
|
|
20
|
+
The \`Timeline\` component displays a series of events in chronological order. Each event can include headers, durations, steps, and status indicators.
|
|
21
|
+
|
|
22
|
+
### Props
|
|
23
|
+
|
|
24
|
+
- **\`events\`**: An array of event objects. Each event object can have the following properties:
|
|
25
|
+
- **\`status\`**: The status of the event, e.g., 'Done', 'Ready', 'Dispatched'.
|
|
26
|
+
- **\`firstHeader\`**: The main header for the event.
|
|
27
|
+
- **\`secondHeader\`**: A secondary header for the event.
|
|
28
|
+
- **\`firstDuration\`**: Duration text associated with the first header.
|
|
29
|
+
- **\`secondDuration\`**: Duration text associated with the second header.
|
|
30
|
+
- **\`steps\`**: An array of step objects, each containing a date and description.
|
|
31
|
+
- **\`urgent\`**: A boolean indicating if the event is marked as urgent.
|
|
32
|
+
|
|
33
|
+
### Slots
|
|
34
|
+
|
|
35
|
+
- **\`content\`**: Slot to customize the rendering of each event. Receives \`event\` as a scoped slot prop.
|
|
36
|
+
|
|
37
|
+
### Example Usage
|
|
38
|
+
|
|
39
|
+
Below are examples of how to use the \`Timeline\` component with various event configurations.
|
|
40
|
+
`,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default meta;
|
|
47
|
+
|
|
48
|
+
const Template: Story = (args) => ({
|
|
49
|
+
components: { Timeline, TimelineEvent, TagLabel },
|
|
50
|
+
setup() {
|
|
51
|
+
return { args };
|
|
52
|
+
},
|
|
53
|
+
template: `
|
|
54
|
+
<div style="padding: 16px;">
|
|
55
|
+
<Timeline v-bind="args">
|
|
56
|
+
<template #content="{ event }">
|
|
57
|
+
<TimelineEvent
|
|
58
|
+
:firstHeader="event.firstHeader"
|
|
59
|
+
:secondHeader="event.secondHeader"
|
|
60
|
+
:firstDuration="event.firstDuration"
|
|
61
|
+
:secondDuration="event.secondDuration"
|
|
62
|
+
:steps="event.steps"
|
|
63
|
+
:urgent="event.urgent"
|
|
64
|
+
>
|
|
65
|
+
<template #icon>
|
|
66
|
+
<TagLabel :status="event.status" />
|
|
67
|
+
</template>
|
|
68
|
+
</TimelineEvent>
|
|
69
|
+
</template>
|
|
70
|
+
</Timeline>
|
|
71
|
+
</div>
|
|
72
|
+
`,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export const DefaultTimeline = Template.bind({});
|
|
76
|
+
DefaultTimeline.args = {
|
|
77
|
+
events: [
|
|
78
|
+
{
|
|
79
|
+
status: 'Done',
|
|
80
|
+
firstHeader: 'Projekt A',
|
|
81
|
+
secondHeader: 'Projekt B',
|
|
82
|
+
firstDuration: '10 Tage 5 Stunden',
|
|
83
|
+
secondDuration: '12 Tage 3 Stunden',
|
|
84
|
+
steps: [
|
|
85
|
+
{
|
|
86
|
+
date: '12. Sept. 2021',
|
|
87
|
+
description:
|
|
88
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
date: '15. Sept. 2022',
|
|
92
|
+
description:
|
|
93
|
+
'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
};
|
|
99
|
+
DefaultTimeline.parameters = {
|
|
100
|
+
docs: {
|
|
101
|
+
source: {
|
|
102
|
+
code: `
|
|
103
|
+
<script setup>
|
|
104
|
+
import Timeline from '@components/Laboratory/TimeLine/Timeline.vue';
|
|
105
|
+
import TimelineEvent from '@components/Laboratory/TimeLine/TimeLineEvent.vue';
|
|
106
|
+
import TagLabel from '@components/Laboratory/TagLabel/TagLabel.vue';
|
|
107
|
+
|
|
108
|
+
const events = [
|
|
109
|
+
{
|
|
110
|
+
status: 'Done',
|
|
111
|
+
firstHeader: 'Projekt A',
|
|
112
|
+
secondHeader: 'Projekt B',
|
|
113
|
+
firstDuration: '10 Tage 5 Stunden',
|
|
114
|
+
secondDuration: '12 Tage 3 Stunden',
|
|
115
|
+
steps: [
|
|
116
|
+
{
|
|
117
|
+
date: '12. Sept. 2021',
|
|
118
|
+
description:
|
|
119
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
date: '15. Sept. 2022',
|
|
123
|
+
description:
|
|
124
|
+
'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
</script>
|
|
130
|
+
|
|
131
|
+
<template>
|
|
132
|
+
<Timeline :events="events">
|
|
133
|
+
<template #content="{ event }">
|
|
134
|
+
<TimelineEvent
|
|
135
|
+
:firstHeader="event.firstHeader"
|
|
136
|
+
:secondHeader="event.secondHeader"
|
|
137
|
+
:firstDuration="event.firstDuration"
|
|
138
|
+
:secondDuration="event.secondDuration"
|
|
139
|
+
:steps="event.steps"
|
|
140
|
+
:urgent="event.urgent"
|
|
141
|
+
>
|
|
142
|
+
<template #icon>
|
|
143
|
+
<TagLabel :status="event.status" />
|
|
144
|
+
</template>
|
|
145
|
+
</TimelineEvent>
|
|
146
|
+
</template>
|
|
147
|
+
</Timeline>
|
|
148
|
+
</template>
|
|
149
|
+
`,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
export const MultipleStepsTimeline = Template.bind({});
|
|
155
|
+
MultipleStepsTimeline.args = {
|
|
156
|
+
events: [
|
|
157
|
+
{
|
|
158
|
+
status: 'Done',
|
|
159
|
+
firstHeader: 'Projekt A',
|
|
160
|
+
secondHeader: 'Projekt B',
|
|
161
|
+
firstDuration: '10 Tage 5 Stunden',
|
|
162
|
+
secondDuration: '12 Tage 3 Stunden',
|
|
163
|
+
steps: [
|
|
164
|
+
{
|
|
165
|
+
date: '12. Sept. 2021',
|
|
166
|
+
description:
|
|
167
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
date: '15. Sept. 2022',
|
|
171
|
+
description:
|
|
172
|
+
'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
urgent: true,
|
|
178
|
+
status: 'Ready',
|
|
179
|
+
firstHeader: 'Projekt C',
|
|
180
|
+
secondHeader: 'Estimated',
|
|
181
|
+
firstDuration: '5 Tage 2 Stunden',
|
|
182
|
+
secondDuration: '1 d 5 h',
|
|
183
|
+
steps: [
|
|
184
|
+
{
|
|
185
|
+
date: '18. Sept. 2023',
|
|
186
|
+
description:
|
|
187
|
+
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi.',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
date: '20. Sept. 2024',
|
|
191
|
+
description:
|
|
192
|
+
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
status: 'Dispatched',
|
|
198
|
+
firstHeader: 'Projekt E',
|
|
199
|
+
secondHeader: 'Projekt F',
|
|
200
|
+
firstDuration: '4 Tage 2 Stunden',
|
|
201
|
+
secondDuration: '6 Tage 3 Stunden',
|
|
202
|
+
steps: [], // No steps for this event
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
};
|
|
206
|
+
MultipleStepsTimeline.parameters = {
|
|
207
|
+
docs: {
|
|
208
|
+
source: {
|
|
209
|
+
code: `
|
|
210
|
+
<script setup>
|
|
211
|
+
import Timeline from '@components/Laboratory/TimeLine/Timeline.vue';
|
|
212
|
+
import TimelineEvent from '@components/Laboratory/TimeLine/TimeLineEvent.vue';
|
|
213
|
+
import TagLabel from '@components/Laboratory/TagLabel/TagLabel.vue';
|
|
214
|
+
|
|
215
|
+
const events = [
|
|
216
|
+
{
|
|
217
|
+
status: 'Done',
|
|
218
|
+
firstHeader: 'Projekt A',
|
|
219
|
+
secondHeader: 'Projekt B',
|
|
220
|
+
firstDuration: '10 Tage 5 Stunden',
|
|
221
|
+
secondDuration: '12 Tage 3 Stunden',
|
|
222
|
+
steps: [
|
|
223
|
+
{
|
|
224
|
+
date: '12. Sept. 2021',
|
|
225
|
+
description:
|
|
226
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
date: '15. Sept. 2022',
|
|
230
|
+
description:
|
|
231
|
+
'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
urgent: true,
|
|
237
|
+
status: 'Ready',
|
|
238
|
+
firstHeader: 'Projekt C',
|
|
239
|
+
secondHeader: 'Estimated',
|
|
240
|
+
firstDuration: '5 Tage 2 Stunden',
|
|
241
|
+
secondDuration: '1 d 5 h',
|
|
242
|
+
steps: [
|
|
243
|
+
{
|
|
244
|
+
date: '18. Sept. 2023',
|
|
245
|
+
description:
|
|
246
|
+
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi.',
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
date: '20. Sept. 2024',
|
|
250
|
+
description:
|
|
251
|
+
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
status: 'Dispatched',
|
|
257
|
+
firstHeader: 'Projekt E',
|
|
258
|
+
secondHeader: 'Projekt F',
|
|
259
|
+
firstDuration: '4 Tage 2 Stunden',
|
|
260
|
+
secondDuration: '6 Tage 3 Stunden',
|
|
261
|
+
steps: [],
|
|
262
|
+
},
|
|
263
|
+
];
|
|
264
|
+
</script>
|
|
265
|
+
|
|
266
|
+
<template>
|
|
267
|
+
<Timeline :events="events">
|
|
268
|
+
<template #content="{ event }">
|
|
269
|
+
<TimelineEvent
|
|
270
|
+
:firstHeader="event.firstHeader"
|
|
271
|
+
:secondHeader="event.secondHeader"
|
|
272
|
+
:firstDuration="event.firstDuration"
|
|
273
|
+
:secondDuration="event.secondDuration"
|
|
274
|
+
:steps="event.steps"
|
|
275
|
+
:urgent="event.urgent"
|
|
276
|
+
>
|
|
277
|
+
<template #icon>
|
|
278
|
+
<TagLabel :status="event.status" />
|
|
279
|
+
</template>
|
|
280
|
+
</TimelineEvent>
|
|
281
|
+
</template>
|
|
282
|
+
</Timeline>
|
|
283
|
+
</template>
|
|
284
|
+
`,
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
export const NoStepsTimeline = Template.bind({});
|
|
290
|
+
NoStepsTimeline.args = {
|
|
291
|
+
events: [
|
|
292
|
+
{
|
|
293
|
+
status: 'Dispatched',
|
|
294
|
+
firstHeader: 'Projekt E',
|
|
295
|
+
secondHeader: 'Projekt F',
|
|
296
|
+
firstDuration: '4 Tage 2 Stunden',
|
|
297
|
+
secondDuration: '6 Tage 3 Stunden',
|
|
298
|
+
steps: [], // No steps for this event
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
};
|
|
302
|
+
NoStepsTimeline.parameters = {
|
|
303
|
+
docs: {
|
|
304
|
+
source: {
|
|
305
|
+
code: `
|
|
306
|
+
<script setup>
|
|
307
|
+
import Timeline from '@components/Laboratory/TimeLine/Timeline.vue';
|
|
308
|
+
import TimelineEvent from '@components/Laboratory/TimeLine/TimeLineEvent.vue';
|
|
309
|
+
import TagLabel from '@components/Laboratory/TagLabel/TagLabel.vue';
|
|
310
|
+
|
|
311
|
+
const events = [
|
|
312
|
+
{
|
|
313
|
+
status: 'Dispatched',
|
|
314
|
+
firstHeader: 'Projekt E',
|
|
315
|
+
secondHeader: 'Projekt F',
|
|
316
|
+
firstDuration: '4 Tage 2 Stunden',
|
|
317
|
+
secondDuration: '6 Tage 3 Stunden',
|
|
318
|
+
steps: [],
|
|
319
|
+
},
|
|
320
|
+
];
|
|
321
|
+
</script>
|
|
322
|
+
|
|
323
|
+
<template>
|
|
324
|
+
<Timeline :events="events">
|
|
325
|
+
<template #content="{ event }">
|
|
326
|
+
<TimelineEvent
|
|
327
|
+
:firstHeader="event.firstHeader"
|
|
328
|
+
:secondHeader="event.secondHeader"
|
|
329
|
+
:firstDuration="event.firstDuration"
|
|
330
|
+
:secondDuration="event.secondDuration"
|
|
331
|
+
:steps="event.steps"
|
|
332
|
+
:urgent="event.urgent"
|
|
333
|
+
>
|
|
334
|
+
<template #icon>
|
|
335
|
+
<TagLabel :status="event.status" />
|
|
336
|
+
</template>
|
|
337
|
+
</TimelineEvent>
|
|
338
|
+
</template>
|
|
339
|
+
</Timeline>
|
|
340
|
+
</template>
|
|
341
|
+
`,
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
export const UrgentTimeline = Template.bind({});
|
|
347
|
+
UrgentTimeline.args = {
|
|
348
|
+
events: [
|
|
349
|
+
{
|
|
350
|
+
urgent: true,
|
|
351
|
+
status: 'Done',
|
|
352
|
+
firstHeader: 'Projekt B',
|
|
353
|
+
secondHeader: 'Estimated',
|
|
354
|
+
firstDuration: '4 Tage 2 Stunden',
|
|
355
|
+
secondDuration: '6 Tage 3 Stunden',
|
|
356
|
+
steps: [], // No steps for this event
|
|
357
|
+
},
|
|
358
|
+
],
|
|
359
|
+
};
|
|
360
|
+
UrgentTimeline.parameters = {
|
|
361
|
+
docs: {
|
|
362
|
+
source: {
|
|
363
|
+
code: `
|
|
364
|
+
<script setup>
|
|
365
|
+
import Timeline from '@components/Laboratory/TimeLine/Timeline.vue';
|
|
366
|
+
import TimelineEvent from '@components/Laboratory/TimeLine/TimeLineEvent.vue';
|
|
367
|
+
import TagLabel from '@components/Laboratory/TagLabel/TagLabel.vue';
|
|
368
|
+
|
|
369
|
+
const events = [
|
|
370
|
+
{
|
|
371
|
+
urgent: true,
|
|
372
|
+
status: 'Done',
|
|
373
|
+
firstHeader: 'Projekt B',
|
|
374
|
+
secondHeader: 'Estimated',
|
|
375
|
+
firstDuration: '4 Tage 2 Stunden',
|
|
376
|
+
secondDuration: '6 Tage 3 Stunden',
|
|
377
|
+
steps: [],
|
|
378
|
+
},
|
|
379
|
+
];
|
|
380
|
+
</script>
|
|
381
|
+
|
|
382
|
+
<template>
|
|
383
|
+
<Timeline :events="events">
|
|
384
|
+
<template #content="{ event }">
|
|
385
|
+
<TimelineEvent
|
|
386
|
+
:firstHeader="event.firstHeader"
|
|
387
|
+
:secondHeader="event.secondHeader"
|
|
388
|
+
:firstDuration="event.firstDuration"
|
|
389
|
+
:secondDuration="event.secondDuration"
|
|
390
|
+
:steps="event.steps"
|
|
391
|
+
:urgent="event.urgent"
|
|
392
|
+
>
|
|
393
|
+
<template #icon>
|
|
394
|
+
<TagLabel :status="event.status" />
|
|
395
|
+
</template>
|
|
396
|
+
</TimelineEvent>
|
|
397
|
+
</template>
|
|
398
|
+
</Timeline>
|
|
399
|
+
</template>
|
|
400
|
+
`,
|
|
401
|
+
},
|
|
402
|
+
},
|
|
403
|
+
};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
2
|
+
import NotificationBubble from '@components/NotificationBubble/NotificationBubble.vue'; // Adjust the import to match your component location
|
|
3
|
+
|
|
4
|
+
// Meta configuration for the NotificationBubble component
|
|
5
|
+
const meta: Meta<typeof NotificationBubble> = {
|
|
6
|
+
title: 'WL/NotificationBubble',
|
|
7
|
+
component: NotificationBubble,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
argTypes: {
|
|
10
|
+
color: { control: 'color' },
|
|
11
|
+
size: { control: 'text' },
|
|
12
|
+
text: { control: 'text' },
|
|
13
|
+
textColor: { control: 'color' },
|
|
14
|
+
icon: { control: 'text' },
|
|
15
|
+
iconSize: { control: 'text' },
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
color: 'var(--Dental-Blue-0)',
|
|
19
|
+
size: '40',
|
|
20
|
+
textColor: 'white',
|
|
21
|
+
iconSize: '24',
|
|
22
|
+
},
|
|
23
|
+
parameters: {
|
|
24
|
+
docs: {
|
|
25
|
+
description: {
|
|
26
|
+
component: `
|
|
27
|
+
The \`NotificationBubble\` component is a visual indicator used for displaying notifications with either an icon or text. The component offers customizable properties for color, size, and icon/text options.
|
|
28
|
+
|
|
29
|
+
### Props
|
|
30
|
+
- **\`color\`**: Sets the background color of the notification bubble.
|
|
31
|
+
- **\`size\`**: Determines the size of the bubble.
|
|
32
|
+
- **\`text\`**: Text displayed inside the bubble, typically used to show a count.
|
|
33
|
+
- **\`textColor\`**: Sets the color of the text within the bubble.
|
|
34
|
+
- **\`icon\`**: Icon name to display if no text is present.
|
|
35
|
+
- **\`iconSize\`**: Controls the size of the icon.
|
|
36
|
+
|
|
37
|
+
### Example Usage
|
|
38
|
+
Examples below show the \`NotificationBubble\` in different states, including icon-only and text-only modes.
|
|
39
|
+
`,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default meta;
|
|
46
|
+
type Story = StoryObj<typeof meta>;
|
|
47
|
+
|
|
48
|
+
// Common render template for the component
|
|
49
|
+
const Template: Story = {
|
|
50
|
+
render: (args) => ({
|
|
51
|
+
components: { NotificationBubble },
|
|
52
|
+
setup() {
|
|
53
|
+
return { args };
|
|
54
|
+
},
|
|
55
|
+
template: `
|
|
56
|
+
<NotificationBubble v-bind="args" />
|
|
57
|
+
`,
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Default Notification Bubble Story
|
|
63
|
+
*/
|
|
64
|
+
export const Default: Story = {
|
|
65
|
+
...Template,
|
|
66
|
+
args: {
|
|
67
|
+
icon: 'heroicons:bell',
|
|
68
|
+
text: '',
|
|
69
|
+
},
|
|
70
|
+
parameters: {
|
|
71
|
+
docs: {
|
|
72
|
+
source: {
|
|
73
|
+
code: `
|
|
74
|
+
<template>
|
|
75
|
+
<NotificationBubble icon="heroicons:bell" />
|
|
76
|
+
</template>
|
|
77
|
+
`,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Story with Text Display
|
|
85
|
+
*/
|
|
86
|
+
export const WithText: Story = {
|
|
87
|
+
...Template,
|
|
88
|
+
args: {
|
|
89
|
+
text: '9',
|
|
90
|
+
icon: '',
|
|
91
|
+
},
|
|
92
|
+
parameters: {
|
|
93
|
+
docs: {
|
|
94
|
+
source: {
|
|
95
|
+
code: `
|
|
96
|
+
<template>
|
|
97
|
+
<NotificationBubble text="9" />
|
|
98
|
+
</template>
|
|
99
|
+
`,
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Custom Color and Text Notification Bubble Story
|
|
107
|
+
*/
|
|
108
|
+
export const CustomColorAndText: Story = {
|
|
109
|
+
...Template,
|
|
110
|
+
args: {
|
|
111
|
+
color: 'red',
|
|
112
|
+
icon: 'heroicons:calendar',
|
|
113
|
+
iconSize: '25',
|
|
114
|
+
textColor: 'white',
|
|
115
|
+
},
|
|
116
|
+
parameters: {
|
|
117
|
+
docs: {
|
|
118
|
+
source: {
|
|
119
|
+
code: `
|
|
120
|
+
<template>
|
|
121
|
+
<NotificationBubble color="red" icon="heroicons:calendar" iconSize="25" textColor="white" />
|
|
122
|
+
</template>
|
|
123
|
+
`,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Custom Icon Notification Bubble Story
|
|
131
|
+
*/
|
|
132
|
+
export const CustomIcon: Story = {
|
|
133
|
+
...Template,
|
|
134
|
+
args: {
|
|
135
|
+
color: 'green',
|
|
136
|
+
icon: 'heroicons:check-circle',
|
|
137
|
+
iconSize: '30',
|
|
138
|
+
text: '',
|
|
139
|
+
},
|
|
140
|
+
parameters: {
|
|
141
|
+
docs: {
|
|
142
|
+
source: {
|
|
143
|
+
code: `
|
|
144
|
+
<template>
|
|
145
|
+
<NotificationBubble color="green" icon="heroicons:check-circle" iconSize="30" />
|
|
146
|
+
</template>
|
|
147
|
+
`,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export const OutlinedIcon: Story = {
|
|
154
|
+
...Template,
|
|
155
|
+
args: {
|
|
156
|
+
color: 'var(--Dental-Blue-0)',
|
|
157
|
+
icon: 'heroicons:x-mark',
|
|
158
|
+
iconSize: '25',
|
|
159
|
+
textColor: 'var(--Dental-Blue-0)',
|
|
160
|
+
variant: 'outlined',
|
|
161
|
+
},
|
|
162
|
+
parameters: {
|
|
163
|
+
docs: {
|
|
164
|
+
source: {
|
|
165
|
+
code: `
|
|
166
|
+
<template>
|
|
167
|
+
<NotificationBubble color="red" icon="heroicons:calendar" iconSize="25" textColor="white" />
|
|
168
|
+
</template>
|
|
169
|
+
`,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
export const OutlinedText: Story = {
|
|
175
|
+
...Template,
|
|
176
|
+
args: {
|
|
177
|
+
color: 'var(--Dental-Blue-0)',
|
|
178
|
+
text: '9',
|
|
179
|
+
iconSize: '25',
|
|
180
|
+
textColor: 'var(--Dental-Blue-0)',
|
|
181
|
+
variant: 'outlined',
|
|
182
|
+
},
|
|
183
|
+
parameters: {
|
|
184
|
+
docs: {
|
|
185
|
+
source: {
|
|
186
|
+
code: `
|
|
187
|
+
<template>
|
|
188
|
+
<NotificationBubble color="red" icon="heroicons:calendar" iconSize="25" textColor="white" />
|
|
189
|
+
</template>
|
|
190
|
+
`,
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import OtpInput from '@/components/OtpInput/OtpInput.vue';
|
|
2
|
+
import { Meta, StoryObj } from '@storybook/vue3';
|
|
3
|
+
import { reactive } from 'vue';
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof OtpInput> = {
|
|
6
|
+
title: 'WL/OtpInput',
|
|
7
|
+
component: OtpInput,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
argTypes: {
|
|
10
|
+
phoneNumber: { control: 'text', description: 'The phone number to send the OTP to' },
|
|
11
|
+
message: { control: 'text', description: 'The status message to display under the input' },
|
|
12
|
+
otpState: { control: 'select', options: ['default', 'error', 'success'], description: 'The state of the OTP input' },
|
|
13
|
+
submitFn: { control: 'function', description: 'The function to call when the OTP is submitted' },
|
|
14
|
+
resendFn: { control: 'function', description: 'The function to call when the resend button is clicked' },
|
|
15
|
+
loading: { control: 'boolean', description: 'Whether the component is loading' },
|
|
16
|
+
colors: { control: 'object', description: 'The colors to use for the component' }
|
|
17
|
+
},
|
|
18
|
+
args: {
|
|
19
|
+
phoneNumber: '+4915211122344',
|
|
20
|
+
message: 'Please enter the OTP sent to your phone.',
|
|
21
|
+
otpState: 'default',
|
|
22
|
+
submitFn: () => {
|
|
23
|
+
console.log('OTP submitted');
|
|
24
|
+
},
|
|
25
|
+
resendFn: () => {
|
|
26
|
+
console.log('Resend OTP');
|
|
27
|
+
},
|
|
28
|
+
loading: false,
|
|
29
|
+
colors: {
|
|
30
|
+
error: 'var(--Error-Red-0)',
|
|
31
|
+
success: 'var(--Success-Green-0)'
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
parameters: {
|
|
35
|
+
docs: {
|
|
36
|
+
description: {
|
|
37
|
+
component: ''
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default meta;
|
|
44
|
+
type Story = StoryObj<typeof meta>;
|
|
45
|
+
|
|
46
|
+
const Template: Story = {
|
|
47
|
+
render: (args) => ({
|
|
48
|
+
components: { OtpInput },
|
|
49
|
+
setup() {
|
|
50
|
+
const state = reactive({
|
|
51
|
+
otpState: args.otpState,
|
|
52
|
+
message: args.message,
|
|
53
|
+
loading: args.loading,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const submitFn = () => {
|
|
57
|
+
state.loading = true;
|
|
58
|
+
|
|
59
|
+
const states = ['error', 'success'] as const;
|
|
60
|
+
const randomState = states[Math.floor(Math.random() * states.length)];
|
|
61
|
+
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
state.loading = false;
|
|
64
|
+
|
|
65
|
+
state.otpState = randomState;
|
|
66
|
+
state.message =
|
|
67
|
+
randomState === 'error'
|
|
68
|
+
? 'Invalid OTP. Please try again.'
|
|
69
|
+
: randomState === 'success'
|
|
70
|
+
? 'OTP verified successfully!'
|
|
71
|
+
: 'Please enter the OTP sent to your phone.';
|
|
72
|
+
}, 1000);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const resendFn = () => {
|
|
76
|
+
state.loading = true;
|
|
77
|
+
|
|
78
|
+
setTimeout(() => {
|
|
79
|
+
state.loading = false;
|
|
80
|
+
}, 1000);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return { args, state, submitFn, resendFn };
|
|
84
|
+
},
|
|
85
|
+
template: `
|
|
86
|
+
<div style="padding: 16px;">
|
|
87
|
+
<OtpInput
|
|
88
|
+
:phone-number="args.phoneNumber"
|
|
89
|
+
:otp-state="state.otpState"
|
|
90
|
+
:message="state.message"
|
|
91
|
+
:loading="state.loading"
|
|
92
|
+
:submit-fn="submitFn"
|
|
93
|
+
:resend-fn="resendFn"
|
|
94
|
+
:colors="args.colors"
|
|
95
|
+
/>
|
|
96
|
+
</div>
|
|
97
|
+
`,
|
|
98
|
+
}),
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export const Default: Story = { ...Template, args: {} };
|