@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
@@ -0,0 +1,111 @@
1
+ <script setup lang="ts">
2
+ import { computed, inject, ref } from 'vue'
3
+ import { useData } from 'vitepress'
4
+ import type { BannerConfig } from '../../types/theme-config'
5
+ import { themeContextKey } from '../../types/theme-context'
6
+
7
+ const { theme, frontmatter } = useData()
8
+
9
+ // Check if we're on a marketing page (non-doc layout) - matches Header.vue logic
10
+ const isMarketingPage = computed(() => {
11
+ const layout = frontmatter.value.layout
12
+ return layout === 'home' || (layout && layout !== 'doc' && layout !== 'page')
13
+ })
14
+
15
+ // Get banner configuration
16
+ const bannerConfig = computed<BannerConfig | undefined>(() => theme.value.banner)
17
+
18
+ // Only show if banner is configured
19
+ const showBanner = computed(() => {
20
+ return bannerConfig.value?.text && bannerConfig.value?.url
21
+ })
22
+
23
+ const { footerBg: backgroundImage, monoIcon, logoAlt } = inject(themeContextKey)!
24
+
25
+ const bannerText = computed(() => bannerConfig.value?.text || '')
26
+ const bannerUrl = computed(() => bannerConfig.value?.url || '#')
27
+
28
+ // Determine link target
29
+ const linkTarget = computed(() => {
30
+ if (bannerConfig.value?.target) {
31
+ return bannerConfig.value.target
32
+ }
33
+ // Default: external URLs open in new tab
34
+ const url = bannerConfig.value?.url || ''
35
+ return url.startsWith('http') ? '_blank' : '_self'
36
+ })
37
+
38
+ // Rel attribute for security
39
+ const linkRel = computed(() => {
40
+ return linkTarget.value === '_blank' ? 'noopener noreferrer' : undefined
41
+ })
42
+
43
+ function dismiss() {
44
+ document.documentElement.classList.add('banner-dismissed')
45
+ localStorage.setItem(`banner-dismissed-${bannerConfig.value?.id || ''}`, 'true')
46
+ }
47
+ </script>
48
+
49
+ <template>
50
+ <div v-if="showBanner"
51
+ :class="isMarketingPage
52
+ ? 'top-banner hidden md:block relative w-full overflow-hidden border-b border-white/10'
53
+ : 'top-banner hidden md:block relative w-full overflow-hidden border-b border-white/10 lg:fixed lg:top-0 lg:left-0 lg:right-0 lg:z-60'"
54
+ data-theme="dark">
55
+ <a :href="bannerUrl" :target="linkTarget" :rel="linkRel"
56
+ class="group block relative w-full no-underline text-white">
57
+ <!-- Background image -->
58
+ <img :src="backgroundImage" alt="" aria-hidden="true"
59
+ class="absolute inset-0 w-full h-full object-cover object-bottom z-0" loading="eager" />
60
+
61
+ <!-- Content overlay -->
62
+ <div class="relative z-10 w-full h-10 flex px-4">
63
+ <div class="flex items-center gap-2 w-full max-w-360 mx-auto px-4">
64
+ <!-- Left: Variant icon -->
65
+ <img :src="monoIcon" :alt="`${logoAlt} icon`" class="w-5 h-5 shrink-0 hidden sm:block" />
66
+
67
+ <!-- Text -->
68
+ <span
69
+ class="text-xs font-medium font-mono leading-snug tracking-wide uppercase whitespace-nowrap overflow-hidden text-ellipsis">
70
+ {{ bannerText }}
71
+ </span>
72
+
73
+ <!-- Arrow icon -->
74
+ <svg class="shrink-0 transition-transform duration-200 group-hover:translate-x-1" width="20" height="20"
75
+ viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
76
+ <rect width="20" height="20" rx="4" fill="#08060D" />
77
+ <rect x="0.5" y="0.5" width="19" height="19" rx="3.5" stroke="white" stroke-opacity="0.15" />
78
+ <path d="M10 6L14 10L10 14" stroke="white" stroke-width="1.2" stroke-linejoin="round" />
79
+ <path d="M14 10L6 10" stroke="white" stroke-width="1.2" stroke-linejoin="round" />
80
+ </svg>
81
+ </div>
82
+ </div>
83
+ </a>
84
+ <!-- Close button -->
85
+ <button @click="dismiss" aria-label="Close navigation menu"
86
+ class="absolute right-2 top-1/2 -translate-y-1/2 z-20 p-2 text-white hover:opacity-70 transition-opacity"
87
+ type="button">
88
+ <svg class="cursor-pointer mt-px" width="20" height="20" xmlns="http://www.w3.org/2000/svg" fill="none"
89
+ viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
90
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
91
+ </svg>
92
+ </button>
93
+ </div>
94
+ </template>
95
+
96
+ <style>
97
+ :root.banner-dismissed .top-banner {
98
+ display: none;
99
+ }
100
+
101
+ /* Set CSS variable for banner height - only on md+ where banner is visible */
102
+ @media (min-width: 768px) {
103
+ .top-banner {
104
+ --vp-banner-height: 40px;
105
+ }
106
+
107
+ :root:has(.top-banner):not(.banner-dismissed) {
108
+ --vp-banner-height: 40px;
109
+ }
110
+ }
111
+ </style>
@@ -3,7 +3,7 @@ import { computed } from 'vue'
3
3
  import LogoGrid from '@components/shared/LogoGrid.vue'
4
4
 
5
5
  // Glob import all client logos
6
- const logoModules = import.meta.glob('@assets/clients/*.svg', {
6
+ const logoModules = import.meta.glob('../../assets/clients/*.svg', {
7
7
  eager: true,
8
8
  import: 'default'
9
9
  })
@@ -92,7 +92,7 @@ const testimonials: Testimonial[] = [
92
92
  <div class="flex gap-8 sm:gap-12 items-start justify-center sm:justify-start sm:pr-20">
93
93
  <!-- GitHub Stars -->
94
94
  <div class="flex flex-col gap-3">
95
- <h2 class="text-white">75.0k</h2>
95
+ <h2 class="text-white">75k+</h2>
96
96
  <p class="text-grey flex items-center gap-2">
97
97
  <img :src="githubIcon" alt="" class="size-6" />
98
98
  Github Stars
@@ -101,7 +101,7 @@ const testimonials: Testimonial[] = [
101
101
 
102
102
  <!-- NPM Downloads -->
103
103
  <div class="flex flex-col gap-3">
104
- <h2 class="text-white">2.3bn+</h2>
104
+ <h2 class="text-white">40m+</h2>
105
105
  <p class="text-grey">Weekly NPM downloads</p>
106
106
  </div>
107
107
  </div>
@@ -189,4 +189,4 @@ const testimonials: Testimonial[] = [
189
189
  animation-duration: 16s;
190
190
  animation-delay: -6s;
191
191
  }
192
- </style>
192
+ </style>
@@ -0,0 +1,63 @@
1
+ <script setup lang="ts">
2
+ import RiveAnimation from "@components/shared/RiveAnimation.vue";
3
+ import viteAnimation from '@assets/vite/animations/563_x_420_rich_features.riv'
4
+ </script>
5
+
6
+ <template>
7
+ <section class="wrapper wrapper--ticks border-t grid lg:grid-cols-2 divide-x divide-y divide-nickel">
8
+ <div class="flex flex-col gap-3 justify-between">
9
+ <div class="p-5 sm:p-10 flex flex-col gap-3">
10
+ <h5 class="text-balance sm:text-pretty text-white">Instant Server Start</h5>
11
+ <p class="sm:max-w-[28rem] text-pretty">On demand source file serving over native ESM, with blazing fast
12
+ dependency pre-bundling.</p>
13
+ </div>
14
+ <div class="card-bg1 p-10 sm:p-15 flex justify-center">
15
+ <img src="@assets/vite/vite-featurepanel-1-terminal.svg" alt="Terminal" inert loading="lazy" />
16
+ </div>
17
+ </div>
18
+
19
+ <div class="flex flex-col gap-3 justify-between border-r-0">
20
+ <div class="p-5 sm:p-10 flex flex-col gap-3">
21
+ <h5 class="text-white">Lightning Fast HMR</h5>
22
+ <p class="max-w-[26rem] text-pretty">Hot Module Replacement (HMR) that delivers updates instantly as you save,
23
+ and stays fast as your app grows.</p>
24
+ </div>
25
+ <div class="relative min-h-100 -mt-15">
26
+ <img src="@assets/vite/vite-featurepanel-2-terminal.png" inert loading="lazy" alt="lightning fast hot module replacement"
27
+ class="absolute bottom-0 right-0 w-full max-w-[560px]">
28
+ </div>
29
+ </div>
30
+
31
+ <div class="p-5 sm:p-10 pb-0 sm:pb-0 flex flex-col gap-3 border-b-0">
32
+ <h5 class="text-white">Rich Features Out of the Box</h5>
33
+ <p class="sm:max-w-[28rem] text-pretty">TypeScript, JSX, CSS, Workers, Web Assembly... and more with just a plugin away.</p>
34
+ <RiveAnimation :desktop-src="viteAnimation" :mobile-src="viteAnimation" :desktop-width="563" :desktop-height="300"
35
+ :mobile-width="563" :mobile-height="420" canvas-class="w-full" />
36
+ </div>
37
+
38
+ <div class="flex flex-col gap-3 justify-between border-r-0 border-b-0">
39
+ <div class="p-5 sm:p-10 flex flex-col gap-3">
40
+ <h5 class="text-white">Optimized Build</h5>
41
+ <p class="max-w-[25rem] text-pretty">Advanced tree-shaking, built-in minification, fine-grained chunking control
42
+ powered by Rolldown.</p>
43
+ </div>
44
+ <div class="card-bg p-10 sm:p-15 flex justify-center">
45
+ <img src="@assets/vite/vite-featurepanel-4-terminal.svg" inert loading="lazy" alt="optimized build">
46
+ </div>
47
+ </div>
48
+ </section>
49
+ </template>
50
+
51
+ <style scoped>
52
+ .card-bg1 {
53
+ background-image: url('@assets/vite/vite-featurepanel-1-background.jpg');
54
+ background-size: cover;
55
+ background-position: center;
56
+ }
57
+
58
+ .card-bg {
59
+ background-image: url('@assets/vite/vite-featurepanel-4-background.jpg');
60
+ background-size: cover;
61
+ background-position: center;
62
+ }
63
+ </style>
@@ -6,29 +6,30 @@ import flexiblePluginAnimation from '@assets/vite/animations/640_x_300_flexible_
6
6
  <template>
7
7
  <section class="wrapper wrapper--ticks border-t grid lg:grid-cols-2 divide-x divide-y divide-nickel">
8
8
  <div class="p-5 sm:p-10 flex flex-col gap-3">
9
- <h5 class="text-balance sm:text-pretty text-white">Flexible plugin system</h5>
10
- <p class="sm:max-w-[28rem] text-pretty">Vite plugins extends Rollup's well-designed plugin interface with a few extra Vite-specific options.</p>
11
- <RiveAnimation
12
- :desktop-src="flexiblePluginAnimation"
13
- :desktop-width="640"
14
- :desktop-height="300"
15
- canvas-class="w-[calc(100%_+_2.5rem)] mt-5 -mx-5"
16
- />
9
+ <h5 class="text-balance sm:text-pretty text-white">Flexible Plugin System</h5>
10
+ <p class="sm:max-w-[28rem] text-pretty">Vite plugins extends Rollup's well-designed plugin interface with a few
11
+ extra Vite-specific options.</p>
12
+ <RiveAnimation :desktop-src="flexiblePluginAnimation" :desktop-width="640" :desktop-height="300"
13
+ canvas-class="w-[calc(100%_+_2.5rem)] mt-5 -mx-5" />
17
14
  </div>
15
+
18
16
  <div class="flex flex-col gap-3 border-r-0 justify-between">
19
17
  <div class="p-5 sm:p-10 flex flex-col gap-3">
20
- <h5 class="text-white">Fully typed API</h5>
18
+ <h5 class="text-white">Fully Typed API</h5>
21
19
  <p class="max-w-[26rem] text-pretty">Designed to be built on top of.</p>
22
20
  </div>
23
21
  <div class="card-bg p-5 sm:p-10 flex justify-center">
24
22
  <img src="@assets/vite/vite-typed-api.svg" inert loading="lazy" alt="typed api">
25
23
  </div>
26
24
  </div>
27
- <div class="p-5 sm:p-10 flex flex-col gap-3">
25
+
26
+ <div class="p-5 sm:p-10 flex flex-col gap-3 border-b-0">
28
27
  <h5 class="text-white">First class SSR Support</h5>
29
- <p class="sm:max-w-[28rem] text-pretty mb-12 sm:mb-16">It's never been easier to setup custom SSR (Server-Side Rendering), or build your own SSR framework.</p>
28
+ <p class="sm:max-w-[28rem] text-pretty mb-12 sm:mb-16">It's never been easier to setup custom SSR (Server-Side
29
+ Rendering), or build your own SSR framework.</p>
30
30
  <img src="@assets/vite/vite-ssr-support.png" alt="SSR Support" loading="lazy" class="w-full px-5">
31
31
  </div>
32
+
32
33
  <div class="flex flex-col gap-3 justify-between">
33
34
  <div class="p-5 sm:p-10 flex flex-col gap-3">
34
35
  <h5 class="text-white">Continuous ecosystem integration</h5>
@@ -16,41 +16,32 @@ const installTabs = [
16
16
  <template>
17
17
  <div class="wrapper wrapper--ticks grid md:grid-cols-2 w-full border-nickel md:divide-x">
18
18
  <div class="flex flex-col p-10 justify-between gap-20 items-center md:items-start">
19
- <div class="flex flex-col gap-5 max-w-[25rem] items-center md:items-start text-center md:text-left">
19
+ <div class="flex flex-col gap-5 items-center md:items-start text-center md:text-left">
20
20
  <div class="flex items-center gap-2">
21
21
  <span class="text-grey text-xs font-mono uppercase tracking-wide">By</span>
22
22
  <img src="../../assets/logos/voidzero-light.svg" alt="VoidZero" class="h-2.5">
23
23
  </div>
24
- <h1 class="text-white text-pretty">The Build Tool for the Web</h1>
25
- <p class="text-white/70 text-lg max-w-[25rem] text-pretty">Vite is a blazing fast frontend build tool powering
24
+ <h1 class="text-white text-pretty max-w-[25rem]">The Build Tool for the Web</h1>
25
+ <p class="text-white/70 md:text-lg max-w-[27rem] text-pretty">Vite is a blazing fast frontend build tool powering
26
26
  the next generation of web applications.</p>
27
27
  <div class="flex items-center gap-5 mt-8">
28
28
  <a href="/guide/" class="button button--primary inline-block w-fit">
29
29
  Get Started
30
30
  </a>
31
- <a href="https://github.com/vitejs/vite" target="_blank" rel="noopener noreferrer" class="button inline-block w-fit">
31
+ <a href="https://github.com/vitejs/vite" target="_blank" rel="noopener noreferrer"
32
+ class="button inline-block w-fit">
32
33
  View on GitHub
33
34
  </a>
34
35
  </div>
35
36
  </div>
36
- <CodeGroup :tabs="installTabs" class="hidden md:block w-full" />
37
+ <CodeGroup :tabs="installTabs" class="hidden md:block w-full"
38
+ style="--vp-code-tab-bg:var(--color-slate);--vp-code-block-bg:var(--color-slate);--vp-code-tab-divider:#000" />
37
39
  </div>
38
40
  <div class="flex flex-col min-h-[22rem] sm:min-h-[30rem]">
39
41
  <div class="relative px-10 h-full flex flex-col justify-center overflow-clip py-10 sm:py-0">
40
- <RiveAnimation
41
- :desktop-src="viteAnimation"
42
- :mobile-src="viteAnimation"
43
- :desktop-width="641"
44
- :desktop-height="629"
45
- :mobile-width="641"
46
- :mobile-height="629"
47
- canvas-class="w-full"
48
- />
42
+ <RiveAnimation :desktop-src="viteAnimation" :mobile-src="viteAnimation" :desktop-width="641"
43
+ :desktop-height="629" :mobile-width="641" :mobile-height="629" canvas-class="w-full" />
49
44
  </div>
50
45
  </div>
51
46
  </div>
52
47
  </template>
53
-
54
- <style scoped>
55
-
56
- </style>
@@ -33,8 +33,8 @@ defineProps<{
33
33
 
34
34
  .outline-link {
35
35
  display: block;
36
- line-height: 32px;
37
- font-size: 15px;
36
+ line-height: 28px;
37
+ font-size: 13px;
38
38
  font-weight: 400;
39
39
  color: var(--vp-c-text-2);
40
40
  white-space: nowrap;
@@ -30,7 +30,7 @@ function onBlur() {
30
30
  >
31
31
  <button
32
32
  type="button"
33
- class="flex items-center px-3 py-2 text-base font-sans text-primary dark:text-white hover:opacity-70 transition-opacity whitespace-nowrap overflow-hidden text-ellipsis"
33
+ class="flex items-center px-3 py-2 text-base font-heading text-primary dark:text-white hover:opacity-70 transition-opacity whitespace-nowrap overflow-hidden text-ellipsis"
34
34
  aria-haspopup="true"
35
35
  :aria-expanded="open"
36
36
  :aria-label="label"
@@ -24,7 +24,7 @@ defineOptions({ inheritAttrs: false })
24
24
  <div class="VPMenuLink">
25
25
  <VPLink
26
26
  v-bind="$attrs"
27
- class="flex items-center justify-between rounded-md px-3 py-2 text-base font-sans text-primary dark:text-white text-left whitespace-nowrap hover:opacity-70 transition-opacity"
27
+ class="flex items-center justify-between rounded-md px-3 py-2 text-sm font-heading text-primary dark:text-white text-left whitespace-nowrap hover:opacity-70 transition-opacity"
28
28
  :href
29
29
  :target="item.target"
30
30
  :rel="item.rel"
@@ -20,7 +20,7 @@ const href = computed(() =>
20
20
 
21
21
  <template>
22
22
  <VPLink
23
- class="flex items-center px-3 py-2 text-base font-sans text-primary dark:text-white hover:opacity-70 transition-opacity whitespace-nowrap overflow-hidden text-ellipsis"
23
+ class="flex items-center px-3 py-2 text-base font-heading text-primary dark:text-white hover:opacity-70 transition-opacity whitespace-nowrap overflow-hidden text-ellipsis"
24
24
  :href
25
25
  :target="item.target"
26
26
  :rel="item.rel"
@@ -146,7 +146,7 @@ function onCaretClick() {
146
146
  flex-grow: 1;
147
147
  padding: 4px 0;
148
148
  line-height: 24px;
149
- font-size: 15px;
149
+ font-size: 14px;
150
150
  transition: color 0.25s;
151
151
  }
152
152
 
@@ -1,7 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import type { DefaultTheme } from 'vitepress/theme'
3
3
  import { computed, nextTick, onMounted, ref, useSSRContext } from 'vue'
4
- import type { SSGContext } from '../../support/vitepress-default/shared-utils'
5
4
 
6
5
  const props = defineProps<{
7
6
  icon: DefaultTheme.SocialLinkIcon
@@ -35,7 +34,7 @@ const svg = computed(() => {
35
34
 
36
35
  if (import.meta.env.SSR) {
37
36
  typeof props.icon === 'string' &&
38
- useSSRContext<SSGContext>()?.vpSocialIcons.add(props.icon)
37
+ useSSRContext()?.vpSocialIcons.add(props.icon)
39
38
  }
40
39
  </script>
41
40
 
package/src/index.ts CHANGED
@@ -1,2 +1,103 @@
1
- export { default } from './vitepress'
2
- export * from './vitepress'
1
+ /**
2
+ * @voidzerodev/vitepress-theme
3
+ *
4
+ * Full fork of VitePress default theme with custom variant system.
5
+ * Supports both traditional VitePress doc layouts and custom variant layouts.
6
+ * Set themeConfig.variant to 'voidzero' or 'viteplus' in your VitePress config.
7
+ *
8
+ * Layouts:
9
+ * - layout: 'doc' | 'home' | 'page' → Uses VitePress default layout
10
+ * - No layout or custom → Uses variant-specific custom layout
11
+ */
12
+
13
+ // NOTE: @docsearch/css is loaded dynamically in VPAlgoliaSearchBox.vue
14
+ // This allows local search users to avoid installing docsearch packages
15
+
16
+ // Unified design system - single import
17
+ // Contains: tokens → base → docs → marketing (in that order)
18
+ import "./styles/index.css";
19
+
20
+ import type { Theme } from "vitepress";
21
+ import { watch } from "vue";
22
+
23
+ // Main layout router
24
+ import VPLayout from "./layouts/VPLayout.vue";
25
+ // VitePress default theme components (forked)
26
+ import VPBadge from "@vp-default/VPBadge.vue";
27
+
28
+ const VoidZeroTheme = {
29
+ Layout: VPLayout, // Smart layout router that switches between VP and custom layouts
30
+ enhanceApp({ app, router, siteData }) {
31
+ const variant = siteData.value.themeConfig?.variant || "voidzero";
32
+ if (typeof document !== "undefined") {
33
+ document.documentElement.setAttribute("data-variant", variant);
34
+
35
+ // Watch for frontmatter.theme changes and apply theme logic
36
+ watch(
37
+ () => router.route.data.frontmatter?.theme,
38
+ (theme) => {
39
+ if (theme) {
40
+ // Forced theme via frontmatter
41
+ document.documentElement.setAttribute("data-theme", theme);
42
+ } else {
43
+ // OSS: Respect user preference, but default to dark if no preference
44
+ document.documentElement.removeAttribute("data-theme");
45
+
46
+ const hasUserPreference = localStorage.getItem(
47
+ "vitepress-theme-appearance"
48
+ );
49
+ if (
50
+ !hasUserPreference &&
51
+ !document.documentElement.classList.contains("dark")
52
+ ) {
53
+ // No user preference - set dark as default for OSS
54
+ document.documentElement.classList.add("dark");
55
+ }
56
+ }
57
+ },
58
+ { immediate: true }
59
+ );
60
+ }
61
+
62
+ // VitePress default theme component (for markdown usage)
63
+ app.component("Badge", VPBadge);
64
+ },
65
+ } satisfies Theme;
66
+
67
+ // VP components (for use in Markdown and custom components)
68
+ export { default as VPBadge } from "@vp-default/VPBadge.vue";
69
+ export { default as VPButton } from "@vp-default/VPButton.vue";
70
+ export { default as VPDocAsideSponsors } from "@vp-default/VPDocAsideSponsors.vue";
71
+ export { default as VPFeatures } from "@vp-default/VPFeatures.vue";
72
+ export { default as VPHomeContent } from "@vp-default/VPHomeContent.vue";
73
+ export { default as VPHomeFeatures } from "@vp-default/VPHomeFeatures.vue";
74
+ export { default as VPHomeHero } from "@vp-default/VPHomeHero.vue";
75
+ export { default as VPHomeSponsors } from "@vp-default/VPHomeSponsors.vue";
76
+ export { default as VPImage } from "@vp-default/VPImage.vue";
77
+ export { default as VPLink } from "@vp-default/VPLink.vue";
78
+ export { default as VPSocialLink } from "@vp-default/VPSocialLink.vue";
79
+ export { default as VPSocialLinks } from "@vp-default/VPSocialLinks.vue";
80
+ export { default as VPSponsors } from "@vp-default/VPSponsors.vue";
81
+ export { default as VPTeamMembers } from "@vp-default/VPTeamMembers.vue";
82
+ export { default as VPTeamPage } from "@vp-default/VPTeamPage.vue";
83
+ export { default as VPTeamPageSection } from "@vp-default/VPTeamPageSection.vue";
84
+ export { default as VPTeamPageTitle } from "@vp-default/VPTeamPageTitle.vue";
85
+
86
+ // Export custom layouts and components
87
+ export { VoidZeroTheme };
88
+ export default VoidZeroTheme;
89
+
90
+ // Export types
91
+ export type { Sponsors } from "./components/vitepress-default/VPSponsors.vue";
92
+ export type {
93
+ BannerConfig,
94
+ FooterConfig,
95
+ FooterColumn,
96
+ FooterLink,
97
+ FooterSocialLink,
98
+ GridSize,
99
+ Sponsor,
100
+ SponsorTier,
101
+ VoidZeroThemeConfig,
102
+ } from "./types/theme-config";
103
+ export { type ThemeContext, themeContextKey } from "./types/theme-context";
@@ -6,9 +6,6 @@ import { useData } from 'vitepress'
6
6
  import VPDefaultLayout from '@vp-default/Layout.vue'
7
7
 
8
8
  // Import custom variant layouts/components
9
- import VoidZeroHeader from '@components/voidzero/Header.vue'
10
- import VoidZeroFooter from '@components/voidzero/Footer.vue'
11
- import VitePlusHeader from '@components/viteplus/Header.vue'
12
9
  import OSSHeader from '@components/oss/Header.vue'
13
10
  import TopBanner from '@components/oss/TopBanner.vue'
14
11
 
@@ -16,7 +13,7 @@ const { frontmatter, site } = useData()
16
13
  const slots = useSlots()
17
14
 
18
15
  // Determine variant from theme config
19
- const variant = computed(() => site.value.themeConfig?.variant || 'voidzero')
16
+ const variant = computed(() => site.value.themeConfig?.variant || 'vite')
20
17
 
21
18
  // Determine which layout to use based on frontmatter.layout
22
19
  // Default behavior (no layout specified) = use VitePress doc layout
@@ -45,21 +42,9 @@ const useVPLayout = computed(() => {
45
42
  </template>
46
43
  </VPDefaultLayout>
47
44
  </div>
48
-
49
- <div v-else-if="variant === 'viteplus'" class="marketing-layout" :data-theme="frontmatter.theme" :data-variant="variant">
50
- <VitePlusHeader />
51
- <Content />
52
- </div>
53
-
54
- <div v-else-if="variant === 'voidzero'" class="marketing-layout" :data-theme="frontmatter.theme" :data-variant="variant">
55
- <VoidZeroHeader />
56
- <Content />
57
- <VoidZeroFooter />
58
- </div>
59
-
60
45
  <div v-else class="marketing-layout" :data-theme="frontmatter.theme" :data-variant="variant">
61
46
  <TopBanner />
62
- <OSSHeader/>
47
+ <OSSHeader />
63
48
  <Content />
64
49
  </div>
65
50
  </template>