@mirweb/mir-web-components 1.15.3 → 2.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.
Files changed (184) hide show
  1. package/README.md +2 -2
  2. package/dist/assets/index-Cl4fzBs2.js +17 -0
  3. package/dist/assets/scss/globals.scss +231 -0
  4. package/dist/assets/scss/index.scss +4 -0
  5. package/dist/assets/scss/normalize.scss +393 -0
  6. package/dist/assets/scss/reset.scss +102 -0
  7. package/dist/assets/scss/variables.scss +95 -0
  8. package/dist/components/atoms/button/button.vue +81 -0
  9. package/dist/components/atoms/checkbox/checkbox.vue +125 -0
  10. package/dist/components/atoms/chip/chip.vue +55 -0
  11. package/dist/components/atoms/dropdown/dropdown.vue +490 -0
  12. package/dist/components/atoms/image/image.vue +42 -0
  13. package/dist/components/atoms/label/label.vue +52 -0
  14. package/dist/components/atoms/link/link.vue +166 -0
  15. package/dist/components/atoms/radio-button/radio-button.vue +110 -0
  16. package/dist/components/atoms/select/select.vue +116 -0
  17. package/dist/components/atoms/select-multiple/select-multiple.vue +210 -0
  18. package/dist/components/atoms/slider/slider.vue +322 -0
  19. package/dist/components/atoms/text-field/text-field.vue +273 -0
  20. package/dist/components/atoms/textarea/textarea.vue +179 -0
  21. package/dist/components/atoms/video/video.vue +98 -0
  22. package/dist/components/blocks/accordion/accordion.vue +222 -0
  23. package/dist/components/blocks/card-display/card-display.vue +125 -0
  24. package/dist/components/blocks/column-grid/column-grid.vue +201 -0
  25. package/dist/components/blocks/facts/facts.vue +156 -0
  26. package/dist/components/blocks/features/features.vue +176 -0
  27. package/dist/components/blocks/flashcards/flashcards.vue +212 -0
  28. package/dist/components/blocks/form-script/form-script.vue +172 -0
  29. package/dist/components/blocks/frontpage-hero/frontpage-hero.vue +214 -0
  30. package/dist/components/blocks/headline/headline.vue +93 -0
  31. package/dist/components/blocks/hero/hero.vue +173 -0
  32. package/dist/components/blocks/image/image.vue +93 -0
  33. package/dist/components/blocks/image-gallery/image-gallery.vue +289 -0
  34. package/dist/components/blocks/logo-wall/logo-wall.vue +125 -0
  35. package/dist/components/blocks/micro-stories/micro-stories.vue +316 -0
  36. package/dist/components/blocks/pallet-jack/pallet-jack.vue +440 -0
  37. package/dist/components/blocks/policy/policy.vue +106 -0
  38. package/dist/components/blocks/product-hero/product-hero.vue +140 -0
  39. package/dist/components/blocks/promo/promo.vue +403 -0
  40. package/dist/components/blocks/quote/quote.vue +127 -0
  41. package/dist/components/blocks/rich-text/rich-text-columns.vue +159 -0
  42. package/dist/components/blocks/rich-text/rich-text.vue +296 -0
  43. package/dist/components/blocks/timeline/timeline.vue +232 -0
  44. package/dist/components/blocks/vimeo/vimeo.vue +52 -0
  45. package/dist/components/index.ts +51 -0
  46. package/dist/components/molecules/address/address.vue +123 -0
  47. package/dist/components/molecules/bullet-list/bullet-list.vue +99 -0
  48. package/dist/components/molecules/card/card.vue +302 -0
  49. package/dist/components/molecules/column-card/column-card.vue +178 -0
  50. package/dist/components/molecules/event-card/event-card.vue +111 -0
  51. package/dist/components/molecules/flashcard/flashcard.vue +293 -0
  52. package/dist/components/molecules/modal/modal.vue +113 -0
  53. package/dist/components/molecules/text-card/text-card.vue +74 -0
  54. package/dist/components/organisms/404/404.vue +79 -0
  55. package/dist/components/organisms/filter/filter.vue +89 -0
  56. package/dist/components/organisms/footer/footer.vue +356 -0
  57. package/dist/components/organisms/header/header.vue +754 -0
  58. package/dist/components/organisms/language-switcher/language-switcher.vue +68 -0
  59. package/dist/components/organisms/pagination/pagination.vue +85 -0
  60. package/dist/components/organisms/search/search.vue +153 -0
  61. package/dist/components/templates/404-error-page.vue +0 -0
  62. package/dist/directives/clickOutside.ts +15 -0
  63. package/dist/fonts/OpenSans-Light.woff2 +0 -0
  64. package/dist/fonts/OpenSans-Medium.woff2 +0 -0
  65. package/dist/fonts/OpenSans-Regular.woff2 +0 -0
  66. package/dist/fonts/OpenSans-SemiBold.woff2 +0 -0
  67. package/dist/fonts/Oscine_Bd.woff2 +0 -0
  68. package/dist/fonts/Oscine_Lt.woff2 +0 -0
  69. package/dist/fonts/Oscine_Rg.woff2 +0 -0
  70. package/dist/index.html +12 -0
  71. package/dist/main.css +1 -0
  72. package/package.json +8 -10
  73. package/dist/components/atoms/button/button.vue.d.ts +0 -5
  74. package/dist/components/atoms/button/button.vue.d.ts.map +0 -1
  75. package/dist/components/atoms/checkbox/checkbox.vue.d.ts +0 -5
  76. package/dist/components/atoms/checkbox/checkbox.vue.d.ts.map +0 -1
  77. package/dist/components/atoms/chip/chip.vue.d.ts +0 -5
  78. package/dist/components/atoms/chip/chip.vue.d.ts.map +0 -1
  79. package/dist/components/atoms/dropdown/dropdown.vue.d.ts +0 -5
  80. package/dist/components/atoms/dropdown/dropdown.vue.d.ts.map +0 -1
  81. package/dist/components/atoms/image/image.vue.d.ts +0 -5
  82. package/dist/components/atoms/image/image.vue.d.ts.map +0 -1
  83. package/dist/components/atoms/label/label.vue.d.ts +0 -5
  84. package/dist/components/atoms/label/label.vue.d.ts.map +0 -1
  85. package/dist/components/atoms/link/link.vue.d.ts +0 -5
  86. package/dist/components/atoms/link/link.vue.d.ts.map +0 -1
  87. package/dist/components/atoms/radio-button/radio-button.vue.d.ts +0 -5
  88. package/dist/components/atoms/radio-button/radio-button.vue.d.ts.map +0 -1
  89. package/dist/components/atoms/select/select.vue.d.ts +0 -5
  90. package/dist/components/atoms/select/select.vue.d.ts.map +0 -1
  91. package/dist/components/atoms/select-multiple/select-multiple.vue.d.ts +0 -5
  92. package/dist/components/atoms/select-multiple/select-multiple.vue.d.ts.map +0 -1
  93. package/dist/components/atoms/slider/slider.vue.d.ts +0 -5
  94. package/dist/components/atoms/slider/slider.vue.d.ts.map +0 -1
  95. package/dist/components/atoms/text-field/text-field.vue.d.ts +0 -5
  96. package/dist/components/atoms/text-field/text-field.vue.d.ts.map +0 -1
  97. package/dist/components/atoms/textarea/textarea.vue.d.ts +0 -5
  98. package/dist/components/atoms/textarea/textarea.vue.d.ts.map +0 -1
  99. package/dist/components/atoms/video/video.vue.d.ts +0 -5
  100. package/dist/components/atoms/video/video.vue.d.ts.map +0 -1
  101. package/dist/components/blocks/accordion/accordion.vue.d.ts +0 -5
  102. package/dist/components/blocks/accordion/accordion.vue.d.ts.map +0 -1
  103. package/dist/components/blocks/card-display/card-display.vue.d.ts +0 -6
  104. package/dist/components/blocks/card-display/card-display.vue.d.ts.map +0 -1
  105. package/dist/components/blocks/column-grid/column-grid.vue.d.ts +0 -5
  106. package/dist/components/blocks/column-grid/column-grid.vue.d.ts.map +0 -1
  107. package/dist/components/blocks/facts/facts.vue.d.ts +0 -5
  108. package/dist/components/blocks/facts/facts.vue.d.ts.map +0 -1
  109. package/dist/components/blocks/features/features.vue.d.ts +0 -5
  110. package/dist/components/blocks/features/features.vue.d.ts.map +0 -1
  111. package/dist/components/blocks/flashcards/flashcards.vue.d.ts +0 -5
  112. package/dist/components/blocks/flashcards/flashcards.vue.d.ts.map +0 -1
  113. package/dist/components/blocks/form-script/form-script.vue.d.ts +0 -5
  114. package/dist/components/blocks/form-script/form-script.vue.d.ts.map +0 -1
  115. package/dist/components/blocks/frontpage-hero/frontpage-hero.vue.d.ts +0 -5
  116. package/dist/components/blocks/frontpage-hero/frontpage-hero.vue.d.ts.map +0 -1
  117. package/dist/components/blocks/headline/headline.vue.d.ts +0 -5
  118. package/dist/components/blocks/headline/headline.vue.d.ts.map +0 -1
  119. package/dist/components/blocks/hero/hero.vue.d.ts +0 -5
  120. package/dist/components/blocks/hero/hero.vue.d.ts.map +0 -1
  121. package/dist/components/blocks/image/image.vue.d.ts +0 -5
  122. package/dist/components/blocks/image/image.vue.d.ts.map +0 -1
  123. package/dist/components/blocks/image-gallery/image-gallery.vue.d.ts +0 -5
  124. package/dist/components/blocks/image-gallery/image-gallery.vue.d.ts.map +0 -1
  125. package/dist/components/blocks/logo-wall/logo-wall.vue.d.ts +0 -5
  126. package/dist/components/blocks/logo-wall/logo-wall.vue.d.ts.map +0 -1
  127. package/dist/components/blocks/micro-stories/micro-stories.vue.d.ts +0 -5
  128. package/dist/components/blocks/micro-stories/micro-stories.vue.d.ts.map +0 -1
  129. package/dist/components/blocks/pallet-jack/pallet-jack.vue.d.ts +0 -5
  130. package/dist/components/blocks/pallet-jack/pallet-jack.vue.d.ts.map +0 -1
  131. package/dist/components/blocks/policy/policy.vue.d.ts +0 -4
  132. package/dist/components/blocks/policy/policy.vue.d.ts.map +0 -1
  133. package/dist/components/blocks/product-hero/product-hero.vue.d.ts +0 -5
  134. package/dist/components/blocks/product-hero/product-hero.vue.d.ts.map +0 -1
  135. package/dist/components/blocks/promo/promo.vue.d.ts +0 -5
  136. package/dist/components/blocks/promo/promo.vue.d.ts.map +0 -1
  137. package/dist/components/blocks/quote/quote.vue.d.ts +0 -5
  138. package/dist/components/blocks/quote/quote.vue.d.ts.map +0 -1
  139. package/dist/components/blocks/rich-text/rich-text-columns.vue.d.ts +0 -4
  140. package/dist/components/blocks/rich-text/rich-text-columns.vue.d.ts.map +0 -1
  141. package/dist/components/blocks/rich-text/rich-text.vue.d.ts +0 -5
  142. package/dist/components/blocks/rich-text/rich-text.vue.d.ts.map +0 -1
  143. package/dist/components/blocks/timeline/timeline.vue.d.ts +0 -5
  144. package/dist/components/blocks/timeline/timeline.vue.d.ts.map +0 -1
  145. package/dist/components/blocks/vimeo/vimeo.vue.d.ts +0 -5
  146. package/dist/components/blocks/vimeo/vimeo.vue.d.ts.map +0 -1
  147. package/dist/components/index.d.ts +0 -51
  148. package/dist/components/main.d.ts +0 -59
  149. package/dist/components/molecules/address/address.vue.d.ts +0 -5
  150. package/dist/components/molecules/address/address.vue.d.ts.map +0 -1
  151. package/dist/components/molecules/bullet-list/bullet-list.vue.d.ts +0 -5
  152. package/dist/components/molecules/bullet-list/bullet-list.vue.d.ts.map +0 -1
  153. package/dist/components/molecules/card/card.vue.d.ts +0 -5
  154. package/dist/components/molecules/card/card.vue.d.ts.map +0 -1
  155. package/dist/components/molecules/column-card/column-card.vue.d.ts +0 -5
  156. package/dist/components/molecules/column-card/column-card.vue.d.ts.map +0 -1
  157. package/dist/components/molecules/event-card/event-card.vue.d.ts +0 -5
  158. package/dist/components/molecules/event-card/event-card.vue.d.ts.map +0 -1
  159. package/dist/components/molecules/flashcard/flashcard.vue.d.ts +0 -5
  160. package/dist/components/molecules/flashcard/flashcard.vue.d.ts.map +0 -1
  161. package/dist/components/molecules/modal/modal.vue.d.ts +0 -5
  162. package/dist/components/molecules/modal/modal.vue.d.ts.map +0 -1
  163. package/dist/components/molecules/text-card/text-card.vue.d.ts +0 -5
  164. package/dist/components/molecules/text-card/text-card.vue.d.ts.map +0 -1
  165. package/dist/components/organisms/404/404.vue.d.ts +0 -5
  166. package/dist/components/organisms/404/404.vue.d.ts.map +0 -1
  167. package/dist/components/organisms/filter/filter.vue.d.ts +0 -5
  168. package/dist/components/organisms/filter/filter.vue.d.ts.map +0 -1
  169. package/dist/components/organisms/footer/footer.vue.d.ts +0 -5
  170. package/dist/components/organisms/footer/footer.vue.d.ts.map +0 -1
  171. package/dist/components/organisms/header/header.vue.d.ts +0 -6
  172. package/dist/components/organisms/header/header.vue.d.ts.map +0 -1
  173. package/dist/components/organisms/language-switcher/language-switcher.vue.d.ts +0 -5
  174. package/dist/components/organisms/language-switcher/language-switcher.vue.d.ts.map +0 -1
  175. package/dist/components/organisms/pagination/pagination.vue.d.ts +0 -5
  176. package/dist/components/organisms/pagination/pagination.vue.d.ts.map +0 -1
  177. package/dist/components/organisms/search/search.vue.d.ts +0 -4
  178. package/dist/components/organisms/search/search.vue.d.ts.map +0 -1
  179. package/dist/directives/clickOutside.d.ts +0 -3
  180. package/dist/main.d.ts +0 -1
  181. package/dist/mir-web-components.cjs.js +0 -1
  182. package/dist/mir-web-components.css +0 -1
  183. package/dist/mir-web-components.es.js +0 -3187
  184. package/dist/mir-web-components.umd.js +0 -2
@@ -0,0 +1,111 @@
1
+ <template>
2
+ <div class="event__wrapper">
3
+ <atom-label :label-dark="false" :text="eventType ? eventType : ''" />
4
+ <div class="event__headline">
5
+ {{ headline }}
6
+ </div>
7
+ <div class="event__date-location">
8
+ {{ dateTime }}
9
+ <br />
10
+ <div v-if="info" class="event__info">{{ info }}</div>
11
+ {{ location }}
12
+ </div>
13
+ <div class="event__exhibitor">{{ exhibitor }}</div>
14
+ </div>
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ import AtomLabel from "../../atoms/label/label.vue";
19
+
20
+ defineProps({
21
+ eventType: {
22
+ type: String,
23
+ required: true,
24
+ },
25
+ headline: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+ dateTime: {
30
+ type: String,
31
+ required: true,
32
+ },
33
+ location: {
34
+ type: String,
35
+ required: true,
36
+ },
37
+ exhibitor: {
38
+ type: String,
39
+ required: true,
40
+ },
41
+ info: {
42
+ type: String,
43
+ required: false,
44
+ default: null,
45
+ },
46
+ });
47
+ </script>
48
+
49
+ <style lang="scss" scoped>
50
+ @use "../../../assets/scss/variables.scss" as *;
51
+ .event {
52
+ &__wrapper {
53
+ min-height: 180px;
54
+ height: 100%;
55
+ min-width: 285px;
56
+ width: 100%;
57
+ font-family: $font-opensans;
58
+ border-radius: $border-radius;
59
+ transition: $transition-box-shadow;
60
+ display: flex;
61
+ flex-direction: column;
62
+ gap: 15px;
63
+ padding: 15px 15px 30px 15px;
64
+
65
+ @include sm {
66
+ width: 100%;
67
+
68
+ @at-root a {
69
+ &:hover,
70
+ &:focus,
71
+ &:active,
72
+ &:target {
73
+ .event__wrapper {
74
+ box-shadow: $box-shadow;
75
+ }
76
+ }
77
+ }
78
+ &:hover,
79
+ &:focus,
80
+ &:active,
81
+ &:target {
82
+ box-shadow: $box-shadow;
83
+ }
84
+ }
85
+ }
86
+
87
+ &__headline {
88
+ font-size: $font-size-md;
89
+ font-family: $font-oscine;
90
+ font-weight: 700;
91
+ line-height: $line-height-md;
92
+ }
93
+
94
+ &__date-location,
95
+ &__exhibitor,
96
+ &__info {
97
+ font-size: $font-size-sm;
98
+ font-weight: 300;
99
+ line-height: $line-height-md;
100
+ }
101
+
102
+ &__date-location,
103
+ &__exhibitor {
104
+ text-transform: capitalize;
105
+ }
106
+
107
+ &__info {
108
+ text-transform: none;
109
+ }
110
+ }
111
+ </style>
@@ -0,0 +1,293 @@
1
+ <template>
2
+ <div class="flashcard-container" @click="toggleFlip">
3
+ <div
4
+ class="flashcard"
5
+ :class="{
6
+ flipped: isFlipped,
7
+ 'flashcard--sm': size === 'sm',
8
+ 'flashcard--md': size === 'md',
9
+ 'flashcard--lg': size === 'lg',
10
+ }"
11
+ >
12
+ <div class="flashcard-side flashcard-front">
13
+ <div v-if="name || bodytext?.length > 0" class="content">
14
+ <h3 v-if="name">{{ name }}</h3>
15
+ <div v-if="bodytext" class="flashcard-body">
16
+ <slot
17
+ name="flashcard-front-body"
18
+ v-bind="{ bodytext: bodytext }"
19
+ ></slot>
20
+ </div>
21
+ <img
22
+ class="flip-icon"
23
+ src="https://a.storyblok.com/f/230581/22x21/23d87eccc4/icon_reverse_blue.svg"
24
+ />
25
+ </div>
26
+ <div
27
+ v-else
28
+ class="flashcard-image"
29
+ :class="{
30
+ contain: imageFit,
31
+ cover: !imageFit,
32
+ }"
33
+ >
34
+ <slot
35
+ name="flashcard-front-image"
36
+ v-bind="{ src: image?.filename, alt: image?.alt }"
37
+ ></slot>
38
+ <img
39
+ class="flip-icon"
40
+ src="https://a.storyblok.com/f/230581/22x21/23d87eccc4/icon_reverse_blue.svg"
41
+ />
42
+ </div>
43
+ </div>
44
+ <div
45
+ class="flashcard-side flashcard-back"
46
+ :class="
47
+ imagebackside?.filename
48
+ ? 'flashcard-back--image'
49
+ : 'flashcard-back--no-image'
50
+ "
51
+ >
52
+ <div v-if="namebackside || bodytextbackside.length > 0" class="content">
53
+ <h3 v-if="namebackside">{{ namebackside }}</h3>
54
+ <div v-if="bodytextbackside" class="flashcard-body">
55
+ <slot
56
+ name="flashcard-back-body"
57
+ v-bind="{ bodytextbackside }"
58
+ ></slot>
59
+ </div>
60
+ <img
61
+ class="flip-icon"
62
+ src="https://a.storyblok.com/f/230581/22x22/50edea5341/icon_reverse_white.svg"
63
+ />
64
+ </div>
65
+ <div
66
+ v-else
67
+ class="flashcard-image"
68
+ :class="{
69
+ contain: imageFitBack,
70
+ cover: !imageFitBack,
71
+ }"
72
+ >
73
+ <slot
74
+ name="flashcard-back-image"
75
+ v-bind="{ src: imagebackside?.filename, alt: imagebackside?.alt }"
76
+ >
77
+ </slot>
78
+ <img
79
+ class="flip-icon"
80
+ src="https://a.storyblok.com/f/230581/22x22/50edea5341/icon_reverse_white.svg"
81
+ />
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </template>
87
+ <script setup lang="ts">
88
+ import { ref } from "vue";
89
+
90
+ export type Props = {
91
+ name: string;
92
+ bodytext: string;
93
+ image: {
94
+ filename: string;
95
+ alt: string;
96
+ };
97
+ namebackside: string;
98
+ bodytextbackside: string;
99
+ imagebackside: {
100
+ filename: string;
101
+ alt: string;
102
+ };
103
+ size: string;
104
+ imageFit: boolean;
105
+ imageFitBack: boolean;
106
+ };
107
+ withDefaults(defineProps<Props>(), {});
108
+
109
+ const isFlipped = ref(false);
110
+
111
+ function toggleFlip() {
112
+ isFlipped.value = !isFlipped.value;
113
+ }
114
+ </script>
115
+
116
+ <style scoped lang="scss">
117
+ @use "../../../assets/scss/variables.scss" as *;
118
+
119
+ .flashcard-container {
120
+ perspective: 1000px;
121
+
122
+ .flashcard {
123
+ width: 100%;
124
+ height: 100%;
125
+ transition: transform 0.3s ease;
126
+ transform-style: preserve-3d;
127
+ cursor: pointer;
128
+ position: relative;
129
+
130
+ &--sm {
131
+ min-height: 223px;
132
+ }
133
+
134
+ &--md {
135
+ min-height: 308px;
136
+ }
137
+
138
+ &--lg {
139
+ min-height: 477px;
140
+ }
141
+
142
+ &.flipped {
143
+ transform: rotateY(180deg);
144
+ }
145
+
146
+ .flashcard-side {
147
+ backface-visibility: hidden;
148
+ position: absolute;
149
+ top: 0;
150
+ left: 0;
151
+ width: 100%;
152
+ height: 100%;
153
+ display: flex;
154
+ justify-content: center;
155
+
156
+ .flashcard-image {
157
+ .flip-icon {
158
+ width: 21px;
159
+ height: 21px;
160
+ position: absolute;
161
+ right: 15px;
162
+ bottom: 15px;
163
+ object-fit: cover;
164
+ }
165
+
166
+ :deep(img) {
167
+ width: 100%;
168
+ height: 100%;
169
+ }
170
+
171
+ &.contain {
172
+ :deep(img) {
173
+ object-fit: contain;
174
+ }
175
+ }
176
+
177
+ &.cover {
178
+ :deep(img) {
179
+ object-fit: cover;
180
+ }
181
+ }
182
+ }
183
+ }
184
+
185
+ .flashcard-front {
186
+ background-color: $white;
187
+ box-shadow: $box-shadow;
188
+
189
+ .flashcard-body {
190
+ :deep(p) {
191
+ padding-bottom: 1rem;
192
+ }
193
+ :deep(ul) {
194
+ text-align: left;
195
+ list-style-type: none;
196
+ font-family: $font-opensans;
197
+ font-weight: 300;
198
+ padding-left: 1rem;
199
+
200
+ li {
201
+ margin: 5px 0;
202
+ list-style: none;
203
+ position: relative;
204
+ left: 0;
205
+
206
+ p {
207
+ padding-bottom: 0px;
208
+ }
209
+ }
210
+
211
+ li::before {
212
+ content: "\2022";
213
+ position: absolute;
214
+ left: -0.8em;
215
+ font-size: 1.1em;
216
+ color: $blue-900;
217
+ }
218
+ }
219
+ }
220
+ }
221
+
222
+ .flashcard-back {
223
+ transform: rotateY(180deg);
224
+
225
+ box-shadow: $box-shadow;
226
+
227
+ &--image {
228
+ background-color: $white;
229
+ }
230
+
231
+ &--no-image {
232
+ background-color: $blue-600;
233
+ }
234
+
235
+ h3 {
236
+ color: $white;
237
+ }
238
+
239
+ .flashcard-body {
240
+ :deep(p) {
241
+ padding-bottom: 1rem;
242
+ color: $white;
243
+ }
244
+ :deep(ul) {
245
+ text-align: left;
246
+ list-style-type: none;
247
+ font-family: $font-opensans;
248
+ font-weight: 300;
249
+ padding-left: 1rem;
250
+ color: $white;
251
+
252
+ li {
253
+ margin: 5px 0;
254
+ list-style: none;
255
+ position: relative;
256
+ left: 0;
257
+
258
+ p {
259
+ padding-bottom: 0px;
260
+ }
261
+ }
262
+
263
+ li::before {
264
+ content: "\2022";
265
+ position: absolute;
266
+ left: -0.8em;
267
+ font-size: 1.1em;
268
+ color: $white;
269
+ }
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+
276
+ .content {
277
+ font-family: $font-opensans;
278
+ text-align: center;
279
+ padding: 20px;
280
+ display: flex;
281
+ flex-direction: column;
282
+ justify-content: center;
283
+ align-items: center;
284
+
285
+ .flip-icon {
286
+ width: 21px;
287
+ height: 21px;
288
+ position: absolute;
289
+ right: 15px;
290
+ bottom: 15px;
291
+ }
292
+ }
293
+ </style>
@@ -0,0 +1,113 @@
1
+ <template>
2
+ <div class="modal__wrapper">
3
+ <!-- Vue transition component that wraps modal. It applies transition effects to the modal when it is being shown or hidden -->
4
+ <Transition :duration="300" name="nested">
5
+ <!-- The modal and overlay. It is only shown if the 'show' property is true -->
6
+ <dialog
7
+ v-show="show"
8
+ :class="['overlay', searchBar ? 'overlay-search' : 'overlay-default']"
9
+ ariaLabel="modal"
10
+ role="dialog"
11
+ @click="toggleShow"
12
+ >
13
+ <!-- The modal itself -->
14
+ <div id="modal" :class="[searchBar ? 'search' : '']" @click.stop>
15
+ <!-- stopPropagation is used here to prevent the modal from closing when it is clicked -->
16
+ <!-- The button for closing the modal -->
17
+ <div>
18
+ <AtomButton
19
+ v-if="!searchBar"
20
+ aria-label="close"
21
+ variant="close"
22
+ @click="toggleShow"
23
+ />
24
+ </div>
25
+ <!-- A slot for injecting custom content into the modal -->
26
+ <slot></slot>
27
+ </div>
28
+ </dialog>
29
+ </Transition>
30
+ </div>
31
+ </template>
32
+
33
+ <script setup lang="ts">
34
+ import AtomButton from "../../atoms/button/button.vue";
35
+
36
+ const props = withDefaults(
37
+ defineProps<{
38
+ show: boolean;
39
+ searchBar: boolean;
40
+ }>(),
41
+ {
42
+ show: false,
43
+ searchBar: false,
44
+ },
45
+ );
46
+
47
+ const emit = defineEmits(["update:show"]);
48
+
49
+ const toggleShow = () => {
50
+ emit("update:show", !props.show);
51
+ };
52
+ </script>
53
+
54
+ <style scoped lang="scss">
55
+ @use "../../../assets/scss/variables.scss" as *;
56
+ .overlay {
57
+ /* Styling for the overlay that is shown when the modal is visible */
58
+ background: rgba(0, 48, 135, 0.2); // $blue-800 with 20% opacity
59
+ position: fixed;
60
+ top: 0;
61
+ left: 0;
62
+ width: 100%;
63
+ height: 100%;
64
+ display: flex;
65
+ justify-content: center;
66
+ z-index: 100;
67
+
68
+ &-default {
69
+ align-items: center;
70
+ }
71
+
72
+ &-search {
73
+ padding: 150px 15px 0;
74
+ align-items: flex-start;
75
+ }
76
+ }
77
+
78
+ #modal {
79
+ /* Styling for the modal */
80
+ background: $white;
81
+ padding: 30px 15px;
82
+ min-height: 100px;
83
+ min-width: 200px;
84
+ position: relative;
85
+ max-width: 566px;
86
+ box-shadow: 1px 3px 12px rgba(0, 0, 0, 0.06);
87
+ border-radius: $border-radius;
88
+
89
+ button {
90
+ position: absolute;
91
+ top: 15px;
92
+ right: 15px;
93
+ }
94
+
95
+ &.search {
96
+ padding: 0;
97
+ max-width: 100%;
98
+ min-height: 72px;
99
+ }
100
+ }
101
+
102
+ .nested-enter-active,
103
+ .nested-leave-active {
104
+ /* Define the CSS transition that is applied to the modal when it is being shown or hidden */
105
+ transition: all 0.2s ease-out;
106
+ }
107
+
108
+ .nested-enter-from,
109
+ .nested-leave-to {
110
+ /* Define the starting and ending states of the transition */
111
+ opacity: 0;
112
+ }
113
+ </style>
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <div class="text__wrapper">
3
+ <atom-label :label-dark="false" :text="label ? label : ''" />
4
+ <div class="text__headline">
5
+ {{ headline }}
6
+ </div>
7
+ <div class="text__paragraph">
8
+ <p>{{ paragraph }}</p>
9
+ </div>
10
+ </div>
11
+ </template>
12
+
13
+ <script setup lang="ts">
14
+ import AtomLabel from "../../atoms/label/label.vue";
15
+
16
+ defineProps({
17
+ label: {
18
+ type: String,
19
+ required: true,
20
+ },
21
+ headline: {
22
+ type: String,
23
+ required: true,
24
+ },
25
+ paragraph: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+ });
30
+ </script>
31
+
32
+ <style lang="scss" scoped>
33
+ @use "../../../assets/scss/variables.scss" as *;
34
+ .text {
35
+ &__wrapper {
36
+ height: 100%;
37
+ max-width: 328px;
38
+ width: 100%;
39
+ font-family: $font-opensans;
40
+ border-radius: $border-radius;
41
+ transition: $transition-box-shadow;
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: 15px;
45
+ padding: 15px;
46
+
47
+ @include sm {
48
+ width: 100%;
49
+ }
50
+ @at-root a {
51
+ &:hover,
52
+ &:focus,
53
+ &:active,
54
+ &:target {
55
+ .event__wrapper {
56
+ box-shadow: $box-shadow;
57
+ }
58
+ }
59
+ }
60
+ &:hover,
61
+ &:focus,
62
+ &:active,
63
+ &:target {
64
+ box-shadow: $box-shadow;
65
+ }
66
+ }
67
+ &__headline {
68
+ font-size: $font-size-md;
69
+ font-family: $font-oscine;
70
+ font-weight: 700;
71
+ line-height: $line-height-md;
72
+ }
73
+ }
74
+ </style>
@@ -0,0 +1,79 @@
1
+ <template>
2
+ <div class="not-found__wrapper">
3
+ <div class="not-found__content">
4
+ <h1 class="not-found__headline">
5
+ {{ headline }}
6
+ </h1>
7
+ <div class="not-found__body">
8
+ <slot name="not-found-body" />
9
+ </div>
10
+ </div>
11
+ </div>
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ defineProps({
16
+ headline: {
17
+ type: String,
18
+ required: true,
19
+ },
20
+ });
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ @use "../../../assets/scss/variables.scss" as *;
25
+ .not-found {
26
+ &__wrapper {
27
+ width: 100%;
28
+ padding: 30px 30px;
29
+
30
+ @include md {
31
+ padding: 30px 0px;
32
+ }
33
+ }
34
+
35
+ &__content {
36
+ max-width: $max-width;
37
+ margin: 0 auto;
38
+ }
39
+
40
+ &__headline {
41
+ padding: 30px 0px 60px 0px;
42
+ }
43
+
44
+ &__body {
45
+ margin-bottom: 30px;
46
+ display: flex;
47
+ justify-content: space-between;
48
+ flex-wrap: wrap;
49
+
50
+ :deep(p) {
51
+ padding-bottom: 1rem;
52
+
53
+ a {
54
+ color: $blue-600;
55
+ text-decoration: 0.3px underline;
56
+ font-weight: 500;
57
+
58
+ &:hover {
59
+ color: $blue-800;
60
+ transition: $transition-color;
61
+ }
62
+ }
63
+ }
64
+
65
+ :deep(img) {
66
+ mix-blend-mode: darken;
67
+ width: 656px;
68
+ max-width: 100%;
69
+ }
70
+
71
+ :deep(.not-found__links) {
72
+ display: flex;
73
+ gap: 30px;
74
+ flex-direction: column;
75
+ margin-bottom: 30px;
76
+ }
77
+ }
78
+ }
79
+ </style>