xv-webcomponents 1.25.1 → 1.25.2
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/dist/cjs/{index-DpLAFt0R.js → index-CsKqwBc1.js} +644 -7
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/xv-accordion-v2_50.cjs.entry.js +59 -41
- package/dist/cjs/xv-footer-next.cjs.entry.js +122 -0
- package/dist/cjs/xv-header-next.cjs.entry.js +2 -2
- package/dist/cjs/xv-mega-menu-next.cjs.entry.js +7 -7
- package/dist/cjs/xv-webcomponents.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/xv-data-table/xv-data-table-cell/xv-data-table-cell.css +2 -1
- package/dist/collection/components/xv-footer-next/xv-footer-next.css +486 -0
- package/dist/collection/components/xv-footer-next/xv-footer-next.js +167 -0
- package/dist/collection/components/xv-footer-next/xv-footer-next.model.js +17 -0
- package/dist/collection/components/xv-geo-map/xv-geo-map.js +41 -1
- package/dist/collection/components/xv-header/xv-header.js +1 -1
- package/dist/collection/components/xv-header-next/xv-header-next.js +1 -1
- package/dist/collection/components/xv-image-viewer/xv-image-viewer.js +1 -1
- package/dist/collection/components/xv-link/xv-link.js +1 -1
- package/dist/collection/components/xv-mega-menu/xv-mega-menu.css +46 -2
- package/dist/collection/components/xv-mega-menu/xv-mega-menu.js +6 -7
- package/dist/collection/components/xv-mega-menu-next/xv-mega-menu-next.css +42 -2
- package/dist/collection/components/xv-mega-menu-next/xv-mega-menu-next.js +20 -6
- package/dist/collection/components/xv-modal/xv-modal.js +1 -1
- package/dist/collection/components/xv-notification/xv-notification.js +1 -1
- package/dist/collection/components/xv-number-input/xv-number-input.js +2 -2
- package/dist/collection/components/xv-pagination/xv-pagination.js +1 -1
- package/dist/collection/components/xv-progress-indicator/xv-progress-indicator-item/xv-progress-indicator-item.js +1 -1
- package/dist/collection/components/xv-progress-indicator/xv-progress-indicator.js +1 -1
- package/dist/collection/components/xv-radio/xv-radio.js +2 -2
- package/dist/collection/components/xv-slider/xv-slider.js +1 -1
- package/dist/collection/components/xv-table/xv-table-cell/xv-table-cell.js +1 -1
- package/dist/collection/components/xv-table/xv-table-expand/xv-table-expand.js +1 -1
- package/dist/collection/components/xv-table/xv-table-row/xv-table-row.js +1 -1
- package/dist/collection/components/xv-table/xv-table.js +1 -1
- package/dist/collection/components/xv-tabs/xv-tab/xv-tab.js +1 -1
- package/dist/collection/components/xv-tag/xv-tag.js +1 -1
- package/dist/collection/components/xv-tag-combobox/xv-tag-combobox.js +2 -2
- package/dist/collection/components/xv-text-input/xv-text-input.js +2 -2
- package/dist/collection/components/xv-textarea/xv-textarea.js +2 -2
- package/dist/collection/components/xv-tile/xv-tile.js +2 -2
- package/dist/collection/components/xv-toggle/xv-toggle.js +1 -1
- package/dist/collection/components/xv-toggle-tip/xv-toggle-tip.js +1 -1
- package/dist/collection/components/xv-tooltip/xv-tooltip.js +2 -2
- package/dist/esm/{index-CQm2sRKT.js → index-D0yFoU2h.js} +1 -1
- package/dist/esm/{index-DmxA2ysB.js → index-Owr_mJOX.js} +644 -7
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/xv-accordion-v2_50.entry.js +60 -42
- package/dist/esm/xv-footer-next.entry.js +120 -0
- package/dist/esm/xv-header-next.entry.js +3 -3
- package/dist/esm/xv-mega-menu-next.entry.js +8 -8
- package/dist/esm/xv-webcomponents.js +3 -3
- package/dist/types/components/xv-footer-next/xv-footer-next.d.ts +42 -0
- package/dist/types/components/xv-footer-next/xv-footer-next.model.d.ts +43 -0
- package/dist/types/components/xv-geo-map/xv-geo-map.d.ts +7 -0
- package/dist/types/components/xv-mega-menu-next/xv-mega-menu-next.d.ts +14 -0
- package/dist/types/components.d.ts +131 -0
- package/dist/xv-webcomponents/index.esm.js +1 -1
- package/dist/xv-webcomponents/p-3dd10203.entry.js +1 -0
- package/dist/xv-webcomponents/{p-CQm2sRKT.js → p-D0yFoU2h.js} +1 -1
- package/dist/xv-webcomponents/p-Owr_mJOX.js +2 -0
- package/dist/xv-webcomponents/p-b0fbf402.entry.js +8 -0
- package/dist/xv-webcomponents/p-ec19bcc7.entry.js +1 -0
- package/dist/xv-webcomponents/{p-f46bb687.entry.js → p-fbd8ca68.entry.js} +1 -1
- package/dist/xv-webcomponents/xv-webcomponents.esm.js +1 -1
- package/hydrate/index.d.ts +287 -0
- package/hydrate/index.js +113808 -0
- package/hydrate/index.mjs +113798 -0
- package/hydrate/package.json +12 -0
- package/package.json +8 -2
- package/dist/xv-webcomponents/p-7832549c.entry.js +0 -8
- package/dist/xv-webcomponents/p-DmxA2ysB.js +0 -2
- package/dist/xv-webcomponents/p-fe9b38f8.entry.js +0 -1
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
.xv-container {
|
|
2
|
+
width: 100%;
|
|
3
|
+
max-width: 1170px;
|
|
4
|
+
margin-inline: auto;
|
|
5
|
+
}
|
|
6
|
+
@media (min-width: 576px) {
|
|
7
|
+
.xv-container {
|
|
8
|
+
max-width: 540px;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
@media (min-width: 768px) {
|
|
12
|
+
.xv-container {
|
|
13
|
+
max-width: 720px;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
@media (min-width: 992px) {
|
|
17
|
+
.xv-container {
|
|
18
|
+
max-width: 960px;
|
|
19
|
+
padding-inline: var(--bs-gutter-x, 0.75rem);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
@media (min-width: 1200px) {
|
|
23
|
+
.xv-container {
|
|
24
|
+
max-width: 1140px;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
@media (min-width: 1400px) {
|
|
28
|
+
.xv-container {
|
|
29
|
+
max-width: 1320px;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.svg-assets--src--project--images--svg-sprite--youtube, .svg-assets--src--project--images--svg-sprite--xing, .svg-assets--src--project--images--svg-sprite--vorkasse, .svg-assets--src--project--images--svg-sprite--visa, .svg-assets--src--project--images--svg-sprite--sepa, .svg-assets--src--project--images--svg-sprite--paypal, .svg-assets--src--project--images--svg-sprite--mastercard, .svg-assets--src--project--images--svg-sprite--linkedin, .svg-assets--src--project--images--svg-sprite--kauf-auf-rechnung, .svg-assets--src--project--images--svg-sprite--instagram, .svg-assets--src--project--images--svg-sprite--facebook {
|
|
34
|
+
background: url("https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.svg") no-repeat;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.svg-assets--src--project--images--svg-sprite--facebook {
|
|
38
|
+
background-position: 0 100%;
|
|
39
|
+
width: 32px;
|
|
40
|
+
height: 32px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.svg-assets--src--project--images--svg-sprite--instagram {
|
|
44
|
+
background-position: 14.5454545455% 100%;
|
|
45
|
+
width: 32px;
|
|
46
|
+
height: 32px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.svg-assets--src--project--images--svg-sprite--kauf-auf-rechnung {
|
|
50
|
+
background-position: 0 0;
|
|
51
|
+
width: 84px;
|
|
52
|
+
height: 58px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.svg-assets--src--project--images--svg-sprite--linkedin {
|
|
56
|
+
background-position: 29.0909090909% 100%;
|
|
57
|
+
width: 32px;
|
|
58
|
+
height: 32px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.svg-assets--src--project--images--svg-sprite--mastercard {
|
|
62
|
+
background-position: 50% 0;
|
|
63
|
+
width: 84px;
|
|
64
|
+
height: 58px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.svg-assets--src--project--images--svg-sprite--paypal {
|
|
68
|
+
background-position: 0 64.4444444444%;
|
|
69
|
+
width: 84px;
|
|
70
|
+
height: 58px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.svg-assets--src--project--images--svg-sprite--sepa {
|
|
74
|
+
background-position: 50% 64.4444444444%;
|
|
75
|
+
width: 84px;
|
|
76
|
+
height: 58px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.svg-assets--src--project--images--svg-sprite--visa {
|
|
80
|
+
background-position: 100% 0;
|
|
81
|
+
width: 84px;
|
|
82
|
+
height: 58px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.svg-assets--src--project--images--svg-sprite--vorkasse {
|
|
86
|
+
background-position: 100% 64.4444444444%;
|
|
87
|
+
width: 84px;
|
|
88
|
+
height: 58px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.svg-assets--src--project--images--svg-sprite--xing {
|
|
92
|
+
background-position: 43.6363636364% 100%;
|
|
93
|
+
width: 32px;
|
|
94
|
+
height: 32px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.svg-assets--src--project--images--svg-sprite--youtube {
|
|
98
|
+
background-position: 58.1818181818% 100%;
|
|
99
|
+
width: 32px;
|
|
100
|
+
height: 32px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.sprite-icon-beachten {
|
|
104
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
105
|
+
background-position: -90px 0px;
|
|
106
|
+
width: 80px;
|
|
107
|
+
height: 80px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.sprite-icon-buchen {
|
|
111
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
112
|
+
background-position: 0px -82px;
|
|
113
|
+
width: 80px;
|
|
114
|
+
height: 80px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.sprite-icon-direct {
|
|
118
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
119
|
+
background-position: -284px -99px;
|
|
120
|
+
width: 21px;
|
|
121
|
+
height: 21px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.sprite-icon-downloads {
|
|
125
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
126
|
+
background-position: -80px -82px;
|
|
127
|
+
width: 80px;
|
|
128
|
+
height: 80px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.sprite-icon-kino {
|
|
132
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
133
|
+
background-position: -305px -99px;
|
|
134
|
+
width: 21px;
|
|
135
|
+
height: 21px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.sprite-icon-kosten {
|
|
139
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
140
|
+
background-position: -170px 0px;
|
|
141
|
+
width: 80px;
|
|
142
|
+
height: 80px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.sprite-icon-kreation {
|
|
146
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
147
|
+
background-position: -170px -80px;
|
|
148
|
+
width: 80px;
|
|
149
|
+
height: 80px;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.sprite-icon-logo-full {
|
|
153
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
154
|
+
background-position: 0px -242px;
|
|
155
|
+
width: 189px;
|
|
156
|
+
height: 32px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.sprite-icon-logo-small {
|
|
160
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
161
|
+
background-position: -250px -99px;
|
|
162
|
+
width: 34px;
|
|
163
|
+
height: 34px;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.sprite-icon-mobile {
|
|
167
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
168
|
+
background-position: -326px -99px;
|
|
169
|
+
width: 21px;
|
|
170
|
+
height: 21px;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.sprite-icon-online {
|
|
174
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
175
|
+
background-position: -347px -99px;
|
|
176
|
+
width: 21px;
|
|
177
|
+
height: 21px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.sprite-icon-partner-agma {
|
|
181
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
182
|
+
background-position: -250px -66px;
|
|
183
|
+
width: 88px;
|
|
184
|
+
height: 33px;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.sprite-icon-partner-bvdw {
|
|
188
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
189
|
+
background-position: -338px -66px;
|
|
190
|
+
width: 88px;
|
|
191
|
+
height: 33px;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.sprite-icon-partner-climate {
|
|
195
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
196
|
+
background-position: -250px 0px;
|
|
197
|
+
width: 186px;
|
|
198
|
+
height: 33px;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.sprite-icon-partner-google {
|
|
202
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
203
|
+
background-position: 0 0;
|
|
204
|
+
width: 90px;
|
|
205
|
+
height: 82px;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.sprite-icon-partner-microsoft {
|
|
209
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
210
|
+
background-position: -250px -33px;
|
|
211
|
+
width: 186px;
|
|
212
|
+
height: 33px;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.sprite-icon-plakat {
|
|
216
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
217
|
+
background-position: -368px -99px;
|
|
218
|
+
width: 21px;
|
|
219
|
+
height: 21px;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.sprite-icon-print {
|
|
223
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
224
|
+
background-position: -389px -99px;
|
|
225
|
+
width: 21px;
|
|
226
|
+
height: 21px;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.sprite-icon-radio {
|
|
230
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
231
|
+
background-position: -410px -99px;
|
|
232
|
+
width: 21px;
|
|
233
|
+
height: 21px;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.sprite-icon-services {
|
|
237
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
238
|
+
background-position: -250px -133px;
|
|
239
|
+
width: 21px;
|
|
240
|
+
height: 21px;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.sprite-icon-topangebote {
|
|
244
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
245
|
+
background-position: -271px -133px;
|
|
246
|
+
width: 21px;
|
|
247
|
+
height: 21px;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.sprite-icon-tv {
|
|
251
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
252
|
+
background-position: -292px -133px;
|
|
253
|
+
width: 21px;
|
|
254
|
+
height: 21px;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.sprite-icon-werbeformen {
|
|
258
|
+
background-image: url(https://crossvertise.blob.core.windows.net/assets/images/xv-sprite.png?1739974291120);
|
|
259
|
+
background-position: 0px -162px;
|
|
260
|
+
width: 80px;
|
|
261
|
+
height: 80px;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.container-footer {
|
|
265
|
+
min-height: 75px;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.footer-static {
|
|
269
|
+
border-top: solid 1px #eaeaea;
|
|
270
|
+
padding-top: 30px;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.xv-footer__grid {
|
|
274
|
+
display: grid;
|
|
275
|
+
grid-template-columns: 1fr;
|
|
276
|
+
}
|
|
277
|
+
@media (min-width: 768px) {
|
|
278
|
+
.xv-footer__grid {
|
|
279
|
+
grid-template-columns: 8fr 3fr;
|
|
280
|
+
column-gap: var(--spacing-07, 32px);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.xv-footer {
|
|
285
|
+
display: block;
|
|
286
|
+
border-top: 1px solid var(--layer-01, #F7F7F7) !important;
|
|
287
|
+
background: var(--layer-01, #F7F7F7) !important;
|
|
288
|
+
--ff-body: var(--ff-work-sans);
|
|
289
|
+
}
|
|
290
|
+
.xv-footer-advantages {
|
|
291
|
+
border-bottom: 1px solid var(--border-subtle-01, #D1D1D1);
|
|
292
|
+
background: var(--highlight-01, #CEDE94);
|
|
293
|
+
display: block;
|
|
294
|
+
}
|
|
295
|
+
.xv-footer-advantages ul {
|
|
296
|
+
margin: 0;
|
|
297
|
+
padding: var(--spacing-05, 16px);
|
|
298
|
+
gap: var(--spacing-05, 16px);
|
|
299
|
+
display: flex;
|
|
300
|
+
align-items: center;
|
|
301
|
+
justify-content: space-between;
|
|
302
|
+
flex-wrap: wrap;
|
|
303
|
+
list-style: none;
|
|
304
|
+
}
|
|
305
|
+
@media (max-width: 991px) {
|
|
306
|
+
.xv-footer-advantages ul {
|
|
307
|
+
display: grid;
|
|
308
|
+
grid-template-columns: repeat(2, 1fr);
|
|
309
|
+
justify-items: center;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
.xv-footer-advantages ul > li > a {
|
|
313
|
+
display: flex;
|
|
314
|
+
flex-direction: column;
|
|
315
|
+
align-items: center;
|
|
316
|
+
justify-content: center;
|
|
317
|
+
row-gap: var(--spacing-06, 24px);
|
|
318
|
+
min-width: min(182px, 40vw);
|
|
319
|
+
width: min(182px, 40vw);
|
|
320
|
+
text-align: center;
|
|
321
|
+
text-decoration: none;
|
|
322
|
+
}
|
|
323
|
+
.xv-footer-advantages ul > li > a > img, .xv-footer-advantages ul > li > a > i {
|
|
324
|
+
width: 32px;
|
|
325
|
+
font-size: 32px;
|
|
326
|
+
block-size: 32px;
|
|
327
|
+
color: var(--icon-primary);
|
|
328
|
+
object-fit: contain;
|
|
329
|
+
}
|
|
330
|
+
.xv-footer-advantages ul > li > a > img {
|
|
331
|
+
font-size: var(--fz-sm, 12px);
|
|
332
|
+
}
|
|
333
|
+
.xv-footer-advantages ul > li > a > span {
|
|
334
|
+
color: var(--text-primary, #333);
|
|
335
|
+
font-feature-settings: "liga" off, "clig" off;
|
|
336
|
+
}
|
|
337
|
+
.xv-footer-categories {
|
|
338
|
+
list-style: none;
|
|
339
|
+
padding: 0;
|
|
340
|
+
margin: 0 0 var(--spacing-06, 24px);
|
|
341
|
+
display: flex;
|
|
342
|
+
flex: 1;
|
|
343
|
+
justify-content: space-between;
|
|
344
|
+
row-gap: var(--spacing-06, 24px);
|
|
345
|
+
column-gap: var(--spacing-09);
|
|
346
|
+
}
|
|
347
|
+
@media (max-width: 768px) {
|
|
348
|
+
.xv-footer-categories {
|
|
349
|
+
display: grid;
|
|
350
|
+
grid-template-columns: repeat(2, 1fr);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
.xv-footer-categories > li {
|
|
354
|
+
display: flex;
|
|
355
|
+
flex-direction: column;
|
|
356
|
+
row-gap: var(--sapcing-05, 16px);
|
|
357
|
+
max-width: 203px;
|
|
358
|
+
}
|
|
359
|
+
.xv-footer-routes {
|
|
360
|
+
list-style: none;
|
|
361
|
+
margin: 0;
|
|
362
|
+
padding: 0;
|
|
363
|
+
display: flex;
|
|
364
|
+
row-gap: var(--spacing-05, 16px);
|
|
365
|
+
flex-direction: column;
|
|
366
|
+
}
|
|
367
|
+
.xv-footer-routes a {
|
|
368
|
+
color: var(--interactive-01, #273435);
|
|
369
|
+
}
|
|
370
|
+
.xv-footer-legal {
|
|
371
|
+
background: var(--layer-accent-02, #E3E3E3);
|
|
372
|
+
}
|
|
373
|
+
.xv-footer-legal-row {
|
|
374
|
+
display: flex;
|
|
375
|
+
align-items: center;
|
|
376
|
+
text-align: center;
|
|
377
|
+
gap: var(--spacing-05);
|
|
378
|
+
padding: var(--spacing-09) var(--spacing-05);
|
|
379
|
+
}
|
|
380
|
+
@media (max-width: 768px) {
|
|
381
|
+
.xv-footer-legal-row {
|
|
382
|
+
padding-block: var(--spacing-05);
|
|
383
|
+
flex-direction: column;
|
|
384
|
+
justify-content: center;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
.xv-footer-legal-row a.xv-helper-text-02 {
|
|
388
|
+
cursor: pointer;
|
|
389
|
+
}
|
|
390
|
+
.xv-footer-legal-row .xv-footer-logo {
|
|
391
|
+
text-decoration: none;
|
|
392
|
+
display: inline-flex;
|
|
393
|
+
align-items: center;
|
|
394
|
+
gap: var(--spacing-03);
|
|
395
|
+
color: var(--text-primary);
|
|
396
|
+
}
|
|
397
|
+
.xv-footer-legal-row .xv-footer-logo > img {
|
|
398
|
+
width: 160px;
|
|
399
|
+
}
|
|
400
|
+
.xv-footer-legal ul {
|
|
401
|
+
flex: 1;
|
|
402
|
+
padding: 0;
|
|
403
|
+
margin: 0 auto;
|
|
404
|
+
list-style: none;
|
|
405
|
+
display: flex;
|
|
406
|
+
align-items: center;
|
|
407
|
+
justify-content: center;
|
|
408
|
+
flex-wrap: wrap;
|
|
409
|
+
max-width: 600px;
|
|
410
|
+
align-self: center;
|
|
411
|
+
}
|
|
412
|
+
.xv-footer-legal ul > li {
|
|
413
|
+
display: inline-flex;
|
|
414
|
+
align-items: center;
|
|
415
|
+
color: var(--text-secondary, #515151);
|
|
416
|
+
}
|
|
417
|
+
.xv-footer-legal ul > li:not(:last-child):after {
|
|
418
|
+
display: inline-flex;
|
|
419
|
+
margin-inline: var(--spacing-02);
|
|
420
|
+
content: "|";
|
|
421
|
+
}
|
|
422
|
+
.xv-footer-legal ul > li > * {
|
|
423
|
+
color: inherit;
|
|
424
|
+
}
|
|
425
|
+
.xv-footer .footer-grid {
|
|
426
|
+
display: flex;
|
|
427
|
+
flex-direction: column;
|
|
428
|
+
row-gap: var(--spacing-05, 16px);
|
|
429
|
+
}
|
|
430
|
+
.xv-footer .footer-grid:not(:last-child) {
|
|
431
|
+
margin-block-end: var(--spacing-06, 24px);
|
|
432
|
+
}
|
|
433
|
+
.xv-footer .footer-grid > ul {
|
|
434
|
+
list-style: none;
|
|
435
|
+
margin: 0;
|
|
436
|
+
padding: 0;
|
|
437
|
+
display: grid;
|
|
438
|
+
gap: var(--spacing-05);
|
|
439
|
+
grid-template-columns: repeat(3, 1fr);
|
|
440
|
+
justify-items: center;
|
|
441
|
+
}
|
|
442
|
+
.xv-footer .footer-grid > ul > li {
|
|
443
|
+
display: flex;
|
|
444
|
+
align-items: center;
|
|
445
|
+
justify-content: center;
|
|
446
|
+
flex-direction: column;
|
|
447
|
+
width: 60px;
|
|
448
|
+
font-size: 60px;
|
|
449
|
+
block-size: 60px;
|
|
450
|
+
}
|
|
451
|
+
.xv-footer .footer-grid > ul > li > a, .xv-footer .footer-grid > ul > li > a > img, .xv-footer .footer-grid > ul > li > a > i, .xv-footer .footer-grid > ul > li > img, .xv-footer .footer-grid > ul > li > i {
|
|
452
|
+
text-decoration: none;
|
|
453
|
+
display: block;
|
|
454
|
+
width: inherit;
|
|
455
|
+
font-size: inherit;
|
|
456
|
+
block-size: inherit;
|
|
457
|
+
color: var(--icon-primary);
|
|
458
|
+
object-fit: contain;
|
|
459
|
+
}
|
|
460
|
+
.xv-footer .footer-grid > ul > li > a > img, .xv-footer .footer-grid > ul > li > img {
|
|
461
|
+
font-size: var(--fz-sm, 12px);
|
|
462
|
+
text-align: center;
|
|
463
|
+
}
|
|
464
|
+
.xv-footer .footer-grid > ul > li > span {
|
|
465
|
+
color: var(--text-primary, #333);
|
|
466
|
+
font-feature-settings: "liga" off, "clig" off;
|
|
467
|
+
}
|
|
468
|
+
.xv-footer .footer-grid--row > ul {
|
|
469
|
+
display: flex;
|
|
470
|
+
flex-direction: row;
|
|
471
|
+
justify-content: space-between;
|
|
472
|
+
flex: 1;
|
|
473
|
+
}
|
|
474
|
+
.xv-footer .footer-grid--row > ul > li {
|
|
475
|
+
width: 24px;
|
|
476
|
+
block-size: 24px;
|
|
477
|
+
font-size: 24px;
|
|
478
|
+
}
|
|
479
|
+
.xv-footer-y-spacing {
|
|
480
|
+
margin-block: var(--spacing-07, 32px) var(--spacing-10, 64px);
|
|
481
|
+
}
|
|
482
|
+
.xv-footer .xv-label-02,
|
|
483
|
+
.xv-footer .xv-heading-compact-02 {
|
|
484
|
+
margin: 0;
|
|
485
|
+
color: var(--text-secondary, #515151);
|
|
486
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
import { DEFAULT_FOOTER_LABELS } from "./xv-footer-next.model";
|
|
3
|
+
import { api, resolveWhitelabel } from "../../utils/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Drop-in successor of `xv-footer` for the new headless CMS.
|
|
6
|
+
*
|
|
7
|
+
* Identical to the original except:
|
|
8
|
+
* 1. Tag is `xv-footer-next`
|
|
9
|
+
* 2. Accepts a `footer-data` prop so the consumer can pre-render the
|
|
10
|
+
* content instead of the component fetching it at runtime. The CMS
|
|
11
|
+
* stores one document per language, which is what makes a translated
|
|
12
|
+
* footer possible at all.
|
|
13
|
+
* 3. The three sidebar headings come from `labels` in that data instead of
|
|
14
|
+
* being hardcoded German strings. Missing keys fall back to the old
|
|
15
|
+
* wording, so a V1 payload renders exactly as before.
|
|
16
|
+
*
|
|
17
|
+
* Without the prop it behaves like V1: it fetches the whitelabel JSON from
|
|
18
|
+
* blob storage on load, so it stays a drop-in replacement.
|
|
19
|
+
*/
|
|
20
|
+
export class XvFooterNext {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.openCookieSettings = (e) => {
|
|
23
|
+
var _a;
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
(_a = window.__cmp) === null || _a === void 0 ? void 0 : _a.call(window, 'showScreenAdvanced');
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
onFooterDataChange(next) {
|
|
29
|
+
const parsed = this.parseFooterData(next);
|
|
30
|
+
if (parsed)
|
|
31
|
+
this.data = parsed;
|
|
32
|
+
}
|
|
33
|
+
componentWillLoad() {
|
|
34
|
+
const initial = this.parseFooterData(this.footerData);
|
|
35
|
+
if (initial) {
|
|
36
|
+
this.data = initial;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
void this.handleLoadData();
|
|
40
|
+
}
|
|
41
|
+
parseFooterData(value) {
|
|
42
|
+
if (!value)
|
|
43
|
+
return null;
|
|
44
|
+
if (typeof value !== 'string')
|
|
45
|
+
return value;
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(value);
|
|
48
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.warn('xv-footer-next: invalid footer-data JSON', e);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* V1 fetch path, kept for consumers that have no CMS behind them.
|
|
57
|
+
* Skipped entirely once `footerData` is supplied.
|
|
58
|
+
*/
|
|
59
|
+
async handleLoadData() {
|
|
60
|
+
if (this.parseFooterData(this.footerData))
|
|
61
|
+
return;
|
|
62
|
+
const baseUrl = 'https://xvsitefinitystorage.blob.core.windows.net/production/components/xv-footer/';
|
|
63
|
+
const brand = resolveWhitelabel() || 'Xv';
|
|
64
|
+
try {
|
|
65
|
+
this.data = await api.get(`${baseUrl}xv-footer.data.${brand}.json`, { raw: true });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.warn(`Failed to fetch footer data for ${brand}, using fallback:`, err);
|
|
70
|
+
if (brand === 'Xv')
|
|
71
|
+
return; // No need to fallback if already trying default brand
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
this.data = await api.get(`${baseUrl}xv-footer.data.Xv.json`, { raw: true });
|
|
75
|
+
}
|
|
76
|
+
catch (finalErr) {
|
|
77
|
+
console.error('Fallback footer load failed:', finalErr);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
get labels() {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
return Object.assign(Object.assign({}, DEFAULT_FOOTER_LABELS), ((_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.labels) !== null && _b !== void 0 ? _b : {}));
|
|
83
|
+
}
|
|
84
|
+
render() {
|
|
85
|
+
const { categories, socials, logo, legalLinks, payments, partners, advantages } = this.data || {};
|
|
86
|
+
const hasDataLength = ((categories === null || categories === void 0 ? void 0 : categories.length) || (partners === null || partners === void 0 ? void 0 : partners.length) || (payments === null || payments === void 0 ? void 0 : payments.length) || (socials === null || socials === void 0 ? void 0 : socials.length));
|
|
87
|
+
const labels = this.labels;
|
|
88
|
+
return (h("footer", { key: '1ea7f6ae925210666aff8e7a7bafba8f5f05a7db', class: "xv-footer" }, (advantages === null || advantages === void 0 ? void 0 : advantages.length) > 0 && (h("div", { key: 'c277df0213caffc9b4a4947fd859244a97abafb7', class: "xv-footer-advantages" }, h("div", { key: 'fc0b0f42df35e9eb708554b12dfd89b03e359f92', class: "xv-container" }, this._renderFooterList(advantages, { itemWithLabel: true })))), hasDataLength && (h("div", { key: 'f3180c517955d4fc49e77b489b3e64c88947772b', class: "xv-container" }, h("div", { key: 'af4029318be8be0aba367eee734208afaff3d081', class: "xv-footer__grid xv-footer-y-spacing" }, h("div", { key: 'd517532894a4a6f4a94814b0bcc5218fb0a7652d', class: "xv-footer__col-main" }, h("ul", { key: '311115f6991c58455e87d571dc280da7e3546a79', class: "xv-footer-categories" }, categories === null || categories === void 0 ? void 0 : categories.map((category) => {
|
|
89
|
+
var _a;
|
|
90
|
+
return (h("li", null, h("p", { class: "xv-label-02" }, category.label), h("ul", { class: "xv-footer-routes" }, (_a = category.routes) === null || _a === void 0 ? void 0 : _a.map((item) => (h("li", null, h("a", { class: "xv-body-compact-02", href: item.href, target: item.target }, item.label)))))));
|
|
91
|
+
}))), h("div", { key: '2993c8863d750877ad4da0506703c00e737bb12b', class: "xv-footer__col-sidebar" }, this._renderFooterList(partners, { label: labels.partners }), this._renderFooterList(payments, { label: labels.payments }), this._renderFooterList(socials, { label: labels.socials, isRow: true }))))), (legalLinks === null || legalLinks === void 0 ? void 0 : legalLinks.length) > 0 && (h("div", { key: 'fa0ca088a3167599bd97b7a0627dfae3f64a3c21', class: "xv-footer-legal" }, h("div", { key: 'cd82873c4cfbaf6e65137c6ccbd029697f4e1bfc', class: "xv-container" }, h("div", { key: '8b0a4353501acafcd3df520ac2c9964f316cd5d0', class: "xv-footer-legal-row" }, logo && (h("a", { key: '080237964fd922700bc70695c120e3ecb22bae68', class: "xv-footer-logo", href: logo.href, target: logo.target }, logo.label && h("span", { key: 'b6278d014c8846318818f85e021130f7675c2503', class: "xv-label-02" }, logo.label), h("img", { key: 'f0a71927ad8ea50da5c6cdfc3ab956b3c867c10a', loading: "lazy", src: logo.image, alt: logo.label }))), h("ul", { key: '527b84cafd5a4c436b41d3c47bb67c1ea875f24e' }, legalLinks.map((item) => {
|
|
92
|
+
// A link with no href is a UI trigger, not navigation —
|
|
93
|
+
// that is how the cookie dialog is wired. V1 matched the
|
|
94
|
+
// German label instead, which broke in any other language.
|
|
95
|
+
if (!item.href) {
|
|
96
|
+
return h("li", null, h("a", { class: "xv-helper-text-02", href: "#", onClick: this.openCookieSettings }, item.label));
|
|
97
|
+
}
|
|
98
|
+
return h("li", null, h("a", { class: "xv-helper-text-02", href: item.href, target: item.target }, item.label));
|
|
99
|
+
}))))))));
|
|
100
|
+
}
|
|
101
|
+
_renderFooterList(items = [], opt) {
|
|
102
|
+
if (!(items === null || items === void 0 ? void 0 : items.length))
|
|
103
|
+
return null;
|
|
104
|
+
const list = (h("ul", null, items.map((item) => (h("li", null, h("a", { href: item === null || item === void 0 ? void 0 : item.href, target: item.target }, item.icon && h("i", { class: { fa: true, [item.icon]: true } }), item.image && h("img", { src: item.image, alt: item.label }), (opt === null || opt === void 0 ? void 0 : opt.itemWithLabel) && item.label && h("span", { class: "xv-body-02" }, item.label)))))));
|
|
105
|
+
return (opt === null || opt === void 0 ? void 0 : opt.label) ? (h("div", { class: { 'footer-grid': true, 'footer-grid--row': !!(opt === null || opt === void 0 ? void 0 : opt.isRow) } }, h("p", { class: "xv-heading-compact-02" }, opt.label), list)) : list;
|
|
106
|
+
}
|
|
107
|
+
static get is() { return "xv-footer-next"; }
|
|
108
|
+
static get originalStyleUrls() {
|
|
109
|
+
return {
|
|
110
|
+
"$": ["xv-footer-next.scss"]
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
static get styleUrls() {
|
|
114
|
+
return {
|
|
115
|
+
"$": ["xv-footer-next.css"]
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
static get properties() {
|
|
119
|
+
return {
|
|
120
|
+
"footerData": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"mutable": false,
|
|
123
|
+
"complexType": {
|
|
124
|
+
"original": "string | FooterDataModel",
|
|
125
|
+
"resolved": "FooterDataModel | string",
|
|
126
|
+
"references": {
|
|
127
|
+
"FooterDataModel": {
|
|
128
|
+
"location": "import",
|
|
129
|
+
"path": "./xv-footer-next.model",
|
|
130
|
+
"id": "src/components/xv-footer-next/xv-footer-next.model.ts::FooterDataModel"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"required": false,
|
|
135
|
+
"optional": true,
|
|
136
|
+
"docs": {
|
|
137
|
+
"tags": [],
|
|
138
|
+
"text": "Footer content, either as a JSON string (HTML attribute) or as an object\n(JS property). When set, no network request is made."
|
|
139
|
+
},
|
|
140
|
+
"getter": false,
|
|
141
|
+
"setter": false,
|
|
142
|
+
"reflect": false,
|
|
143
|
+
"attribute": "footer-data"
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
static get states() {
|
|
148
|
+
return {
|
|
149
|
+
"data": {}
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
static get watchers() {
|
|
153
|
+
return [{
|
|
154
|
+
"propName": "footerData",
|
|
155
|
+
"methodName": "onFooterDataChange"
|
|
156
|
+
}];
|
|
157
|
+
}
|
|
158
|
+
static get listeners() {
|
|
159
|
+
return [{
|
|
160
|
+
"name": "xv:metaNav-update",
|
|
161
|
+
"method": "handleLoadData",
|
|
162
|
+
"target": "window",
|
|
163
|
+
"capture": false,
|
|
164
|
+
"passive": false
|
|
165
|
+
}];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data model for `xv-footer-next`.
|
|
3
|
+
*
|
|
4
|
+
* A copy of `xv-footer.model.ts` — deliberately duplicated rather than
|
|
5
|
+
* imported, so the two components can diverge without breaking each other
|
|
6
|
+
* (same approach as `xv-mega-menu-next.model.ts`).
|
|
7
|
+
*
|
|
8
|
+
* Difference from V1: `labels` was added. V1 had the three sidebar headings
|
|
9
|
+
* as hardcoded German strings in its render method, which made it unusable
|
|
10
|
+
* in a second language.
|
|
11
|
+
*/
|
|
12
|
+
/** What V1 rendered when no labels were supplied. */
|
|
13
|
+
export const DEFAULT_FOOTER_LABELS = {
|
|
14
|
+
partners: 'crossvertise Partner',
|
|
15
|
+
payments: 'Bequem und sicher bezahlen',
|
|
16
|
+
socials: 'Folgen Sie uns',
|
|
17
|
+
};
|