@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.
- package/package.json +2 -1
- package/src/aliases.js +14 -0
- package/src/vitepress/assets/clients/clickup.svg +5 -0
- package/src/vitepress/assets/clients/stripe.svg +3 -0
- package/src/vitepress/components/oss/Footer.vue +4 -21
- package/src/vitepress/components/oss/Header.vue +82 -180
- package/src/vitepress/components/oss/Sponsors.vue +3 -3
- package/src/vitepress/components/oss/TopBanner.vue +20 -79
- package/src/vitepress/components/oss/TrustedBy.vue +1 -1
- package/src/vitepress/components/vite/Community.vue +3 -3
- package/src/vitepress/components/vite/FeatureGrid1.vue +63 -0
- package/src/vitepress/components/vite/{FeatureGrid.vue → FeatureGrid2.vue} +8 -10
- package/src/vitepress/components/vite/Hero.vue +6 -15
- package/src/vitepress/components/vitepress-default/VPDocOutlineItem.vue +2 -2
- package/src/vitepress/components/vitepress-default/VPFlyout.vue +1 -1
- package/src/vitepress/components/vitepress-default/VPMenuLink.vue +1 -1
- package/src/vitepress/components/vitepress-default/VPNavBarMenuLink.vue +1 -1
- package/src/vitepress/components/vitepress-default/VPSidebarItem.vue +1 -1
- package/src/vitepress/components/vitepress-default/VPSocialLink.vue +1 -2
- package/src/vitepress/fonts/APK-Protocol-Semi-Bold.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-cyrillic-ext.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-cyrillic.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-greek-ext.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-greek.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-latin.woff2 +0 -0
- package/src/vitepress/fonts/inter-italic-vietnamese.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-cyrillic-ext.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-cyrillic.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-greek-ext.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-greek.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-latin-ext.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-latin.woff2 +0 -0
- package/src/vitepress/fonts/inter-roman-vietnamese.woff2 +0 -0
- package/src/vitepress/index.ts +64 -230
- package/src/vitepress/layouts/VPLayout.vue +2 -17
- package/src/vitepress/styles/tokens.css +194 -10
- package/src/vitepress/types/theme-context.ts +33 -0
- package/src/vitepress/assets/clients/beehiiv.svg +0 -30
- package/src/vitepress/assets/clients/excalidraw.svg +0 -82
- package/src/vitepress/assets/clients/get-your-guide.svg +0 -1
- package/src/vitepress/assets/clients/posthog.svg +0 -1
- package/src/vitepress/assets/clients/ramp.svg +0 -1
- package/src/vitepress/assets/clients/shopee.svg +0 -55
- package/src/vitepress/components/vite/FeaturePanel1.vue +0 -41
- package/src/vitepress/components/vite/FeaturePanel2.vue +0 -37
- package/src/vitepress/components/vite/FeaturePanel3.vue +0 -43
- package/src/vitepress/components/vite/FeaturePanel4.vue +0 -46
- package/src/vitepress/components/voidzero/Footer.vue +0 -65
- package/src/vitepress/components/voidzero/Header.vue +0 -560
- package/src/vitepress/components/voidzero/Megamenu.vue +0 -190
- package/src/vitepress/components/voidzero/about/CareerCTA.vue +0 -56
- package/src/vitepress/components/voidzero/about/Hero.vue +0 -206
- package/src/vitepress/components/voidzero/about/Investors.vue +0 -112
- package/src/vitepress/components/voidzero/about/TeamGrid.vue +0 -161
- package/src/vitepress/components/voidzero/about/TeamSectionHeading.vue +0 -13
- package/src/vitepress/components/voidzero/blog/BlogArchive.vue +0 -223
- package/src/vitepress/components/voidzero/blog/BlogSingleContent.vue +0 -364
- package/src/vitepress/components/voidzero/blog/BlogSingleHero.vue +0 -113
- package/src/vitepress/components/voidzero/blog/BlogSingleRelated.vue +0 -92
- package/src/vitepress/components/voidzero/blog/FeaturedArticles.vue +0 -146
- package/src/vitepress/components/voidzero/blog/types.ts +0 -56
- package/src/vitepress/components/voidzero/home/CaseStudySlider.vue +0 -235
- package/src/vitepress/components/voidzero/home/CustomersSectionHeading.vue +0 -5
- package/src/vitepress/components/voidzero/home/GitHubStats.vue +0 -27
- package/src/vitepress/components/voidzero/home/Hero.vue +0 -69
- package/src/vitepress/components/voidzero/home/Investors.vue +0 -30
- package/src/vitepress/components/voidzero/home/NewsletterCTA.vue +0 -23
- package/src/vitepress/components/voidzero/home/OpenSourceSectionHeading.vue +0 -6
- package/src/vitepress/components/voidzero/home/OpenSourceSectionProjects.vue +0 -419
- package/src/vitepress/components/voidzero/home/Resources.vue +0 -144
- package/src/vitepress/components/voidzero/home/Statistics.vue +0 -507
- package/src/vitepress/components/voidzero/home/StatisticsSectionHeading.vue +0 -5
- package/src/vitepress/components/voidzero/home/TeamCTA.vue +0 -17
- package/src/vitepress/components/voidzero/home/TrustedBy.vue +0 -248
- package/src/vitepress/components/voidzero/home/VitePlusSectionFeatures.vue +0 -55
- package/src/vitepress/components/voidzero/home/VitePlusSectionHeading.vue +0 -17
- package/src/vitepress/fonts/KHTeka-Medium.woff2 +0 -0
- package/src/vitepress/fonts/KHTeka-Regular.woff2 +0 -0
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import {Carousel, Slide} from 'vue3-carousel'
|
|
3
|
-
|
|
4
|
-
interface FeaturedArticle {
|
|
5
|
-
title: string
|
|
6
|
-
url?: string
|
|
7
|
-
link?: string
|
|
8
|
-
cover?: string
|
|
9
|
-
image?: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface Props {
|
|
13
|
-
featuredArticles?: FeaturedArticle[]
|
|
14
|
-
onLinkClick?: () => void
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
18
|
-
featuredArticles: () => [],
|
|
19
|
-
onLinkClick: () => {}
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
// Carousel configuration
|
|
23
|
-
const carouselConfig = {
|
|
24
|
-
itemsToShow: 1,
|
|
25
|
-
wrapAround: true,
|
|
26
|
-
snapAlign: 'center',
|
|
27
|
-
autoplay: 3000,
|
|
28
|
-
transition: 500,
|
|
29
|
-
mouseDrag: true,
|
|
30
|
-
touchDrag: true
|
|
31
|
-
}
|
|
32
|
-
</script>
|
|
33
|
-
|
|
34
|
-
<template>
|
|
35
|
-
<div class="flex flex-col md:grid md:grid-cols-10 md:auto-rows-fr gap-0">
|
|
36
|
-
<!-- Products Grid -->
|
|
37
|
-
<div class="flex flex-col gap-0 border-stroke dark:border-nickel md:col-span-6 md:border-r">
|
|
38
|
-
<div class="px-5 h-12 flex items-center border-b border-stroke dark:border-nickel dark:border-t">
|
|
39
|
-
<p class="text-mono text-xs font-medium uppercase tracking-widest text-grey">
|
|
40
|
-
Products //
|
|
41
|
-
</p>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="grid grid-cols-1 md:grid-cols-2 md:auto-rows-fr gap-0 flex-1">
|
|
44
|
-
<a
|
|
45
|
-
href="https://vite.dev"
|
|
46
|
-
target="_blank"
|
|
47
|
-
@click="onLinkClick"
|
|
48
|
-
class="p-5 group cursor-pointer hover:bg-primary dark:hover:bg-white md:border-r border-stroke dark:border-nickel dark:border-b transition-colors duration-100 relative"
|
|
49
|
-
>
|
|
50
|
-
<svg class="absolute top-5 right-5 opacity-0 group-hover:opacity-100 transition-opacity duration-100" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
51
|
-
<path d="M2.81802 2.81803L9.18198 2.81803L9.18198 9.18199" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
52
|
-
<path d="M9.18213 2.81802L2.81817 9.18198" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
53
|
-
</svg>
|
|
54
|
-
<img
|
|
55
|
-
src="@assets/icons/vite-light.svg"
|
|
56
|
-
alt="Vite logo"
|
|
57
|
-
class="p-1 size-8 rounded mb-6 bg-primary"
|
|
58
|
-
>
|
|
59
|
-
<h3
|
|
60
|
-
class="text-lg font-medium font-sans mb-1 dark:text-white group-hover:text-white dark:group-hover:text-primary transition-colors duration-100 "
|
|
61
|
-
>
|
|
62
|
-
Vite
|
|
63
|
-
</h3>
|
|
64
|
-
<p class="text-sm text-balance">
|
|
65
|
-
A blazing fast frontend build tool powering next-gen web applications.
|
|
66
|
-
</p>
|
|
67
|
-
</a>
|
|
68
|
-
|
|
69
|
-
<a
|
|
70
|
-
href="https://vitest.dev"
|
|
71
|
-
target="_blank"
|
|
72
|
-
@click="onLinkClick"
|
|
73
|
-
class="p-5 group cursor-pointer hover:bg-primary dark:hover:bg-white dark:border-nickel dark:border-b transition-colors duration-100 relative"
|
|
74
|
-
>
|
|
75
|
-
<svg class="absolute top-5 right-5 opacity-0 group-hover:opacity-100 transition-opacity duration-100" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
76
|
-
<path d="M2.81802 2.81803L9.18198 2.81803L9.18198 9.18199" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
77
|
-
<path d="M9.18213 2.81802L2.81817 9.18198" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
78
|
-
</svg>
|
|
79
|
-
<img
|
|
80
|
-
src="@assets/icons/vitest-light.svg"
|
|
81
|
-
alt="Vitest logo"
|
|
82
|
-
class="p-1 size-8 rounded mb-6 bg-primary"
|
|
83
|
-
>
|
|
84
|
-
<h3
|
|
85
|
-
class="text-lg font-medium font-sans mb-1 dark:text-white group-hover:text-white dark:group-hover:text-primary transition-colors duration-100 "
|
|
86
|
-
>
|
|
87
|
-
Vitest
|
|
88
|
-
</h3>
|
|
89
|
-
<p class="text-sm text-balance">
|
|
90
|
-
A Vite-native testing framework. It's fast!
|
|
91
|
-
</p>
|
|
92
|
-
</a>
|
|
93
|
-
|
|
94
|
-
<a
|
|
95
|
-
href="https://rolldown.rs/"
|
|
96
|
-
target="_blank"
|
|
97
|
-
@click="onLinkClick"
|
|
98
|
-
class="p-5 group cursor-pointer hover:bg-primary dark:hover:bg-white md:border-r md:border-t border-stroke dark:border-nickel dark:border-b transition-colors duration-100 relative"
|
|
99
|
-
>
|
|
100
|
-
<svg class="absolute top-5 right-5 opacity-0 group-hover:opacity-100 transition-opacity duration-100" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
101
|
-
<path d="M2.81802 2.81803L9.18198 2.81803L9.18198 9.18199" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
102
|
-
<path d="M9.18213 2.81802L2.81817 9.18198" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
103
|
-
</svg>
|
|
104
|
-
<img
|
|
105
|
-
src="@assets/icons/rolldown-light.svg"
|
|
106
|
-
alt="Rolldown logo"
|
|
107
|
-
class="p-1 size-8 rounded mb-6 bg-primary"
|
|
108
|
-
>
|
|
109
|
-
<h3
|
|
110
|
-
class="text-lg font-medium font-sans mb-1 dark:text-white group-hover:text-white dark:group-hover:text-primary transition-colors duration-100 "
|
|
111
|
-
>
|
|
112
|
-
Rolldown
|
|
113
|
-
</h3>
|
|
114
|
-
<p class="text-sm text-balance">
|
|
115
|
-
A Rust-based bundler for Javascript with Rollup-compatible API
|
|
116
|
-
</p>
|
|
117
|
-
</a>
|
|
118
|
-
|
|
119
|
-
<a
|
|
120
|
-
href="https://oxc.rs/"
|
|
121
|
-
target="_blank"
|
|
122
|
-
@click="onLinkClick"
|
|
123
|
-
class="p-5 group cursor-pointer hover:bg-primary dark:hover:bg-white md:border-t border-stroke dark:border-nickel dark:border-b transition-colors duration-100 relative"
|
|
124
|
-
>
|
|
125
|
-
<svg class="absolute top-5 right-5 opacity-0 group-hover:opacity-100 transition-opacity duration-100" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
126
|
-
<path d="M2.81802 2.81803L9.18198 2.81803L9.18198 9.18199" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
127
|
-
<path d="M9.18213 2.81802L2.81817 9.18198" class="stroke-white dark:group-hover:stroke-primary" stroke-width="1.25" stroke-linejoin="round"/>
|
|
128
|
-
</svg>
|
|
129
|
-
<img
|
|
130
|
-
src="@assets/icons/oxc-light.svg"
|
|
131
|
-
alt="Oxc logo"
|
|
132
|
-
class="p-1 size-8 rounded mb-6 bg-primary"
|
|
133
|
-
>
|
|
134
|
-
<h3
|
|
135
|
-
class="text-lg font-medium font-sans mb-1 dark:text-white group-hover:text-white dark:group-hover:text-primary transition-colors duration-100 "
|
|
136
|
-
>
|
|
137
|
-
Oxc
|
|
138
|
-
</h3>
|
|
139
|
-
<p class="text-sm text-balance">
|
|
140
|
-
A collection of JavaScript tools written in Rust
|
|
141
|
-
</p>
|
|
142
|
-
</a>
|
|
143
|
-
</div>
|
|
144
|
-
</div>
|
|
145
|
-
|
|
146
|
-
<!-- Customer Highlights -->
|
|
147
|
-
<div
|
|
148
|
-
v-if="featuredArticles && featuredArticles.length > 0"
|
|
149
|
-
class="flex flex-col gap-0 md:col-span-4"
|
|
150
|
-
>
|
|
151
|
-
<div class="px-5 h-12 flex items-center border-b border-stroke dark:border-nickel">
|
|
152
|
-
<p class="text-mono text-xs font-medium uppercase tracking-widest text-grey">
|
|
153
|
-
Customer Highlights //
|
|
154
|
-
</p>
|
|
155
|
-
</div>
|
|
156
|
-
<div class="flex flex-col">
|
|
157
|
-
<Carousel v-bind="carouselConfig" class="h-full">
|
|
158
|
-
<Slide v-for="(article, index) in featuredArticles" :key="index">
|
|
159
|
-
<a
|
|
160
|
-
:href="article.url || article.link"
|
|
161
|
-
@click="onLinkClick"
|
|
162
|
-
class="flex flex-col h-full group"
|
|
163
|
-
>
|
|
164
|
-
<div class="overflow-hidden aspect-[16/9]">
|
|
165
|
-
<img
|
|
166
|
-
:src="article.cover || article.image"
|
|
167
|
-
:alt="article.title"
|
|
168
|
-
class="w-full h-full object-cover"
|
|
169
|
-
>
|
|
170
|
-
</div>
|
|
171
|
-
<div class="px-5 py-5">
|
|
172
|
-
<h3
|
|
173
|
-
class="text-lg font-sans leading-tight transition-colors dark:text-white group-hover:text-primary min-h-12 line-clamp-2"
|
|
174
|
-
>
|
|
175
|
-
{{ article.title }}
|
|
176
|
-
</h3>
|
|
177
|
-
</div>
|
|
178
|
-
</a>
|
|
179
|
-
</Slide>
|
|
180
|
-
</Carousel>
|
|
181
|
-
</div>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
</template>
|
|
185
|
-
|
|
186
|
-
<style>
|
|
187
|
-
.is-dragging {
|
|
188
|
-
pointer-events: none;
|
|
189
|
-
}
|
|
190
|
-
</style>
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="wrapper wrapper--ticks border-t grid grid-cols-1 md:grid-cols-2 divide-x divide-stroke justify-start items-center">
|
|
3
|
-
<div class="flex flex-col justify-between items-center md:items-start px-5 md:px-10 p-16 md:p-10 h-full gap-10">
|
|
4
|
-
<div class="flex flex-col gap-3 md:gap-5">
|
|
5
|
-
<h3 class="text-center md:text-start text-primary text-balance">
|
|
6
|
-
Think you'd be a good addition to our team?
|
|
7
|
-
</h3>
|
|
8
|
-
<p class="text-center md:text-start text-balance">
|
|
9
|
-
We do not have any open position right now, but we’re always open to
|
|
10
|
-
exploring opportunities with exceptional talent.
|
|
11
|
-
</p>
|
|
12
|
-
</div>
|
|
13
|
-
<p>Drop us a line at <strong>career[at]voidzero[dot]dev</strong></p>
|
|
14
|
-
</div>
|
|
15
|
-
<div>
|
|
16
|
-
<img src="@assets/voidzero/career-illustration.jpg" alt="Join VoidZero" class="w-full">
|
|
17
|
-
<div class="px-5 md:px-10 py-10">
|
|
18
|
-
<h6 class="text-xl text-primary font-medium">What makes you a good fit:</h6>
|
|
19
|
-
<ul class="mt-5 career-list">
|
|
20
|
-
<li class="text-primary text-base">Passionate about building fast, developer-friendly tools.</li>
|
|
21
|
-
<li class="text-primary text-base">Excited to contribute to open source and our vision.</li>
|
|
22
|
-
<li class="text-primary text-base">Proficiency with Rust and TypeScript.</li>
|
|
23
|
-
</ul>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</template>
|
|
28
|
-
<script setup lang="ts">
|
|
29
|
-
</script>
|
|
30
|
-
<style scoped>
|
|
31
|
-
.career-list {
|
|
32
|
-
list-style: none;
|
|
33
|
-
padding-left: 0;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.career-list li {
|
|
37
|
-
position: relative;
|
|
38
|
-
padding-left: 1.25rem;
|
|
39
|
-
margin-bottom: 0.75rem;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.career-list li:last-child {
|
|
43
|
-
margin-bottom: 0;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.career-list li::before {
|
|
47
|
-
content: '';
|
|
48
|
-
position: absolute;
|
|
49
|
-
left: 0;
|
|
50
|
-
top: 0.5em;
|
|
51
|
-
width: 6px;
|
|
52
|
-
height: 6px;
|
|
53
|
-
background-color: #863BFF;
|
|
54
|
-
border-radius: 20%;
|
|
55
|
-
}
|
|
56
|
-
</style>
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div
|
|
3
|
-
class="wrapper flex flex-col justify-start items-center gap-6 pt-6 md:pt-20 pb-10"
|
|
4
|
-
>
|
|
5
|
-
<div
|
|
6
|
-
class="w-full sm:w-2xl flex flex-col justify-start items-center gap-10 px-5 sm:px-0"
|
|
7
|
-
>
|
|
8
|
-
<div class="flex flex-col justify-start items-center gap-4">
|
|
9
|
-
<span
|
|
10
|
-
class="text-grey text-xs font-medium font-mono uppercase tracking-wide"
|
|
11
|
-
>About</span
|
|
12
|
-
>
|
|
13
|
-
<h1 class="text-center text-white text-balance shine-text pb-5 sm:pb-0">
|
|
14
|
-
<span class="inline-block">We are a team of</span>
|
|
15
|
-
<span class="inline-block">Javascript tooling experts</span>
|
|
16
|
-
</h1>
|
|
17
|
-
<p class="self-stretch text-center text-balance text-grey text-xl">
|
|
18
|
-
Including creators and core contributors to some of the most widely
|
|
19
|
-
adopted open-source projects.
|
|
20
|
-
</p>
|
|
21
|
-
</div>
|
|
22
|
-
<div class="flex items-center gap-5">
|
|
23
|
-
<a href="#team" class="button button--white" @click="scrollToTeam">
|
|
24
|
-
Meet the team
|
|
25
|
-
</a>
|
|
26
|
-
<!-- <a href="#" target="_blank" rel="noopener noreferrer" class="button">
|
|
27
|
-
Join us
|
|
28
|
-
</a>-->
|
|
29
|
-
</div>
|
|
30
|
-
<RiveAnimation
|
|
31
|
-
:desktop-src="aboutAnimation"
|
|
32
|
-
:mobile-src="aboutAnimationMobile"
|
|
33
|
-
:desktop-width="1280"
|
|
34
|
-
:desktop-height="580"
|
|
35
|
-
:mobile-width="300"
|
|
36
|
-
:mobile-height="148"
|
|
37
|
-
canvas-class="w-[50vw] md:w-[30rem] pt-6 md:pt-0"
|
|
38
|
-
:enable-hover="true"
|
|
39
|
-
/>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
<div
|
|
43
|
-
class="wrapper wrapper--ticks border-t py-10 md:py-40 md:pb-70 grid md:grid-cols-2 px-10 md:px-10 lg:px-30 gap-10 lg:gap-20 relative"
|
|
44
|
-
>
|
|
45
|
-
<Shader
|
|
46
|
-
class="w-full absolute bottom-0 left-0 right-0 aspect-[21/9] -z-0 hidden md:block"
|
|
47
|
-
>
|
|
48
|
-
<SolidColor color="#16171d" />
|
|
49
|
-
<Ascii
|
|
50
|
-
:spacing="0.6"
|
|
51
|
-
:cell-size="18"
|
|
52
|
-
characters="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../"
|
|
53
|
-
font-family="KH Teka Mono"
|
|
54
|
-
>
|
|
55
|
-
<SineWave
|
|
56
|
-
id="sineWave"
|
|
57
|
-
:angle="0"
|
|
58
|
-
color="#3b3440"
|
|
59
|
-
:speed="0.4"
|
|
60
|
-
:position="{ x: 0.5, y: 1 }"
|
|
61
|
-
:softness="0.4"
|
|
62
|
-
:amplitude="0.05"
|
|
63
|
-
:frequency="0.3"
|
|
64
|
-
:thickness="0.7"
|
|
65
|
-
:visible="true"
|
|
66
|
-
/>
|
|
67
|
-
<ChromaFlow
|
|
68
|
-
base-color="#9642ff"
|
|
69
|
-
up-color="#8800ff"
|
|
70
|
-
down-color="#5500ff"
|
|
71
|
-
left-color="#0077ff"
|
|
72
|
-
right-color="#6200ff"
|
|
73
|
-
:intensity="1"
|
|
74
|
-
:radius="2"
|
|
75
|
-
:momentum="30"
|
|
76
|
-
mask-type="alpha"
|
|
77
|
-
mask-source="sineWave"
|
|
78
|
-
/>
|
|
79
|
-
</Ascii>
|
|
80
|
-
</Shader>
|
|
81
|
-
<div class="h-full flex items-center relative">
|
|
82
|
-
<h2 class="text-white">
|
|
83
|
-
We’re on the mission to make JavaScript developers more productive than
|
|
84
|
-
ever before.
|
|
85
|
-
</h2>
|
|
86
|
-
</div>
|
|
87
|
-
<div class="relative">
|
|
88
|
-
<svg
|
|
89
|
-
class="h-5 absolute -left-5 top-1"
|
|
90
|
-
viewBox="0 0 6 19"
|
|
91
|
-
fill="none"
|
|
92
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
93
|
-
>
|
|
94
|
-
<path
|
|
95
|
-
d="M2.80966 0C-0.92561 5.34659 -0.947479 13.6342 2.80966 19H5.33337C1.57711 13.6342 1.59898 5.34659 5.33337 0H2.80966Z"
|
|
96
|
-
fill="white"
|
|
97
|
-
/>
|
|
98
|
-
</svg>
|
|
99
|
-
<p class="text-white/70 text-xl">
|
|
100
|
-
JavaScript started as a scripting language designed in 10 days. Today,
|
|
101
|
-
it is powering some of the most sophisticated applications in the world
|
|
102
|
-
used by billions of users. The ever-increasing scale and complexity
|
|
103
|
-
poses real challenges. JavaScript developers are struggling with
|
|
104
|
-
fragmented solutions, overloaded dependencies, and performance
|
|
105
|
-
bottlenecks.
|
|
106
|
-
<br /><br />
|
|
107
|
-
We believe it is time to change that with a toolchain that is designed
|
|
108
|
-
from the ground up to offer the best possible performance and unified
|
|
109
|
-
developer experience.
|
|
110
|
-
</p>
|
|
111
|
-
<svg
|
|
112
|
-
class="h-5 absolute -right-5 bottom-1"
|
|
113
|
-
viewBox="0 0 6 19"
|
|
114
|
-
fill="none"
|
|
115
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
116
|
-
>
|
|
117
|
-
<path
|
|
118
|
-
d="M2.52433 0C6.25959 5.34659 6.28146 13.6342 2.52433 19H0.000613689C3.75687 13.6342 3.73501 5.34659 0.000613689 0H2.52433Z"
|
|
119
|
-
fill="white"
|
|
120
|
-
/>
|
|
121
|
-
</svg>
|
|
122
|
-
</div>
|
|
123
|
-
<p class="block md:hidden text-nickel text-lg font-mono break-all">
|
|
124
|
-
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
|
125
|
-
. . . . . . . . . . / / / /
|
|
126
|
-
</p>
|
|
127
|
-
<div class="flex md:hidden gap-3 justify-between items-center w-full">
|
|
128
|
-
<img
|
|
129
|
-
src="@assets/voidzero/signature.svg"
|
|
130
|
-
alt="Signature"
|
|
131
|
-
class="w-full max-w-[60%]"
|
|
132
|
-
/>
|
|
133
|
-
<div class="shrink-0">
|
|
134
|
-
<h5 class="text-white md:text-lg font-medium truncate">Evan You</h5>
|
|
135
|
-
<p class="text-white/70 text-base">Founder & CEO</p>
|
|
136
|
-
</div>
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
139
|
-
</template>
|
|
140
|
-
|
|
141
|
-
<script setup lang="ts">
|
|
142
|
-
import { Shader, Ascii, SineWave, SolidColor, ChromaFlow } from "shaders/vue";
|
|
143
|
-
import aboutAnimation from "@assets/voidzero/animations/about.riv";
|
|
144
|
-
import aboutAnimationMobile from "@assets/voidzero/animations/about-mobile.riv";
|
|
145
|
-
import RiveAnimation from "@components/shared/RiveAnimation.vue";
|
|
146
|
-
|
|
147
|
-
const scrollToTeam = (event: Event) => {
|
|
148
|
-
event.preventDefault();
|
|
149
|
-
const teamSection = document.getElementById("team");
|
|
150
|
-
if (teamSection) {
|
|
151
|
-
const targetPosition =
|
|
152
|
-
teamSection.getBoundingClientRect().top + window.scrollY;
|
|
153
|
-
const startPosition = window.scrollY;
|
|
154
|
-
const distance = targetPosition - startPosition;
|
|
155
|
-
const duration = 800; // ms
|
|
156
|
-
let startTime: number | null = null;
|
|
157
|
-
|
|
158
|
-
const animation = (currentTime: number) => {
|
|
159
|
-
if (startTime === null) startTime = currentTime;
|
|
160
|
-
const timeElapsed = currentTime - startTime;
|
|
161
|
-
const progress = Math.min(timeElapsed / duration, 1);
|
|
162
|
-
|
|
163
|
-
// Easing function (ease-in-out)
|
|
164
|
-
const ease =
|
|
165
|
-
progress < 0.5
|
|
166
|
-
? 2 * progress * progress
|
|
167
|
-
: 1 - Math.pow(-2 * progress + 2, 2) / 2;
|
|
168
|
-
|
|
169
|
-
window.scrollTo(0, startPosition + distance * ease);
|
|
170
|
-
|
|
171
|
-
if (timeElapsed < duration) {
|
|
172
|
-
requestAnimationFrame(animation);
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
requestAnimationFrame(animation);
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
</script>
|
|
180
|
-
|
|
181
|
-
<style scoped>
|
|
182
|
-
.shine-text {
|
|
183
|
-
background: linear-gradient(
|
|
184
|
-
110deg,
|
|
185
|
-
var(--color-white) 0%,
|
|
186
|
-
var(--color-white) 40%,
|
|
187
|
-
#6c3bff 48%,
|
|
188
|
-
#6c3bff 50%,
|
|
189
|
-
#6c3bff 52%,
|
|
190
|
-
var(--color-white) 60%,
|
|
191
|
-
var(--color-white) 100%
|
|
192
|
-
);
|
|
193
|
-
background-size: 400% 100%;
|
|
194
|
-
background-position: 100% 0;
|
|
195
|
-
background-clip: text;
|
|
196
|
-
-webkit-background-clip: text;
|
|
197
|
-
-webkit-text-fill-color: transparent;
|
|
198
|
-
animation: shine 5s ease-in-out 0s 1 forwards;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
@keyframes shine {
|
|
202
|
-
to {
|
|
203
|
-
background-position: 35% 0;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
</style>
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import accelLogo from '@assets/voidzero/investors/accel.svg'
|
|
3
|
-
import amplifyLogo from '@assets/voidzero/investors/amplify.svg'
|
|
4
|
-
import sunflowerLogo from '@assets/voidzero/investors/sunflower.png'
|
|
5
|
-
import peakxvLogo from '@assets/voidzero/investors/peakxv.png'
|
|
6
|
-
|
|
7
|
-
interface Investor {
|
|
8
|
-
name: string
|
|
9
|
-
title: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const mainInvestors = [
|
|
13
|
-
{src: accelLogo, alt: 'Accel'},
|
|
14
|
-
{src: peakxvLogo, alt: 'Peak XV'},
|
|
15
|
-
{src: sunflowerLogo, alt: 'Sunflower'},
|
|
16
|
-
{src: amplifyLogo, alt: 'Amplify'}
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
const investors: Investor[] = [
|
|
20
|
-
{ name: 'Tom Preston-Werner', title: 'Preston-Werner Ventures' },
|
|
21
|
-
{ name: 'BGZ', title: 'BGZ Investment Pte.Ltd' },
|
|
22
|
-
{ name: 'Eric Simons', title: 'Founder, StackBlitz' },
|
|
23
|
-
{ name: 'Paul Copplestone', title: 'Co-Founder, Supabase' },
|
|
24
|
-
{ name: 'David Cramer', title: 'Co-Founder, Sentry' },
|
|
25
|
-
{ name: 'Matt Biilmann', title: 'Co-Founder, Netlify' },
|
|
26
|
-
{ name: 'Christian Bach', title: 'Co-Founder, Netlify' },
|
|
27
|
-
{ name: 'Dafeng Guo', title: 'Co-Founder, Strikingly' },
|
|
28
|
-
{ name: 'Sébastien Chopin', title: 'Founder, NuxtLabs' },
|
|
29
|
-
{ name: 'Johannes Schickling', title: 'Founder, Prisma' },
|
|
30
|
-
{ name: 'Zeno Rocha', title: 'Founder, Resend' },
|
|
31
|
-
{ name: 'Koen Bok', title: 'Co-Founder, Framer' },
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
const getBorderClasses = (index: number) => {
|
|
35
|
-
const classes: string[] = []
|
|
36
|
-
const position = index + 1
|
|
37
|
-
const total = investors.length
|
|
38
|
-
|
|
39
|
-
// RIGHT BORDERS: remove from last item in each row per breakpoint
|
|
40
|
-
classes.push('border-r-0') // Mobile (1 col): no right borders
|
|
41
|
-
|
|
42
|
-
if (position % 2 !== 0) classes.push('sm:border-r') // SM (2 cols): border on odd positions
|
|
43
|
-
|
|
44
|
-
if (position % 4 !== 0) classes.push('lg:border-r') // LG (4 cols): border on all except every 4th
|
|
45
|
-
else classes.push('lg:border-r-0')
|
|
46
|
-
|
|
47
|
-
// TOP BORDERS: remove from first row per breakpoint
|
|
48
|
-
if (position > 1) classes.push('border-t') // Mobile (1 col): all except first
|
|
49
|
-
|
|
50
|
-
if (position > 2) classes.push('sm:border-t') // SM (2 cols): all except first 2
|
|
51
|
-
else classes.push('sm:border-t-0')
|
|
52
|
-
|
|
53
|
-
if (position > 4) classes.push('lg:border-t') // LG (4 cols): all except first 4
|
|
54
|
-
else classes.push('lg:border-t-0')
|
|
55
|
-
|
|
56
|
-
// BOTTOM BORDERS: remove from last row per breakpoint
|
|
57
|
-
if (position < total) classes.push('border-b') // Mobile: all except last
|
|
58
|
-
|
|
59
|
-
const lastRowStartSm = Math.ceil(total / 2) * 2 - 1
|
|
60
|
-
if (position <= total - 2 || position < lastRowStartSm) classes.push('sm:border-b')
|
|
61
|
-
else classes.push('sm:border-b-0')
|
|
62
|
-
|
|
63
|
-
const lastRowStartLg = Math.ceil(total / 4) * 4 - 3
|
|
64
|
-
if (position <= total - 4 || position < lastRowStartLg) classes.push('lg:border-b')
|
|
65
|
-
else classes.push('lg:border-b-0')
|
|
66
|
-
|
|
67
|
-
return classes.join(' ')
|
|
68
|
-
}
|
|
69
|
-
</script>
|
|
70
|
-
|
|
71
|
-
<template>
|
|
72
|
-
<section class="wrapper wrapper--ticks border-t px-10 h-48 sm:h-90 flex flex-col justify-center gap-5">
|
|
73
|
-
<h3 class="text-start">Backed by incredible investors.</h3>
|
|
74
|
-
<p class="max-w-md text-balance">We are backed by some of the most accomplished and experienced investors in the developer tools space.</p>
|
|
75
|
-
</section>
|
|
76
|
-
<section class="wrapper wrapper--ticks border-t">
|
|
77
|
-
<!-- Main Investors -->
|
|
78
|
-
<div class="grid grid-cols-1 sm:grid-cols-2 border-b border-stroke">
|
|
79
|
-
<div
|
|
80
|
-
v-for="(investor, index) in mainInvestors"
|
|
81
|
-
:key="index"
|
|
82
|
-
class="flex items-center justify-center py-16 px-8 border-stroke"
|
|
83
|
-
:class="[
|
|
84
|
-
// Mobile (1 col): border-b on all except last
|
|
85
|
-
index < mainInvestors.length - 1 ? 'border-b' : '',
|
|
86
|
-
// SM+ (2 cols): border-b on top row (0,1), border-r on left column (0,2)
|
|
87
|
-
index < 2 ? 'sm:border-b' : 'sm:border-b-0',
|
|
88
|
-
index % 2 === 0 ? 'sm:border-r' : ''
|
|
89
|
-
]"
|
|
90
|
-
>
|
|
91
|
-
<img :src="investor.src" :alt="investor.alt" class="h-12 max-w-full object-contain" />
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
|
|
95
|
-
<!-- Individual Investors Grid -->
|
|
96
|
-
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4">
|
|
97
|
-
<div
|
|
98
|
-
v-for="(investor, index) in investors"
|
|
99
|
-
:key="index"
|
|
100
|
-
class="border-stroke flex flex-col px-8 py-6"
|
|
101
|
-
:class="getBorderClasses(index)"
|
|
102
|
-
>
|
|
103
|
-
<h5 class="text-primary text-base font-medium">{{ investor.name }}</h5>
|
|
104
|
-
<p class="text-grey text-xs font-medium font-mono uppercase tracking-wide">{{ investor.title }}</p>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
</section>
|
|
108
|
-
</template>
|
|
109
|
-
|
|
110
|
-
<style scoped>
|
|
111
|
-
|
|
112
|
-
</style>
|