@eox/pages-theme-eox 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/package.json +1 -1
- package/src/components/Footer.vue +89 -27
- package/src/components/PricingTable.vue +62 -48
- package/src/style.css +43 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
# [1.6.0](https://gitlab.eox.at/eox/hub/eoxhub-portal/compare/v1.5.1...v1.6.0) (2026-04-30)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- **style:** link display in sidebar and footer ([766d4f4](https://gitlab.eox.at/eox/hub/eoxhub-portal/commit/766d4f40ec9a185c270211f40280848b90c32fe5))
|
|
8
|
+
- **style:** more compact footer layout ([b190cb9](https://gitlab.eox.at/eox/hub/eoxhub-portal/commit/b190cb9038887ad19cffc2419aea93762aee98a2))
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
- custom CTAs in pricing table ([8900a3c](https://gitlab.eox.at/eox/hub/eoxhub-portal/commit/8900a3c148630e86ef84cf433b7d8008daeba8f5))
|
|
13
|
+
|
|
14
|
+
## [1.5.1](https://gitlab.eox.at/eox/hub/eoxhub-portal/compare/v1.5.0...v1.5.1) (2026-04-30)
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
- **style:** positioning of outline marker ([e6ce573](https://gitlab.eox.at/eox/hub/eoxhub-portal/commit/e6ce5731eabac08dbb8efa5593e8c34a7e75fcf1))
|
|
19
|
+
|
|
3
20
|
# [1.5.0](https://gitlab.eox.at/eox/hub/eoxhub-portal/compare/v1.4.0...v1.5.0) (2026-04-28)
|
|
4
21
|
|
|
5
22
|
### Features
|
package/package.json
CHANGED
|
@@ -3,32 +3,34 @@
|
|
|
3
3
|
<div class="holder large-padding">
|
|
4
4
|
<div class="large-space"></div>
|
|
5
5
|
<div class="grid">
|
|
6
|
-
<div class="s12 l6">
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
6
|
+
<div class="s12 l6 footer-info">
|
|
7
|
+
<div class="footer-info-content">
|
|
8
|
+
<img
|
|
9
|
+
:src="withBase(theme.logo.light)"
|
|
10
|
+
:alt="`${site.title} logo`"
|
|
11
|
+
class="logo"
|
|
12
|
+
/>
|
|
13
|
+
<div class="small-space"></div>
|
|
14
|
+
<a
|
|
15
|
+
v-if="theme.nav.find((i) => i.link && i.link.includes('contact'))"
|
|
16
|
+
:href="
|
|
17
|
+
theme.nav.find((i) => i.link && i.link.includes('contact')).link
|
|
18
|
+
"
|
|
19
|
+
class="button small border no-margin"
|
|
20
|
+
style="color: var(--on-surface)"
|
|
21
|
+
@click="trackEvent(['CTA', 'Click', 'Footer', action.text])"
|
|
22
|
+
>{{
|
|
23
|
+
theme.nav.find((i) => i.link && i.link.includes("contact")).text
|
|
24
|
+
}}</a
|
|
25
|
+
>
|
|
26
|
+
<p v-html="theme.footer.message"></p>
|
|
27
|
+
</div>
|
|
28
|
+
<p class="footer-copyright" v-html="theme.footer.copyright"></p>
|
|
27
29
|
</div>
|
|
28
30
|
<div class="s12 l6">
|
|
29
|
-
<div class="
|
|
31
|
+
<div class="footer-columns">
|
|
30
32
|
<div
|
|
31
|
-
class="
|
|
33
|
+
class="footer-column-item"
|
|
32
34
|
v-if="theme.nav.filter((i) => !i.action && i.link).length"
|
|
33
35
|
>
|
|
34
36
|
<p class="bold">{{ t("About", theme.i18n) }}</p>
|
|
@@ -42,7 +44,10 @@
|
|
|
42
44
|
>
|
|
43
45
|
</p>
|
|
44
46
|
</div>
|
|
45
|
-
<div
|
|
47
|
+
<div
|
|
48
|
+
class="footer-column-item"
|
|
49
|
+
v-for="item in theme.nav.filter((i) => i.items)"
|
|
50
|
+
>
|
|
46
51
|
<p class="bold">{{ item.text }}</p>
|
|
47
52
|
<p v-for="subItem in getFlatList(item.items)">
|
|
48
53
|
<a
|
|
@@ -54,7 +59,7 @@
|
|
|
54
59
|
>
|
|
55
60
|
</p>
|
|
56
61
|
</div>
|
|
57
|
-
<div class="
|
|
62
|
+
<div class="footer-column-item">
|
|
58
63
|
<p class="bold">{{ t("Legal", theme.i18n) }}</p>
|
|
59
64
|
<p>
|
|
60
65
|
<a
|
|
@@ -123,9 +128,66 @@ const termsLinks = computed(() => {
|
|
|
123
128
|
</script>
|
|
124
129
|
|
|
125
130
|
<style>
|
|
126
|
-
|
|
127
|
-
|
|
131
|
+
footer .grid > div:not(:first-child) p,
|
|
132
|
+
.footer-column-item p {
|
|
133
|
+
margin: 0 !important;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
footer .link {
|
|
137
|
+
text-decoration: none;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.footer-columns {
|
|
141
|
+
columns: 1;
|
|
142
|
+
column-gap: 2rem;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.footer-column-item {
|
|
146
|
+
break-inside: avoid;
|
|
147
|
+
margin-bottom: 2rem;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@media screen and (min-width: 601px) {
|
|
151
|
+
.footer-columns {
|
|
152
|
+
columns: 2;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@media screen and (min-width: 993px) {
|
|
157
|
+
.footer-columns {
|
|
158
|
+
columns: 3;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.footer-info {
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-direction: column;
|
|
165
|
+
justify-content: space-between;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@media screen and (max-width: 992px) {
|
|
169
|
+
footer .grid {
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-direction: column;
|
|
172
|
+
}
|
|
173
|
+
.footer-info {
|
|
174
|
+
order: -1;
|
|
175
|
+
margin-bottom: 0;
|
|
176
|
+
display: contents;
|
|
177
|
+
}
|
|
178
|
+
.footer-info-content {
|
|
179
|
+
order: -2;
|
|
180
|
+
margin-bottom: 2rem;
|
|
181
|
+
}
|
|
182
|
+
.footer-columns {
|
|
128
183
|
order: 1;
|
|
129
184
|
}
|
|
185
|
+
.footer-copyright {
|
|
186
|
+
order: 2;
|
|
187
|
+
margin-top: 2rem !important;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@media screen and (max-width: 600px) {
|
|
130
192
|
}
|
|
131
193
|
</style>
|
|
@@ -48,7 +48,11 @@
|
|
|
48
48
|
:href="addPlanConfig(contactLink, plan)"
|
|
49
49
|
class="button responsive bold margin-top-1 margin-bottom-2"
|
|
50
50
|
>
|
|
51
|
-
{{
|
|
51
|
+
{{
|
|
52
|
+
plan.salesCTA
|
|
53
|
+
? t(plan.salesCTA, theme.i18n)
|
|
54
|
+
: t("Contact us", theme.i18n)
|
|
55
|
+
}}
|
|
52
56
|
</a>
|
|
53
57
|
</ClientOnly>
|
|
54
58
|
</div>
|
|
@@ -159,7 +163,7 @@
|
|
|
159
163
|
<div v-if="showDescriptionColumn" class="cell orig-col-1 l"></div>
|
|
160
164
|
<div
|
|
161
165
|
v-for="(plan, index) in localPlans"
|
|
162
|
-
:key="'
|
|
166
|
+
:key="'features-' + index"
|
|
163
167
|
:class="`surface-container-low cell bottom-cell orig-col-${index + 2} center-align`"
|
|
164
168
|
>
|
|
165
169
|
<a v-if="plan.link" :href="plan.link"
|
|
@@ -181,7 +185,7 @@
|
|
|
181
185
|
<div
|
|
182
186
|
v-if="showSales"
|
|
183
187
|
v-for="(plan, index) in localPlans"
|
|
184
|
-
:key="'
|
|
188
|
+
:key="'sales-' + index"
|
|
185
189
|
:class="`surface-container-low cell bottom-cell orig-col-${index + 2} center-align`"
|
|
186
190
|
>
|
|
187
191
|
<ClientOnly>
|
|
@@ -189,8 +193,13 @@
|
|
|
189
193
|
v-if="showSales"
|
|
190
194
|
:href="addPlanConfig(contactLink, plan)"
|
|
191
195
|
class="button responsive bold"
|
|
192
|
-
>{{ t("Contact us", theme.i18n) }}</a
|
|
193
196
|
>
|
|
197
|
+
{{
|
|
198
|
+
plan.salesCTA
|
|
199
|
+
? t(plan.salesCTA, theme.i18n)
|
|
200
|
+
: t("Contact us", theme.i18n)
|
|
201
|
+
}}
|
|
202
|
+
</a>
|
|
194
203
|
</ClientOnly>
|
|
195
204
|
</div>
|
|
196
205
|
</div>
|
|
@@ -357,13 +366,13 @@ export default {
|
|
|
357
366
|
this.$forceUpdate();
|
|
358
367
|
},
|
|
359
368
|
initializeData() {
|
|
360
|
-
this.title = this.config.title ??
|
|
361
|
-
this.showSales = this.config.showSales ??
|
|
362
|
-
this.contactLink = this.config.contactLink ??
|
|
363
|
-
this.showVAT = this.config.showVAT ??
|
|
364
|
-
this.localOptions = this.config.options ??
|
|
365
|
-
this.localPlans = this.config.plans ??
|
|
366
|
-
this.localDetails = this.config.details ??
|
|
369
|
+
this.title = this.config.title ?? "Pricing Options";
|
|
370
|
+
this.showSales = this.config.showSales ?? true;
|
|
371
|
+
this.contactLink = this.config.contactLink ?? "";
|
|
372
|
+
this.showVAT = this.config.showVAT ?? "2025-06-30";
|
|
373
|
+
this.localOptions = this.config.options ?? [];
|
|
374
|
+
this.localPlans = this.config.plans ?? [];
|
|
375
|
+
this.localDetails = this.config.details ?? [];
|
|
367
376
|
},
|
|
368
377
|
handleResize() {
|
|
369
378
|
if (typeof window !== "undefined") {
|
|
@@ -386,35 +395,52 @@ export default {
|
|
|
386
395
|
}
|
|
387
396
|
},
|
|
388
397
|
addPlanConfig(contactLink, plan) {
|
|
389
|
-
|
|
390
|
-
|
|
398
|
+
const baseLink = plan.salesLink || contactLink;
|
|
399
|
+
if (!baseLink) {
|
|
400
|
+
return "";
|
|
391
401
|
}
|
|
392
|
-
|
|
393
|
-
|
|
402
|
+
|
|
403
|
+
const [url, ...searchParts] = baseLink.split("?");
|
|
404
|
+
let search = searchParts.join("?");
|
|
394
405
|
const params = new URLSearchParams(search);
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
)
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
406
|
+
|
|
407
|
+
// Only automatically add "plan" if it's the default contact link
|
|
408
|
+
// and not already present
|
|
409
|
+
if (!plan.salesLink && !params.has("plan") && plan.name) {
|
|
410
|
+
params.append("plan", plan.name);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Add alternatives if they are checked
|
|
414
|
+
if (plan.details) {
|
|
415
|
+
Object.entries(plan.details).forEach(([key, value]) => {
|
|
416
|
+
if (
|
|
417
|
+
value &&
|
|
418
|
+
typeof value === "object" &&
|
|
419
|
+
value.alternative?.checked
|
|
420
|
+
) {
|
|
421
|
+
params.append("alternative", value.alternative.name);
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// Add global options
|
|
427
|
+
if (this.localOptions && this.localOptions.length > 0) {
|
|
428
|
+
this.localOptions.forEach((o) => {
|
|
429
|
+
if (o.checked) {
|
|
430
|
+
params.append("option", o.label);
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Add custom salesParams
|
|
436
|
+
if (plan.salesParams) {
|
|
437
|
+
for (const [key, value] of Object.entries(plan.salesParams)) {
|
|
438
|
+
params.set(key, value);
|
|
405
439
|
}
|
|
406
440
|
}
|
|
407
|
-
|
|
408
|
-
[
|
|
409
|
-
this.localOptions.forEach((o) => {
|
|
410
|
-
const checked = document.querySelector(`input#${o.id}`)?.checked;
|
|
411
|
-
if (checked) {
|
|
412
|
-
params.append("option", o.label);
|
|
413
|
-
}
|
|
414
|
-
}),
|
|
415
|
-
];
|
|
441
|
+
|
|
416
442
|
search = params.toString();
|
|
417
|
-
return `${
|
|
443
|
+
return `${url}${search ? `?${search}` : ""}`;
|
|
418
444
|
},
|
|
419
445
|
},
|
|
420
446
|
created() {
|
|
@@ -431,19 +457,7 @@ export default {
|
|
|
431
457
|
window.removeEventListener("resize", this.handleResize);
|
|
432
458
|
},
|
|
433
459
|
watch: {
|
|
434
|
-
|
|
435
|
-
handler() {
|
|
436
|
-
this.initializeData();
|
|
437
|
-
},
|
|
438
|
-
deep: true,
|
|
439
|
-
},
|
|
440
|
-
plans: {
|
|
441
|
-
handler() {
|
|
442
|
-
this.initializeData();
|
|
443
|
-
},
|
|
444
|
-
deep: true,
|
|
445
|
-
},
|
|
446
|
-
details: {
|
|
460
|
+
config: {
|
|
447
461
|
handler() {
|
|
448
462
|
this.initializeData();
|
|
449
463
|
},
|
package/src/style.css
CHANGED
|
@@ -201,7 +201,7 @@ details[open] > summary > i.mdi-chevron-down {
|
|
|
201
201
|
top: var(--vp-nav-height) !important;
|
|
202
202
|
padding-top: 0 !important;
|
|
203
203
|
padding-left: 0 !important;
|
|
204
|
-
margin-top: -2px;
|
|
204
|
+
margin-top: -2px !important;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
.VPSidebar > nav,
|
|
@@ -238,6 +238,11 @@ details[open] > summary > i.mdi-chevron-down {
|
|
|
238
238
|
padding: 3px 0 !important;
|
|
239
239
|
font-size: 14px;
|
|
240
240
|
line-height: 20px;
|
|
241
|
+
text-decoration: none;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.VPSidebar .VPLink p {
|
|
245
|
+
margin: 0;
|
|
241
246
|
}
|
|
242
247
|
|
|
243
248
|
.social-links {
|
|
@@ -269,6 +274,43 @@ details[open] > summary > i.mdi-chevron-down {
|
|
|
269
274
|
list-style: none;
|
|
270
275
|
}
|
|
271
276
|
|
|
277
|
+
/* VPDocAsideOutline Fixes */
|
|
278
|
+
.VPDocAsideOutline ul {
|
|
279
|
+
display: block !important;
|
|
280
|
+
list-style: none !important;
|
|
281
|
+
margin: 0 !important;
|
|
282
|
+
padding: 0 !important;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.VPDocAsideOutline li {
|
|
286
|
+
list-style: none !important;
|
|
287
|
+
position: static !important;
|
|
288
|
+
margin: 0 !important;
|
|
289
|
+
padding: 0 !important;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.VPDocAsideOutline .outline-link {
|
|
293
|
+
display: block !important;
|
|
294
|
+
line-height: 32px !important;
|
|
295
|
+
font-size: 14px !important;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.VPDocAsideOutline .outline-marker {
|
|
299
|
+
width: 2px !important;
|
|
300
|
+
height: 18px !important;
|
|
301
|
+
transition:
|
|
302
|
+
top 0.25s cubic-bezier(0, 1, 0.5, 1),
|
|
303
|
+
background-color 0.5s,
|
|
304
|
+
opacity 0.25s !important;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.VPDocAsideOutline .outline-title {
|
|
308
|
+
display: block !important;
|
|
309
|
+
line-height: 32px !important;
|
|
310
|
+
font-size: 14px !important;
|
|
311
|
+
font-weight: 600 !important;
|
|
312
|
+
}
|
|
313
|
+
|
|
272
314
|
/* Doc layout fixes */
|
|
273
315
|
.Layout.layout-doc .content-container,
|
|
274
316
|
.VPDocFooter {
|