@eox/pages-theme-eox 2.0.0-alpha.2 → 2.0.0-alpha.3
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/package.json +1 -1
- package/src/components/BlogList.vue +19 -27
- package/src/components/BlogPost.vue +20 -20
- package/src/components/FeatureCard/Index.vue +40 -16
- package/src/components/HeroSection.vue +6 -6
- package/src/components/TagList.vue +14 -7
- package/src/components/TeamPage.vue +15 -11
- package/src/style.css +62 -2
- package/src/tagUtils.js +5 -5
- package/src/vitepressConfig.mjs +2 -2
package/package.json
CHANGED
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
<div class="blog-landing-header" role="banner">
|
|
5
5
|
<div class="flex flex-col md:flex-row md:items-end justify-between gap-6">
|
|
6
6
|
<div>
|
|
7
|
-
<h1 class="blog-landing-title">
|
|
8
|
-
EOX Blog
|
|
9
|
-
</h1>
|
|
7
|
+
<h1 class="blog-landing-title">EOX Blog</h1>
|
|
10
8
|
<p class="blog-landing-subtitle">
|
|
11
9
|
Insights, updates, and deep dives from our geospatial experts.
|
|
12
10
|
</p>
|
|
@@ -14,10 +12,7 @@
|
|
|
14
12
|
</div>
|
|
15
13
|
|
|
16
14
|
<!-- Active Filter Banner -->
|
|
17
|
-
<div
|
|
18
|
-
v-if="activeTag || activeAuthor"
|
|
19
|
-
class="active-filter-banner"
|
|
20
|
-
>
|
|
15
|
+
<div v-if="activeTag || activeAuthor" class="active-filter-banner">
|
|
21
16
|
<span class="filter-label">Active filter:</span>
|
|
22
17
|
<span
|
|
23
18
|
v-if="activeTag"
|
|
@@ -32,10 +27,7 @@
|
|
|
32
27
|
>
|
|
33
28
|
Author: {{ getAuthorName(activeAuthor) }}
|
|
34
29
|
</span>
|
|
35
|
-
<button
|
|
36
|
-
@click="clearFilters"
|
|
37
|
-
class="clear-filter-btn"
|
|
38
|
-
>
|
|
30
|
+
<button @click="clearFilters" class="clear-filter-btn">
|
|
39
31
|
<i class="mdi mdi-close-circle"></i>
|
|
40
32
|
<span>Clear Filter</span>
|
|
41
33
|
</button>
|
|
@@ -52,14 +44,16 @@
|
|
|
52
44
|
:key="post.url"
|
|
53
45
|
:title="post.title"
|
|
54
46
|
:content="post.excerpt"
|
|
55
|
-
:image="
|
|
47
|
+
:image="
|
|
48
|
+
post.coverImage ? getCoverImageUrl(post.coverImage) : undefined
|
|
49
|
+
"
|
|
56
50
|
:date="post.date"
|
|
57
51
|
:authors="post.authors"
|
|
58
|
-
:chips="post.tags ? post.tags.map(t => ({ text: t })) : []"
|
|
52
|
+
:chips="post.tags ? post.tags.map((t) => ({ text: t })) : []"
|
|
59
53
|
:link="{
|
|
60
54
|
text: 'Read more',
|
|
61
55
|
href: post.url,
|
|
62
|
-
target: '_self'
|
|
56
|
+
target: '_self',
|
|
63
57
|
}"
|
|
64
58
|
variant="cover"
|
|
65
59
|
class="h-full bg-surface-container-low"
|
|
@@ -87,18 +81,18 @@
|
|
|
87
81
|
<!-- Pagination -->
|
|
88
82
|
<nav
|
|
89
83
|
v-if="totalPages > 1"
|
|
90
|
-
class="mt-16 flex justify-center items-center gap-2"
|
|
84
|
+
class="mt-16 flex justify-center items-center gap-1 sm:gap-2"
|
|
91
85
|
>
|
|
92
86
|
<button
|
|
93
87
|
@click="changePage(currentPage - 1)"
|
|
94
88
|
:disabled="currentPage === 1"
|
|
95
|
-
class="
|
|
89
|
+
class="min-w-[32px] sm:min-w-[40px] h-[32px] sm:h-[40px] flex items-center justify-center rounded-xl border border-slate-200 text-slate-600 hover:bg-slate-50 disabled:opacity-40 disabled:hover:bg-transparent disabled:cursor-not-allowed transition-colors"
|
|
96
90
|
>
|
|
97
91
|
<span class="sr-only">Previous</span>
|
|
98
92
|
<i class="mdi mdi-chevron-left text-lg"></i>
|
|
99
93
|
</button>
|
|
100
94
|
|
|
101
|
-
<div class="flex items-center gap-1.5">
|
|
95
|
+
<div class="flex items-center gap-1 sm:gap-1.5">
|
|
102
96
|
<button
|
|
103
97
|
v-for="page in visiblePages"
|
|
104
98
|
:key="page"
|
|
@@ -108,7 +102,7 @@
|
|
|
108
102
|
? 'bg-primary text-white border-primary shadow-sm'
|
|
109
103
|
: 'border-slate-200 text-slate-600 hover:bg-slate-50',
|
|
110
104
|
]"
|
|
111
|
-
class="min-w-[40px] h-[40px] px-3 font-semibold text-sm rounded-xl border flex items-center justify-center transition-all duration-150"
|
|
105
|
+
class="min-w-[32px] sm:min-w-[40px] h-[32px] sm:h-[40px] px-2 sm:px-3 font-semibold text-sm rounded-xl border flex items-center justify-center transition-all duration-150"
|
|
112
106
|
>
|
|
113
107
|
{{ page }}
|
|
114
108
|
</button>
|
|
@@ -117,7 +111,7 @@
|
|
|
117
111
|
<button
|
|
118
112
|
@click="changePage(currentPage + 1)"
|
|
119
113
|
:disabled="currentPage === totalPages"
|
|
120
|
-
class="
|
|
114
|
+
class="min-w-[32px] sm:min-w-[40px] h-[32px] sm:h-[40px] flex items-center justify-center rounded-xl border border-slate-200 text-slate-600 hover:bg-slate-50 disabled:opacity-40 disabled:hover:bg-transparent disabled:cursor-not-allowed transition-colors"
|
|
121
115
|
>
|
|
122
116
|
<span class="sr-only">Next</span>
|
|
123
117
|
<i class="mdi mdi-chevron-right text-lg"></i>
|
|
@@ -129,9 +123,7 @@
|
|
|
129
123
|
<aside class="blog-sidebar-col">
|
|
130
124
|
<!-- Search widget -->
|
|
131
125
|
<div class="sidebar-widget">
|
|
132
|
-
<h3 class="sidebar-title">
|
|
133
|
-
Search
|
|
134
|
-
</h3>
|
|
126
|
+
<h3 class="sidebar-title">Search</h3>
|
|
135
127
|
<div class="search-container">
|
|
136
128
|
<VPNavBarSearch class="search" />
|
|
137
129
|
</div>
|
|
@@ -140,9 +132,7 @@
|
|
|
140
132
|
<!-- Hot Tags -->
|
|
141
133
|
<div class="sidebar-widget">
|
|
142
134
|
<div class="sidebar-title-container">
|
|
143
|
-
<h3 class="sidebar-title-inline">
|
|
144
|
-
Hot tags
|
|
145
|
-
</h3>
|
|
135
|
+
<h3 class="sidebar-title-inline">Hot tags</h3>
|
|
146
136
|
<a href="/tag" class="see-all-link">
|
|
147
137
|
<span>see all</span>
|
|
148
138
|
<i class="mdi mdi-arrow-right"></i>
|
|
@@ -522,7 +512,9 @@ function clearFilters() {
|
|
|
522
512
|
border-radius: 4px !important;
|
|
523
513
|
text-decoration: none !important;
|
|
524
514
|
line-height: 1.2 !important;
|
|
525
|
-
transition:
|
|
515
|
+
transition:
|
|
516
|
+
opacity 0.2s ease,
|
|
517
|
+
transform 0.1s ease !important;
|
|
526
518
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
|
|
527
519
|
}
|
|
528
520
|
|
|
@@ -584,7 +576,7 @@ function clearFilters() {
|
|
|
584
576
|
padding: 0 !important;
|
|
585
577
|
margin: 0 !important;
|
|
586
578
|
margin-left: 0.5rem !important;
|
|
587
|
-
|
|
579
|
+
|
|
588
580
|
display: inline-flex !important;
|
|
589
581
|
align-items: center !important;
|
|
590
582
|
gap: 0.375rem !important;
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
{{ formatDate(frontmatter.date) }}
|
|
31
31
|
</time>
|
|
32
32
|
</span>
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
<!-- Author Span -->
|
|
35
35
|
<span v-if="authors && authors.length" class="metadata-item">
|
|
36
36
|
<i class="mdi mdi-account-outline metadata-icon"></i>
|
|
@@ -40,13 +40,12 @@
|
|
|
40
40
|
:key="authorId"
|
|
41
41
|
class="author-item"
|
|
42
42
|
>
|
|
43
|
-
<a
|
|
44
|
-
:href="`/author/${authorId}/`"
|
|
45
|
-
class="author-link-active"
|
|
46
|
-
>
|
|
43
|
+
<a :href="`/author/${authorId}/`" class="author-link-active">
|
|
47
44
|
{{ getAuthorName(authorId) }}
|
|
48
45
|
</a>
|
|
49
|
-
<span v-if="idx < authors.length - 1" class="author-separator"
|
|
46
|
+
<span v-if="idx < authors.length - 1" class="author-separator"
|
|
47
|
+
>,</span
|
|
48
|
+
>
|
|
50
49
|
</span>
|
|
51
50
|
</span>
|
|
52
51
|
</div>
|
|
@@ -77,18 +76,13 @@
|
|
|
77
76
|
<!-- Sidebar Column -->
|
|
78
77
|
<div class="blog-sidebar-col">
|
|
79
78
|
<!-- Table of Contents (On This Page) -->
|
|
80
|
-
<div
|
|
81
|
-
v-if="headers && headers.length"
|
|
82
|
-
class="toc-container"
|
|
83
|
-
>
|
|
79
|
+
<div v-if="headers && headers.length" class="toc-container">
|
|
84
80
|
<VPDocAsideOutline />
|
|
85
81
|
</div>
|
|
86
82
|
|
|
87
83
|
<!-- Hot Tags -->
|
|
88
84
|
<div class="sidebar-widget">
|
|
89
|
-
<h3 class="sidebar-title">
|
|
90
|
-
Hot tags
|
|
91
|
-
</h3>
|
|
85
|
+
<h3 class="sidebar-title">Hot tags</h3>
|
|
92
86
|
<div class="sidebar-tags-container">
|
|
93
87
|
<a
|
|
94
88
|
v-for="tag in calculatedHotTags"
|
|
@@ -104,9 +98,7 @@
|
|
|
104
98
|
|
|
105
99
|
<!-- Recent Posts -->
|
|
106
100
|
<div class="sidebar-widget">
|
|
107
|
-
<h3 class="sidebar-title">
|
|
108
|
-
Recent posts
|
|
109
|
-
</h3>
|
|
101
|
+
<h3 class="sidebar-title">Recent posts</h3>
|
|
110
102
|
<div class="space-y-4">
|
|
111
103
|
<div
|
|
112
104
|
v-for="post in calculatedRecentPosts"
|
|
@@ -320,7 +312,9 @@ const calculatedHotTags = computed(() => {
|
|
|
320
312
|
align-items: center;
|
|
321
313
|
justify-content: center;
|
|
322
314
|
height: 100%;
|
|
323
|
-
transform: translateY(
|
|
315
|
+
transform: translateY(
|
|
316
|
+
0.5px
|
|
317
|
+
); /* Micro-adjustment for perfect vertical alignment */
|
|
324
318
|
}
|
|
325
319
|
|
|
326
320
|
.metadata-text {
|
|
@@ -343,7 +337,9 @@ const calculatedHotTags = computed(() => {
|
|
|
343
337
|
font-weight: 600;
|
|
344
338
|
color: var(--vp-c-brand, #004170) !important;
|
|
345
339
|
text-decoration: none;
|
|
346
|
-
transition:
|
|
340
|
+
transition:
|
|
341
|
+
color 0.15s ease,
|
|
342
|
+
text-decoration 0.15s ease;
|
|
347
343
|
line-height: 1.2;
|
|
348
344
|
}
|
|
349
345
|
|
|
@@ -391,7 +387,9 @@ const calculatedHotTags = computed(() => {
|
|
|
391
387
|
border-radius: 4px !important;
|
|
392
388
|
text-decoration: none !important;
|
|
393
389
|
line-height: 1.2 !important;
|
|
394
|
-
transition:
|
|
390
|
+
transition:
|
|
391
|
+
opacity 0.2s ease,
|
|
392
|
+
transform 0.1s ease !important;
|
|
395
393
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
|
|
396
394
|
}
|
|
397
395
|
|
|
@@ -416,7 +414,9 @@ const calculatedHotTags = computed(() => {
|
|
|
416
414
|
border-radius: 4px !important;
|
|
417
415
|
text-decoration: none !important;
|
|
418
416
|
line-height: 1.2 !important;
|
|
419
|
-
transition:
|
|
417
|
+
transition:
|
|
418
|
+
opacity 0.2s ease,
|
|
419
|
+
transform 0.1s ease !important;
|
|
420
420
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
|
|
421
421
|
}
|
|
422
422
|
|
|
@@ -60,7 +60,10 @@ const iconStyle = {
|
|
|
60
60
|
|
|
61
61
|
// Check if we should render a full-width cover image
|
|
62
62
|
const isCoverLayout = computed(() => {
|
|
63
|
-
return
|
|
63
|
+
return (
|
|
64
|
+
props.image &&
|
|
65
|
+
(props.variant === "cover" || props.date || props.authors.length)
|
|
66
|
+
);
|
|
64
67
|
});
|
|
65
68
|
|
|
66
69
|
// Check if the card itself is fully clickable (has a link but NO link text)
|
|
@@ -71,7 +74,7 @@ const isClickableCard = computed(() => {
|
|
|
71
74
|
function getAuthorName(authorId) {
|
|
72
75
|
if (!authorId) return "EOX Experts";
|
|
73
76
|
const author = authorsList.find(
|
|
74
|
-
(a) => a.id.toLowerCase().trim() === authorId.toLowerCase().trim()
|
|
77
|
+
(a) => a.id.toLowerCase().trim() === authorId.toLowerCase().trim(),
|
|
75
78
|
);
|
|
76
79
|
return author ? author.name : authorId;
|
|
77
80
|
}
|
|
@@ -82,31 +85,31 @@ function getTagStyle(tag) {
|
|
|
82
85
|
return {
|
|
83
86
|
backgroundColor: "rgba(255, 94, 94, 0.15)",
|
|
84
87
|
border: "1px solid rgb(255, 94, 94)",
|
|
85
|
-
color: "#d32f2f"
|
|
88
|
+
color: "#d32f2f",
|
|
86
89
|
};
|
|
87
90
|
} else if (color.startsWith("rgb(0, 177, 176)")) {
|
|
88
91
|
return {
|
|
89
92
|
backgroundColor: "rgba(0, 177, 176, 0.15)",
|
|
90
93
|
border: "1px solid rgb(0, 177, 176)",
|
|
91
|
-
color: "#00796b"
|
|
94
|
+
color: "#00796b",
|
|
92
95
|
};
|
|
93
96
|
} else if (color.startsWith("rgb(219, 173, 66)")) {
|
|
94
97
|
return {
|
|
95
98
|
backgroundColor: "rgba(219, 173, 66, 0.15)",
|
|
96
99
|
border: "1px solid rgb(219, 173, 66)",
|
|
97
|
-
color: "#f57c00"
|
|
100
|
+
color: "#f57c00",
|
|
98
101
|
};
|
|
99
102
|
} else if (color.startsWith("rgb(218, 71, 228)")) {
|
|
100
103
|
return {
|
|
101
104
|
backgroundColor: "rgba(218, 71, 228, 0.15)",
|
|
102
105
|
border: "1px solid rgb(218, 71, 228)",
|
|
103
|
-
color: "#c2185b"
|
|
106
|
+
color: "#c2185b",
|
|
104
107
|
};
|
|
105
108
|
}
|
|
106
109
|
return {
|
|
107
110
|
backgroundColor: "rgba(0, 0, 0, 0.05)",
|
|
108
111
|
border: "1px solid rgba(0, 0, 0, 0.1)",
|
|
109
|
-
color: "#475569"
|
|
112
|
+
color: "#475569",
|
|
110
113
|
};
|
|
111
114
|
}
|
|
112
115
|
|
|
@@ -126,7 +129,7 @@ function formatDate(dateString) {
|
|
|
126
129
|
class="vertical large-padding no-margin theme-feature-card"
|
|
127
130
|
:class="[
|
|
128
131
|
isClickableCard ? 'small-elevate clickable-card' : 'no-elevate',
|
|
129
|
-
isCoverLayout ? 'has-cover-image' : ''
|
|
132
|
+
isCoverLayout ? 'has-cover-image' : '',
|
|
130
133
|
]"
|
|
131
134
|
>
|
|
132
135
|
<!-- Cover Image for cover/blog/rich cards -->
|
|
@@ -146,7 +149,12 @@ function formatDate(dateString) {
|
|
|
146
149
|
class="icon"
|
|
147
150
|
></div>
|
|
148
151
|
<!-- Render small icon image only if NOT rendering a full cover image -->
|
|
149
|
-
<img
|
|
152
|
+
<img
|
|
153
|
+
v-else-if="image && !isCoverLayout"
|
|
154
|
+
:src="image"
|
|
155
|
+
alt=""
|
|
156
|
+
class="icon"
|
|
157
|
+
/>
|
|
150
158
|
|
|
151
159
|
<!-- Metadata & Tags directly under place/author -->
|
|
152
160
|
<div v-if="date || (authors && authors.length)" class="metadata-wrapper">
|
|
@@ -159,16 +167,25 @@ function formatDate(dateString) {
|
|
|
159
167
|
<span class="author-icon">
|
|
160
168
|
<i class="mdi mdi-account-outline"></i>
|
|
161
169
|
</span>
|
|
162
|
-
<span
|
|
163
|
-
|
|
170
|
+
<span
|
|
171
|
+
v-for="(authorId, idx) in authors"
|
|
172
|
+
:key="authorId"
|
|
173
|
+
class="author-item"
|
|
174
|
+
>
|
|
175
|
+
<a :href="`/author/${authorId}/`" class="author-link">{{
|
|
176
|
+
getAuthorName(authorId)
|
|
177
|
+
}}</a
|
|
178
|
+
><span v-if="idx < authors.length - 1" class="author-separator"
|
|
179
|
+
>,</span
|
|
180
|
+
>
|
|
164
181
|
</span>
|
|
165
182
|
</span>
|
|
166
183
|
</div>
|
|
167
184
|
|
|
168
185
|
<!-- Tags directly under metadata if chips are provided and this is a rich card -->
|
|
169
186
|
<div v-if="chips && chips.length" class="blog-tags-container">
|
|
170
|
-
<a
|
|
171
|
-
v-for="chip in chips"
|
|
187
|
+
<a
|
|
188
|
+
v-for="chip in chips"
|
|
172
189
|
:key="chip.text"
|
|
173
190
|
:href="chip.link || chip.href || `/tag/${chip.text}/`"
|
|
174
191
|
:style="getTagStyle(chip.text)"
|
|
@@ -211,7 +228,10 @@ function formatDate(dateString) {
|
|
|
211
228
|
</template>
|
|
212
229
|
</div>
|
|
213
230
|
|
|
214
|
-
<p
|
|
231
|
+
<p
|
|
232
|
+
v-if="metadata && metadata.length && !date && !authors.length"
|
|
233
|
+
class="small-text"
|
|
234
|
+
>
|
|
215
235
|
<span
|
|
216
236
|
v-for="(item, index) in metadata"
|
|
217
237
|
:key="index"
|
|
@@ -295,13 +315,17 @@ function formatDate(dateString) {
|
|
|
295
315
|
/* Clickable Cards Hover System */
|
|
296
316
|
.theme-feature-card.clickable-card {
|
|
297
317
|
cursor: pointer;
|
|
298
|
-
transition:
|
|
318
|
+
transition:
|
|
319
|
+
transform 0.3s cubic-bezier(0.25, 0.8, 0.25, 1),
|
|
320
|
+
box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) !important;
|
|
299
321
|
will-change: transform, box-shadow;
|
|
300
322
|
}
|
|
301
323
|
|
|
302
324
|
.theme-feature-card.clickable-card:hover {
|
|
303
325
|
transform: translateY(-4px) !important;
|
|
304
|
-
box-shadow:
|
|
326
|
+
box-shadow:
|
|
327
|
+
0 12px 28px rgba(0, 0, 0, 0.12),
|
|
328
|
+
0 4px 8px rgba(0, 0, 0, 0.04) !important;
|
|
305
329
|
}
|
|
306
330
|
|
|
307
331
|
.small-chip {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
style="grid-area: image"
|
|
27
27
|
:src="withBase(frontmatter.hero.image.src)"
|
|
28
28
|
/>
|
|
29
|
-
<div class="title" style="grid-area: title
|
|
29
|
+
<div class="title" style="grid-area: title">
|
|
30
30
|
<h1 class="bold" style="font-size: clamp(2.25rem, 5vw, 3.3rem)">
|
|
31
31
|
{{ frontmatter.hero.text }}
|
|
32
32
|
</h1>
|
|
@@ -77,15 +77,15 @@ const { frontmatter } = useData();
|
|
|
77
77
|
|
|
78
78
|
<style scoped>
|
|
79
79
|
header {
|
|
80
|
+
position: relative;
|
|
80
81
|
margin-top: calc(var(--vp-nav-height) * -1);
|
|
81
|
-
padding-top:
|
|
82
|
-
padding-bottom:
|
|
83
|
-
height:
|
|
84
|
-
max-height: 1000px;
|
|
82
|
+
padding-top: calc(var(--vp-nav-height) + 3.5rem) !important;
|
|
83
|
+
padding-bottom: 4.5rem !important;
|
|
84
|
+
min-height: 380px;
|
|
85
85
|
}
|
|
86
86
|
@media (max-width: 1024px) {
|
|
87
87
|
header {
|
|
88
|
-
padding:
|
|
88
|
+
padding: calc(var(--vp-nav-height) + 2rem) 1.5rem 3rem !important;
|
|
89
89
|
}
|
|
90
90
|
header h1.large {
|
|
91
91
|
font-size: 3rem;
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="tags-page">
|
|
3
3
|
<header class="tags-header">
|
|
4
|
-
<h1 class="tags-title">
|
|
5
|
-
Blog Tags
|
|
6
|
-
</h1>
|
|
4
|
+
<h1 class="tags-title">Blog Tags</h1>
|
|
7
5
|
<p class="tags-subtitle">
|
|
8
6
|
Explore our blog posts by topics and technology pillars.
|
|
9
7
|
</p>
|
|
@@ -60,7 +58,9 @@
|
|
|
60
58
|
</ul>
|
|
61
59
|
<p class="legend-note">
|
|
62
60
|
For more detailed information on our technology solutions, visit the
|
|
63
|
-
<a href="/software-products" class="legend-link"
|
|
61
|
+
<a href="/software-products" class="legend-link"
|
|
62
|
+
>Solutions & Services</a
|
|
63
|
+
>
|
|
64
64
|
page.
|
|
65
65
|
</p>
|
|
66
66
|
</footer>
|
|
@@ -180,7 +180,9 @@ const allTagsList = computed(() => {
|
|
|
180
180
|
padding: 2.5rem 2rem;
|
|
181
181
|
border-radius: 1rem;
|
|
182
182
|
border: 1px solid rgba(226, 232, 240, 0.5); /* border-slate-100/50 */
|
|
183
|
-
box-shadow:
|
|
183
|
+
box-shadow:
|
|
184
|
+
0 1px 3px 0 rgba(0, 0, 0, 0.05),
|
|
185
|
+
0 1px 2px -1px rgba(0, 0, 0, 0.05); /* shadow-sm */
|
|
184
186
|
margin-bottom: 3rem;
|
|
185
187
|
}
|
|
186
188
|
|
|
@@ -202,14 +204,19 @@ const allTagsList = computed(() => {
|
|
|
202
204
|
border-radius: 4px; /* small rounding to distinguish from full-rounded buttons */
|
|
203
205
|
text-decoration: none !important;
|
|
204
206
|
line-height: 1.2;
|
|
205
|
-
transition:
|
|
207
|
+
transition:
|
|
208
|
+
opacity 0.2s ease,
|
|
209
|
+
transform 0.15s ease,
|
|
210
|
+
box-shadow 0.2s ease;
|
|
206
211
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
207
212
|
}
|
|
208
213
|
|
|
209
214
|
.tag-item:hover {
|
|
210
215
|
opacity: 0.85;
|
|
211
216
|
transform: translateY(-1px);
|
|
212
|
-
box-shadow:
|
|
217
|
+
box-shadow:
|
|
218
|
+
0 4px 6px -1px rgba(0, 0, 0, 0.05),
|
|
219
|
+
0 2px 4px -2px rgba(0, 0, 0, 0.05);
|
|
213
220
|
}
|
|
214
221
|
|
|
215
222
|
.tag-count {
|
|
@@ -26,12 +26,20 @@
|
|
|
26
26
|
v-for="member in sortedTeamMembers"
|
|
27
27
|
:key="member.id"
|
|
28
28
|
:title="member.name"
|
|
29
|
-
:image="
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
:image="
|
|
30
|
+
member.image
|
|
31
|
+
? withBase(member.image)
|
|
32
|
+
: withBase('/images/team/new_member.jpg')
|
|
33
|
+
"
|
|
34
|
+
:link="
|
|
35
|
+
memberHasPosts(member.id)
|
|
36
|
+
? {
|
|
37
|
+
text: 'View blog posts',
|
|
38
|
+
href: `/author/${member.id}/`,
|
|
39
|
+
target: '_self',
|
|
40
|
+
}
|
|
41
|
+
: undefined
|
|
42
|
+
"
|
|
35
43
|
variant="cover"
|
|
36
44
|
class="bg-surface-container-low team-member-card"
|
|
37
45
|
>
|
|
@@ -43,11 +51,7 @@
|
|
|
43
51
|
<span class="member-divider"></span>
|
|
44
52
|
|
|
45
53
|
<!-- Description / Bio -->
|
|
46
|
-
<span
|
|
47
|
-
v-if="member.bio"
|
|
48
|
-
class="member-bio"
|
|
49
|
-
v-html="member.bio"
|
|
50
|
-
></span>
|
|
54
|
+
<span v-if="member.bio" class="member-bio" v-html="member.bio"></span>
|
|
51
55
|
|
|
52
56
|
<!-- Social Links row at the bottom of slot -->
|
|
53
57
|
<span class="member-footer">
|
package/src/style.css
CHANGED
|
@@ -374,7 +374,11 @@ eox-feedback-button {
|
|
|
374
374
|
}
|
|
375
375
|
|
|
376
376
|
/* Constrain standard reading elements to 1000px max-width, while letting full-width custom page components span 1200px */
|
|
377
|
-
.layout-page
|
|
377
|
+
.layout-page
|
|
378
|
+
.VPPage
|
|
379
|
+
> div
|
|
380
|
+
> div
|
|
381
|
+
> :is(p, ul, ol, blockquote, h1, h2, h3, h4, h5, h6, pre, table) {
|
|
378
382
|
max-width: 1000px;
|
|
379
383
|
margin-inline-start: 0;
|
|
380
384
|
margin-inline-end: auto;
|
|
@@ -473,7 +477,9 @@ eox-feedback-button {
|
|
|
473
477
|
text-decoration: underline;
|
|
474
478
|
text-underline-offset: 3px;
|
|
475
479
|
text-decoration-thickness: 1px;
|
|
476
|
-
transition:
|
|
480
|
+
transition:
|
|
481
|
+
color 0.2s ease,
|
|
482
|
+
text-decoration-color 0.2s ease;
|
|
477
483
|
}
|
|
478
484
|
|
|
479
485
|
.layout-page .VPPage a:not(.button):hover {
|
|
@@ -505,3 +511,57 @@ eox-feedback-button {
|
|
|
505
511
|
overflow-x: auto;
|
|
506
512
|
}
|
|
507
513
|
|
|
514
|
+
/* Local Search styles overrides */
|
|
515
|
+
.VPLocalSearchBox .search-actions button {
|
|
516
|
+
height: 36px !important;
|
|
517
|
+
width: 36px !important;
|
|
518
|
+
min-width: 0 !important;
|
|
519
|
+
max-width: none !important;
|
|
520
|
+
border-radius: 50% !important;
|
|
521
|
+
padding: 0 !important;
|
|
522
|
+
display: inline-flex !important;
|
|
523
|
+
align-items: center !important;
|
|
524
|
+
justify-content: center !important;
|
|
525
|
+
border: none !important;
|
|
526
|
+
background: transparent !important;
|
|
527
|
+
box-shadow: none !important;
|
|
528
|
+
color: var(--vp-c-text-2) !important;
|
|
529
|
+
transition:
|
|
530
|
+
background-color 0.15s,
|
|
531
|
+
color 0.15s !important;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.VPLocalSearchBox .search-actions button:not([disabled]):hover {
|
|
535
|
+
background-color: var(--vp-c-default-soft) !important;
|
|
536
|
+
color: var(--vp-c-brand-1) !important;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.VPLocalSearchBox .search-actions button:disabled {
|
|
540
|
+
opacity: 0.37 !important;
|
|
541
|
+
background: transparent !important;
|
|
542
|
+
color: var(--vp-c-text-3) !important;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
.VPLocalSearchBox .results {
|
|
546
|
+
list-style: none !important;
|
|
547
|
+
padding-left: 0 !important;
|
|
548
|
+
margin: 0 !important;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
.VPLocalSearchBox .results li {
|
|
552
|
+
list-style: none !important;
|
|
553
|
+
margin: 0 !important;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/* Screen Reader Only Utility */
|
|
557
|
+
.sr-only {
|
|
558
|
+
position: absolute !important;
|
|
559
|
+
width: 1px !important;
|
|
560
|
+
height: 1px !important;
|
|
561
|
+
padding: 0 !important;
|
|
562
|
+
margin: -1px !important;
|
|
563
|
+
overflow: hidden !important;
|
|
564
|
+
clip: rect(0, 0, 0, 0) !important;
|
|
565
|
+
white-space: nowrap !important;
|
|
566
|
+
border-width: 0 !important;
|
|
567
|
+
}
|
package/src/tagUtils.js
CHANGED
|
@@ -103,31 +103,31 @@ export function getTagStyle(tag) {
|
|
|
103
103
|
return {
|
|
104
104
|
backgroundColor: "rgba(255, 94, 94, 0.15)",
|
|
105
105
|
border: "1px solid rgb(255, 94, 94)",
|
|
106
|
-
color: "#d32f2f"
|
|
106
|
+
color: "#d32f2f",
|
|
107
107
|
};
|
|
108
108
|
} else if (color.startsWith("rgb(0, 177, 176)")) {
|
|
109
109
|
return {
|
|
110
110
|
backgroundColor: "rgba(0, 177, 176, 0.15)",
|
|
111
111
|
border: "1px solid rgb(0, 177, 176)",
|
|
112
|
-
color: "#00796b"
|
|
112
|
+
color: "#00796b",
|
|
113
113
|
};
|
|
114
114
|
} else if (color.startsWith("rgb(219, 173, 66)")) {
|
|
115
115
|
return {
|
|
116
116
|
backgroundColor: "rgba(219, 173, 66, 0.15)",
|
|
117
117
|
border: "1px solid rgb(219, 173, 66)",
|
|
118
|
-
color: "#f57c00"
|
|
118
|
+
color: "#f57c00",
|
|
119
119
|
};
|
|
120
120
|
} else if (color.startsWith("rgb(218, 71, 228)")) {
|
|
121
121
|
return {
|
|
122
122
|
backgroundColor: "rgba(218, 71, 228, 0.15)",
|
|
123
123
|
border: "1px solid rgb(218, 71, 228)",
|
|
124
|
-
color: "#c2185b"
|
|
124
|
+
color: "#c2185b",
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
127
|
return {
|
|
128
128
|
backgroundColor: "rgba(0, 0, 0, 0.05)",
|
|
129
129
|
border: "1px solid rgba(0, 0, 0, 0.1)",
|
|
130
|
-
color: "#475569"
|
|
130
|
+
color: "#475569",
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
133
|
|