@mirweb/mir-web-components 1.15.3 → 2.0.1

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,403 @@
1
+ <template>
2
+ <div
3
+ :class="[
4
+ 'promo__wrapper',
5
+ selectedVariant,
6
+ teaser ? 'promo__wrapper--teaser' : '',
7
+ multiply ? 'promo__wrapper--multiply' : '',
8
+ ]"
9
+ >
10
+ <div class="promo__content">
11
+ <div
12
+ v-if="mediaType === 'image'"
13
+ :class="[
14
+ 'promo__image',
15
+ reverse ? 'promo__image--reverse' : 'promo__image--default',
16
+ ]"
17
+ >
18
+ <atom-image
19
+ ><slot
20
+ name="promo-image"
21
+ v-bind="{ src: src, width: 1920, alt: alt, height: 1080 }"
22
+ ></slot
23
+ ></atom-image>
24
+ </div>
25
+ <div
26
+ v-if="mediaType === 'video'"
27
+ :class="[
28
+ 'promo__video',
29
+ reverse ? 'promo__video--reverse' : 'promo__video--default',
30
+ ]"
31
+ >
32
+ <atom-video
33
+ :src="src"
34
+ local-video
35
+ :aria-label="alt"
36
+ :controls="false"
37
+ autoplay
38
+ loop
39
+ muted
40
+ play
41
+ :poster="fallbackImage"
42
+ >
43
+ </atom-video>
44
+ </div>
45
+ <div
46
+ :class="[
47
+ 'promo__text',
48
+ reverse ? 'promo__text--reverse' : 'promo__text--default',
49
+ ]"
50
+ >
51
+ <atom-label
52
+ v-if="label"
53
+ :text="label"
54
+ :label-dark="variant === 'dark'"
55
+ ></atom-label>
56
+ <div
57
+ :class="[
58
+ 'promo__title',
59
+ variant === 'dark' ? 'promo__title--dark' : '',
60
+ ]"
61
+ >
62
+ <slot name="promo-headline"></slot>
63
+ </div>
64
+ <atom-link
65
+ v-if="linkType === 'link'"
66
+ :link-type="
67
+ variant === 'dark'
68
+ ? 'regular_dark'
69
+ : variant === 'light'
70
+ ? 'regular_light'
71
+ : 'regular_light'
72
+ "
73
+ arrow
74
+ ><slot name="promo-link"></slot
75
+ ></atom-link>
76
+ <atom-link
77
+ v-if="linkType === 'button'"
78
+ :link-type="
79
+ variant === 'dark'
80
+ ? 'secondary_dark'
81
+ : variant === 'light'
82
+ ? 'secondary'
83
+ : 'secondary'
84
+ "
85
+ ><slot name="promo-link"></slot
86
+ ></atom-link>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </template>
91
+
92
+ <script setup lang="ts">
93
+ import { computed } from "vue";
94
+ import AtomImage from "../../atoms/image/image.vue";
95
+ import AtomVideo from "../../atoms/video/video.vue";
96
+ import AtomLabel from "../../atoms/label/label.vue";
97
+ import AtomLink from "../../atoms/link/link.vue";
98
+
99
+ const VARIANTS = {
100
+ dark: "promo__wrapper--dark",
101
+ light: "promo__wrapper--light",
102
+ default: "promo__wrapper--default",
103
+ } as const;
104
+
105
+ type Variant = keyof typeof VARIANTS;
106
+
107
+ export type Props = {
108
+ label?: string;
109
+ linkText?: string;
110
+ mediaType?: "image" | "video";
111
+ src: string;
112
+ alt: string;
113
+ fallbackImage: string;
114
+ reverse?: boolean;
115
+ variant?: Variant;
116
+ linkType?: string;
117
+ teaser?: boolean;
118
+ multiply: boolean;
119
+ };
120
+
121
+ const props = withDefaults(defineProps<Props>(), {
122
+ label: "",
123
+ linkText: "",
124
+ mediaType: "image",
125
+ reverse: false,
126
+ variant: "default",
127
+ linkType: "link",
128
+ teaser: false,
129
+ multiply: false,
130
+ });
131
+
132
+ const selectedVariant = computed(() => VARIANTS[props.variant]);
133
+ </script>
134
+
135
+ <style scoped lang="scss">
136
+ @use "../../../assets/scss/variables.scss" as *;
137
+ .promo {
138
+ &__wrapper {
139
+ width: 100%;
140
+ display: flex;
141
+ flex-direction: row;
142
+ justify-content: center;
143
+
144
+ :deep(video) {
145
+ outline: 4px solid $white;
146
+ outline-offset: -4px;
147
+ }
148
+
149
+ &--multiply {
150
+ :deep(video) {
151
+ mix-blend-mode: multiply;
152
+ }
153
+ }
154
+
155
+ &--dark {
156
+ background-color: $blue-900;
157
+ margin: 30px 0px;
158
+
159
+ @include sm {
160
+ padding: 60px 0px;
161
+ margin: 60px 0px;
162
+ }
163
+ :deep(video) {
164
+ outline: 4px solid $blue-900;
165
+ outline-offset: -4px;
166
+ }
167
+ }
168
+ &--light {
169
+ background-color: $blue-000;
170
+ margin: 30px 0px;
171
+
172
+ @include sm {
173
+ padding: 60px 0px;
174
+ margin: 60px 0px;
175
+ }
176
+ :deep(video) {
177
+ outline: 4px solid $blue-000;
178
+ outline-offset: -4px;
179
+ }
180
+ }
181
+ &--default {
182
+ @include sm {
183
+ padding: 60px 0px;
184
+ }
185
+ }
186
+
187
+ &--teaser {
188
+ margin: 0px 0px;
189
+ }
190
+ }
191
+
192
+ &__content {
193
+ display: grid;
194
+ grid-template-rows: fit-content(1fr 1fr);
195
+ grid-template-columns: 1fr;
196
+ overflow-x: clip;
197
+
198
+ @include sm {
199
+ grid-template-columns: fit-content(repeat(2, 1fr auto));
200
+ grid-template-rows: 1fr;
201
+ padding-bottom: 30px;
202
+ }
203
+
204
+ @include md {
205
+ grid-template-columns: 1fr 984px 1fr;
206
+ }
207
+
208
+ @include lg {
209
+ grid-template-columns: minmax(0, 1fr) 164px 984px 164px minmax(0, 1fr);
210
+ }
211
+ }
212
+
213
+ &__image {
214
+ height: 441px;
215
+
216
+ &--default {
217
+ grid-area: 1 / 1;
218
+ margin-right: 0;
219
+
220
+ @include sm {
221
+ }
222
+
223
+ @include md {
224
+ grid-area: 1 / 1 / 2 / 3;
225
+ margin-right: 328px;
226
+ }
227
+
228
+ @include lg {
229
+ grid-area: 1 / 2 / 2 / 4;
230
+ }
231
+
232
+ :slotted(img) {
233
+ clip-path: polygon(
234
+ 0 0,
235
+ 100% 0,
236
+ 100% calc(100% - 43px),
237
+ calc(100% - 43px) 100%,
238
+ 0 100%
239
+ );
240
+ }
241
+ }
242
+
243
+ &--reverse {
244
+ grid-area: 1 / 1;
245
+ margin-left: 0;
246
+
247
+ @include sm {
248
+ margin-left: 328px;
249
+ }
250
+
251
+ @include md {
252
+ grid-area: 1 / 2 / 3 / 4;
253
+ }
254
+
255
+ @include lg {
256
+ grid-area: 1 / 3 / 2 / 5;
257
+ }
258
+
259
+ :slotted(img) {
260
+ clip-path: polygon(
261
+ 0 0,
262
+ 100% 0,
263
+ 100% calc(100% - 43px),
264
+ calc(100% - 43px) 100%,
265
+ 0 100%
266
+ );
267
+
268
+ @include sm {
269
+ clip-path: polygon(
270
+ 0 0,
271
+ 100% 0,
272
+ 100% 100%,
273
+ 43px 100%,
274
+ 0 calc(100% - 43px)
275
+ );
276
+ }
277
+ }
278
+ }
279
+
280
+ :slotted(img) {
281
+ object-position: center;
282
+ object-fit: cover;
283
+ height: 100%;
284
+ }
285
+ }
286
+
287
+ &__video {
288
+ display: flex;
289
+
290
+ &--default {
291
+ grid-area: 1 / 1;
292
+ margin-right: 0;
293
+
294
+ @include sm {
295
+ }
296
+
297
+ @include md {
298
+ grid-area: 1 / 1 / 2 / 3;
299
+ margin-right: 328px;
300
+ }
301
+
302
+ @include lg {
303
+ grid-area: 1 / 2 / 2 / 4;
304
+ }
305
+ }
306
+
307
+ &--reverse {
308
+ grid-area: 1 / 1;
309
+ margin-left: 0;
310
+
311
+ @include sm {
312
+ margin-left: 328px;
313
+ }
314
+
315
+ @include md {
316
+ grid-area: 1 / 2 / 3 / 4;
317
+ }
318
+
319
+ @include lg {
320
+ grid-area: 1 / 3 / 2 / 5;
321
+ }
322
+ }
323
+
324
+ :deep(video) {
325
+ height: auto;
326
+ width: 100%;
327
+ }
328
+ }
329
+
330
+ &__text {
331
+ display: flex;
332
+ flex-direction: column;
333
+ align-items: flex-start;
334
+ justify-content: center;
335
+ box-sizing: border-box;
336
+ margin-top: 41px;
337
+ margin-bottom: 41px;
338
+
339
+ &--default {
340
+ padding-left: 30px;
341
+ padding-right: 30px;
342
+
343
+ @include sm {
344
+ grid-area: 1 / 2;
345
+ width: 328px;
346
+ margin-top: 0;
347
+ margin-bottom: 0;
348
+ }
349
+ @include md {
350
+ grid-area: 1 / 2;
351
+ justify-self: flex-end;
352
+ padding-right: 0;
353
+ }
354
+
355
+ @include lg {
356
+ grid-area: 1 / 3;
357
+ }
358
+ }
359
+
360
+ &--reverse {
361
+ padding-left: 30px;
362
+ padding-right: 30px;
363
+ grid-area: 2 / 1;
364
+
365
+ @include sm {
366
+ width: 328px;
367
+ padding-right: 41px;
368
+ grid-area: 1 / 1;
369
+ margin-top: 0;
370
+ }
371
+
372
+ @include md {
373
+ padding-left: 0;
374
+ grid-area: 1 / 2;
375
+ }
376
+
377
+ @include lg {
378
+ grid-area: 1 / 3;
379
+ }
380
+ }
381
+ }
382
+
383
+ &__title {
384
+ margin: 30px 0px;
385
+
386
+ :deep(p) {
387
+ word-wrap: break-word;
388
+ font-weight: 300;
389
+ font-family: $font-oscine;
390
+ font-size: $font-size-md;
391
+ line-height: $line-height-md;
392
+ }
393
+
394
+ &--dark {
395
+ color: $white;
396
+
397
+ :deep(p) {
398
+ color: $white;
399
+ }
400
+ }
401
+ }
402
+ }
403
+ </style>
@@ -0,0 +1,127 @@
1
+ <template>
2
+ <div class="quote__wrapper">
3
+ <div class="quote__content">
4
+ <p class="quote__quote-mark">“</p>
5
+ <div class="quote__quote">
6
+ <p class="quote__quote-text">
7
+ {{ quote }}
8
+ </p>
9
+ <div class="quote__author">
10
+ <div v-if="authorImage" class="quote__image">
11
+ <atom-image>
12
+ <slot
13
+ name="author-image"
14
+ v-bind="{
15
+ src: authorImage + '/100x100',
16
+ width: 60,
17
+ height: 60,
18
+ }"
19
+ ></slot>
20
+ </atom-image>
21
+ </div>
22
+
23
+ <div class="quote__text">
24
+ <p class="quote__author-name">
25
+ {{ author }}
26
+ </p>
27
+ <p class="quote__author-title">
28
+ {{ authorTitle }}
29
+ </p>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </template>
36
+
37
+ <script setup lang="ts">
38
+ import AtomImage from "../../atoms/image/image.vue";
39
+
40
+ defineProps({
41
+ quote: {
42
+ type: String,
43
+ required: true,
44
+ },
45
+ author: {
46
+ type: String,
47
+ required: true,
48
+ },
49
+ authorTitle: {
50
+ type: String,
51
+ required: true,
52
+ },
53
+ authorImage: {
54
+ type: String,
55
+ required: false,
56
+ default: undefined,
57
+ },
58
+ });
59
+ </script>
60
+
61
+ <style scoped lang="scss">
62
+ @use "../../../assets/scss/variables.scss" as *;
63
+ .quote {
64
+ &__wrapper {
65
+ width: 100%;
66
+ }
67
+
68
+ &__content {
69
+ max-width: 656px;
70
+ margin: 0 auto;
71
+ padding: 60px 30px;
72
+ justify-content: center;
73
+ display: flex;
74
+ flex-direction: row;
75
+
76
+ @include md {
77
+ padding: 60px 0px;
78
+ }
79
+ }
80
+
81
+ &__quote {
82
+ display: flex;
83
+ flex-direction: column;
84
+
85
+ &-mark {
86
+ font-family: $font-oscine;
87
+ font-weight: 700;
88
+ font-size: $font-size-xlg;
89
+ line-height: $line-height-lg;
90
+ margin-right: 15px;
91
+ }
92
+ &-text {
93
+ font-size: $font-size-md;
94
+ line-height: $line-height-lg;
95
+ }
96
+ }
97
+
98
+ &__author {
99
+ margin-top: 15px;
100
+ gap: 15px;
101
+ align-items: center;
102
+ flex-direction: row;
103
+ display: flex;
104
+ flex-wrap: wrap;
105
+
106
+ &-name {
107
+ font-weight: 600;
108
+ font-size: $font-size-xsm;
109
+ }
110
+ &-title {
111
+ font-size: $font-size-xsm;
112
+ }
113
+ }
114
+
115
+ &__image {
116
+ width: 60px;
117
+ height: 60px;
118
+
119
+ :slotted(img) {
120
+ height: 60px;
121
+ width: 60px;
122
+ object-fit: cover;
123
+ border-radius: 50%;
124
+ }
125
+ }
126
+ }
127
+ </style>
@@ -0,0 +1,159 @@
1
+ <template>
2
+ <div class="rich-text">
3
+ <div class="rich-text__wrapper">
4
+ <div class="rich-text__content rich-text__content--left-aligned">
5
+ <div class="rich-text__body">
6
+ <div>
7
+ <slot name="rich-text-content-left" />
8
+ </div>
9
+ <div>
10
+ <slot name="rich-text-content-right" />
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </template>
17
+
18
+ <script setup></script>
19
+
20
+ <style lang="scss" scoped>
21
+ @use "../../../assets/scss/variables.scss" as *;
22
+
23
+ .rich-text {
24
+ width: 100%;
25
+
26
+ &__wrapper {
27
+ max-width: $max-width;
28
+ margin: 0 auto;
29
+ padding: 0 30px 30px;
30
+ :deep(img) {
31
+ width: 100%;
32
+ }
33
+ @include md {
34
+ padding: 0 0 30px 0px;
35
+ }
36
+ }
37
+
38
+ &__headline {
39
+ margin-bottom: 30px;
40
+ width: 100%;
41
+ max-width: 658px;
42
+
43
+ &--centered {
44
+ margin: 0px auto 15px auto;
45
+
46
+ @media screen and (max-width: 942px) {
47
+ margin: 0px 0 15px 0;
48
+ }
49
+ }
50
+ }
51
+
52
+ &__body {
53
+ max-width: 658px;
54
+ display: flex;
55
+ flex-direction: row;
56
+ flex-wrap: wrap;
57
+ width: 100%;
58
+ gap: 0px;
59
+
60
+ @include md {
61
+ flex-wrap: nowrap;
62
+ gap: 30px;
63
+ }
64
+
65
+ @include sm {
66
+ gap: 30px;
67
+ }
68
+
69
+ :deep(.content-left) {
70
+ width: 314px;
71
+ }
72
+
73
+ :deep(.content-right) {
74
+ width: 314px;
75
+ }
76
+
77
+ :deep(h2) {
78
+ margin: 1.375rem 0;
79
+ font-weight: 300;
80
+ }
81
+
82
+ :deep(h3) {
83
+ margin: 1rem 0;
84
+ font-weight: 300;
85
+ }
86
+
87
+ :deep(p) {
88
+ padding-bottom: 1rem;
89
+
90
+ a {
91
+ color: $blue-600;
92
+ text-decoration: 0.3px underline;
93
+ font-weight: 500;
94
+
95
+ &:hover {
96
+ color: $blue-800;
97
+ transition: $transition-color;
98
+ }
99
+ }
100
+ }
101
+
102
+ :deep(ol) {
103
+ padding-left: 1rem;
104
+ list-style-type: decimal;
105
+ font-family: $font-opensans;
106
+ font-weight: 300;
107
+
108
+ li {
109
+ margin: 5px 0;
110
+ p {
111
+ padding-bottom: 0px;
112
+ }
113
+ }
114
+ }
115
+
116
+ :deep(ul) {
117
+ list-style-type: none;
118
+ font-family: $font-opensans;
119
+ font-weight: 300;
120
+ padding-left: 1rem;
121
+
122
+ li {
123
+ margin: 5px 0;
124
+ list-style: none;
125
+ position: relative;
126
+ left: 0;
127
+
128
+ p {
129
+ padding-bottom: 0px;
130
+ }
131
+ }
132
+
133
+ li::before {
134
+ content: "\2022";
135
+ position: absolute;
136
+ left: -0.8em;
137
+ font-size: 1.1em;
138
+ }
139
+ }
140
+ }
141
+
142
+ &__content {
143
+ margin: 0px auto;
144
+ display: flex;
145
+ flex-direction: column;
146
+ justify-content: space-between;
147
+ gap: 0;
148
+
149
+ &--left-aligned {
150
+ margin-left: 0;
151
+ }
152
+
153
+ @media screen and (min-width: 942px) {
154
+ flex-direction: row;
155
+ gap: 41px;
156
+ }
157
+ }
158
+ }
159
+ </style>