@voidzero-dev/vitepress-theme 2.0.1 → 3.0.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 (373) hide show
  1. package/README.md +26 -33
  2. package/package.json +5 -26
  3. package/src/assets/clients/clickup.svg +5 -0
  4. package/src/assets/clients/stripe.svg +3 -0
  5. package/src/{vitepress/components → components}/oss/Footer.vue +4 -21
  6. package/src/{vitepress/components → components}/oss/Header.vue +82 -180
  7. package/src/{vitepress/components → components}/oss/Sponsors.vue +3 -3
  8. package/src/components/oss/TopBanner.vue +111 -0
  9. package/src/{vitepress/components → components}/oss/TrustedBy.vue +1 -1
  10. package/src/{vitepress/components → components}/vite/Community.vue +3 -3
  11. package/src/components/vite/FeatureGrid1.vue +63 -0
  12. package/src/{vitepress/components/vite/FeatureGrid.vue → components/vite/FeatureGrid2.vue} +12 -11
  13. package/src/{vitepress/components → components}/vite/Hero.vue +9 -18
  14. package/src/{vitepress/components → components}/vitepress-default/VPDocOutlineItem.vue +2 -2
  15. package/src/{vitepress/components → components}/vitepress-default/VPFlyout.vue +1 -1
  16. package/src/{vitepress/components → components}/vitepress-default/VPMenuLink.vue +1 -1
  17. package/src/{vitepress/components → components}/vitepress-default/VPNavBarMenuLink.vue +1 -1
  18. package/src/{vitepress/components → components}/vitepress-default/VPSidebarItem.vue +1 -1
  19. package/src/{vitepress/components → components}/vitepress-default/VPSocialLink.vue +1 -2
  20. package/src/fonts/APK-Protocol-Semi-Bold.woff2 +0 -0
  21. package/src/fonts/inter-italic-cyrillic-ext.woff2 +0 -0
  22. package/src/fonts/inter-italic-cyrillic.woff2 +0 -0
  23. package/src/fonts/inter-italic-greek-ext.woff2 +0 -0
  24. package/src/fonts/inter-italic-greek.woff2 +0 -0
  25. package/src/fonts/inter-italic-latin-ext.woff2 +0 -0
  26. package/src/fonts/inter-italic-latin.woff2 +0 -0
  27. package/src/fonts/inter-italic-vietnamese.woff2 +0 -0
  28. package/src/fonts/inter-roman-cyrillic-ext.woff2 +0 -0
  29. package/src/fonts/inter-roman-cyrillic.woff2 +0 -0
  30. package/src/fonts/inter-roman-greek-ext.woff2 +0 -0
  31. package/src/fonts/inter-roman-greek.woff2 +0 -0
  32. package/src/fonts/inter-roman-latin-ext.woff2 +0 -0
  33. package/src/fonts/inter-roman-latin.woff2 +0 -0
  34. package/src/fonts/inter-roman-vietnamese.woff2 +0 -0
  35. package/src/index.ts +103 -2
  36. package/src/{vitepress/layouts → layouts}/VPLayout.vue +2 -17
  37. package/src/styles/tokens.css +321 -0
  38. package/src/{vitepress/styles → styles}/vitepress-default/vars.css +1 -1
  39. package/src/{vitepress/types → types}/theme-config.ts +2 -0
  40. package/src/types/theme-context.ts +33 -0
  41. package/src/vitepress/assets/clients/beehiiv.svg +0 -30
  42. package/src/vitepress/assets/clients/excalidraw.svg +0 -82
  43. package/src/vitepress/assets/clients/get-your-guide.svg +0 -1
  44. package/src/vitepress/assets/clients/posthog.svg +0 -1
  45. package/src/vitepress/assets/clients/ramp.svg +0 -1
  46. package/src/vitepress/assets/clients/shopee.svg +0 -55
  47. package/src/vitepress/components/oss/TopBanner.vue +0 -150
  48. package/src/vitepress/components/vite/FeaturePanel1.vue +0 -41
  49. package/src/vitepress/components/vite/FeaturePanel2.vue +0 -37
  50. package/src/vitepress/components/vite/FeaturePanel3.vue +0 -43
  51. package/src/vitepress/components/vite/FeaturePanel4.vue +0 -46
  52. package/src/vitepress/components/voidzero/Footer.vue +0 -65
  53. package/src/vitepress/components/voidzero/Header.vue +0 -560
  54. package/src/vitepress/components/voidzero/Megamenu.vue +0 -190
  55. package/src/vitepress/components/voidzero/about/CareerCTA.vue +0 -56
  56. package/src/vitepress/components/voidzero/about/Hero.vue +0 -206
  57. package/src/vitepress/components/voidzero/about/Investors.vue +0 -112
  58. package/src/vitepress/components/voidzero/about/TeamGrid.vue +0 -161
  59. package/src/vitepress/components/voidzero/about/TeamSectionHeading.vue +0 -13
  60. package/src/vitepress/components/voidzero/blog/BlogArchive.vue +0 -223
  61. package/src/vitepress/components/voidzero/blog/BlogSingleContent.vue +0 -364
  62. package/src/vitepress/components/voidzero/blog/BlogSingleHero.vue +0 -113
  63. package/src/vitepress/components/voidzero/blog/BlogSingleRelated.vue +0 -92
  64. package/src/vitepress/components/voidzero/blog/FeaturedArticles.vue +0 -146
  65. package/src/vitepress/components/voidzero/blog/types.ts +0 -56
  66. package/src/vitepress/components/voidzero/home/CaseStudySlider.vue +0 -235
  67. package/src/vitepress/components/voidzero/home/CustomersSectionHeading.vue +0 -5
  68. package/src/vitepress/components/voidzero/home/GitHubStats.vue +0 -27
  69. package/src/vitepress/components/voidzero/home/Hero.vue +0 -69
  70. package/src/vitepress/components/voidzero/home/Investors.vue +0 -30
  71. package/src/vitepress/components/voidzero/home/NewsletterCTA.vue +0 -23
  72. package/src/vitepress/components/voidzero/home/OpenSourceSectionHeading.vue +0 -6
  73. package/src/vitepress/components/voidzero/home/OpenSourceSectionProjects.vue +0 -419
  74. package/src/vitepress/components/voidzero/home/Resources.vue +0 -144
  75. package/src/vitepress/components/voidzero/home/Statistics.vue +0 -507
  76. package/src/vitepress/components/voidzero/home/StatisticsSectionHeading.vue +0 -5
  77. package/src/vitepress/components/voidzero/home/TeamCTA.vue +0 -17
  78. package/src/vitepress/components/voidzero/home/TrustedBy.vue +0 -248
  79. package/src/vitepress/components/voidzero/home/VitePlusSectionFeatures.vue +0 -55
  80. package/src/vitepress/components/voidzero/home/VitePlusSectionHeading.vue +0 -17
  81. package/src/vitepress/fonts/KHTeka-Medium.woff2 +0 -0
  82. package/src/vitepress/fonts/KHTeka-Regular.woff2 +0 -0
  83. package/src/vitepress/index.ts +0 -269
  84. package/src/vitepress/layouts/OSSProjectLayout.vue +0 -28
  85. package/src/vitepress/styles/tokens.css +0 -137
  86. /package/src/{vitepress/assets → assets}/checkmark.svg +0 -0
  87. /package/src/{vitepress/assets → assets}/clients/airbnb.svg +0 -0
  88. /package/src/{vitepress/assets → assets}/clients/bolt.svg +0 -0
  89. /package/src/{vitepress/assets → assets}/clients/cloudflare.svg +0 -0
  90. /package/src/{vitepress/assets → assets}/clients/framer.svg +0 -0
  91. /package/src/{vitepress/assets → assets}/clients/hugging-face.svg +0 -0
  92. /package/src/{vitepress/assets → assets}/clients/linear.svg +0 -0
  93. /package/src/{vitepress/assets → assets}/clients/mercedes.svg +0 -0
  94. /package/src/{vitepress/assets → assets}/clients/openai.svg +0 -0
  95. /package/src/{vitepress/assets → assets}/clients/paramount.svg +0 -0
  96. /package/src/{vitepress/assets → assets}/clients/plaid.svg +0 -0
  97. /package/src/{vitepress/assets → assets}/clients/shopify.svg +0 -0
  98. /package/src/{vitepress/assets → assets}/cta-background.jpg +0 -0
  99. /package/src/{vitepress/assets → assets}/icons/oxc-dark.svg +0 -0
  100. /package/src/{vitepress/assets → assets}/icons/oxc-light.svg +0 -0
  101. /package/src/{vitepress/assets → assets}/icons/oxc-mono.svg +0 -0
  102. /package/src/{vitepress/assets → assets}/icons/rolldown-dark.svg +0 -0
  103. /package/src/{vitepress/assets → assets}/icons/rolldown-light.svg +0 -0
  104. /package/src/{vitepress/assets → assets}/icons/rolldown-mono.svg +0 -0
  105. /package/src/{vitepress/assets → assets}/icons/vite-dark.svg +0 -0
  106. /package/src/{vitepress/assets → assets}/icons/vite-light.svg +0 -0
  107. /package/src/{vitepress/assets → assets}/icons/vite-mono.svg +0 -0
  108. /package/src/{vitepress/assets → assets}/icons/viteplus-dark.svg +0 -0
  109. /package/src/{vitepress/assets → assets}/icons/viteplus-light.svg +0 -0
  110. /package/src/{vitepress/assets → assets}/icons/viteplus-mono.svg +0 -0
  111. /package/src/{vitepress/assets → assets}/icons/vitest-dark.svg +0 -0
  112. /package/src/{vitepress/assets → assets}/icons/vitest-light.svg +0 -0
  113. /package/src/{vitepress/assets → assets}/icons/vitest-mono.svg +0 -0
  114. /package/src/{vitepress/assets → assets}/logos/oxc-dark.svg +0 -0
  115. /package/src/{vitepress/assets → assets}/logos/oxc-light.svg +0 -0
  116. /package/src/{vitepress/assets → assets}/logos/rolldown-dark.svg +0 -0
  117. /package/src/{vitepress/assets → assets}/logos/rolldown-light.svg +0 -0
  118. /package/src/{vitepress/assets → assets}/logos/vite-dark.svg +0 -0
  119. /package/src/{vitepress/assets → assets}/logos/vite-light.svg +0 -0
  120. /package/src/{vitepress/assets → assets}/logos/viteplus-dark.svg +0 -0
  121. /package/src/{vitepress/assets → assets}/logos/viteplus-light.svg +0 -0
  122. /package/src/{vitepress/assets → assets}/logos/vitest-dark.svg +0 -0
  123. /package/src/{vitepress/assets → assets}/logos/vitest-light.svg +0 -0
  124. /package/src/{vitepress/assets → assets}/logos/voidzero-dark.svg +0 -0
  125. /package/src/{vitepress/assets → assets}/logos/voidzero-light.svg +0 -0
  126. /package/src/{vitepress/assets → assets}/oxc/animations/560_x_260_minifier.riv +0 -0
  127. /package/src/{vitepress/assets → assets}/oxc/animations/640_x_630_oxc masthead_.riv +0 -0
  128. /package/src/{vitepress/assets → assets}/oxc/footer-background.jpg +0 -0
  129. /package/src/{vitepress/assets → assets}/oxc/oxc-feature-background.jpg +0 -0
  130. /package/src/{vitepress/assets → assets}/oxc/oxc-formatter-terminal.png +0 -0
  131. /package/src/{vitepress/assets → assets}/oxc/oxc-linter-terminal.png +0 -0
  132. /package/src/{vitepress/assets → assets}/oxc/oxc-resolver-terminal.png +0 -0
  133. /package/src/{vitepress/assets → assets}/oxc/oxc-transformer-terminal.png +0 -0
  134. /package/src/{vitepress/assets → assets}/oxc/primary-button-background.jpg +0 -0
  135. /package/src/{vitepress/assets → assets}/primary-button-background.jpg +0 -0
  136. /package/src/{vitepress/assets → assets}/rolldown/animations/640_x_300_design_for_vite.riv +0 -0
  137. /package/src/{vitepress/assets → assets}/rolldown/animations/640_x_300_esbuild.riv +0 -0
  138. /package/src/{vitepress/assets → assets}/rolldown/animations/640_x_520_rolldown_masthead.riv +0 -0
  139. /package/src/{vitepress/assets → assets}/rolldown/footer-background.jpg +0 -0
  140. /package/src/{vitepress/assets → assets}/rolldown/hero-background.jpg +0 -0
  141. /package/src/{vitepress/assets → assets}/rolldown/hero-terminal.svg +0 -0
  142. /package/src/{vitepress/assets → assets}/rolldown/primary-button-background.jpg +0 -0
  143. /package/src/{vitepress/assets → assets}/rolldown/rolldown-esbuild-parity.png +0 -0
  144. /package/src/{vitepress/assets → assets}/rolldown/rolldown-rollup-background.jpg +0 -0
  145. /package/src/{vitepress/assets → assets}/rolldown/rolldown-rollup.png +0 -0
  146. /package/src/{vitepress/assets → assets}/rolldown/rolldown-thumbnail.png +0 -0
  147. /package/src/{vitepress/assets → assets}/social/bluesky-light.svg +0 -0
  148. /package/src/{vitepress/assets → assets}/social/bluesky.svg +0 -0
  149. /package/src/{vitepress/assets → assets}/social/discord-light.svg +0 -0
  150. /package/src/{vitepress/assets → assets}/social/discord.svg +0 -0
  151. /package/src/{vitepress/assets → assets}/social/github-light.svg +0 -0
  152. /package/src/{vitepress/assets → assets}/social/github.svg +0 -0
  153. /package/src/{vitepress/assets → assets}/social/twitter-light.svg +0 -0
  154. /package/src/{vitepress/assets → assets}/social/twitter.svg +0 -0
  155. /package/src/{vitepress/assets → assets}/terminal-background.jpg +0 -0
  156. /package/src/{vitepress/assets → assets}/vite/animations/563_x_420_rich_features.riv +0 -0
  157. /package/src/{vitepress/assets → assets}/vite/animations/640_x_300_flexible_plugin.riv +0 -0
  158. /package/src/{vitepress/assets → assets}/vite/animations/641_x_629_vite_masthead.riv +0 -0
  159. /package/src/{vitepress/assets → assets}/vite/footer-background.jpg +0 -0
  160. /package/src/{vitepress/assets → assets}/vite/primary-button-background.jpg +0 -0
  161. /package/src/{vitepress/assets → assets}/vite/vite-by-voidzero.png +0 -0
  162. /package/src/{vitepress/assets → assets}/vite/vite-ci.svg +0 -0
  163. /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-1-background.jpg +0 -0
  164. /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-1-terminal.svg +0 -0
  165. /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-2-terminal.png +0 -0
  166. /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-4-background.jpg +0 -0
  167. /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-4-terminal.svg +0 -0
  168. /package/src/{vitepress/assets → assets}/vite/vite-frameworks-mobile.png +0 -0
  169. /package/src/{vitepress/assets → assets}/vite/vite-frameworks.png +0 -0
  170. /package/src/{vitepress/assets → assets}/vite/vite-ssr-support.png +0 -0
  171. /package/src/{vitepress/assets → assets}/vite/vite-typed-api.svg +0 -0
  172. /package/src/{vitepress/assets → assets}/viteplus/logo.svg +0 -0
  173. /package/src/{vitepress/assets → assets}/vitest/animations/640_x_300_esm.riv +0 -0
  174. /package/src/{vitepress/assets → assets}/vitest/animations/640_x_560_vitest_masthead.riv +0 -0
  175. /package/src/{vitepress/assets → assets}/vitest/animations/650_x_300_vite_powered.riv +0 -0
  176. /package/src/{vitepress/assets → assets}/vitest/footer-background.jpg +0 -0
  177. /package/src/{vitepress/assets → assets}/vitest/hero-background.jpg +0 -0
  178. /package/src/{vitepress/assets → assets}/vitest/hero-terminal.svg +0 -0
  179. /package/src/{vitepress/assets → assets}/vitest/primary-button-background.jpg +0 -0
  180. /package/src/{vitepress/assets → assets}/vitest/vitest-jest-compatible.png +0 -0
  181. /package/src/{vitepress/assets → assets}/vitest/vitest-watcher-background.jpg +0 -0
  182. /package/src/{vitepress/assets → assets}/vitest/vitest-watcher.png +0 -0
  183. /package/src/{vitepress/assets → assets}/voidzero/animations/1280_x_552_homepage.riv +0 -0
  184. /package/src/{vitepress/assets → assets}/voidzero/animations/343_x_148_homepage_mobile.riv +0 -0
  185. /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_build_tool_for_web.riv +0 -0
  186. /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_fastest_javascript_bundler.riv +0 -0
  187. /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_language_toolchain.riv +0 -0
  188. /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_next_generation_runner.riv +0 -0
  189. /package/src/{vitepress/assets → assets}/voidzero/animations/about-mobile.riv +0 -0
  190. /package/src/{vitepress/assets → assets}/voidzero/animations/about.riv +0 -0
  191. /package/src/{vitepress/assets → assets}/voidzero/backgrounds/casestudies.jpg +0 -0
  192. /package/src/{vitepress/assets → assets}/voidzero/backgrounds/oxc.jpg +0 -0
  193. /package/src/{vitepress/assets → assets}/voidzero/backgrounds/rolldown.jpg +0 -0
  194. /package/src/{vitepress/assets → assets}/voidzero/backgrounds/vite.jpg +0 -0
  195. /package/src/{vitepress/assets → assets}/voidzero/backgrounds/vitest.jpg +0 -0
  196. /package/src/{vitepress/assets → assets}/voidzero/career-illustration.jpg +0 -0
  197. /package/src/{vitepress/assets → assets}/voidzero/footer-logo.svg +0 -0
  198. /package/src/{vitepress/assets → assets}/voidzero/footer.jpg +0 -0
  199. /package/src/{vitepress/assets → assets}/voidzero/investors/accel.svg +0 -0
  200. /package/src/{vitepress/assets → assets}/voidzero/investors/amplify.svg +0 -0
  201. /package/src/{vitepress/assets → assets}/voidzero/investors/peakxv.png +0 -0
  202. /package/src/{vitepress/assets → assets}/voidzero/investors/resend.svg +0 -0
  203. /package/src/{vitepress/assets → assets}/voidzero/investors/sentry.svg +0 -0
  204. /package/src/{vitepress/assets → assets}/voidzero/investors/sunflower.png +0 -0
  205. /package/src/{vitepress/assets → assets}/voidzero/logo-light.svg +0 -0
  206. /package/src/{vitepress/assets → assets}/voidzero/logo.svg +0 -0
  207. /package/src/{vitepress/assets → assets}/voidzero/signature.svg +0 -0
  208. /package/src/{vitepress/assets → assets}/voidzero/terminals/rolldown.svg +0 -0
  209. /package/src/{vitepress/assets → assets}/voidzero/terminals/vite.svg +0 -0
  210. /package/src/{vitepress/assets → assets}/voidzero/terminals/vitest.svg +0 -0
  211. /package/src/{vitepress/assets → assets}/voidzero/vite-plus-chip.png +0 -0
  212. /package/src/{vitepress/components → components}/oss/CTAShaderBackground.vue +0 -0
  213. /package/src/{vitepress/components → components}/oss/HeadingSection.vue +0 -0
  214. /package/src/{vitepress/components → components}/oxc/FeatureLinter.vue +0 -0
  215. /package/src/{vitepress/components → components}/oxc/FeatureMinifierFormatter.vue +0 -0
  216. /package/src/{vitepress/components → components}/oxc/FeatureParser.vue +0 -0
  217. /package/src/{vitepress/components → components}/oxc/FeatureResolver.vue +0 -0
  218. /package/src/{vitepress/components → components}/oxc/FeatureToolbar.vue +0 -0
  219. /package/src/{vitepress/components → components}/oxc/FeatureTransformer.vue +0 -0
  220. /package/src/{vitepress/components → components}/oxc/Hero.vue +0 -0
  221. /package/src/{vitepress/components → components}/rolldown/FeatureGrid.vue +0 -0
  222. /package/src/{vitepress/components → components}/rolldown/Hero.vue +0 -0
  223. /package/src/{vitepress/components → components}/shared/CodeGroup.vue +0 -0
  224. /package/src/{vitepress/components → components}/shared/Eyebrow.vue +0 -0
  225. /package/src/{vitepress/components → components}/shared/LogoGrid.vue +0 -0
  226. /package/src/{vitepress/components → components}/shared/NewsletterForm.vue +0 -0
  227. /package/src/{vitepress/components → components}/shared/PerformanceBar.vue +0 -0
  228. /package/src/{vitepress/components → components}/shared/RiveAnimation.vue +0 -0
  229. /package/src/{vitepress/components → components}/shared/ShaderBackground.vue +0 -0
  230. /package/src/{vitepress/components → components}/shared/Spacer.vue +0 -0
  231. /package/src/{vitepress/components → components}/shared/Terminal.vue +0 -0
  232. /package/src/{vitepress/components → components}/shared/icons/VZIconBluesky.vue +0 -0
  233. /package/src/{vitepress/components → components}/shared/icons/VZIconGitHub.vue +0 -0
  234. /package/src/{vitepress/components → components}/shared/icons/VZIconLogo.vue +0 -0
  235. /package/src/{vitepress/components → components}/shared/icons/VZIconTwitter.vue +0 -0
  236. /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation1.vue +0 -0
  237. /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation2.vue +0 -0
  238. /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation3.vue +0 -0
  239. /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation4.vue +0 -0
  240. /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation5.vue +0 -0
  241. /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation6.vue +0 -0
  242. /package/src/{vitepress/components → components}/vite/Frameworks.vue +0 -0
  243. /package/src/{vitepress/components → components}/viteplus/Header.vue +0 -0
  244. /package/src/{vitepress/components → components}/vitepress-default/Layout.vue +0 -0
  245. /package/src/{vitepress/components → components}/vitepress-default/NotFound.vue +0 -0
  246. /package/src/{vitepress/components → components}/vitepress-default/VPAlgoliaSearchBox.vue +0 -0
  247. /package/src/{vitepress/components → components}/vitepress-default/VPBackdrop.vue +0 -0
  248. /package/src/{vitepress/components → components}/vitepress-default/VPBadge.vue +0 -0
  249. /package/src/{vitepress/components → components}/vitepress-default/VPButton.vue +0 -0
  250. /package/src/{vitepress/components → components}/vitepress-default/VPCarbonAds.vue +0 -0
  251. /package/src/{vitepress/components → components}/vitepress-default/VPContent.vue +0 -0
  252. /package/src/{vitepress/components → components}/vitepress-default/VPDoc.vue +0 -0
  253. /package/src/{vitepress/components → components}/vitepress-default/VPDocAside.vue +0 -0
  254. /package/src/{vitepress/components → components}/vitepress-default/VPDocAsideCarbonAds.vue +0 -0
  255. /package/src/{vitepress/components → components}/vitepress-default/VPDocAsideOutline.vue +0 -0
  256. /package/src/{vitepress/components → components}/vitepress-default/VPDocAsideSponsors.vue +0 -0
  257. /package/src/{vitepress/components → components}/vitepress-default/VPDocFooter.vue +0 -0
  258. /package/src/{vitepress/components → components}/vitepress-default/VPDocFooterLastUpdated.vue +0 -0
  259. /package/src/{vitepress/components → components}/vitepress-default/VPFeature.vue +0 -0
  260. /package/src/{vitepress/components → components}/vitepress-default/VPFeatures.vue +0 -0
  261. /package/src/{vitepress/components → components}/vitepress-default/VPFooter.vue +0 -0
  262. /package/src/{vitepress/components → components}/vitepress-default/VPHero.vue +0 -0
  263. /package/src/{vitepress/components → components}/vitepress-default/VPHome.vue +0 -0
  264. /package/src/{vitepress/components → components}/vitepress-default/VPHomeContent.vue +0 -0
  265. /package/src/{vitepress/components → components}/vitepress-default/VPHomeFeatures.vue +0 -0
  266. /package/src/{vitepress/components → components}/vitepress-default/VPHomeHero.vue +0 -0
  267. /package/src/{vitepress/components → components}/vitepress-default/VPHomeSponsors.vue +0 -0
  268. /package/src/{vitepress/components → components}/vitepress-default/VPImage.vue +0 -0
  269. /package/src/{vitepress/components → components}/vitepress-default/VPLink.vue +0 -0
  270. /package/src/{vitepress/components → components}/vitepress-default/VPLocalNav.vue +0 -0
  271. /package/src/{vitepress/components → components}/vitepress-default/VPLocalNavOutlineDropdown.vue +0 -0
  272. /package/src/{vitepress/components → components}/vitepress-default/VPLocalSearchBox.vue +0 -0
  273. /package/src/{vitepress/components → components}/vitepress-default/VPMenu.vue +0 -0
  274. /package/src/{vitepress/components → components}/vitepress-default/VPMenuGroup.vue +0 -0
  275. /package/src/{vitepress/components → components}/vitepress-default/VPNav.vue +0 -0
  276. /package/src/{vitepress/components → components}/vitepress-default/VPNavBar.vue +0 -0
  277. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarAppearance.vue +0 -0
  278. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarExtra.vue +0 -0
  279. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarHamburger.vue +0 -0
  280. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarMenu.vue +0 -0
  281. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarMenuGroup.vue +0 -0
  282. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarSearch.vue +0 -0
  283. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarSearchButton.vue +0 -0
  284. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarSocialLinks.vue +0 -0
  285. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarTitle.vue +0 -0
  286. /package/src/{vitepress/components → components}/vitepress-default/VPNavBarTranslations.vue +0 -0
  287. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreen.vue +0 -0
  288. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenAppearance.vue +0 -0
  289. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenu.vue +0 -0
  290. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuGroup.vue +0 -0
  291. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuGroupLink.vue +0 -0
  292. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuGroupSection.vue +0 -0
  293. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuLink.vue +0 -0
  294. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenSocialLinks.vue +0 -0
  295. /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenTranslations.vue +0 -0
  296. /package/src/{vitepress/components → components}/vitepress-default/VPPage.vue +0 -0
  297. /package/src/{vitepress/components → components}/vitepress-default/VPSearchError.vue +0 -0
  298. /package/src/{vitepress/components → components}/vitepress-default/VPSidebar.vue +0 -0
  299. /package/src/{vitepress/components → components}/vitepress-default/VPSidebarGroup.vue +0 -0
  300. /package/src/{vitepress/components → components}/vitepress-default/VPSkipLink.vue +0 -0
  301. /package/src/{vitepress/components → components}/vitepress-default/VPSocialLinks.vue +0 -0
  302. /package/src/{vitepress/components → components}/vitepress-default/VPSponsors.vue +0 -0
  303. /package/src/{vitepress/components → components}/vitepress-default/VPSponsorsGrid.vue +0 -0
  304. /package/src/{vitepress/components → components}/vitepress-default/VPSwitch.vue +0 -0
  305. /package/src/{vitepress/components → components}/vitepress-default/VPSwitchAppearance.vue +0 -0
  306. /package/src/{vitepress/components → components}/vitepress-default/VPTeamMembers.vue +0 -0
  307. /package/src/{vitepress/components → components}/vitepress-default/VPTeamMembersItem.vue +0 -0
  308. /package/src/{vitepress/components → components}/vitepress-default/VPTeamPage.vue +0 -0
  309. /package/src/{vitepress/components → components}/vitepress-default/VPTeamPageSection.vue +0 -0
  310. /package/src/{vitepress/components → components}/vitepress-default/VPTeamPageTitle.vue +0 -0
  311. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconAlignJustify.vue +0 -0
  312. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconAlignLeft.vue +0 -0
  313. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconAlignRight.vue +0 -0
  314. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconArrowLeft.vue +0 -0
  315. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconArrowRight.vue +0 -0
  316. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronDown.vue +0 -0
  317. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronLeft.vue +0 -0
  318. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronRight.vue +0 -0
  319. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronUp.vue +0 -0
  320. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconEdit.vue +0 -0
  321. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconHeart.vue +0 -0
  322. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconLanguages.vue +0 -0
  323. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMinus.vue +0 -0
  324. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMinusSquare.vue +0 -0
  325. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMoon.vue +0 -0
  326. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMoreHorizontal.vue +0 -0
  327. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconPlus.vue +0 -0
  328. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconPlusSquare.vue +0 -0
  329. /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconSun.vue +0 -0
  330. /package/src/{vitepress/components → components}/vitest/FeatureGrid.vue +0 -0
  331. /package/src/{vitepress/components → components}/vitest/Hero.vue +0 -0
  332. /package/src/{vitepress/components → components}/vitest/Intro.vue +0 -0
  333. /package/src/{vitepress/composables → composables}/vitepress-default/aside.ts +0 -0
  334. /package/src/{vitepress/composables → composables}/vitepress-default/data.ts +0 -0
  335. /package/src/{vitepress/composables → composables}/vitepress-default/edit-link.ts +0 -0
  336. /package/src/{vitepress/composables → composables}/vitepress-default/flyout.ts +0 -0
  337. /package/src/{vitepress/composables → composables}/vitepress-default/langs.ts +0 -0
  338. /package/src/{vitepress/composables → composables}/vitepress-default/layout.ts +0 -0
  339. /package/src/{vitepress/composables → composables}/vitepress-default/nav.ts +0 -0
  340. /package/src/{vitepress/composables → composables}/vitepress-default/outline.ts +0 -0
  341. /package/src/{vitepress/composables → composables}/vitepress-default/prev-next.ts +0 -0
  342. /package/src/{vitepress/composables → composables}/vitepress-default/sidebar.ts +0 -0
  343. /package/src/{vitepress/composables → composables}/vitepress-default/sponsor-grid.ts +0 -0
  344. /package/src/{vitepress/env.d.ts → env.d.ts} +0 -0
  345. /package/src/{vitepress/fonts → fonts}/APK-Protocol-Medium.woff2 +0 -0
  346. /package/src/{vitepress/fonts → fonts}/KHTekaMono-Medium.woff2 +0 -0
  347. /package/src/{vitepress/fonts → fonts}/KHTekaMono-Regular.woff2 +0 -0
  348. /package/src/{vitepress/styles → styles}/base.css +0 -0
  349. /package/src/{vitepress/styles → styles}/docs.css +0 -0
  350. /package/src/{vitepress/styles → styles}/index.css +0 -0
  351. /package/src/{vitepress/styles → styles}/marketing.css +0 -0
  352. /package/src/{vitepress/styles → styles}/vitepress-default/base-scoped.css +0 -0
  353. /package/src/{vitepress/styles → styles}/vitepress-default/base.css +0 -0
  354. /package/src/{vitepress/styles → styles}/vitepress-default/components/custom-block.css +0 -0
  355. /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-code-group.css +0 -0
  356. /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-code.css +0 -0
  357. /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-doc.css +0 -0
  358. /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-sponsor.css +0 -0
  359. /package/src/{vitepress/styles → styles}/vitepress-default/fonts.css +0 -0
  360. /package/src/{vitepress/styles → styles}/vitepress-default/icons.css +0 -0
  361. /package/src/{vitepress/styles → styles}/vitepress-default/index-scoped.css +0 -0
  362. /package/src/{vitepress/styles → styles}/vitepress-default/index.css +0 -0
  363. /package/src/{vitepress/styles → styles}/vitepress-default/utils.css +0 -0
  364. /package/src/{vitepress/support → support}/vitepress-default/app-utils.ts +0 -0
  365. /package/src/{vitepress/support → support}/vitepress-default/docsearch-loader.ts +0 -0
  366. /package/src/{vitepress/support → support}/vitepress-default/lru.ts +0 -0
  367. /package/src/{vitepress/support → support}/vitepress-default/search-config.ts +0 -0
  368. /package/src/{vitepress/support → support}/vitepress-default/shared-utils.ts +0 -0
  369. /package/src/{vitepress/support → support}/vitepress-default/sidebar.ts +0 -0
  370. /package/src/{vitepress/support → support}/vitepress-default/translation.ts +0 -0
  371. /package/src/{vitepress/support → support}/vitepress-default/utils.ts +0 -0
  372. /package/src/{vitepress/types → types}/docsearch.d.ts +0 -0
  373. /package/src/{vitepress/types → types}/local-search.d.ts +0 -0
@@ -1,419 +0,0 @@
1
- <script setup lang="ts">
2
- import { ref, onMounted, onUnmounted, watch } from "vue";
3
- import GitHubStats from "./GitHubStats.vue";
4
- import RiveAnimation from "@components/shared/RiveAnimation.vue";
5
-
6
- // Import project icons
7
- import viteIcon from "@assets/icons/vite-light.svg";
8
- import vitestIcon from "@assets/icons/vitest-light.svg";
9
- import rolldownIcon from "@assets/icons/rolldown-light.svg";
10
- import oxcIcon from "@assets/icons/oxc-light.svg";
11
-
12
- // Import terminal SVGs
13
- import viteTerminal from "@assets/voidzero/terminals/vite.svg";
14
- import vitestTerminal from "@assets/voidzero/terminals/vitest.svg";
15
- import rolldownTerminal from "@assets/voidzero/terminals/rolldown.svg";
16
-
17
- // Import Rive animations
18
- import viteAnimation from "@assets/voidzero/animations/480_x_480_build_tool_for_web.riv";
19
- import vitestAnimation from "@assets/voidzero/animations/480_x_480_next_generation_runner.riv";
20
- import rolldownAnimation from "@assets/voidzero/animations/480_x_480_fastest_javascript_bundler.riv";
21
- import oxcAnimation from "@assets/voidzero/animations/480_x_480_language_toolchain.riv";
22
-
23
- const activeProject = ref(0);
24
- const activatedProjects = ref<Set<number>>(new Set([0])); // Track projects that have been activated
25
- const cardRefs = ref<HTMLElement[]>([]);
26
- let observer: IntersectionObserver | null = null;
27
-
28
- // Once a project becomes active, add it to the set (animations only play in, never out)
29
- watch(activeProject, (newIndex) => {
30
- activatedProjects.value.add(newIndex);
31
- });
32
-
33
- const projects = [
34
- {
35
- id: "vite",
36
- name: "Vite",
37
- url: "https://vite.dev",
38
- icon: viteIcon,
39
- terminal: viteTerminal,
40
- animation: viteAnimation,
41
- },
42
- {
43
- id: "vitest",
44
- name: "Vitest",
45
- url: "https://vitest.dev",
46
- icon: vitestIcon,
47
- terminal: vitestTerminal,
48
- animation: vitestAnimation,
49
- },
50
- {
51
- id: "rolldown",
52
- name: "Rolldown",
53
- url: "https://rolldown.rs",
54
- icon: rolldownIcon,
55
- terminal: rolldownTerminal,
56
- animation: rolldownAnimation,
57
- },
58
- {
59
- id: "oxc",
60
- name: "Oxc",
61
- url: "https://oxc.rs",
62
- icon: oxcIcon,
63
- terminal: null, // Oxc uses Rive animation instead
64
- animation: oxcAnimation,
65
- },
66
- ];
67
-
68
- const scrollToProject = (index: number) => {
69
- const card = cardRefs.value[index];
70
- if (card) {
71
- card.scrollIntoView({ behavior: "smooth", block: "center" });
72
- }
73
- };
74
-
75
- onMounted(() => {
76
- observer = new IntersectionObserver(
77
- () => {
78
- // Calculate which card's center is closest to viewport center
79
- const viewportCenter = window.innerHeight / 2;
80
- let closestIndex = 0;
81
- let closestDistance = Infinity;
82
-
83
- cardRefs.value.forEach((card, index) => {
84
- if (!card) return;
85
- const rect = card.getBoundingClientRect();
86
-
87
- // Skip if card is completely out of viewport
88
- if (rect.bottom < 0 || rect.top > window.innerHeight) return;
89
-
90
- // Calculate card's center position relative to viewport
91
- const cardCenter = rect.top + rect.height / 2;
92
-
93
- // Calculate absolute distance to viewport center
94
- const distance = Math.abs(cardCenter - viewportCenter);
95
-
96
- // Track the closest card
97
- if (distance < closestDistance) {
98
- closestDistance = distance;
99
- closestIndex = index;
100
- }
101
- });
102
-
103
- activeProject.value = closestIndex;
104
- },
105
- { threshold: [0, 0.1, 0.5, 1] }
106
- );
107
-
108
- cardRefs.value.forEach((card) => {
109
- if (card) observer?.observe(card);
110
- });
111
- });
112
-
113
- onUnmounted(() => {
114
- observer?.disconnect();
115
- });
116
- </script>
117
-
118
- <template>
119
- <section class="wrapper wrapper--ticks border-t flex">
120
- <div class="w-72 p-10 sticky top-0 self-start hidden md:flex flex-col">
121
- <ul class="flex flex-col gap-4">
122
- <li
123
- v-for="(project, index) in projects"
124
- :key="project.id"
125
- :class="[
126
- 'transition-all duration-500 ease-out',
127
- activeProject === index ? '' : 'opacity-40 grayscale',
128
- ]"
129
- >
130
- <button
131
- type="button"
132
- class="flex gap-4 text-base cursor-pointer bg-transparent border-none p-0"
133
- @click="scrollToProject(index)"
134
- >
135
- <img :src="project.icon" :alt="project.name" class="size-6" />
136
- {{ project.name }}
137
- </button>
138
- </li>
139
- </ul>
140
- </div>
141
- <div class="w-full md:border-l border-nickel">
142
- <!-- Vite -->
143
- <div
144
- class="grid md:grid-cols-2 w-full"
145
- :ref="el => cardRefs[0] = el as HTMLElement"
146
- data-project="0"
147
- >
148
- <div class="flex flex-col p-10 justify-between gap-20">
149
- <div class="flex flex-col gap-5 max-w-[20rem]">
150
- <span class="text-grey text-xs font-mono uppercase tracking-wide"
151
- >Vite</span
152
- >
153
- <h4 class="text-white text-pretty">The build tool for the web</h4>
154
- <p class="text-white/70 text-base max-w-[25rem] text-pretty">
155
- Vite is the default choice for single-page web applications and
156
- the foundation for fullstack frameworks like TanStack Start, Nuxt,
157
- SvelteKit and more.
158
- </p>
159
- <a
160
- :href="projects[0].url"
161
- target="_blank"
162
- rel="noopener noreferrer"
163
- class="button button--sm inline-block w-fit mt-5"
164
- >Explore Vite</a
165
- >
166
- </div>
167
- <GitHubStats
168
- href="https://github.com/vitejs/vite"
169
- stars="75.0k"
170
- contributors="1,161"
171
- />
172
- </div>
173
- <div class="flex flex-col min-h-[22rem] sm:min-h-[30rem]">
174
- <div
175
- class="relative pl-10 h-full flex flex-col justify-center overflow-clip"
176
- >
177
- <div
178
- :class="[
179
- 'absolute inset-0 bg-vite transition-opacity duration-700 ease-out',
180
- activatedProjects.has(0) ? 'opacity-100' : 'opacity-0',
181
- ]"
182
- ></div>
183
- <div
184
- :class="[
185
- 'block p-2 relative bg-slate rounded-tl rounded-bl outline-1 outline-offset-[2px] outline-white/20 transition-transform duration-700 ease-out z-10',
186
- activatedProjects.has(0) ? 'translate-x-0' : 'translate-x-10',
187
- ]"
188
- >
189
- <img
190
- v-if="projects[0].terminal"
191
- loading="lazy"
192
- :src="projects[0].terminal"
193
- alt="terminal"
194
- />
195
- </div>
196
- </div>
197
- </div>
198
- </div>
199
- <!-- Vitest -->
200
- <div
201
- class="grid md:grid-cols-2 w-full border-t border-nickel"
202
- :ref="el => cardRefs[1] = el as HTMLElement"
203
- data-project="1"
204
- >
205
- <div class="flex flex-col p-10 justify-between gap-20">
206
- <div class="flex flex-col gap-5 max-w-[20rem]">
207
- <span class="text-grey text-xs font-mono uppercase tracking-wide"
208
- >Vitest</span
209
- >
210
- <h4 class="text-white text-pretty">The Vite-native test runner</h4>
211
- <p class="text-white/70 text-base max-w-[25rem] text-pretty">
212
- Vitest is a feature-rich test runner that understands your Vite
213
- config, is Jest-compatible, and works out-of-the-box with
214
- TypeScript & ESM.
215
- </p>
216
- <a
217
- :href="projects[1].url"
218
- target="_blank"
219
- rel="noopener noreferrer"
220
- class="button button--sm inline-block w-fit mt-5"
221
- >Explore Vitest</a
222
- >
223
- </div>
224
- <GitHubStats
225
- href="https://github.com/vitest-dev/vitest"
226
- stars="14.9k"
227
- contributors="631"
228
- />
229
- </div>
230
- <div class="flex flex-col min-h-[22rem] sm:min-h-[30rem]">
231
- <div
232
- class="relative pl-10 h-full flex flex-col justify-end overflow-clip pt-10 sm:pt-0"
233
- >
234
- <div
235
- :class="[
236
- 'absolute inset-0 bg-vitest transition-opacity duration-700 ease-out',
237
- activatedProjects.has(1) ? 'opacity-100' : 'opacity-0',
238
- ]"
239
- ></div>
240
- <div
241
- :class="[
242
- 'block p-2 relative bg-slate rounded-tl outline-1 outline-offset-[2px] outline-white/20 transition-transform duration-700 ease-out z-10',
243
- activatedProjects.has(1) ? 'translate-x-0' : 'translate-x-10',
244
- ]"
245
- >
246
- <img
247
- v-if="projects[1].terminal"
248
- loading="lazy"
249
- :src="projects[1].terminal"
250
- alt="terminal"
251
- />
252
- </div>
253
- </div>
254
- </div>
255
- </div>
256
- <!-- Rolldown -->
257
- <div
258
- class="grid md:grid-cols-2 w-full border-t border-nickel"
259
- :ref="el => cardRefs[2] = el as HTMLElement"
260
- data-project="2"
261
- >
262
- <div class="flex flex-col p-10 justify-between gap-20">
263
- <div class="flex flex-col gap-5 max-w-[20rem]">
264
- <span class="text-grey text-xs font-mono uppercase tracking-wide"
265
- >Rolldown</span
266
- >
267
- <h4 class="text-white text-pretty">
268
- The blazing fast JavaScript bundler
269
- </h4>
270
- <p class="text-white/70 text-base max-w-[25rem] text-pretty">
271
- Rolldown is a Rust-based bundler with Rollup-compatible API, and
272
- esbuild-equivalent performance & feature set. It also powers Vite
273
- version 8 and above.
274
- </p>
275
- <a
276
- :href="projects[2].url"
277
- target="_blank"
278
- rel="noopener noreferrer"
279
- class="button button--sm inline-block w-fit mt-5"
280
- >Explore Rolldown</a
281
- >
282
- </div>
283
- <GitHubStats
284
- href="https://github.com/rolldown/rolldown"
285
- stars="12.2k"
286
- contributors="148"
287
- />
288
- </div>
289
- <div class="flex flex-col min-h-[22rem] sm:min-h-[30rem]">
290
- <div
291
- class="relative pl-10 h-full flex flex-col justify-center overflow-clip py-10 sm:py-0"
292
- >
293
- <div
294
- :class="[
295
- 'absolute inset-0 bg-rolldown transition-opacity duration-700 ease-out',
296
- activatedProjects.has(2) ? 'opacity-100' : 'opacity-0',
297
- ]"
298
- ></div>
299
- <div
300
- :class="[
301
- 'block p-2 relative bg-slate rounded-tl rounded-bl outline-1 outline-offset-[2px] outline-white/20 transition-transform duration-700 ease-out z-10',
302
- activatedProjects.has(2) ? 'translate-x-0' : 'translate-x-10',
303
- ]"
304
- >
305
- <img
306
- v-if="projects[2].terminal"
307
- loading="lazy"
308
- :src="projects[2].terminal"
309
- alt="terminal"
310
- />
311
- </div>
312
- </div>
313
- </div>
314
- </div>
315
- <!-- Oxc -->
316
- <div
317
- class="grid md:grid-cols-2 w-full border-t border-nickel"
318
- :ref="el => cardRefs[3] = el as HTMLElement"
319
- data-project="3"
320
- >
321
- <div class="flex flex-col p-10 justify-between gap-20">
322
- <div class="flex flex-col gap-5 max-w-[20rem]">
323
- <span class="text-grey text-xs font-mono uppercase tracking-wide"
324
- >Oxc</span
325
- >
326
- <h4 class="text-white text-pretty">
327
- The fastest JavaScript language toolchain
328
- </h4>
329
- <p class="text-white/70 text-base max-w-[25rem] text-pretty">
330
- Oxc is the foundation of our unified toolchain. It includes linter
331
- (oxlint), formatter (oxfmt), parser, resolver, transformer, and
332
- minifier, all with state-of-the-art performance.
333
- </p>
334
- <a
335
- :href="projects[3].url"
336
- target="_blank"
337
- rel="noopener noreferrer"
338
- class="button button--sm inline-block w-fit mt-5"
339
- >Explore Oxc</a
340
- >
341
- </div>
342
- <GitHubStats
343
- href="https://github.com/oxc-project/oxc"
344
- stars="17.2k"
345
- contributors="268"
346
- />
347
- </div>
348
- <div class="flex flex-col min-h-[22rem] sm:min-h-[30rem]">
349
- <div
350
- class="relative pl-10 h-full flex flex-col justify-center overflow-clip"
351
- >
352
- <div
353
- :class="[
354
- 'absolute inset-0 bg-oxc transition-opacity duration-700 ease-out',
355
- activatedProjects.has(3) ? 'opacity-100' : 'opacity-0',
356
- ]"
357
- ></div>
358
- <div
359
- :class="[
360
- 'relative transition-transform duration-700 ease-out z-10',
361
- activatedProjects.has(3) ? 'translate-x-0' : 'translate-x-10',
362
- ]"
363
- >
364
- <RiveAnimation
365
- :desktop-src="projects[3].animation"
366
- :mobile-src="projects[3].animation"
367
- :desktop-width="480"
368
- :desktop-height="480"
369
- :mobile-width="480"
370
- :mobile-height="480"
371
- canvas-class="w-full"
372
- />
373
- </div>
374
- </div>
375
- </div>
376
- </div>
377
- </div>
378
- </section>
379
- </template>
380
-
381
- <style scoped>
382
- .bg-vite {
383
- background-image: url("@assets/voidzero/backgrounds/vite.jpg");
384
- background-size: cover;
385
- background-position: center;
386
- }
387
-
388
- .bg-vitest {
389
- background-image: url("@assets/voidzero/backgrounds/vitest.jpg");
390
- background-size: cover;
391
- background-position: center;
392
- }
393
-
394
- .bg-rolldown {
395
- background-image: url("@assets/voidzero/backgrounds/rolldown.jpg");
396
- background-size: cover;
397
- background-position: center;
398
- }
399
-
400
- .bg-oxc {
401
- background-image: url("@assets/voidzero/backgrounds/oxc.jpg");
402
- background-size: cover;
403
- background-position: center;
404
- }
405
-
406
- /* Respect user's motion preferences */
407
- @media (prefers-reduced-motion: reduce) {
408
- * {
409
- animation-duration: 0.01ms !important;
410
- animation-iteration-count: 1 !important;
411
- transition-duration: 0.01ms !important;
412
- }
413
- }
414
-
415
- /* Ensure smooth scrolling behavior */
416
- html {
417
- scroll-behavior: smooth;
418
- }
419
- </style>
@@ -1,144 +0,0 @@
1
- <script setup lang="ts">
2
- import 'vue3-carousel/carousel.css'
3
- import {Carousel, Slide, Pagination} from 'vue3-carousel'
4
-
5
- type BaseAuthor = {
6
- name: string
7
- }
8
- type GravatarAuthor = {
9
- type: 'gravatar',
10
- gravatar: string
11
- }
12
- type GitHubAuthor = {
13
- type: 'github',
14
- username: string
15
- }
16
-
17
- export type Author = BaseAuthor & (GravatarAuthor | GitHubAuthor)
18
-
19
- export interface Post {
20
- title: string
21
- url: string
22
- category: string
23
- cover: string
24
- authors: Author[]
25
- date: {
26
- time: number
27
- string: string
28
- }
29
- excerpt: string | undefined
30
- }
31
-
32
- interface Props {
33
- posts?: Post[]
34
- }
35
-
36
- withDefaults(defineProps<Props>(), {
37
- posts: () => []
38
- })
39
-
40
- const carouselConfig = {
41
- itemsToShow: 'auto',
42
- wrapAround: true,
43
- snapAlign: 'start',
44
- autoplay: 3000,
45
- transition: 500,
46
- mouseDrag: true,
47
- touchDrag: true
48
- }
49
- </script>
50
-
51
- <template>
52
- <section
53
- class="wrapper border-t wrapper--ticks grid grid-cols-1 md:grid-cols-10 divide-x-0 md:divide-x divide-stroke h-auto md:h-[32.5rem]">
54
- <div class="flex flex-col divide-y divide-stroke md:col-span-4">
55
- <div class="p-5 md:p-10 grow-0 md:grow flex flex-col gap-6 md:gap-10 md:h-72 justify-center md:justify-start">
56
- <h3 class="text-pretty">Featured resources &amp; updates</h3>
57
- <a href="/blog" class="button w-fit">All Resources</a>
58
- </div>
59
- <div class="px-6 py-6 md:px-10 pt-16 md:pb-8 flex flex-col gap-4 relative">
60
- <span class="bg-[#F4F3EC]/40 text-primary text-xs absolute top-3 left-3 p-2 rounded font-mono">js</span>
61
- <div class="flex flex-col gap-0">
62
- <div class="text-grey text-xs font-mono">resources</div>
63
- <div class="text-primary text-xs font-mono">.filter<span class="text-grey">(i => i.collection ===</span> "featured"<span class="text-grey">)</span></div>
64
- <div class="text-primary text-xs font-mono">.filter<span class="text-grey">(i => i.postedBy ===</span> "VoidZero"<span class="text-grey">)</span></div>
65
- <div class="text-primary text-xs font-mono">.filter<span class="text-grey">(i => i.articles.length ===</span> {{posts.length}}<span class="text-grey">)</span></div>
66
- </div>
67
- </div>
68
- </div>
69
- <div class="col-span-1 md:col-span-6 border-t border-stroke md:border-t-0">
70
- <Carousel v-bind="carouselConfig" class="resources-carousel py-10 pb-30 md:pb-10">
71
- <Slide v-for="(post, index) in posts" :key="index">
72
- <a
73
- :href="post.url"
74
- class="bg-white outline-1 outline-stroke my-1 ml-5 md:ml-4 rounded w-[80vw] md:w-[25rem] lg:w-[21rem] aspect-square translate-x-[-1px] flex flex-col overflow-hidden hover:outline-2 transition-all">
75
- <div class="w-full aspect-[2/1] overflow-hidden">
76
- <img
77
- loading="lazy"
78
- :src="post.cover"
79
- :alt="post.title"
80
- class="w-full h-full object-cover">
81
- </div>
82
- <div class="p-5 flex flex-col gap-4">
83
- <span class="text-xs text-grey font-mono uppercase tracking-widest">// {{ post.category }}</span>
84
- <h4 class="text-xl text-primary font-sans text-pretty font-normal">
85
- {{ post.title }}
86
- </h4>
87
- </div>
88
- </a>
89
- </Slide>
90
- <template #addons>
91
- <Pagination />
92
- </template>
93
- </Carousel>
94
- </div>
95
- </section>
96
- </template>
97
-
98
- <style>
99
- .is-dragging {
100
- pointer-events: none;
101
- }
102
-
103
- /* Add left padding to first slide, right padding to last slide - scoped to Resources carousel only */
104
- .resources-carousel .carousel__slide:first-child {
105
- padding-left: 1.25rem;
106
- }
107
-
108
- .resources-carousel .carousel__slide:last-child {
109
- padding-right: 1.25rem;
110
- }
111
-
112
- /* Pagination dots - positioned at bottom left */
113
- .resources-carousel .carousel__pagination {
114
- position: absolute;
115
- bottom: 1rem;
116
- left: 1.25rem;
117
- transform: none;
118
- gap: 0.5rem;
119
- }
120
-
121
- @media (min-width: 768px) {
122
- .resources-carousel .carousel__pagination {
123
- left: 2rem;
124
- }
125
- }
126
-
127
- @media (min-width: 1024px) {
128
- .resources-carousel .carousel__pagination {
129
- bottom: -2.5rem;
130
- }
131
- }
132
-
133
- .resources-carousel .carousel__pagination-button {
134
- width: 0.5rem;
135
- height: 0.5rem;
136
- border-radius: 50%;
137
- background-color: var(--color-stroke);
138
- transition: background-color 0.2s;
139
- }
140
-
141
- .resources-carousel .carousel__pagination-button--active {
142
- background-color: var(--color-primary);
143
- }
144
- </style>