@zap-wunschlachen/wl-shared-components 1.0.37 → 1.0.38
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 +205 -205
- package/.github/workflows/static.yml +61 -61
- package/.github/workflows/update-snapshots.yml +37 -37
- package/.prettierrc +5 -5
- package/.storybook/main.ts +18 -18
- package/.storybook/preview.ts +37 -37
- package/.storybook/storyWrapper.vue +18 -18
- package/.storybook/withVuetifyTheme.decorator.ts +21 -21
- package/App.vue +33 -43
- package/README.md +56 -56
- package/heroicons.ts +75 -75
- package/index.html +19 -19
- package/package.json +67 -67
- package/playwright.config.ts +48 -48
- package/public/background.svg +60 -60
- package/public/style.css +187 -187
- package/public/technologies.svg +22 -22
- package/src/assets/css/base.css +232 -232
- package/src/assets/css/variables.css +109 -109
- package/src/components/Accordion/Accordion.css +59 -59
- package/src/components/Accordion/AccordionGroup.vue +51 -51
- package/src/components/Accordion/AccordionItem.vue +66 -66
- package/src/components/Appointment/Card/Actions.css +54 -54
- package/src/components/Appointment/Card/Actions.vue +99 -99
- package/src/components/Appointment/Card/AnamneseNotification.css +15 -15
- package/src/components/Appointment/Card/AnamneseNotification.vue +23 -23
- package/src/components/Appointment/Card/Card.css +80 -80
- package/src/components/Appointment/Card/Card.vue +93 -93
- package/src/components/Appointment/Card/Details.css +50 -50
- package/src/components/Appointment/Card/Details.vue +43 -43
- package/src/components/Audio/Audio.vue +187 -187
- package/src/components/Audio/Waveform.vue +118 -118
- package/src/components/Button/Button.vue +174 -174
- package/src/components/CheckBox/CheckBox.css +214 -214
- package/src/components/CheckBox/Checkbox.vue +138 -138
- package/src/components/DateInput/DateInput.css +2 -2
- package/src/components/DateInput/DateInput.vue +262 -262
- package/src/components/Dialog/Dialog.css +6 -6
- package/src/components/Dialog/Dialog.vue +38 -38
- package/src/components/EditField/EditField.css +19 -19
- package/src/components/EditField/EditField.vue +202 -202
- package/src/components/ErrorPage/ErrorPage.css +172 -172
- package/src/components/IconBullet/IconBullet.vue +86 -86
- package/src/components/IconBullet/IconBulletList.vue +41 -41
- package/src/components/Icons/AdvanceAppointments.vue +153 -153
- package/src/components/Icons/Audio/CloudFailed.vue +20 -20
- package/src/components/Icons/Audio/CloudSaved.vue +21 -21
- package/src/components/Icons/Audio/Delete.vue +15 -15
- package/src/components/Icons/Audio/Pause.vue +18 -18
- package/src/components/Icons/Audio/Play.vue +15 -15
- package/src/components/Icons/CalendarNotification.vue +126 -126
- package/src/components/Icons/Chair.vue +32 -32
- package/src/components/Icons/ChairNotification.vue +35 -35
- package/src/components/Icons/Circle.vue +66 -66
- package/src/components/Icons/FavIcon.vue +22 -22
- package/src/components/Icons/FilledCircle.vue +11 -11
- package/src/components/Icons/Group3.vue +46 -46
- package/src/components/Icons/RingNotification.vue +54 -54
- package/src/components/Icons/SolidArrowRight.vue +14 -14
- package/src/components/Icons/calendar.vue +17 -17
- package/src/components/Icons/checkbox.vue +19 -19
- package/src/components/Icons/outlineChecked.vue +27 -27
- package/src/components/Icons/play.vue +5 -5
- package/src/components/Input/Input.css +187 -187
- package/src/components/Input/Input.vue +253 -253
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.css +7 -7
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.vue +116 -116
- package/src/components/Laboratory/ChatBoxImage/ChatBoxImage.vue +81 -81
- package/src/components/Laboratory/ChatMessage/ChatMessage.vue +113 -113
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.css +4 -4
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.vue +99 -99
- package/src/components/Laboratory/ChatNotification/ChatNotification.vue +130 -130
- package/src/components/Laboratory/DocumentCard/DocumentCard.css +3 -3
- package/src/components/Laboratory/DocumentCard/DocumentCard.vue +50 -50
- package/src/components/Laboratory/DocumentCard/DocumentCardItem.vue +53 -53
- package/src/components/Laboratory/InfoCard/InfoCard.vue +162 -162
- package/src/components/Laboratory/MainColumnsBar/MainColumnsBar.vue +102 -102
- package/src/components/Laboratory/ProgressCircle/ProgressCircle.vue +152 -152
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.css +33 -33
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.vue +75 -75
- package/src/components/Laboratory/SelectionColumnBar/SelectionColumnBar.vue +92 -92
- package/src/components/Laboratory/StatusNotification/StatusNotification.vue +49 -49
- package/src/components/Laboratory/TagLabel/TagLabel.vue +126 -126
- package/src/components/Laboratory/TagLabelGroup/TagLabelGroup.vue +97 -97
- package/src/components/Laboratory/TicketCard/TicketCard.css +3 -3
- package/src/components/Laboratory/TicketCard/TicketCard.vue +143 -143
- package/src/components/Laboratory/TimeLine/TimeLineEvent.css +18 -18
- package/src/components/Laboratory/TimeLine/TimeLineEvent.vue +119 -119
- package/src/components/Laboratory/TimeLine/Timeline.css +4 -4
- package/src/components/Laboratory/TimeLine/Timeline.vue +30 -30
- package/src/components/Loader/Loader.css +71 -71
- package/src/components/MaintenanceBanner/MaintenanceBanner.css +353 -353
- package/src/components/MaintenanceBanner/MaintenanceBanner.vue +127 -127
- package/src/components/MaintenanceBanner/MaintenanceIllustration.vue +54 -54
- package/src/components/Modal/Modal.css +5 -5
- package/src/components/Modal/Modal.vue +22 -22
- package/src/components/NotificationBubble/NotificationBubble.css +4 -4
- package/src/components/NotificationBubble/NotificationBubble.vue +90 -90
- package/src/components/OtpInput/OtpInput.css +39 -39
- package/src/components/OtpInput/OtpInput.vue +151 -151
- package/src/components/PhoneInput/PhoneInput.css +31 -31
- package/src/components/PhoneInput/PhoneInput.vue +113 -113
- package/src/components/Select/Select.css +150 -150
- package/src/components/Select/Select.vue +316 -316
- package/src/components/StagingBanner/StagingBanner.css +19 -0
- package/src/components/StagingBanner/StagingBanner.vue +82 -0
- package/src/components/TextArea/TextArea.css +3 -3
- package/src/components/TextArea/TextArea.vue +126 -126
- package/src/components/TickBox/TickBox.css +49 -49
- package/src/components/TickBox/TickBox.vue +126 -126
- package/src/components/accessibility.css +218 -218
- package/src/components/index.ts +29 -28
- package/src/constants/iconEnums.ts +3 -3
- package/src/i18n/i18n.ts +15 -15
- package/src/i18n/locales/de.json +30 -30
- package/src/i18n/locales/en.json +30 -30
- package/src/index.ts +34 -34
- package/src/main.ts +11 -11
- package/src/plugins/vuetify.ts +141 -141
- package/src/shims-vue.d.ts +10 -10
- package/src/stories/Accordion.stories.ts +650 -650
- package/src/stories/Audio.stories.ts +28 -28
- package/src/stories/Button.stories.ts +263 -263
- package/src/stories/CheckBox.stories.ts +348 -348
- package/src/stories/DateInput.stories.ts +53 -53
- package/src/stories/Dialog.stories.ts +147 -147
- package/src/stories/EditField.stories.ts +78 -78
- package/src/stories/IconBullet/IconBullet.stories.ts +201 -201
- package/src/stories/IconBullet/IconBulletList.stories.ts +275 -275
- package/src/stories/Input.stories.ts +351 -351
- package/src/stories/Laboratory/Cards/AppointmentCard/AppointmentCard.stories.ts +260 -260
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCard.stories.ts +176 -176
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCardItem.stories.ts +119 -119
- package/src/stories/Laboratory/Cards/InfoCard/InfoCard.stories.ts +320 -320
- package/src/stories/Laboratory/Cards/TicketCard/TicketCard.stories.ts +335 -335
- package/src/stories/Laboratory/Chat/ChatBoxImage.stories.ts +82 -82
- package/src/stories/Laboratory/Chat/ChatMessage.stories.ts +198 -198
- package/src/stories/Laboratory/Chat/ChatMessageBadge.stories.ts +204 -204
- package/src/stories/Laboratory/Chat/ChatNotification.stories.ts +144 -144
- package/src/stories/Laboratory/Chat/ProgressLinear.stories.ts +186 -186
- package/src/stories/Laboratory/Chat/StatusNotification.stories.ts +111 -111
- package/src/stories/Laboratory/MainColumnsBar.stories.ts +48 -48
- package/src/stories/Laboratory/ProgressCircle.stories.ts +261 -261
- package/src/stories/Laboratory/SelectionColumnBar.stories.ts +234 -234
- package/src/stories/Laboratory/TagLabel.stories.ts +418 -418
- package/src/stories/Laboratory/TagLabelGroup.stories.ts +234 -234
- package/src/stories/Laboratory/Timeline.stories.ts +403 -403
- package/src/stories/NotificationBubble.stories.ts +194 -194
- package/src/stories/OtpInput.stories.ts +100 -100
- package/src/stories/PhoneInput.stories.ts +52 -52
- package/src/stories/Select.stories.ts +419 -419
- package/src/stories/TextArea.stories.ts +112 -112
- package/src/stories/TickBox.stories.ts +294 -294
- package/src/stories/v-icon.stories.ts +91 -91
- package/src/utils/index.ts +109 -109
- package/src/vite-env.d.ts +1 -1
- package/tests/e2e/README.md +220 -220
- package/tests/e2e/accessibility.spec.ts +638 -638
- package/tests/e2e/accordion.spec.ts +42 -42
- package/tests/e2e/additional-components.spec.ts +437 -437
- package/tests/e2e/all-components.spec.ts +135 -135
- package/tests/e2e/appointment-card.spec.ts +816 -816
- package/tests/e2e/button-fixed.spec.ts +58 -58
- package/tests/e2e/button.spec.ts +76 -76
- package/tests/e2e/checkbox.spec.ts +50 -50
- package/tests/e2e/date-input.spec.ts +46 -46
- package/tests/e2e/debug.spec.ts +51 -51
- package/tests/e2e/dialog.spec.ts +58 -58
- package/tests/e2e/input.spec.ts +55 -55
- package/tests/e2e/laboratory-components.spec.ts +320 -320
- package/tests/e2e/otp-input.spec.ts +50 -50
- package/tests/e2e/select.spec.ts +52 -52
- package/tests/e2e/storybook-utils.ts +59 -59
- package/tests/e2e/test-basic.spec.ts +33 -33
- package/tests/e2e/visual-regression.spec.ts +350 -350
- package/tests/unit/accessibility/component-a11y.spec.ts +469 -469
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts +228 -228
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts.skip +342 -342
- package/tests/unit/components/Accordion/AccordionItem.spec.ts +292 -292
- package/tests/unit/components/Accordion/AccordionItem.spec.ts.skip +383 -383
- package/tests/unit/components/Appointment/AnamneseNotification.spec.ts +176 -176
- package/tests/unit/components/Appointment/Card/Actions.spec.ts +407 -407
- package/tests/unit/components/Appointment/Card/Card.spec.ts +485 -485
- package/tests/unit/components/Appointment/Card/Details.spec.ts +397 -397
- package/tests/unit/components/Audio/Audio.spec.ts +403 -403
- package/tests/unit/components/Audio/Waveform.spec.ts +483 -483
- package/tests/unit/components/Background/Background.spec.ts +177 -177
- package/tests/unit/components/Core/Button.spec.ts +336 -336
- package/tests/unit/components/Core/Checkbox.spec.ts +544 -544
- package/tests/unit/components/Core/DateInput.spec.ts +690 -690
- package/tests/unit/components/Core/Dialog.spec.ts +485 -485
- package/tests/unit/components/Core/EditField.spec.ts +782 -782
- package/tests/unit/components/Core/Input.spec.ts +512 -512
- package/tests/unit/components/Core/Modal.spec.ts +518 -518
- package/tests/unit/components/Core/NotificationBubble.spec.ts +606 -606
- package/tests/unit/components/Core/OtpInput.spec.ts +708 -708
- package/tests/unit/components/Core/PhoneInput.spec.ts +619 -619
- package/tests/unit/components/Core/Select.spec.ts +712 -712
- package/tests/unit/components/Core/TextArea.spec.ts +565 -565
- package/tests/unit/components/Core/TickBox.spec.ts +779 -779
- package/tests/unit/components/ErrorPage/ErrorPage.spec.ts +313 -313
- package/tests/unit/components/ErrorPage/ErrorPageLogo.spec.ts +153 -153
- package/tests/unit/components/IconBullet/IconBullet.spec.ts +356 -356
- package/tests/unit/components/IconBullet/IconBulletList.spec.ts +371 -371
- package/tests/unit/components/Icons/AdvanceAppointments.spec.ts +61 -61
- package/tests/unit/components/Icons/Audio/CloudFailed.spec.ts +108 -108
- package/tests/unit/components/Icons/Audio/CloudSaved.spec.ts +149 -149
- package/tests/unit/components/Icons/Audio/Delete.spec.ts +158 -158
- package/tests/unit/components/Icons/Audio/Pause.spec.ts +208 -208
- package/tests/unit/components/Icons/Audio/Play.spec.ts +217 -217
- package/tests/unit/components/Icons/CalendarNotification.spec.ts +186 -186
- package/tests/unit/components/Icons/Chair.spec.ts +234 -234
- package/tests/unit/components/Icons/ChairNotification.spec.ts +311 -311
- package/tests/unit/components/Icons/Circle.spec.ts +255 -255
- package/tests/unit/components/Icons/FavIcon.spec.ts +251 -251
- package/tests/unit/components/Icons/FilledCircle.spec.ts +274 -274
- package/tests/unit/components/Icons/Group3.spec.ts +355 -355
- package/tests/unit/components/Icons/Logo.spec.ts +228 -228
- package/tests/unit/components/Icons/MiniLogo.spec.ts +38 -38
- package/tests/unit/components/Icons/RingNotification.spec.ts +393 -393
- package/tests/unit/components/Icons/SolidArrowRight.spec.ts +49 -49
- package/tests/unit/components/Icons/calendar.spec.ts +286 -286
- package/tests/unit/components/Icons/checkbox.spec.ts +315 -315
- package/tests/unit/components/Icons/outlineChecked.spec.ts +434 -434
- package/tests/unit/components/Icons/play.spec.ts +308 -308
- package/tests/unit/components/Laboratory/AppointmentCard.spec.ts +167 -167
- package/tests/unit/components/Laboratory/ChatBoxImage.spec.ts +179 -179
- package/tests/unit/components/Laboratory/ChatMessage.spec.ts +263 -263
- package/tests/unit/components/Laboratory/ChatMessageBadge.spec.ts +282 -282
- package/tests/unit/components/Laboratory/ChatNotification.spec.ts +256 -256
- package/tests/unit/components/Laboratory/DocumentCard.spec.ts +228 -228
- package/tests/unit/components/Laboratory/DocumentCardItem.spec.ts +236 -236
- package/tests/unit/components/Laboratory/InfoCard.spec.ts +308 -308
- package/tests/unit/components/Laboratory/MainColumnsBar.spec.ts +251 -251
- package/tests/unit/components/Laboratory/ProgressCircle.spec.ts +290 -290
- package/tests/unit/components/Laboratory/ProgressLinear.spec.ts +275 -275
- package/tests/unit/components/Laboratory/SelectionColumnBar.spec.ts +288 -288
- package/tests/unit/components/Laboratory/StatusNotification.spec.ts +296 -296
- package/tests/unit/components/Laboratory/TagLabel.spec.ts +353 -353
- package/tests/unit/components/Laboratory/TagLabelGroup.spec.ts +377 -377
- package/tests/unit/components/Laboratory/TicketCard.spec.ts +351 -351
- package/tests/unit/components/Laboratory/TimeLineEvent.spec.ts +381 -381
- package/tests/unit/components/Laboratory/Timeline.spec.ts +419 -419
- package/tests/unit/components/Loader/Loader.spec.ts +197 -197
- package/tests/unit/components/MaintenanceBanner/MaintenanceBanner.spec.ts +302 -302
- package/tests/unit/constants/iconEnums.spec.ts +39 -39
- package/tests/unit/i18n/i18n.spec.ts +88 -88
- package/tests/unit/plugins/vuetify.spec.ts +220 -220
- package/tests/unit/setup.ts +189 -189
- package/tests/unit/src/components/index.spec.ts.skip +192 -192
- package/tests/unit/src/index.spec.ts.skip +182 -182
- package/tests/unit/src/main.spec.ts +151 -151
- package/tests/unit/utils/accessibility.spec.ts +318 -318
- package/tsconfig.json +26 -26
- package/vite.config.ts +29 -29
- package/vitest.config.ts +83 -83
- package/public/audio/test.aac +0 -0
|
@@ -1,194 +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
|
-
};
|
|
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
|
+
};
|
|
@@ -1,101 +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
|
-
|
|
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
101
|
export const Default: Story = { ...Template, args: {} };
|