@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,215 @@
|
|
|
1
|
+
name: Playwright Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [develop]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
timeout-minutes: 60
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
browser: [chromium, firefox, webkit]
|
|
17
|
+
fail-fast: false
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- uses: actions/setup-node@v4
|
|
23
|
+
with:
|
|
24
|
+
node-version: 18
|
|
25
|
+
cache: 'npm'
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: npm ci
|
|
29
|
+
|
|
30
|
+
- name: Install Playwright Browsers
|
|
31
|
+
run: npx playwright install --with-deps ${{ matrix.browser }}
|
|
32
|
+
|
|
33
|
+
- name: Build Storybook
|
|
34
|
+
run: npm run build-storybook
|
|
35
|
+
|
|
36
|
+
- name: Serve Storybook and run tests
|
|
37
|
+
run: |
|
|
38
|
+
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
|
|
39
|
+
"npx http-server storybook-static --port 7000 --silent" \
|
|
40
|
+
"npx wait-on http://localhost:7000 && npx playwright test --project=${{ matrix.browser }}"
|
|
41
|
+
|
|
42
|
+
- name: Upload test results
|
|
43
|
+
uses: actions/upload-artifact@v4
|
|
44
|
+
if: always()
|
|
45
|
+
with:
|
|
46
|
+
name: playwright-results-${{ matrix.browser }}
|
|
47
|
+
path: |
|
|
48
|
+
test-results/
|
|
49
|
+
playwright-report/
|
|
50
|
+
retention-days: 7
|
|
51
|
+
|
|
52
|
+
accessibility-test:
|
|
53
|
+
timeout-minutes: 30
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
|
|
56
|
+
steps:
|
|
57
|
+
- uses: actions/checkout@v4
|
|
58
|
+
|
|
59
|
+
- uses: actions/setup-node@v4
|
|
60
|
+
with:
|
|
61
|
+
node-version: 18
|
|
62
|
+
cache: 'npm'
|
|
63
|
+
|
|
64
|
+
- name: Install dependencies
|
|
65
|
+
run: npm ci
|
|
66
|
+
|
|
67
|
+
- name: Install Playwright Browsers
|
|
68
|
+
run: npx playwright install chromium
|
|
69
|
+
|
|
70
|
+
- name: Build Storybook
|
|
71
|
+
run: npm run build-storybook
|
|
72
|
+
|
|
73
|
+
- name: Run accessibility tests
|
|
74
|
+
run: |
|
|
75
|
+
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
|
|
76
|
+
"npx http-server storybook-static --port 7000 --silent" \
|
|
77
|
+
"npx wait-on http://localhost:7000 && npx playwright test --grep 'accessibility|Accessibility' --project=chromium"
|
|
78
|
+
|
|
79
|
+
- name: Upload accessibility results
|
|
80
|
+
uses: actions/upload-artifact@v4
|
|
81
|
+
if: always()
|
|
82
|
+
with:
|
|
83
|
+
name: accessibility-results
|
|
84
|
+
path: |
|
|
85
|
+
test-results/
|
|
86
|
+
playwright-report/
|
|
87
|
+
retention-days: 7
|
|
88
|
+
|
|
89
|
+
visual-regression:
|
|
90
|
+
timeout-minutes: 45
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
|
|
93
|
+
steps:
|
|
94
|
+
- uses: actions/checkout@v4
|
|
95
|
+
|
|
96
|
+
- uses: actions/setup-node@v4
|
|
97
|
+
with:
|
|
98
|
+
node-version: 18
|
|
99
|
+
cache: 'npm'
|
|
100
|
+
|
|
101
|
+
- name: Install dependencies
|
|
102
|
+
run: npm ci
|
|
103
|
+
|
|
104
|
+
- name: Install Playwright Browsers
|
|
105
|
+
run: npx playwright install chromium
|
|
106
|
+
|
|
107
|
+
- name: Build Storybook
|
|
108
|
+
run: npm run build-storybook
|
|
109
|
+
|
|
110
|
+
- name: Run visual regression tests
|
|
111
|
+
run: |
|
|
112
|
+
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
|
|
113
|
+
"npx http-server storybook-static --port 7000 --silent" \
|
|
114
|
+
"npx wait-on http://localhost:7000 && npx playwright test tests/e2e/visual-regression.spec.ts --project=chromium"
|
|
115
|
+
|
|
116
|
+
- name: Upload visual test results
|
|
117
|
+
uses: actions/upload-artifact@v4
|
|
118
|
+
if: always()
|
|
119
|
+
with:
|
|
120
|
+
name: visual-regression-results
|
|
121
|
+
path: |
|
|
122
|
+
test-results/
|
|
123
|
+
playwright-report/
|
|
124
|
+
retention-days: 7
|
|
125
|
+
|
|
126
|
+
mobile-test:
|
|
127
|
+
timeout-minutes: 45
|
|
128
|
+
runs-on: ubuntu-latest
|
|
129
|
+
|
|
130
|
+
steps:
|
|
131
|
+
- uses: actions/checkout@v4
|
|
132
|
+
|
|
133
|
+
- uses: actions/setup-node@v4
|
|
134
|
+
with:
|
|
135
|
+
node-version: 18
|
|
136
|
+
cache: 'npm'
|
|
137
|
+
|
|
138
|
+
- name: Install dependencies
|
|
139
|
+
run: npm ci
|
|
140
|
+
|
|
141
|
+
- name: Install Playwright Browsers
|
|
142
|
+
run: npx playwright install chromium
|
|
143
|
+
|
|
144
|
+
- name: Build Storybook
|
|
145
|
+
run: npm run build-storybook
|
|
146
|
+
|
|
147
|
+
- name: Run mobile tests
|
|
148
|
+
run: |
|
|
149
|
+
npx concurrently -k -s first -n "SB,TEST" -c "magenta,blue" \
|
|
150
|
+
"npx http-server storybook-static --port 7000 --silent" \
|
|
151
|
+
"npx wait-on http://localhost:7000 && npx playwright test --project='Mobile Chrome' --project='Mobile Safari'"
|
|
152
|
+
|
|
153
|
+
- name: Upload mobile test results
|
|
154
|
+
uses: actions/upload-artifact@v4
|
|
155
|
+
if: always()
|
|
156
|
+
with:
|
|
157
|
+
name: mobile-test-results
|
|
158
|
+
path: |
|
|
159
|
+
test-results/
|
|
160
|
+
playwright-report/
|
|
161
|
+
retention-days: 7
|
|
162
|
+
|
|
163
|
+
report:
|
|
164
|
+
if: always()
|
|
165
|
+
needs: [test, accessibility-test, visual-regression, mobile-test]
|
|
166
|
+
runs-on: ubuntu-latest
|
|
167
|
+
|
|
168
|
+
steps:
|
|
169
|
+
- uses: actions/checkout@v4
|
|
170
|
+
|
|
171
|
+
- name: Download all artifacts
|
|
172
|
+
uses: actions/download-artifact@v4
|
|
173
|
+
with:
|
|
174
|
+
path: artifacts
|
|
175
|
+
|
|
176
|
+
- name: Generate consolidated report
|
|
177
|
+
run: |
|
|
178
|
+
echo "# Test Results Summary" > test-summary.md
|
|
179
|
+
echo "" >> test-summary.md
|
|
180
|
+
echo "## Browser Tests" >> test-summary.md
|
|
181
|
+
for browser in chromium firefox webkit; do
|
|
182
|
+
if [ -d "artifacts/playwright-results-$browser" ]; then
|
|
183
|
+
echo "- ✅ $browser tests completed" >> test-summary.md
|
|
184
|
+
else
|
|
185
|
+
echo "- ❌ $browser tests failed" >> test-summary.md
|
|
186
|
+
fi
|
|
187
|
+
done
|
|
188
|
+
echo "" >> test-summary.md
|
|
189
|
+
echo "## Accessibility Tests" >> test-summary.md
|
|
190
|
+
if [ -d "artifacts/accessibility-results" ]; then
|
|
191
|
+
echo "- ✅ Accessibility tests completed" >> test-summary.md
|
|
192
|
+
else
|
|
193
|
+
echo "- ❌ Accessibility tests failed" >> test-summary.md
|
|
194
|
+
fi
|
|
195
|
+
echo "" >> test-summary.md
|
|
196
|
+
echo "## Visual Regression Tests" >> test-summary.md
|
|
197
|
+
if [ -d "artifacts/visual-regression-results" ]; then
|
|
198
|
+
echo "- ✅ Visual regression tests completed" >> test-summary.md
|
|
199
|
+
else
|
|
200
|
+
echo "- ❌ Visual regression tests failed" >> test-summary.md
|
|
201
|
+
fi
|
|
202
|
+
echo "" >> test-summary.md
|
|
203
|
+
echo "## Mobile Tests" >> test-summary.md
|
|
204
|
+
if [ -d "artifacts/mobile-test-results" ]; then
|
|
205
|
+
echo "- ✅ Mobile tests completed" >> test-summary.md
|
|
206
|
+
else
|
|
207
|
+
echo "- ❌ Mobile tests failed" >> test-summary.md
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
- name: Upload consolidated report
|
|
211
|
+
uses: actions/upload-artifact@v4
|
|
212
|
+
with:
|
|
213
|
+
name: consolidated-test-report
|
|
214
|
+
path: test-summary.md
|
|
215
|
+
retention-days: 30
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# .github/workflows/deploy-github-pages.yaml
|
|
2
|
+
|
|
3
|
+
# Workflow name
|
|
4
|
+
name: Build and Publish Storybook to GitHub Pages
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [develop]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [develop]
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
pages: write
|
|
15
|
+
id-token: write
|
|
16
|
+
|
|
17
|
+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
|
18
|
+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
|
19
|
+
concurrency:
|
|
20
|
+
group: "pages"
|
|
21
|
+
cancel-in-progress: false
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
# Build job
|
|
25
|
+
build:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- name: Setup Node
|
|
32
|
+
uses: actions/setup-node@v4
|
|
33
|
+
with:
|
|
34
|
+
node-version: '20'
|
|
35
|
+
cache: 'npm'
|
|
36
|
+
|
|
37
|
+
- name: Setup Pages
|
|
38
|
+
uses: actions/configure-pages@v5
|
|
39
|
+
|
|
40
|
+
- name: Install dependencies
|
|
41
|
+
run: npm ci
|
|
42
|
+
|
|
43
|
+
- name: Build Storybook
|
|
44
|
+
run: npm run build-storybook
|
|
45
|
+
|
|
46
|
+
- name: Upload artifact
|
|
47
|
+
uses: actions/upload-pages-artifact@v3
|
|
48
|
+
with:
|
|
49
|
+
path: ./storybook-static
|
|
50
|
+
|
|
51
|
+
# Deployment job
|
|
52
|
+
deploy:
|
|
53
|
+
environment:
|
|
54
|
+
name: github-pages
|
|
55
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
needs: build
|
|
58
|
+
if: github.ref == 'refs/heads/develop' && github.event_name == 'push'
|
|
59
|
+
steps:
|
|
60
|
+
- name: Deploy to GitHub Pages
|
|
61
|
+
id: deployment
|
|
62
|
+
uses: actions/deploy-pages@v4
|
package/.prettierrc
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StorybookConfig } from '@storybook/vue3-vite';
|
|
2
|
+
|
|
3
|
+
const config: StorybookConfig = {
|
|
4
|
+
stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
|
|
5
|
+
addons: [
|
|
6
|
+
'@storybook/addon-onboarding',
|
|
7
|
+
'@storybook/addon-links',
|
|
8
|
+
'@storybook/addon-essentials',
|
|
9
|
+
'@chromatic-com/storybook',
|
|
10
|
+
'@storybook/addon-interactions',
|
|
11
|
+
'@storybook/addon-docs',
|
|
12
|
+
],
|
|
13
|
+
framework: {
|
|
14
|
+
name: '@storybook/vue3-vite',
|
|
15
|
+
options: {},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
export default config;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { withVuetifyTheme } from './withVuetifyTheme.decorator';
|
|
2
|
+
import { setup } from '@storybook/vue3';
|
|
3
|
+
import vuetify from '../src/plugins/vuetify';
|
|
4
|
+
import { createInternalI18n } from '../src/i18n/i18n';
|
|
5
|
+
|
|
6
|
+
import '../src/assets/css/base.css'; // Import global CSS
|
|
7
|
+
import '../src/assets/css/variables.css'; // Import global CSS
|
|
8
|
+
|
|
9
|
+
// Setup Vuetify
|
|
10
|
+
setup((app) => {
|
|
11
|
+
app.use(vuetify);
|
|
12
|
+
app.use(createInternalI18n());
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
// Global Types for Theme
|
|
16
|
+
export const globalTypes = {
|
|
17
|
+
theme: {
|
|
18
|
+
docs: {
|
|
19
|
+
source: {
|
|
20
|
+
type: 'dynamic',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
name: 'Theme',
|
|
24
|
+
description: 'Global theme for components',
|
|
25
|
+
toolbar: {
|
|
26
|
+
icon: 'paintbrush',
|
|
27
|
+
items: [
|
|
28
|
+
{ value: 'light', title: 'Light', left: '🌞' },
|
|
29
|
+
{ value: 'dark', title: 'Dark', left: '🌛' },
|
|
30
|
+
],
|
|
31
|
+
dynamicTitle: true,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// Combine with Existing Decorators
|
|
37
|
+
export const decorators = [withVuetifyTheme];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<v-app :theme="themeName">
|
|
3
|
+
<v-main style="background: var(--Soft-Concrete-0)" class="pa-2">
|
|
4
|
+
<slot name="story"></slot>
|
|
5
|
+
</v-main>
|
|
6
|
+
</v-app>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<script>
|
|
10
|
+
export default {
|
|
11
|
+
props: {
|
|
12
|
+
themeName: {
|
|
13
|
+
type: String,
|
|
14
|
+
default: 'light',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
</script>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { h } from 'vue';
|
|
2
|
+
import StoryWrapper from './storyWrapper.vue';
|
|
3
|
+
|
|
4
|
+
export const DEFAULT_THEME = 'light';
|
|
5
|
+
|
|
6
|
+
export const withVuetifyTheme = (storyFn, context) => {
|
|
7
|
+
// Pull our global theme variable, fallback to DEFAULT_THEME
|
|
8
|
+
const themeName = context.globals.theme || DEFAULT_THEME;
|
|
9
|
+
const story = storyFn();
|
|
10
|
+
|
|
11
|
+
return () => {
|
|
12
|
+
return h(
|
|
13
|
+
StoryWrapper,
|
|
14
|
+
// give themeName to StoryWrapper as a prop
|
|
15
|
+
{ themeName },
|
|
16
|
+
{
|
|
17
|
+
story: () => h(story, { ...context.args }),
|
|
18
|
+
},
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
};
|
package/App.vue
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="app">
|
|
3
|
+
<div class="element-container">
|
|
4
|
+
<div style="width: 100%; display: flex; flex-direction: column; gap: 20px;">
|
|
5
|
+
<Card :appointment="value1" :dentist-image-src="value1.dentist.imageSrc" />
|
|
6
|
+
<Card :appointment="value2" :dentist-image-src="value2.dentist.imageSrc" />
|
|
7
|
+
<Card :appointment="value3" :dentist-image-src="value3.dentist.imageSrc" />
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
</template>
|
|
12
|
+
|
|
13
|
+
<script setup lang="ts">
|
|
14
|
+
import {ref} from 'vue';
|
|
15
|
+
import Card from '@/components/Appointment/Card/Card.vue';
|
|
16
|
+
import type { AppointmentData } from '@/types';
|
|
17
|
+
|
|
18
|
+
const value1 = ref<AppointmentData>({
|
|
19
|
+
id: "1",
|
|
20
|
+
patientName: "Max Mustermann",
|
|
21
|
+
start: "2025-09-23T16:00:00Z",
|
|
22
|
+
end: "2025-09-23T16:30:00Z",
|
|
23
|
+
status: "upcoming", // Change to 'past' or 'cancelled' to test other states
|
|
24
|
+
is_confirmed: false,
|
|
25
|
+
template_name: ["Routine Checkup", "Cleaning"],
|
|
26
|
+
description: "ABCD-1234",
|
|
27
|
+
dentist: {
|
|
28
|
+
name: "Dr. Erika Mustermann",
|
|
29
|
+
gender: '',
|
|
30
|
+
imageSrc: ''
|
|
31
|
+
},
|
|
32
|
+
type: 0,
|
|
33
|
+
address: "Musterstraße 1, 12345 Musterstadt",
|
|
34
|
+
district: "Musterstadt-Mitte"
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const value2 = ref<AppointmentData>({
|
|
38
|
+
id: "2",
|
|
39
|
+
patientName: "Erika Mustermann",
|
|
40
|
+
start: "2025-09-23T16:00:00Z",
|
|
41
|
+
end: "2025-09-23T16:30:00Z",
|
|
42
|
+
status: "cancelled", // Change to 'past' or 'cancelled' to test other states
|
|
43
|
+
is_confirmed: false,
|
|
44
|
+
template_name: ["Routine Checkup", "Cleaning"],
|
|
45
|
+
description: "ABCD-1234",
|
|
46
|
+
dentist: {
|
|
47
|
+
name: "Dr. Erika Mustermann",
|
|
48
|
+
gender: '',
|
|
49
|
+
imageSrc: ''
|
|
50
|
+
},
|
|
51
|
+
type: 0,
|
|
52
|
+
address: "Musterstraße 1, 12345 Musterstadt",
|
|
53
|
+
district: "Musterstadt-Mitte"
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const value3 = ref<AppointmentData>({
|
|
57
|
+
id: "3",
|
|
58
|
+
patientName: "Max Mustermann",
|
|
59
|
+
start: "2025-09-23T16:00:00Z",
|
|
60
|
+
end: "2025-09-23T16:30:00Z",
|
|
61
|
+
status: "past", // Change to 'past' or 'cancelled' to test other states
|
|
62
|
+
is_confirmed: false,
|
|
63
|
+
template_name: ["Routine Checkup", "Cleaning"],
|
|
64
|
+
description: "ABCD-1234",
|
|
65
|
+
dentist: {
|
|
66
|
+
name: "Dr. Erika Mustermann",
|
|
67
|
+
gender: '',
|
|
68
|
+
imageSrc: ''
|
|
69
|
+
},
|
|
70
|
+
type: 0,
|
|
71
|
+
address: "Musterstraße 1, 12345 Musterstadt",
|
|
72
|
+
district: "Musterstadt-Mitte"
|
|
73
|
+
});
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<style scoped>
|
|
77
|
+
.app {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
align-items: center;
|
|
82
|
+
width: 100vw;
|
|
83
|
+
height: 100vh;
|
|
84
|
+
background-color: light-blue;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.element-container{
|
|
88
|
+
display: flex;
|
|
89
|
+
flex-direction: column;
|
|
90
|
+
justify-content: center;
|
|
91
|
+
align-items: center;
|
|
92
|
+
width: 70%;
|
|
93
|
+
height: 100%;
|
|
94
|
+
}
|
|
95
|
+
</style>
|
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# WL Shared UI Components
|
|
2
|
+
|
|
3
|
+
This library provides a set of UI components used across all applications within the WL ecosystem.
|
|
4
|
+
|
|
5
|
+
## Adding @wunschlachen/wl-shared-components to a Nuxt Project
|
|
6
|
+
|
|
7
|
+
### Step 1: Install the Library
|
|
8
|
+
|
|
9
|
+
To add WL components, use Node's package manager:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
npm install @wunschlachen/wl-shared-components
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Step 2: Create a Vuetify Plugin File
|
|
17
|
+
|
|
18
|
+
Create a new file named `wlSharedComponents.js` inside your `plugins` folder, and add the following code to define the Vuetify plugin:
|
|
19
|
+
|
|
20
|
+
```javascript
|
|
21
|
+
// plugins/wlSharedComponents.js
|
|
22
|
+
import { defineNuxtPlugin } from "#app";
|
|
23
|
+
import vuetify from "@wunschlachen/wl-shared-components/src/plugins/vuetify";
|
|
24
|
+
|
|
25
|
+
export default defineNuxtPlugin((nuxtApp) => {
|
|
26
|
+
nuxtApp.vueApp.use(vuetify);
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Step 3: Update Nuxt Configuration
|
|
31
|
+
In your nuxt.config.js, add the following configurations:
|
|
32
|
+
|
|
33
|
+
Add vuetify and @wunschlachen/wl-shared-components to the build.transpile section.
|
|
34
|
+
Register the Vuetify plugin by adding it to the plugins array.
|
|
35
|
+
```
|
|
36
|
+
export default defineNuxtConfig({
|
|
37
|
+
build: {
|
|
38
|
+
transpile: ["vuetify", "@wunschlachen/wl-shared-components"],
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Development
|
|
44
|
+
Running Storybook
|
|
45
|
+
To begin development and launch Storybook, execute:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
npm install
|
|
49
|
+
npm run storybook
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Contributing
|
|
53
|
+
|
|
54
|
+
Pull requests are welcome! For major changes, please open an issue first to discuss proposed changes.
|
|
55
|
+
|
|
56
|
+
Ensure that any necessary tests are updated to maintain project integrity.
|
package/heroicons.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { h } from 'vue';
|
|
2
|
+
import * as HeroIcons from '@heroicons/vue/24/outline'; // Heroicons solid icons
|
|
3
|
+
import type { IconSet, IconProps } from 'vuetify';
|
|
4
|
+
|
|
5
|
+
// Import multiple custom SVG components
|
|
6
|
+
import Outline from './src/components/Icons/checkbox.vue';
|
|
7
|
+
import OutlineChecked from './src/components/Icons/outlineChecked.vue';
|
|
8
|
+
import Circle from './src/components/Icons/Circle.vue';
|
|
9
|
+
import Calender from './src/components/Icons/calendar.vue';
|
|
10
|
+
import CalendarNotification from './src/components/Icons/CalendarNotification.vue';
|
|
11
|
+
import Chair from './src/components/Icons/Chair.vue';
|
|
12
|
+
import ChairNotification from './src/components/Icons/ChairNotification.vue';
|
|
13
|
+
import Group3 from './src/components/Icons/Group3.vue';
|
|
14
|
+
import RingNotification from './src/components/Icons/RingNotification.vue';
|
|
15
|
+
import SolidArrowRight from './src/components/Icons/SolidArrowRight.vue';
|
|
16
|
+
import FilledCircle from './src/components/Icons/FilledCircle.vue';
|
|
17
|
+
import FavIcon from './src/components/Icons/FavIcon.vue';
|
|
18
|
+
|
|
19
|
+
// Register custom SVG icons in an object
|
|
20
|
+
const customIcons: Record<string, typeof Outline> = {
|
|
21
|
+
Outline,
|
|
22
|
+
OutlineChecked,
|
|
23
|
+
Circle,
|
|
24
|
+
Calender,
|
|
25
|
+
CalendarNotification,
|
|
26
|
+
Chair,
|
|
27
|
+
ChairNotification,
|
|
28
|
+
Group3,
|
|
29
|
+
RingNotification,
|
|
30
|
+
SolidArrowRight,
|
|
31
|
+
FilledCircle,
|
|
32
|
+
FavIcon,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const heroicons: IconSet = {
|
|
36
|
+
component: (props: IconProps) => {
|
|
37
|
+
let { icon, ...rest } = props;
|
|
38
|
+
|
|
39
|
+
if (typeof icon === 'string') {
|
|
40
|
+
// Convert icon name to PascalCase for custom icons
|
|
41
|
+
const PascalCaseIconName = icon
|
|
42
|
+
.split('-')
|
|
43
|
+
.map((chunk) => chunk.charAt(0).toUpperCase() + chunk.slice(1))
|
|
44
|
+
.join('');
|
|
45
|
+
|
|
46
|
+
const CustomIconComponent =
|
|
47
|
+
customIcons[PascalCaseIconName as keyof typeof customIcons];
|
|
48
|
+
|
|
49
|
+
if (CustomIconComponent) {
|
|
50
|
+
// Render the custom icon if found
|
|
51
|
+
return h(CustomIconComponent, rest);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Otherwise, check for Heroicons
|
|
55
|
+
if (icon.startsWith('heroicons-')) {
|
|
56
|
+
icon = icon.replace('heroicons-', '');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const HeroIconComponent = (HeroIcons as any)[`${PascalCaseIconName}Icon`];
|
|
60
|
+
|
|
61
|
+
if (HeroIconComponent) {
|
|
62
|
+
// Render Heroicon if found
|
|
63
|
+
return h(HeroIconComponent, rest);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
console.warn(`Icon "${icon}" not found.`);
|
|
67
|
+
} else {
|
|
68
|
+
console.warn('Icon value is not a string:', icon);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return null;
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default heroicons;
|
package/index.html
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>My Vite App</title>
|
|
7
|
+
|
|
8
|
+
<!-- Add the link to the Google Font or custom font here -->
|
|
9
|
+
<link
|
|
10
|
+
href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;700&display=swap"
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
/>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<div id="app"></div>
|
|
16
|
+
|
|
17
|
+
<script type="module" src="/src/main.ts"></script>
|
|
18
|
+
</body>
|
|
19
|
+
</html>
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zap-wunschlachen/wl-shared-components",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "vite",
|
|
7
|
+
"dev host": "vite --host",
|
|
8
|
+
"build": "tsc && vite build",
|
|
9
|
+
"preview": "vite preview",
|
|
10
|
+
"storybook": "storybook dev -p 7000",
|
|
11
|
+
"build-storybook": "storybook build",
|
|
12
|
+
"test": "vitest",
|
|
13
|
+
"test:ui-vitest": "vitest --ui",
|
|
14
|
+
"test:unit": "vitest run",
|
|
15
|
+
"test:unit:watch": "vitest watch",
|
|
16
|
+
"test:coverage": "vitest run --coverage",
|
|
17
|
+
"test:e2e": "playwright test",
|
|
18
|
+
"test:e2e:headed": "playwright test --headed",
|
|
19
|
+
"test:e2e:ui": "playwright test --ui",
|
|
20
|
+
"test:e2e:report": "playwright show-report"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@axe-core/playwright": "^4.10.2",
|
|
24
|
+
"@chromatic-com/storybook": "^1.9.0",
|
|
25
|
+
"@playwright/test": "^1.55.0",
|
|
26
|
+
"@storybook/addon-actions": "^8.3.5",
|
|
27
|
+
"@storybook/addon-docs": "^8.3.6",
|
|
28
|
+
"@storybook/addon-essentials": "^8.3.6",
|
|
29
|
+
"@storybook/addon-interactions": "^8.3.5",
|
|
30
|
+
"@storybook/addon-links": "^8.3.5",
|
|
31
|
+
"@storybook/addon-onboarding": "^8.3.5",
|
|
32
|
+
"@storybook/blocks": "^8.3.5",
|
|
33
|
+
"@storybook/test": "^8.3.5",
|
|
34
|
+
"@storybook/vue3": "^8.3.5",
|
|
35
|
+
"@storybook/vue3-vite": "^8.3.5",
|
|
36
|
+
"@testing-library/user-event": "^14.6.1",
|
|
37
|
+
"@testing-library/vue": "^8.1.0",
|
|
38
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
39
|
+
"@vitest/ui": "^3.2.4",
|
|
40
|
+
"@vue/test-utils": "^2.4.6",
|
|
41
|
+
"concurrently": "^9.2.1",
|
|
42
|
+
"happy-dom": "^18.0.1",
|
|
43
|
+
"http-server": "^14.1.1",
|
|
44
|
+
"playwright": "^1.55.0",
|
|
45
|
+
"prettier": "^3.3.1",
|
|
46
|
+
"storybook": "^8.3.5",
|
|
47
|
+
"typescript": "^5.2.2",
|
|
48
|
+
"vite": "^5.2.0",
|
|
49
|
+
"vitest": "^3.2.4",
|
|
50
|
+
"vue": "^3.5.11",
|
|
51
|
+
"wait-on": "^8.0.4"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@heroicons/vue": "^2.1.5",
|
|
55
|
+
"@mdi/font": "^7.4.47",
|
|
56
|
+
"@vitejs/plugin-vue": "^5.1.4",
|
|
57
|
+
"date-fns": "^4.1.0",
|
|
58
|
+
"flag-icons": "^7.5.0",
|
|
59
|
+
"v-phone-input": "^5.1.0",
|
|
60
|
+
"vue-i18n": "^11.1.11",
|
|
61
|
+
"wavesurfer.js": "^7.9.9"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"vuetify": "^3.7.15"
|
|
65
|
+
}
|
|
66
|
+
}
|