@eox/pages-theme-eox 2.0.0-alpha.1 → 2.0.0-alpha.10

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 (47) hide show
  1. package/.gitlab-ci.yml +4 -1
  2. package/README.md +75 -11
  3. package/cypress/support/mocks/authors.data.js +14 -0
  4. package/cypress/support/mocks/helpers.js +65 -4
  5. package/cypress.config.js +9 -0
  6. package/package.json +3 -1
  7. package/src/Layout.vue +14 -3
  8. package/src/components/BlogList.vue +74 -55
  9. package/src/components/BlogPost.vue +46 -24
  10. package/src/components/CTASection.vue +18 -4
  11. package/src/components/FeatureCard/Index.vue +113 -26
  12. package/src/components/FeatureCard/Poster.vue +25 -3
  13. package/src/components/FeatureSection.cy.js +16 -0
  14. package/src/components/FeatureSection.vue +3 -8
  15. package/src/components/FeaturesGallery.vue +34 -2
  16. package/src/components/Footer.cy.js +52 -2
  17. package/src/components/Footer.vue +17 -5
  18. package/src/components/HeroSection.cy.js +20 -0
  19. package/src/components/HeroSection.vue +139 -24
  20. package/src/components/ImageCarousel.vue +11 -2
  21. package/src/components/ImageElement.vue +16 -4
  22. package/src/components/ImageGallery.vue +29 -4
  23. package/src/components/LogoSection.vue +26 -3
  24. package/src/components/MobileNavDropdown.vue +13 -3
  25. package/src/components/NavBar.cy.js +15 -0
  26. package/src/components/NavBar.vue +149 -21
  27. package/src/components/NavDropdown.vue +12 -2
  28. package/src/components/OpenPositions.vue +292 -0
  29. package/src/components/TagList.vue +32 -14
  30. package/src/components/TeamPage.vue +34 -20
  31. package/src/components/TestimonialsSection.cy.js +2 -5
  32. package/src/components/TestimonialsSection.vue +119 -16
  33. package/src/components/TextSection.cy.js +115 -0
  34. package/src/components/TextSection.vue +396 -0
  35. package/src/helpers.js +182 -37
  36. package/src/helpers.test.js +181 -0
  37. package/src/index.js +4 -0
  38. package/src/pages/author/[author].md +1 -0
  39. package/src/pages/author/[author].paths.js +2 -2
  40. package/src/pages/blog.md +1 -0
  41. package/src/pages/tag/[tag].md +1 -0
  42. package/src/pages/tag.md +1 -0
  43. package/src/pages/team.md +2 -1
  44. package/src/posts.data.js +39 -1
  45. package/src/style.css +232 -11
  46. package/src/tagUtils.js +5 -5
  47. package/src/vitepressConfig.mjs +6 -3
package/src/style.css CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  :root {
4
4
  --vp-nav-height: 58px;
5
+ --vp-nav-logo-height: 28px;
5
6
  }
6
7
  :root:has(.top-nav.at-top) {
7
8
  --vp-nav-height: 90px;
@@ -49,6 +50,11 @@ body {
49
50
  transition: padding-top 0.3s ease-in-out;
50
51
  }
51
52
 
53
+ main {
54
+ padding: 0 !important;
55
+ margin: 0 !important;
56
+ }
57
+
52
58
  *:has(> nav.top:not(.s, .m, .l)) {
53
59
  padding-block-start: 0;
54
60
  }
@@ -92,6 +98,85 @@ body {
92
98
  margin-block-end: 0 !important;
93
99
  }
94
100
 
101
+ .layout-blog .cta-section {
102
+ margin-block-end: 0 !important;
103
+ }
104
+
105
+ /* When a section follows a title (title plus section combination), eliminate start padding */
106
+ :is(
107
+ h1,
108
+ h2,
109
+ h3,
110
+ h4,
111
+ h5,
112
+ h6,
113
+ header,
114
+ .section-header-group,
115
+ [class*="section-title"]
116
+ )
117
+ + section,
118
+ :is(
119
+ h1,
120
+ h2,
121
+ h3,
122
+ h4,
123
+ h5,
124
+ h6,
125
+ header,
126
+ .section-header-group,
127
+ [class*="section-title"]
128
+ )
129
+ + :not(section, hr)
130
+ + section,
131
+ :is(
132
+ h1,
133
+ h2,
134
+ h3,
135
+ h4,
136
+ h5,
137
+ h6,
138
+ header,
139
+ .section-header-group,
140
+ [class*="section-title"]
141
+ )
142
+ + :not(section, hr)
143
+ + :not(section, hr)
144
+ + section,
145
+ :is(
146
+ h1,
147
+ h2,
148
+ h3,
149
+ h4,
150
+ h5,
151
+ h6,
152
+ header,
153
+ .section-header-group,
154
+ [class*="section-title"]
155
+ )
156
+ + :not(section, hr)
157
+ + :not(section, hr)
158
+ + :not(section, hr)
159
+ + section,
160
+ :is(
161
+ h1,
162
+ h2,
163
+ h3,
164
+ h4,
165
+ h5,
166
+ h6,
167
+ header,
168
+ .section-header-group,
169
+ [class*="section-title"]
170
+ )
171
+ + :not(section, hr)
172
+ + :not(section, hr)
173
+ + :not(section, hr)
174
+ + :not(section, hr)
175
+ + section {
176
+ padding-block-start: 0 !important;
177
+ padding-top: 0 !important;
178
+ }
179
+
95
180
  .VPHome .vp-doc a {
96
181
  font-weight: 400;
97
182
  color: inherit;
@@ -149,7 +234,8 @@ footer {
149
234
  margin-top: 0 !important;
150
235
  position: relative;
151
236
  z-index: var(--vp-z-index-footer);
152
- background: var(--surface-container-low);
237
+ background: var(--surface-container-lowest);
238
+ border-top: 1px solid var(--vp-c-divider, rgba(0, 0, 0, 0.08));
153
239
  }
154
240
 
155
241
  /**/
@@ -174,14 +260,24 @@ button.text:hover,
174
260
  }
175
261
  }
176
262
 
177
- .primary-gradient-bg {
263
+ .hero-gradient-bg {
178
264
  /*Fallback*/
179
- background: var(--primary);
180
- background: radial-gradient(
181
- 74.48% 130.95% at 50% -12.27%,
182
- hsl(from var(--primary) h s calc(l + 7)) 0%,
183
- var(--primary) 45%,
184
- hsl(from var(--primary) h s calc(l - 20)) 100%
265
+ background: #000c14;
266
+ background: linear-gradient(
267
+ 180deg,
268
+ #000c14 0%,
269
+ var(--primary, #004170) 100%
270
+ ) !important;
271
+ }
272
+
273
+ .primary-gradient-bg,
274
+ .dark-section-gradient-bg {
275
+ /*Fallback*/
276
+ background: #000c14;
277
+ background: linear-gradient(
278
+ 180deg,
279
+ var(--primary, #004170) 0%,
280
+ #000c14 100%
185
281
  ) !important;
186
282
  }
187
283
 
@@ -365,7 +461,7 @@ eox-feedback-button {
365
461
  margin-inline: auto;
366
462
  padding-block-start: 66px; /* Exactly 156px from top of viewport (90px navbar + 66px padding) */
367
463
  padding-block-end: 96px;
368
- padding-inline: 32px;
464
+ padding-inline: 24px;
369
465
  }
370
466
 
371
467
  /* Remove double inner padding on custom layout elements to ensure absolute alignment */
@@ -374,7 +470,11 @@ eox-feedback-button {
374
470
  }
375
471
 
376
472
  /* Constrain standard reading elements to 1000px max-width, while letting full-width custom page components span 1200px */
377
- .layout-page .VPPage > div > div > :is(p, ul, ol, blockquote, h1, h2, h3, h4, h5, h6, pre, table) {
473
+ .layout-page
474
+ .VPPage
475
+ > div
476
+ > div
477
+ > :is(p, ul, ol, blockquote, h1, h2, h3, h4, h5, h6, pre, table) {
378
478
  max-width: 1000px;
379
479
  margin-inline-start: 0;
380
480
  margin-inline-end: auto;
@@ -473,7 +573,9 @@ eox-feedback-button {
473
573
  text-decoration: underline;
474
574
  text-underline-offset: 3px;
475
575
  text-decoration-thickness: 1px;
476
- transition: color 0.2s ease, text-decoration-color 0.2s ease;
576
+ transition:
577
+ color 0.2s ease,
578
+ text-decoration-color 0.2s ease;
477
579
  }
478
580
 
479
581
  .layout-page .VPPage a:not(.button):hover {
@@ -505,3 +607,122 @@ eox-feedback-button {
505
607
  overflow-x: auto;
506
608
  }
507
609
 
610
+ /* Local Search styles overrides */
611
+ .VPLocalSearchBox .search-actions button {
612
+ height: 36px !important;
613
+ width: 36px !important;
614
+ min-width: 0 !important;
615
+ max-width: none !important;
616
+ border-radius: 50% !important;
617
+ padding: 0 !important;
618
+ display: inline-flex !important;
619
+ align-items: center !important;
620
+ justify-content: center !important;
621
+ border: none !important;
622
+ background: transparent !important;
623
+ box-shadow: none !important;
624
+ color: var(--vp-c-text-2) !important;
625
+ transition:
626
+ background-color 0.15s,
627
+ color 0.15s !important;
628
+ }
629
+
630
+ .VPLocalSearchBox .search-actions button:not([disabled]):hover {
631
+ background-color: var(--vp-c-default-soft) !important;
632
+ color: var(--vp-c-brand-1) !important;
633
+ }
634
+
635
+ .VPLocalSearchBox .search-actions button:disabled {
636
+ opacity: 0.37 !important;
637
+ background: transparent !important;
638
+ color: var(--vp-c-text-3) !important;
639
+ }
640
+
641
+ .VPLocalSearchBox .results {
642
+ list-style: none !important;
643
+ padding-left: 0 !important;
644
+ margin: 0 !important;
645
+ }
646
+
647
+ .VPLocalSearchBox .results li {
648
+ list-style: none !important;
649
+ margin: 0 !important;
650
+ }
651
+
652
+ /* Screen Reader Only Utility */
653
+ .sr-only {
654
+ position: absolute !important;
655
+ width: 1px !important;
656
+ height: 1px !important;
657
+ padding: 0 !important;
658
+ margin: -1px !important;
659
+ overflow: hidden !important;
660
+ clip: rect(0, 0, 0, 0) !important;
661
+ white-space: nowrap !important;
662
+ border-width: 0 !important;
663
+ }
664
+
665
+ /* ==========================================================================
666
+ Links in text hover underline
667
+ ========================================================================== */
668
+
669
+ a.link {
670
+ text-decoration: none;
671
+ }
672
+
673
+ :is(p, li, blockquote, figcaption, td, th, dd, dt, .card-body-text)
674
+ a:not(
675
+ .button,
676
+ [role="button"],
677
+ .chip,
678
+ .badge,
679
+ .circle,
680
+ .header-anchor,
681
+ .card-cover-link,
682
+ .grid-link,
683
+ .sidebar-tag,
684
+ .post-tag,
685
+ .clickable-chip,
686
+ .tag-link,
687
+ .social-link-btn,
688
+ .custom-cta-button,
689
+ :has(> img:only-child),
690
+ :has(> svg:only-child)
691
+ ):hover,
692
+ a.link:hover,
693
+ .vp-doc
694
+ a:not(
695
+ .button,
696
+ [role="button"],
697
+ .header-anchor,
698
+ .card-cover-link,
699
+ .grid-link,
700
+ .sidebar-tag,
701
+ .post-tag,
702
+ .clickable-chip,
703
+ .tag-link,
704
+ .social-link-btn,
705
+ .custom-cta-button,
706
+ :has(> img:only-child),
707
+ :has(> svg:only-child)
708
+ ):hover {
709
+ text-decoration: underline;
710
+ text-underline-offset: 2px;
711
+ }
712
+
713
+ /* Ensure navigation bars, dropdown menus, sidebars, and outline links do not get hover underline unless explicitly marked .link */
714
+ :is(
715
+ nav,
716
+ menu,
717
+ dialog,
718
+ .top-nav,
719
+ .social-links,
720
+ .VPSidebar,
721
+ .VPDocAsideOutline,
722
+ .VPLocalSearchBox
723
+ )
724
+ a:not(.link):hover,
725
+ menu a:hover,
726
+ menu li a:hover {
727
+ text-decoration: none !important;
728
+ }
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
 
@@ -98,8 +98,8 @@ export const generate = (brandConfig) => {
98
98
  cleanUrls: true,
99
99
  markdown: {
100
100
  headers: {
101
- level: [2, 3, 4, 5, 6]
102
- }
101
+ level: [2, 3, 4, 5, 6],
102
+ },
103
103
  },
104
104
  rewrites: {
105
105
  ...getBlogRewrites(),
@@ -212,7 +212,7 @@ export const generate = (brandConfig) => {
212
212
  ></span>`,
213
213
  copyright:
214
214
  brandConfig.theme?.footer?.copyright ||
215
- 'Copyright © 2014-present <a href="https://eox.at" target="_blank">EOX IT Services GmbH</a>',
215
+ 'Copyright © 2008-present <a href="https://eox.at" target="_blank">EOX IT Services GmbH</a>',
216
216
  },
217
217
  },
218
218
  title: brandConfig.meta?.title,
@@ -220,6 +220,9 @@ export const generate = (brandConfig) => {
220
220
  ssr: {
221
221
  noExternal: ["@eox/pages-theme-eox"],
222
222
  },
223
+ optimizeDeps: {
224
+ exclude: ["@eox/pages-theme-eox"],
225
+ },
223
226
  },
224
227
  vue: {
225
228
  template: {