@zap-wunschlachen/wl-shared-components 1.0.76 → 1.0.78
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 +229 -229
- package/.github/workflows/static.yml +61 -61
- package/.github/workflows/update-snapshots.yml +37 -37
- package/.prettierrc.json +8 -8
- 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 +139 -139
- package/README.md +56 -56
- package/docs/assets.md +62 -62
- package/heroicons.ts +75 -75
- package/index.html +19 -19
- package/package.json +71 -71
- 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/scripts/check-translations.ts +352 -352
- package/src/assets/css/base.css +242 -242
- package/src/assets/css/variables.css +176 -176
- package/src/components/Accordion/Accordion.css +65 -65
- package/src/components/Accordion/AccordionGroup.vue +88 -88
- package/src/components/Accordion/AccordionItem.vue +272 -272
- package/src/components/Accordion/presets/default.css +4 -4
- package/src/components/Accordion/presets/elevated.css +25 -25
- package/src/components/Accordion/presets/filled.css +26 -26
- package/src/components/Accordion/presets/index.css +5 -5
- package/src/components/Accordion/presets/plain.css +34 -34
- 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 +20 -20
- package/src/components/Appointment/Card/AnamneseNotification.vue +23 -23
- package/src/components/Appointment/Card/Card.css +99 -99
- package/src/components/Appointment/Card/Card.vue +97 -97
- package/src/components/Appointment/Card/Details.css +62 -62
- package/src/components/Appointment/Card/Details.vue +44 -44
- package/src/components/Audio/Audio.vue +187 -187
- package/src/components/Audio/Waveform.vue +118 -118
- package/src/components/Banner/Banner.css +29 -29
- package/src/components/Banner/Banner.vue +89 -89
- package/src/components/Button/Button.vue +257 -257
- package/src/components/CheckBox/CheckBox.css +234 -234
- package/src/components/CheckBox/Checkbox.vue +184 -184
- package/src/components/DateInput/DateInput.css +2 -2
- package/src/components/DateInput/DateInput.vue +376 -370
- package/src/components/Dialog/Dialog.css +6 -6
- package/src/components/Dialog/Dialog.vue +46 -46
- package/src/components/EditField/EditField.css +19 -19
- package/src/components/EditField/EditField.vue +211 -211
- package/src/components/ErrorPage/ErrorPage.css +172 -172
- package/src/components/IconBullet/IconBullet.vue +104 -104
- package/src/components/IconBullet/IconBulletList.vue +55 -55
- package/src/components/Icons/AdvanceAppointments.vue +161 -161
- package/src/components/Icons/Audio/CloudFailed.vue +27 -27
- package/src/components/Icons/Audio/CloudSaved.vue +28 -28
- package/src/components/Icons/Audio/Delete.vue +22 -22
- package/src/components/Icons/Audio/Pause.vue +25 -25
- package/src/components/Icons/Audio/Play.vue +22 -22
- package/src/components/Icons/Calendar.vue +28 -28
- package/src/components/Icons/CalendarNotification.vue +137 -137
- package/src/components/Icons/Chair.vue +43 -43
- package/src/components/Icons/ChairNotification.vue +46 -46
- package/src/components/Icons/Circle.vue +66 -66
- package/src/components/Icons/FavIcon.vue +69 -69
- package/src/components/Icons/FilledCircle.vue +11 -11
- package/src/components/Icons/Group3.vue +57 -57
- package/src/components/Icons/Play.vue +16 -16
- package/src/components/Icons/RingNotification.vue +65 -65
- package/src/components/Icons/SolidArrowRight.vue +14 -14
- package/src/components/Icons/checkbox.vue +19 -19
- package/src/components/Icons/outlineChecked.vue +38 -38
- package/src/components/Input/Input.css +234 -234
- package/src/components/Input/Input.vue +281 -281
- 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 +78 -78
- package/src/components/MaintenanceBanner/MaintenanceBanner.css +353 -353
- package/src/components/MaintenanceBanner/MaintenanceBanner.vue +140 -140
- package/src/components/MaintenanceBanner/MaintenanceIllustration.vue +54 -54
- package/src/components/Modal/Modal.css +5 -5
- package/src/components/Modal/Modal.vue +29 -29
- package/src/components/NotificationBubble/NotificationBubble.css +4 -4
- package/src/components/NotificationBubble/NotificationBubble.vue +90 -90
- package/src/components/OtpInput/OtpInput.css +43 -43
- package/src/components/OtpInput/OtpInput.vue +181 -181
- package/src/components/PhoneInput/PhoneInput.css +151 -126
- package/src/components/PhoneInput/PhoneInput.vue +230 -139
- package/src/components/RadioGroup/RadioGroup.css +65 -0
- package/src/components/RadioGroup/RadioGroup.vue +134 -0
- package/src/components/Select/Select.css +172 -172
- package/src/components/Select/Select.vue +377 -377
- package/src/components/SelectAutocomplete/SelectAutocomplete.css +172 -172
- package/src/components/SelectAutocomplete/SelectAutocomplete.vue +414 -414
- package/src/components/TextArea/TextArea.css +269 -269
- package/src/components/TextArea/TextArea.vue +207 -207
- package/src/components/TickBox/TickBox.css +116 -116
- package/src/components/TickBox/TickBox.vue +172 -172
- package/src/components/Tile/Tile.css +106 -106
- package/src/components/Tile/Tile.vue +173 -173
- package/src/components/accessibility.css +218 -218
- package/src/components/index.ts +110 -109
- 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 +43 -43
- package/src/main.ts +11 -11
- package/src/pages/AccordionGroupPage.vue +873 -873
- package/src/pages/AllPage.vue +2483 -2365
- package/src/pages/SelectPage.vue +1302 -1302
- package/src/pages/TilePage.vue +902 -902
- package/src/plugins/vuetify.ts +54 -54
- package/src/shims-vue.d.ts +30 -30
- package/src/utils/index.ts +733 -733
- package/src/vite-env.d.ts +1 -1
- package/tests/unit/accessibility/component-a11y.spec.ts +657 -657
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts +228 -228
- package/tests/unit/components/Accordion/AccordionItem.spec.ts +257 -257
- package/tests/unit/components/Appointment/AnamneseNotification.spec.ts +176 -176
- package/tests/unit/components/Appointment/Card/Actions.spec.ts +436 -436
- package/tests/unit/components/Appointment/Card/Card.spec.ts +531 -531
- package/tests/unit/components/Appointment/Card/Details.spec.ts +395 -395
- 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/AnamneseAnswerDialog.spec.ts +344 -0
- package/tests/unit/components/Core/Banner.spec.ts +187 -0
- package/tests/unit/components/Core/Button.spec.ts +346 -346
- package/tests/unit/components/Core/Checkbox.spec.ts +544 -544
- package/tests/unit/components/Core/DateInput.spec.ts +702 -702
- package/tests/unit/components/Core/Dialog.spec.ts +448 -448
- package/tests/unit/components/Core/EditField.spec.ts +541 -541
- package/tests/unit/components/Core/Input.spec.ts +512 -512
- package/tests/unit/components/Core/List.spec.ts +163 -0
- package/tests/unit/components/Core/ListItem.spec.ts +205 -0
- 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 +757 -619
- package/tests/unit/components/Core/RadioGroup.spec.ts +318 -0
- package/tests/unit/components/Core/Select.spec.ts +712 -712
- package/tests/unit/components/Core/SelectAutocomplete.spec.ts +361 -0
- package/tests/unit/components/Core/TextArea.spec.ts +565 -565
- package/tests/unit/components/Core/TickBox.spec.ts +836 -836
- package/tests/unit/components/Core/Tile.spec.ts +286 -0
- package/tests/unit/components/DateInput/DateInput.spec.ts +128 -0
- 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 +186 -186
- 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 +193 -193
- package/tests/unit/components/Icons/Chair.spec.ts +241 -241
- package/tests/unit/components/Icons/ChairNotification.spec.ts +318 -318
- package/tests/unit/components/Icons/Circle.spec.ts +255 -255
- package/tests/unit/components/Icons/FavIcon.spec.ts +259 -259
- package/tests/unit/components/Icons/FilledCircle.spec.ts +274 -274
- package/tests/unit/components/Icons/Group3.spec.ts +362 -362
- package/tests/unit/components/Icons/Logo.spec.ts +229 -229
- package/tests/unit/components/Icons/MiniLogo.spec.ts +38 -38
- package/tests/unit/components/Icons/RingNotification.spec.ts +400 -400
- package/tests/unit/components/Icons/SolidArrowRight.spec.ts +49 -49
- package/tests/unit/components/Icons/calendar.spec.ts +293 -293
- package/tests/unit/components/Icons/checkbox.spec.ts +315 -315
- package/tests/unit/components/Icons/outlineChecked.spec.ts +441 -441
- package/tests/unit/components/Icons/play.spec.ts +315 -315
- 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 +182 -182
- package/tests/unit/setup.ts +237 -237
- 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 +111 -111
- package/tests/unit/utils/accessibility.spec.ts +318 -318
- package/tests/unit/utils/anamnese.spec.ts +531 -0
- package/tsconfig.json +26 -26
- package/vite.config.ts +29 -29
- package/vitest.config.ts +91 -91
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Global Accessibility Styles
|
|
3
|
-
*
|
|
4
|
-
* These styles ensure WCAG 2.1 AA compliance for all components.
|
|
5
|
-
* Required for German accessibility requirements (BITV 2.0).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/* =====================================================
|
|
9
|
-
FOCUS INDICATORS
|
|
10
|
-
WCAG 2.4.7: Focus Visible (Level AA)
|
|
11
|
-
===================================================== */
|
|
12
|
-
|
|
13
|
-
/* Universal focus-visible style for all interactive elements */
|
|
14
|
-
.wl-button:focus-visible,
|
|
15
|
-
button:focus-visible,
|
|
16
|
-
a:focus-visible,
|
|
17
|
-
input:focus-visible,
|
|
18
|
-
select:focus-visible,
|
|
19
|
-
textarea:focus-visible,
|
|
20
|
-
[tabindex="0"]:focus-visible {
|
|
21
|
-
outline: 2px solid var(--Dental-Blue-0, #172774);
|
|
22
|
-
outline-offset: 2px;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/* High contrast focus for dark backgrounds */
|
|
26
|
-
.wl-button.v-btn--variant-flat:focus-visible {
|
|
27
|
-
outline-color: white;
|
|
28
|
-
box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.5);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/* Checkbox focus indicator */
|
|
32
|
-
.input-checkbox:focus-visible {
|
|
33
|
-
outline: 2px solid var(--Dental-Blue-0, #172774);
|
|
34
|
-
outline-offset: 2px;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/* Button focus styles */
|
|
38
|
-
.wl-button:focus-visible {
|
|
39
|
-
outline: 2px solid currentColor;
|
|
40
|
-
outline-offset: 2px;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.wl-button.v-btn--variant-outlined:focus-visible {
|
|
44
|
-
outline: 2px solid var(--Dental-Blue-0, #172774);
|
|
45
|
-
outline-offset: 2px;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* Input focus styles */
|
|
49
|
-
.v-text-field input:focus-visible,
|
|
50
|
-
.v-textarea textarea:focus-visible {
|
|
51
|
-
outline: none; /* Vuetify handles this via border */
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.v-text-field:focus-within {
|
|
55
|
-
border-color: var(--Dental-Blue-0, #172774) !important;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/* Select/Combobox focus */
|
|
59
|
-
.wl-select .v-field:focus-within {
|
|
60
|
-
border-color: var(--Dental-Blue-0, #172774) !important;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* =====================================================
|
|
64
|
-
REDUCED MOTION
|
|
65
|
-
WCAG 2.3.3: Animation from Interactions (Level AAA)
|
|
66
|
-
===================================================== */
|
|
67
|
-
|
|
68
|
-
@media (prefers-reduced-motion: reduce) {
|
|
69
|
-
*,
|
|
70
|
-
*::before,
|
|
71
|
-
*::after {
|
|
72
|
-
animation-duration: 0.01ms !important;
|
|
73
|
-
animation-iteration-count: 1 !important;
|
|
74
|
-
transition-duration: 0.01ms !important;
|
|
75
|
-
scroll-behavior: auto !important;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/* =====================================================
|
|
80
|
-
HIGH CONTRAST MODE
|
|
81
|
-
Windows High Contrast Mode Support
|
|
82
|
-
===================================================== */
|
|
83
|
-
|
|
84
|
-
@media (forced-colors: active) {
|
|
85
|
-
.wl-button {
|
|
86
|
-
border: 2px solid currentColor;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.input-checkbox {
|
|
90
|
-
border: 2px solid currentColor;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.input-checkbox:checked::before {
|
|
94
|
-
background-color: currentColor;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* =====================================================
|
|
99
|
-
DISABLED STATES
|
|
100
|
-
Ensure disabled elements maintain contrast
|
|
101
|
-
WCAG 1.4.3: Contrast (Minimum) - Note: Disabled elements are exempt
|
|
102
|
-
but we still aim for visibility
|
|
103
|
-
===================================================== */
|
|
104
|
-
|
|
105
|
-
.wl-button:disabled,
|
|
106
|
-
.wl-button[aria-disabled="true"] {
|
|
107
|
-
opacity: 0.6;
|
|
108
|
-
cursor: not-allowed;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.input-checkbox:disabled {
|
|
112
|
-
opacity: 0.6;
|
|
113
|
-
cursor: not-allowed;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/* =====================================================
|
|
117
|
-
SKIP LINKS
|
|
118
|
-
WCAG 2.4.1: Bypass Blocks (Level A)
|
|
119
|
-
===================================================== */
|
|
120
|
-
|
|
121
|
-
.skip-link {
|
|
122
|
-
position: absolute;
|
|
123
|
-
top: -40px;
|
|
124
|
-
left: 0;
|
|
125
|
-
background: var(--Dental-Blue-0, #172774);
|
|
126
|
-
color: white;
|
|
127
|
-
padding: 8px 16px;
|
|
128
|
-
z-index: 10000;
|
|
129
|
-
text-decoration: none;
|
|
130
|
-
font-weight: 600;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.skip-link:focus {
|
|
134
|
-
top: 0;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/* =====================================================
|
|
138
|
-
SCREEN READER ONLY
|
|
139
|
-
Visually hidden but accessible to screen readers
|
|
140
|
-
===================================================== */
|
|
141
|
-
|
|
142
|
-
.sr-only {
|
|
143
|
-
position: absolute;
|
|
144
|
-
width: 1px;
|
|
145
|
-
height: 1px;
|
|
146
|
-
padding: 0;
|
|
147
|
-
margin: -1px;
|
|
148
|
-
overflow: hidden;
|
|
149
|
-
clip: rect(0, 0, 0, 0);
|
|
150
|
-
white-space: nowrap;
|
|
151
|
-
border: 0;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/* =====================================================
|
|
155
|
-
ICON BUTTONS
|
|
156
|
-
Ensure icon-only buttons are accessible
|
|
157
|
-
===================================================== */
|
|
158
|
-
|
|
159
|
-
.icon-button {
|
|
160
|
-
position: relative;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/* Show in development environments */
|
|
164
|
-
body.dev-mode .icon-button:not([aria-label]):not([aria-labelledby])::after {
|
|
165
|
-
content: "Warning: Missing accessible name";
|
|
166
|
-
position: absolute;
|
|
167
|
-
background: red;
|
|
168
|
-
color: white;
|
|
169
|
-
font-size: 10px;
|
|
170
|
-
padding: 2px;
|
|
171
|
-
display: block;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/* =====================================================
|
|
175
|
-
LOADING STATES
|
|
176
|
-
WCAG 4.1.3: Status Messages (Level AA)
|
|
177
|
-
===================================================== */
|
|
178
|
-
|
|
179
|
-
.loading-indicator {
|
|
180
|
-
/* Announce loading state to screen readers */
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
[aria-busy="true"] {
|
|
184
|
-
cursor: wait;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/* =====================================================
|
|
188
|
-
ERROR STATES
|
|
189
|
-
Ensure error messages are visible and announced
|
|
190
|
-
===================================================== */
|
|
191
|
-
|
|
192
|
-
.error-message {
|
|
193
|
-
color: var(--Error-Red-0, #d32f2f);
|
|
194
|
-
font-weight: 500;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
[aria-invalid="true"] {
|
|
198
|
-
border-color: var(--Error-Red-0, #d32f2f) !important;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/* =====================================================
|
|
202
|
-
MINIMUM TOUCH TARGET SIZE
|
|
203
|
-
WCAG 2.5.5: Target Size (Level AAA) - 44x44px minimum
|
|
204
|
-
===================================================== */
|
|
205
|
-
|
|
206
|
-
.touch-target-min {
|
|
207
|
-
min-width: 44px;
|
|
208
|
-
min-height: 44px;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/* =====================================================
|
|
212
|
-
TEXT SPACING
|
|
213
|
-
WCAG 1.4.12: Text Spacing (Level AA)
|
|
214
|
-
Content should support user adjustments
|
|
215
|
-
===================================================== */
|
|
216
|
-
|
|
217
|
-
/* These rules ensure content adapts when users adjust text spacing */
|
|
218
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Global Accessibility Styles
|
|
3
|
+
*
|
|
4
|
+
* These styles ensure WCAG 2.1 AA compliance for all components.
|
|
5
|
+
* Required for German accessibility requirements (BITV 2.0).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* =====================================================
|
|
9
|
+
FOCUS INDICATORS
|
|
10
|
+
WCAG 2.4.7: Focus Visible (Level AA)
|
|
11
|
+
===================================================== */
|
|
12
|
+
|
|
13
|
+
/* Universal focus-visible style for all interactive elements */
|
|
14
|
+
.wl-button:focus-visible,
|
|
15
|
+
button:focus-visible,
|
|
16
|
+
a:focus-visible,
|
|
17
|
+
input:focus-visible,
|
|
18
|
+
select:focus-visible,
|
|
19
|
+
textarea:focus-visible,
|
|
20
|
+
[tabindex="0"]:focus-visible {
|
|
21
|
+
outline: 2px solid var(--Dental-Blue-0, #172774);
|
|
22
|
+
outline-offset: 2px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* High contrast focus for dark backgrounds */
|
|
26
|
+
.wl-button.v-btn--variant-flat:focus-visible {
|
|
27
|
+
outline-color: white;
|
|
28
|
+
box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.5);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Checkbox focus indicator */
|
|
32
|
+
.input-checkbox:focus-visible {
|
|
33
|
+
outline: 2px solid var(--Dental-Blue-0, #172774);
|
|
34
|
+
outline-offset: 2px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Button focus styles */
|
|
38
|
+
.wl-button:focus-visible {
|
|
39
|
+
outline: 2px solid currentColor;
|
|
40
|
+
outline-offset: 2px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.wl-button.v-btn--variant-outlined:focus-visible {
|
|
44
|
+
outline: 2px solid var(--Dental-Blue-0, #172774);
|
|
45
|
+
outline-offset: 2px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Input focus styles */
|
|
49
|
+
.v-text-field input:focus-visible,
|
|
50
|
+
.v-textarea textarea:focus-visible {
|
|
51
|
+
outline: none; /* Vuetify handles this via border */
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.v-text-field:focus-within {
|
|
55
|
+
border-color: var(--Dental-Blue-0, #172774) !important;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* Select/Combobox focus */
|
|
59
|
+
.wl-select .v-field:focus-within {
|
|
60
|
+
border-color: var(--Dental-Blue-0, #172774) !important;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* =====================================================
|
|
64
|
+
REDUCED MOTION
|
|
65
|
+
WCAG 2.3.3: Animation from Interactions (Level AAA)
|
|
66
|
+
===================================================== */
|
|
67
|
+
|
|
68
|
+
@media (prefers-reduced-motion: reduce) {
|
|
69
|
+
*,
|
|
70
|
+
*::before,
|
|
71
|
+
*::after {
|
|
72
|
+
animation-duration: 0.01ms !important;
|
|
73
|
+
animation-iteration-count: 1 !important;
|
|
74
|
+
transition-duration: 0.01ms !important;
|
|
75
|
+
scroll-behavior: auto !important;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* =====================================================
|
|
80
|
+
HIGH CONTRAST MODE
|
|
81
|
+
Windows High Contrast Mode Support
|
|
82
|
+
===================================================== */
|
|
83
|
+
|
|
84
|
+
@media (forced-colors: active) {
|
|
85
|
+
.wl-button {
|
|
86
|
+
border: 2px solid currentColor;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.input-checkbox {
|
|
90
|
+
border: 2px solid currentColor;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.input-checkbox:checked::before {
|
|
94
|
+
background-color: currentColor;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* =====================================================
|
|
99
|
+
DISABLED STATES
|
|
100
|
+
Ensure disabled elements maintain contrast
|
|
101
|
+
WCAG 1.4.3: Contrast (Minimum) - Note: Disabled elements are exempt
|
|
102
|
+
but we still aim for visibility
|
|
103
|
+
===================================================== */
|
|
104
|
+
|
|
105
|
+
.wl-button:disabled,
|
|
106
|
+
.wl-button[aria-disabled="true"] {
|
|
107
|
+
opacity: 0.6;
|
|
108
|
+
cursor: not-allowed;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.input-checkbox:disabled {
|
|
112
|
+
opacity: 0.6;
|
|
113
|
+
cursor: not-allowed;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* =====================================================
|
|
117
|
+
SKIP LINKS
|
|
118
|
+
WCAG 2.4.1: Bypass Blocks (Level A)
|
|
119
|
+
===================================================== */
|
|
120
|
+
|
|
121
|
+
.skip-link {
|
|
122
|
+
position: absolute;
|
|
123
|
+
top: -40px;
|
|
124
|
+
left: 0;
|
|
125
|
+
background: var(--Dental-Blue-0, #172774);
|
|
126
|
+
color: white;
|
|
127
|
+
padding: 8px 16px;
|
|
128
|
+
z-index: 10000;
|
|
129
|
+
text-decoration: none;
|
|
130
|
+
font-weight: 600;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.skip-link:focus {
|
|
134
|
+
top: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* =====================================================
|
|
138
|
+
SCREEN READER ONLY
|
|
139
|
+
Visually hidden but accessible to screen readers
|
|
140
|
+
===================================================== */
|
|
141
|
+
|
|
142
|
+
.sr-only {
|
|
143
|
+
position: absolute;
|
|
144
|
+
width: 1px;
|
|
145
|
+
height: 1px;
|
|
146
|
+
padding: 0;
|
|
147
|
+
margin: -1px;
|
|
148
|
+
overflow: hidden;
|
|
149
|
+
clip: rect(0, 0, 0, 0);
|
|
150
|
+
white-space: nowrap;
|
|
151
|
+
border: 0;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* =====================================================
|
|
155
|
+
ICON BUTTONS
|
|
156
|
+
Ensure icon-only buttons are accessible
|
|
157
|
+
===================================================== */
|
|
158
|
+
|
|
159
|
+
.icon-button {
|
|
160
|
+
position: relative;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* Show in development environments */
|
|
164
|
+
body.dev-mode .icon-button:not([aria-label]):not([aria-labelledby])::after {
|
|
165
|
+
content: "Warning: Missing accessible name";
|
|
166
|
+
position: absolute;
|
|
167
|
+
background: red;
|
|
168
|
+
color: white;
|
|
169
|
+
font-size: 10px;
|
|
170
|
+
padding: 2px;
|
|
171
|
+
display: block;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* =====================================================
|
|
175
|
+
LOADING STATES
|
|
176
|
+
WCAG 4.1.3: Status Messages (Level AA)
|
|
177
|
+
===================================================== */
|
|
178
|
+
|
|
179
|
+
.loading-indicator {
|
|
180
|
+
/* Announce loading state to screen readers */
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
[aria-busy="true"] {
|
|
184
|
+
cursor: wait;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* =====================================================
|
|
188
|
+
ERROR STATES
|
|
189
|
+
Ensure error messages are visible and announced
|
|
190
|
+
===================================================== */
|
|
191
|
+
|
|
192
|
+
.error-message {
|
|
193
|
+
color: var(--Error-Red-0, #d32f2f);
|
|
194
|
+
font-weight: 500;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
[aria-invalid="true"] {
|
|
198
|
+
border-color: var(--Error-Red-0, #d32f2f) !important;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* =====================================================
|
|
202
|
+
MINIMUM TOUCH TARGET SIZE
|
|
203
|
+
WCAG 2.5.5: Target Size (Level AAA) - 44x44px minimum
|
|
204
|
+
===================================================== */
|
|
205
|
+
|
|
206
|
+
.touch-target-min {
|
|
207
|
+
min-width: 44px;
|
|
208
|
+
min-height: 44px;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* =====================================================
|
|
212
|
+
TEXT SPACING
|
|
213
|
+
WCAG 1.4.12: Text Spacing (Level AA)
|
|
214
|
+
Content should support user adjustments
|
|
215
|
+
===================================================== */
|
|
216
|
+
|
|
217
|
+
/* These rules ensure content adapts when users adjust text spacing */
|
|
218
|
+
|
package/src/components/index.ts
CHANGED
|
@@ -1,109 +1,110 @@
|
|
|
1
|
-
// Components index file
|
|
2
|
-
|
|
3
|
-
// Accordion
|
|
4
|
-
export { default as AccordionItem } from './Accordion/AccordionItem.vue';
|
|
5
|
-
export { default as AccordionGroup } from './Accordion/AccordionGroup.vue';
|
|
6
|
-
|
|
7
|
-
// Banner
|
|
8
|
-
export { default as Banner } from './Banner/Banner.vue';
|
|
9
|
-
|
|
10
|
-
// Appointment
|
|
11
|
-
export { default as AppointmentCard } from './Appointment/Card/Card.vue';
|
|
12
|
-
export { default as AppointmentCardActions } from './Appointment/Card/Actions.vue';
|
|
13
|
-
export { default as AppointmentCardDetails } from './Appointment/Card/Details.vue';
|
|
14
|
-
export { default as AnamneseNotification } from './Appointment/Card/AnamneseNotification.vue';
|
|
15
|
-
|
|
16
|
-
// Audio
|
|
17
|
-
export { default as Audio } from './Audio/Audio.vue';
|
|
18
|
-
export { default as Waveform } from './Audio/Waveform.vue';
|
|
19
|
-
|
|
20
|
-
// Background
|
|
21
|
-
export { default as Background } from './Background/Background.vue';
|
|
22
|
-
export { default as WhiteCocoonBackground } from './Background/WhiteCocoonBackground.vue';
|
|
23
|
-
export { default as WunschlachenBackground } from './Background/WunschlachenBackground.vue';
|
|
24
|
-
|
|
25
|
-
// Core Components
|
|
26
|
-
export { default as Button } from './Button/Button.vue';
|
|
27
|
-
export { default as Checkbox } from './CheckBox/Checkbox.vue';
|
|
28
|
-
export { default as DateInput } from './DateInput/DateInput.vue';
|
|
29
|
-
export { default as Dialog } from './Dialog/Dialog.vue';
|
|
30
|
-
export { default as AnamneseAnswerDialog } from './AnamneseAnswerDialog/AnamneseAnswerDialog.vue';
|
|
31
|
-
export { default as EditField } from './EditField/EditField.vue';
|
|
32
|
-
export { default as Input } from './Input/Input.vue';
|
|
33
|
-
export { default as Modal } from './Modal/Modal.vue';
|
|
34
|
-
export { default as NotificationBubble } from './NotificationBubble/NotificationBubble.vue';
|
|
35
|
-
export { default as OtpInput } from './OtpInput/OtpInput.vue';
|
|
36
|
-
export { default as PhoneInput } from './PhoneInput/PhoneInput.vue';
|
|
37
|
-
export { default as
|
|
38
|
-
export { default as
|
|
39
|
-
export { default as
|
|
40
|
-
export { default as
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export { default as
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
export { default as
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
export { default as
|
|
53
|
-
export { default as
|
|
54
|
-
export { default as
|
|
55
|
-
export { default as
|
|
56
|
-
export { default as
|
|
57
|
-
export { default as
|
|
58
|
-
export { default as
|
|
59
|
-
export { default as
|
|
60
|
-
export { default as
|
|
61
|
-
export { default as
|
|
62
|
-
export { default as
|
|
63
|
-
export { default as
|
|
64
|
-
export { default as
|
|
65
|
-
export { default as
|
|
66
|
-
export { default as
|
|
67
|
-
export { default as
|
|
68
|
-
export { default as
|
|
69
|
-
export { default as
|
|
70
|
-
export { default as
|
|
71
|
-
export { default as
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
export { default as
|
|
76
|
-
export { default as
|
|
77
|
-
export { default as
|
|
78
|
-
export { default as
|
|
79
|
-
export { default as
|
|
80
|
-
export { default as
|
|
81
|
-
export { default as
|
|
82
|
-
export { default as
|
|
83
|
-
export { default as
|
|
84
|
-
export { default as
|
|
85
|
-
export { default as
|
|
86
|
-
export { default as
|
|
87
|
-
export { default as
|
|
88
|
-
export { default as
|
|
89
|
-
export { default as
|
|
90
|
-
export { default as
|
|
91
|
-
export { default as
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
export { default as
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
export { default as
|
|
103
|
-
export { default as
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
1
|
+
// Components index file
|
|
2
|
+
|
|
3
|
+
// Accordion
|
|
4
|
+
export { default as AccordionItem } from './Accordion/AccordionItem.vue';
|
|
5
|
+
export { default as AccordionGroup } from './Accordion/AccordionGroup.vue';
|
|
6
|
+
|
|
7
|
+
// Banner
|
|
8
|
+
export { default as Banner } from './Banner/Banner.vue';
|
|
9
|
+
|
|
10
|
+
// Appointment
|
|
11
|
+
export { default as AppointmentCard } from './Appointment/Card/Card.vue';
|
|
12
|
+
export { default as AppointmentCardActions } from './Appointment/Card/Actions.vue';
|
|
13
|
+
export { default as AppointmentCardDetails } from './Appointment/Card/Details.vue';
|
|
14
|
+
export { default as AnamneseNotification } from './Appointment/Card/AnamneseNotification.vue';
|
|
15
|
+
|
|
16
|
+
// Audio
|
|
17
|
+
export { default as Audio } from './Audio/Audio.vue';
|
|
18
|
+
export { default as Waveform } from './Audio/Waveform.vue';
|
|
19
|
+
|
|
20
|
+
// Background
|
|
21
|
+
export { default as Background } from './Background/Background.vue';
|
|
22
|
+
export { default as WhiteCocoonBackground } from './Background/WhiteCocoonBackground.vue';
|
|
23
|
+
export { default as WunschlachenBackground } from './Background/WunschlachenBackground.vue';
|
|
24
|
+
|
|
25
|
+
// Core Components
|
|
26
|
+
export { default as Button } from './Button/Button.vue';
|
|
27
|
+
export { default as Checkbox } from './CheckBox/Checkbox.vue';
|
|
28
|
+
export { default as DateInput } from './DateInput/DateInput.vue';
|
|
29
|
+
export { default as Dialog } from './Dialog/Dialog.vue';
|
|
30
|
+
export { default as AnamneseAnswerDialog } from './AnamneseAnswerDialog/AnamneseAnswerDialog.vue';
|
|
31
|
+
export { default as EditField } from './EditField/EditField.vue';
|
|
32
|
+
export { default as Input } from './Input/Input.vue';
|
|
33
|
+
export { default as Modal } from './Modal/Modal.vue';
|
|
34
|
+
export { default as NotificationBubble } from './NotificationBubble/NotificationBubble.vue';
|
|
35
|
+
export { default as OtpInput } from './OtpInput/OtpInput.vue';
|
|
36
|
+
export { default as PhoneInput } from './PhoneInput/PhoneInput.vue';
|
|
37
|
+
export { default as RadioGroup } from './RadioGroup/RadioGroup.vue';
|
|
38
|
+
export { default as Select } from './Select/Select.vue';
|
|
39
|
+
export { default as SelectAutocomplete } from './SelectAutocomplete/SelectAutocomplete.vue';
|
|
40
|
+
export { default as TextArea } from './TextArea/TextArea.vue';
|
|
41
|
+
export { default as TickBox } from './TickBox/TickBox.vue';
|
|
42
|
+
|
|
43
|
+
// ErrorPage
|
|
44
|
+
export { default as ErrorPage } from './ErrorPage/ErrorPage.vue';
|
|
45
|
+
export { default as ErrorPageLogo } from './ErrorPage/ErrorPageLogo.vue';
|
|
46
|
+
|
|
47
|
+
// IconBullet
|
|
48
|
+
export { default as IconBullet } from './IconBullet/IconBullet.vue';
|
|
49
|
+
export { default as IconBulletList } from './IconBullet/IconBulletList.vue';
|
|
50
|
+
|
|
51
|
+
// Icons
|
|
52
|
+
export { default as AdvanceAppointmentIcons } from './Icons/AdvanceAppointments.vue';
|
|
53
|
+
export { default as AudioCloudFailedIcon } from './Icons/Audio/CloudFailed.vue';
|
|
54
|
+
export { default as AudioCloudSavedIcon } from './Icons/Audio/CloudSaved.vue';
|
|
55
|
+
export { default as AudioDeleteIcon } from './Icons/Audio/Delete.vue';
|
|
56
|
+
export { default as AudioPauseIcon } from './Icons/Audio/Pause.vue';
|
|
57
|
+
export { default as AudioPlayIcon } from './Icons/Audio/Play.vue';
|
|
58
|
+
export { default as CalendarIcon } from './Icons/Calendar.vue';
|
|
59
|
+
export { default as CalendarNotificationIcon } from './Icons/CalendarNotification.vue';
|
|
60
|
+
export { default as ChairIcon } from './Icons/Chair.vue';
|
|
61
|
+
export { default as ChairNotificationIcon } from './Icons/ChairNotification.vue';
|
|
62
|
+
export { default as CheckboxIcon } from './Icons/checkbox.vue';
|
|
63
|
+
export { default as CircleIcon } from './Icons/Circle.vue';
|
|
64
|
+
export { default as FavIcon } from './Icons/FavIcon.vue';
|
|
65
|
+
export { default as FilledCircleIcon } from './Icons/FilledCircle.vue';
|
|
66
|
+
export { default as Group3Icon } from './Icons/Group3.vue';
|
|
67
|
+
export { default as Logo } from './Icons/Logo.vue';
|
|
68
|
+
export { default as MiniLogo } from './Icons/MiniLogo.vue';
|
|
69
|
+
export { default as OutlineCheckedIcon } from './Icons/outlineChecked.vue';
|
|
70
|
+
export { default as PlayIcon } from './Icons/Play.vue';
|
|
71
|
+
export { default as RingNotificationIcon } from './Icons/RingNotification.vue';
|
|
72
|
+
export { default as SolidArrowRightIcon } from './Icons/SolidArrowRight.vue';
|
|
73
|
+
|
|
74
|
+
// Laboratory
|
|
75
|
+
export { default as LabAppointmentCard } from './Laboratory/AppointmentCard/AppointmentCard.vue';
|
|
76
|
+
export { default as ChatBoxImage } from './Laboratory/ChatBoxImage/ChatBoxImage.vue';
|
|
77
|
+
export { default as ChatMessage } from './Laboratory/ChatMessage/ChatMessage.vue';
|
|
78
|
+
export { default as ChatMessageBadge } from './Laboratory/ChatMessage/ChatMessageBadge.vue';
|
|
79
|
+
export { default as ChatNotification } from './Laboratory/ChatNotification/ChatNotification.vue';
|
|
80
|
+
export { default as DocumentCard } from './Laboratory/DocumentCard/DocumentCard.vue';
|
|
81
|
+
export { default as DocumentCardItem } from './Laboratory/DocumentCard/DocumentCardItem.vue';
|
|
82
|
+
export { default as InfoCard } from './Laboratory/InfoCard/InfoCard.vue';
|
|
83
|
+
export { default as MainColumnsBar } from './Laboratory/MainColumnsBar/MainColumnsBar.vue';
|
|
84
|
+
export { default as ProgressCircle } from './Laboratory/ProgressCircle/ProgressCircle.vue';
|
|
85
|
+
export { default as ProgressLinear } from './Laboratory/ProgressLinear/ProgressLinear.vue';
|
|
86
|
+
export { default as SelectionColumnBar } from './Laboratory/SelectionColumnBar/SelectionColumnBar.vue';
|
|
87
|
+
export { default as StatusNotification } from './Laboratory/StatusNotification/StatusNotification.vue';
|
|
88
|
+
export { default as TagLabel } from './Laboratory/TagLabel/TagLabel.vue';
|
|
89
|
+
export { default as TagLabelGroup } from './Laboratory/TagLabelGroup/TagLabelGroup.vue';
|
|
90
|
+
export { default as TicketCard } from './Laboratory/TicketCard/TicketCard.vue';
|
|
91
|
+
export { default as Timeline } from './Laboratory/TimeLine/Timeline.vue';
|
|
92
|
+
export { default as TimelineEvent } from './Laboratory/TimeLine/TimeLineEvent.vue';
|
|
93
|
+
|
|
94
|
+
// List
|
|
95
|
+
export { default as List } from './List/List.vue';
|
|
96
|
+
export { default as ListItem } from './ListItem/ListItem.vue';
|
|
97
|
+
|
|
98
|
+
// Loader
|
|
99
|
+
export { default as Loader } from './Loader/Loader.vue';
|
|
100
|
+
|
|
101
|
+
// Banners
|
|
102
|
+
export { default as MaintenanceBanner } from './MaintenanceBanner/MaintenanceBanner.vue';
|
|
103
|
+
export { default as MaintenanceIllustration } from './MaintenanceBanner/MaintenanceIllustration.vue';
|
|
104
|
+
export { default as StagingBanner } from './StagingBanner/StagingBanner.vue';
|
|
105
|
+
|
|
106
|
+
// ThemeProvider
|
|
107
|
+
export { default as ThemeProvider } from './ThemeProvider/ThemeProvider.vue';
|
|
108
|
+
|
|
109
|
+
// Tile
|
|
110
|
+
export { default as Tile } from './Tile/Tile.vue';
|