@voidzero-dev/vitepress-theme 2.0.1 → 2.1.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.
Files changed (79) hide show
  1. package/package.json +2 -1
  2. package/src/aliases.js +14 -0
  3. package/src/vitepress/assets/clients/clickup.svg +5 -0
  4. package/src/vitepress/assets/clients/stripe.svg +3 -0
  5. package/src/vitepress/components/oss/Footer.vue +4 -21
  6. package/src/vitepress/components/oss/Header.vue +82 -180
  7. package/src/vitepress/components/oss/Sponsors.vue +3 -3
  8. package/src/vitepress/components/oss/TopBanner.vue +20 -79
  9. package/src/vitepress/components/oss/TrustedBy.vue +1 -1
  10. package/src/vitepress/components/vite/Community.vue +3 -3
  11. package/src/vitepress/components/vite/FeatureGrid1.vue +63 -0
  12. package/src/vitepress/components/vite/{FeatureGrid.vue → FeatureGrid2.vue} +8 -10
  13. package/src/vitepress/components/vite/Hero.vue +6 -15
  14. package/src/vitepress/components/vitepress-default/VPDocOutlineItem.vue +2 -2
  15. package/src/vitepress/components/vitepress-default/VPFlyout.vue +1 -1
  16. package/src/vitepress/components/vitepress-default/VPMenuLink.vue +1 -1
  17. package/src/vitepress/components/vitepress-default/VPNavBarMenuLink.vue +1 -1
  18. package/src/vitepress/components/vitepress-default/VPSidebarItem.vue +1 -1
  19. package/src/vitepress/components/vitepress-default/VPSocialLink.vue +1 -2
  20. package/src/vitepress/fonts/APK-Protocol-Semi-Bold.woff2 +0 -0
  21. package/src/vitepress/fonts/inter-italic-cyrillic-ext.woff2 +0 -0
  22. package/src/vitepress/fonts/inter-italic-cyrillic.woff2 +0 -0
  23. package/src/vitepress/fonts/inter-italic-greek-ext.woff2 +0 -0
  24. package/src/vitepress/fonts/inter-italic-greek.woff2 +0 -0
  25. package/src/vitepress/fonts/inter-italic-latin-ext.woff2 +0 -0
  26. package/src/vitepress/fonts/inter-italic-latin.woff2 +0 -0
  27. package/src/vitepress/fonts/inter-italic-vietnamese.woff2 +0 -0
  28. package/src/vitepress/fonts/inter-roman-cyrillic-ext.woff2 +0 -0
  29. package/src/vitepress/fonts/inter-roman-cyrillic.woff2 +0 -0
  30. package/src/vitepress/fonts/inter-roman-greek-ext.woff2 +0 -0
  31. package/src/vitepress/fonts/inter-roman-greek.woff2 +0 -0
  32. package/src/vitepress/fonts/inter-roman-latin-ext.woff2 +0 -0
  33. package/src/vitepress/fonts/inter-roman-latin.woff2 +0 -0
  34. package/src/vitepress/fonts/inter-roman-vietnamese.woff2 +0 -0
  35. package/src/vitepress/index.ts +64 -230
  36. package/src/vitepress/layouts/VPLayout.vue +2 -17
  37. package/src/vitepress/styles/tokens.css +194 -10
  38. package/src/vitepress/types/theme-context.ts +33 -0
  39. package/src/vitepress/assets/clients/beehiiv.svg +0 -30
  40. package/src/vitepress/assets/clients/excalidraw.svg +0 -82
  41. package/src/vitepress/assets/clients/get-your-guide.svg +0 -1
  42. package/src/vitepress/assets/clients/posthog.svg +0 -1
  43. package/src/vitepress/assets/clients/ramp.svg +0 -1
  44. package/src/vitepress/assets/clients/shopee.svg +0 -55
  45. package/src/vitepress/components/vite/FeaturePanel1.vue +0 -41
  46. package/src/vitepress/components/vite/FeaturePanel2.vue +0 -37
  47. package/src/vitepress/components/vite/FeaturePanel3.vue +0 -43
  48. package/src/vitepress/components/vite/FeaturePanel4.vue +0 -46
  49. package/src/vitepress/components/voidzero/Footer.vue +0 -65
  50. package/src/vitepress/components/voidzero/Header.vue +0 -560
  51. package/src/vitepress/components/voidzero/Megamenu.vue +0 -190
  52. package/src/vitepress/components/voidzero/about/CareerCTA.vue +0 -56
  53. package/src/vitepress/components/voidzero/about/Hero.vue +0 -206
  54. package/src/vitepress/components/voidzero/about/Investors.vue +0 -112
  55. package/src/vitepress/components/voidzero/about/TeamGrid.vue +0 -161
  56. package/src/vitepress/components/voidzero/about/TeamSectionHeading.vue +0 -13
  57. package/src/vitepress/components/voidzero/blog/BlogArchive.vue +0 -223
  58. package/src/vitepress/components/voidzero/blog/BlogSingleContent.vue +0 -364
  59. package/src/vitepress/components/voidzero/blog/BlogSingleHero.vue +0 -113
  60. package/src/vitepress/components/voidzero/blog/BlogSingleRelated.vue +0 -92
  61. package/src/vitepress/components/voidzero/blog/FeaturedArticles.vue +0 -146
  62. package/src/vitepress/components/voidzero/blog/types.ts +0 -56
  63. package/src/vitepress/components/voidzero/home/CaseStudySlider.vue +0 -235
  64. package/src/vitepress/components/voidzero/home/CustomersSectionHeading.vue +0 -5
  65. package/src/vitepress/components/voidzero/home/GitHubStats.vue +0 -27
  66. package/src/vitepress/components/voidzero/home/Hero.vue +0 -69
  67. package/src/vitepress/components/voidzero/home/Investors.vue +0 -30
  68. package/src/vitepress/components/voidzero/home/NewsletterCTA.vue +0 -23
  69. package/src/vitepress/components/voidzero/home/OpenSourceSectionHeading.vue +0 -6
  70. package/src/vitepress/components/voidzero/home/OpenSourceSectionProjects.vue +0 -419
  71. package/src/vitepress/components/voidzero/home/Resources.vue +0 -144
  72. package/src/vitepress/components/voidzero/home/Statistics.vue +0 -507
  73. package/src/vitepress/components/voidzero/home/StatisticsSectionHeading.vue +0 -5
  74. package/src/vitepress/components/voidzero/home/TeamCTA.vue +0 -17
  75. package/src/vitepress/components/voidzero/home/TrustedBy.vue +0 -248
  76. package/src/vitepress/components/voidzero/home/VitePlusSectionFeatures.vue +0 -55
  77. package/src/vitepress/components/voidzero/home/VitePlusSectionHeading.vue +0 -17
  78. package/src/vitepress/fonts/KHTeka-Medium.woff2 +0 -0
  79. package/src/vitepress/fonts/KHTeka-Regular.woff2 +0 -0
@@ -1,248 +0,0 @@
1
- <script setup lang="ts">
2
- import { ref, computed, onMounted, onUnmounted } from 'vue'
3
-
4
- // Import client logos
5
- import shopifyLogo from '@assets/clients/shopify.svg'
6
- import openaiLogo from '@assets/clients/openai.svg'
7
- import framerLogo from '@assets/clients/framer.svg'
8
- import linearLogo from '@assets/clients/linear.svg'
9
- import huggingfaceLogo from '@assets/clients/hugging-face.svg'
10
- import cloudflareLogo from '@assets/clients/cloudflare.svg'
11
- import mercedesLogo from '@assets/clients/mercedes.svg'
12
- import boltLogo from '@assets/clients/bolt.svg'
13
-
14
- // Logos - will round entries down to odd number to maintain centering
15
- const initialLogos = [
16
- { id: 1, name: 'Shopify', src: shopifyLogo },
17
- { id: 2, name: 'OpenAI', src: openaiLogo },
18
- { id: 3, name: 'Framer', src: framerLogo },
19
- { id: 4, name: 'Linear', src: linearLogo },
20
- { id: 5, name: 'Hugging Face', src: huggingfaceLogo },
21
- { id: 6, name: 'Cloudflare', src: cloudflareLogo },
22
- { id: 7, name: 'Mercedes', src: mercedesLogo },
23
- { id: 8, name: 'Bolt', src: boltLogo },
24
- ]
25
-
26
- // Ensure odd number of logos for center alignment
27
- const normalizedLogos = computed(() => {
28
- const count = initialLogos.length
29
- return count % 2 === 0 ? initialLogos.slice(0, -1) : initialLogos
30
- })
31
-
32
- // Clone all logos to end for seamless infinite loop
33
- const logosWithClones = computed(() => {
34
- const logos = normalizedLogos.value
35
- // Clone entire array to ensure smooth scrolling with 5 visible logos
36
- const clones = logos.map((logo) => ({
37
- ...logo,
38
- id: `${logo.id}-clone`,
39
- isClone: true
40
- }))
41
- return [...logos, ...clones]
42
- })
43
-
44
- // Carousel state
45
- const currentIndex = ref(0)
46
- const isPaused = ref(false)
47
- const isTransitioning = ref(true)
48
-
49
- // Calculate which logo is centered
50
- const centerIndex = computed(() => {
51
- return Math.floor(normalizedLogos.value.length / 2)
52
- })
53
-
54
- // Auto-advance interval
55
- let intervalId: number | null = null
56
-
57
- const advance = () => {
58
- if (isPaused.value) return
59
-
60
- isTransitioning.value = true
61
- currentIndex.value++
62
-
63
- // Reset to beginning when reaching clones (seamless loop)
64
- // We reset to centerIndex to maintain the centered starting position
65
- if (currentIndex.value >= normalizedLogos.value.length + centerIndex.value) {
66
- setTimeout(() => {
67
- isTransitioning.value = false
68
- currentIndex.value = centerIndex.value
69
- // Re-enable transition after instant reset
70
- setTimeout(() => {
71
- isTransitioning.value = true
72
- }, 50)
73
- }, 600) // Match CSS transition duration
74
- }
75
- }
76
-
77
- onMounted(() => {
78
- // Start with the center logo in the middle of the viewport
79
- currentIndex.value = centerIndex.value
80
- intervalId = window.setInterval(advance, 3500)
81
- })
82
-
83
- onUnmounted(() => {
84
- if (intervalId) clearInterval(intervalId)
85
- })
86
-
87
- // Calculate transform position
88
- const transformStyle = computed(() => {
89
- // Each logo is 120px + 32px gap on desktop, 80px + 16px gap on mobile
90
- // We'll use CSS variables and calc for this
91
- const offset = currentIndex.value
92
- return {
93
- transform: `translateX(calc(-${offset} * (var(--logo-width) + var(--logo-gap))))`,
94
- transition: isTransitioning.value ? 'transform 0.6s ease-in-out' : 'none'
95
- }
96
- })
97
-
98
- // Calculate opacity for each logo based on distance from viewport center
99
- const getLogoOpacity = (index: number) => {
100
- // currentIndex directly represents which logo is centered in viewport
101
- const distance = Math.abs(index - currentIndex.value)
102
-
103
- // Center logo: 100%, one away: 60%, two+ away: 30%
104
- if (distance === 0) return 1
105
- if (distance === 1) return 0.5
106
- return 0.2
107
- }
108
- </script>
109
-
110
- <template>
111
- <section class="wrapper wrapper--ticks border-t pt-10 md:pt-14 md:pb-5 flex flex-col items-center justify-center md:gap-2">
112
- <p class="self-stretch text-center text-balance text-nickel max-w-[75vw] mx-auto md:max-w-full">Trusted by the world's best software teams</p>
113
- <div class="carousel-container">
114
- <!-- Left bracket -->
115
- <div class="bracket bracket-left">
116
- <svg width="8" height="30" viewBox="0 0 8 30" fill="none" xmlns="http://www.w3.org/2000/svg" class="bracket-svg">
117
- <path d="M4.65198 30C1.48018 25.4273 0 20.4388 0 15.0346C0 9.59584 1.48018 4.53811 4.65198 0H8C5.42731 4.98845 4.29956 10.0462 4.29956 15.0346C4.29956 20.0231 5.39207 25.0462 8 30H4.65198Z" fill="currentColor"/>
118
- </svg>
119
- </div>
120
-
121
- <!-- Logo carousel -->
122
- <div class="carousel-viewport">
123
- <div class="carousel-track" :style="transformStyle">
124
- <div
125
- v-for="(logo, index) in logosWithClones"
126
- :key="logo.id"
127
- class="logo-item"
128
- :style="{ '--logo-opacity': getLogoOpacity(index) }"
129
- >
130
- <img
131
- :src="logo.src"
132
- :alt="logo.name"
133
- class="logo-image"
134
- />
135
- </div>
136
- </div>
137
- </div>
138
-
139
- <!-- Right bracket -->
140
- <div class="bracket bracket-right">
141
- <svg width="8" height="30" viewBox="0 0 8 30" fill="none" xmlns="http://www.w3.org/2000/svg" class="bracket-svg">
142
- <path d="M3.34802 30C6.51982 25.4273 8 20.4388 8 15.0346C8 9.59584 6.51982 4.53811 3.34802 0H0C2.57269 4.98845 3.70044 10.0462 3.70044 15.0346C3.70044 20.0231 2.60793 25.0462 0 30H3.34802Z" fill="currentColor"/>
143
- </svg>
144
- </div>
145
- </div>
146
- </section>
147
- </template>
148
-
149
- <style scoped>
150
- .carousel-container {
151
- position: relative;
152
- display: flex;
153
- align-items: center;
154
- justify-content: center;
155
- width: 100%;
156
- max-width: 100%;
157
-
158
- /* CSS variables for responsive logo sizing */
159
- --logo-width: 120px;
160
- --logo-height: 120px;
161
- --logo-gap: 30px;
162
- --bracket-offset: 8px; /* Distance from center logo */
163
- }
164
-
165
- @media (min-width: 640px) {
166
- .carousel-container {
167
- --logo-width: 126px;
168
- --logo-height: 126px;
169
- --logo-gap: 48px;
170
- --bracket-offset: 12px;
171
- }
172
- }
173
-
174
- .bracket {
175
- position: absolute;
176
- top: 50%;
177
- transform: translateY(-50%);
178
- display: flex;
179
- align-items: center;
180
- justify-content: center;
181
- color: var(--color-nickel);
182
- z-index: 10;
183
- pointer-events: none;
184
- }
185
-
186
- .bracket-left {
187
- left: calc(50% - var(--logo-width) / 2 - var(--bracket-offset) - 8px);
188
- }
189
-
190
- .bracket-right {
191
- right: calc(50% - var(--logo-width) / 2 - var(--bracket-offset) - 8px);
192
- }
193
-
194
- .bracket-svg {
195
- width: 7.2px;
196
- height: 27px;
197
- }
198
-
199
- @media (min-width: 640px) {
200
- .bracket-svg {
201
- width: 10.8px;
202
- height: 40.5px;
203
- }
204
- }
205
-
206
- .carousel-viewport {
207
- position: relative;
208
- overflow: hidden;
209
- width: 100%;
210
- max-width: calc(3 * (var(--logo-width) + var(--logo-gap)));
211
- display: flex;
212
- align-items: center;
213
- }
214
-
215
- @media (min-width: 640px) {
216
- .carousel-viewport {
217
- max-width: calc(5 * (var(--logo-width) + var(--logo-gap)));
218
- }
219
- }
220
-
221
- .carousel-track {
222
- display: flex;
223
- gap: var(--logo-gap);
224
- will-change: transform;
225
- /* Padding to center the logo at currentIndex */
226
- padding-left: calc(50% - var(--logo-width) / 2);
227
- }
228
-
229
- .logo-item {
230
- flex-shrink: 0;
231
- width: var(--logo-width);
232
- height: var(--logo-height);
233
- display: flex;
234
- align-items: center;
235
- justify-content: center;
236
- padding: 1rem;
237
- }
238
-
239
- .logo-image {
240
- width: 100%;
241
- height: 100%;
242
- object-fit: contain;
243
- filter: grayscale(1);
244
- opacity: var(--logo-opacity, 1);
245
- user-select: none;
246
- pointer-events: none;
247
- }
248
- </style>
@@ -1,55 +0,0 @@
1
- <template>
2
- <section
3
- class="wrapper border-t grid grid-rows-3 lg:grid-rows-1 lg:grid-cols-4 lg:h-80 divide-y lg:divide-y-0 lg:divide-x">
4
- <div class="p-5 lg:p-10 lg:pb-16 lg:col-span-2 flex flex-col justify-between items-start">
5
- <div class="flex flex-col gap-3">
6
- <img src="@assets/voidzero/vite-plus-chip.png" alt="Vite+" class="h-10 mb-3 w-fit object-contain">
7
- <h5>Vite, but more powerful</h5>
8
- <p class="text-pretty max-w-lg">Scaffold, dev, build, lint, test, format & more, all in a single dependency.</p>
9
- </div>
10
- <a href="https://viteplus.dev" target="_blank" class="text-primary font-medium border-b mt-4 md:mt-0">Learn more →</a>
11
- </div>
12
- <div class="p-5 lg:p-10 lg:pb-16 flex flex-col justify-between">
13
- <svg class="size-5" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
14
- <path
15
- d="M16.2501 1.66675H11.2501C10.0995 1.66675 9.16675 2.59949 9.16675 3.75008V8.75008C9.16675 9.90067 10.0995 10.8334 11.2501 10.8334H16.2501C17.4007 10.8334 18.3334 9.90067 18.3334 8.75008V3.75008C18.3334 2.59949 17.4007 1.66675 16.2501 1.66675Z"
16
- stroke="black" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round"/>
17
- <path
18
- d="M9.16675 5.41699C7.47714 5.42003 6.59237 5.46152 6.02694 6.02694C5.41675 6.63714 5.41675 7.61923 5.41675 9.58342V10.4168C5.41675 12.3809 5.41675 13.363 6.02694 13.9732C6.63714 14.5834 7.61923 14.5834 9.58341 14.5834H10.4167C12.3809 14.5834 13.363 14.5834 13.9732 13.9732C14.5387 13.4078 14.5802 12.523 14.5832 10.8334"
19
- stroke="black" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round"/>
20
- <path
21
- d="M5.41675 9.16699C3.72714 9.16999 2.84237 9.21149 2.27694 9.77691C1.66675 10.3872 1.66675 11.3692 1.66675 13.3334V14.1667C1.66675 16.1309 1.66675 17.113 2.27694 17.7232C2.88714 18.3334 3.86923 18.3334 5.83341 18.3334H6.66675C8.63091 18.3334 9.613 18.3334 10.2232 17.7232C10.7887 17.1578 10.8302 16.273 10.8332 14.5834"
22
- stroke="black" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round"/>
23
- </svg>
24
- <div class="flex flex-col gap-2 justify-start md:min-h-24">
25
- <h6>Drop-in superset of Vite</h6>
26
- <p class="text-balance">Smooth, incremental adoption if you are already using Vite.</p>
27
- </div>
28
- </div>
29
- <div class="p-5 lg:p-10 lg:pb-16 flex flex-col justify-between">
30
- <svg class="size-5" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
31
- <path
32
- d="M17.0833 8.75V16.25C17.0833 16.6382 17.0833 16.8324 17.0198 16.9856C16.9353 17.1897 16.773 17.352 16.5688 17.4366C16.4157 17.5 16.2215 17.5 15.8333 17.5C15.445 17.5 15.2508 17.5 15.0977 17.4366C14.8935 17.352 14.7313 17.1897 14.6467 16.9856C14.5833 16.8324 14.5833 16.6382 14.5833 16.25V8.75C14.5833 8.36175 14.5833 8.16758 14.6467 8.01443C14.7313 7.81024 14.8935 7.64801 15.0977 7.56343C15.2508 7.5 15.445 7.5 15.8333 7.5C16.2215 7.5 16.4157 7.5 16.5688 7.56343C16.773 7.64801 16.9353 7.81024 17.0198 8.01443C17.0833 8.16758 17.0833 8.36175 17.0833 8.75Z"
33
- stroke="#08060D" stroke-width="1.35" stroke-linejoin="round"/>
34
- <path d="M13.75 2.5H16.25V5" stroke="#08060D" stroke-width="1.35" stroke-linecap="round"
35
- stroke-linejoin="round"/>
36
- <path d="M15.8333 2.91675C15.8333 2.91675 12.5 7.08341 3.75 10.0001" stroke="#08060D" stroke-width="1.35"
37
- stroke-linecap="round" stroke-linejoin="round"/>
38
- <path
39
- d="M11.25 11.6667V16.2501C11.25 16.6383 11.25 16.8325 11.1866 16.9857C11.102 17.1898 10.9397 17.3521 10.7356 17.4367C10.5824 17.5001 10.3882 17.5001 10 17.5001C9.61175 17.5001 9.41758 17.5001 9.26442 17.4367C9.06025 17.3521 8.898 17.1898 8.81342 16.9857C8.75 16.8325 8.75 16.6383 8.75 16.2501V11.6667C8.75 11.2785 8.75 11.0843 8.81342 10.9312C8.898 10.727 9.06025 10.5647 9.26442 10.4802C9.41758 10.4167 9.61175 10.4167 10 10.4167C10.3882 10.4167 10.5824 10.4167 10.7356 10.4802C10.9397 10.5647 11.102 10.727 11.1866 10.9312C11.25 11.0843 11.25 11.2785 11.25 11.6667Z"
40
- stroke="#08060D" stroke-width="1.35" stroke-linejoin="round"/>
41
- <path
42
- d="M5.41675 13.75V16.25C5.41675 16.6382 5.41675 16.8324 5.35331 16.9856C5.26874 17.1897 5.10651 17.352 4.90231 17.4366C4.74917 17.5 4.55503 17.5 4.16675 17.5C3.77846 17.5 3.58432 17.5 3.43118 17.4366C3.22699 17.352 3.06476 17.1897 2.98018 16.9856C2.91675 16.8324 2.91675 16.6382 2.91675 16.25V13.75C2.91675 13.3617 2.91675 13.1676 2.98018 13.0144C3.06476 12.8103 3.22699 12.648 3.43118 12.5634C3.58432 12.5 3.77846 12.5 4.16675 12.5C4.55503 12.5 4.74917 12.5 4.90231 12.5634C5.10651 12.648 5.26874 12.8103 5.35331 13.0144C5.41675 13.1676 5.41675 13.3617 5.41675 13.75Z"
43
- stroke="#08060D" stroke-width="1.35" stroke-linejoin="round"/>
44
- </svg>
45
- <div class="flex flex-col gap-2 justify-start md:min-h-24">
46
- <h6>Enterprise Scale Productivity</h6>
47
- <p class="text-balance">Performance, reliability & security. Let your team focus on shipping.</p>
48
- </div>
49
- </div>
50
- </section>
51
- </template>
52
-
53
- <style scoped>
54
-
55
- </style>
@@ -1,17 +0,0 @@
1
- <template>
2
- <div class="wrapper wrapper--ticks border-t flex flex-col justify-start items-center gap-6 py-10 md:py-20">
3
- <div class="w-full sm:w-2xl flex flex-col justify-start items-center gap-10 px-5 sm:px-0">
4
- <img src="@assets/logos/viteplus-dark.svg" alt="Vite+ Logo" class="h-3">
5
- <h2 class="text-center text-primary text-balance">
6
- <span class="inline-block">The Unified Toolchain</span>
7
- <span class="inline-block">for the Web</span>
8
- </h2>
9
- <a href="https://viteplus.dev" target="_blank" rel="noopener noreferrer"
10
- class="button button--primary button--white">
11
- <span>Explore Vite+</span>
12
- </a>
13
- </div>
14
- </div>
15
- </template>
16
- <script setup lang="ts">
17
- </script>