@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.
- package/README.md +26 -33
- package/package.json +5 -26
- package/src/assets/clients/clickup.svg +5 -0
- package/src/assets/clients/stripe.svg +3 -0
- package/src/{vitepress/components → components}/oss/Footer.vue +4 -21
- package/src/{vitepress/components → components}/oss/Header.vue +82 -180
- package/src/{vitepress/components → components}/oss/Sponsors.vue +3 -3
- package/src/components/oss/TopBanner.vue +111 -0
- package/src/{vitepress/components → components}/oss/TrustedBy.vue +1 -1
- package/src/{vitepress/components → components}/vite/Community.vue +3 -3
- package/src/components/vite/FeatureGrid1.vue +63 -0
- package/src/{vitepress/components/vite/FeatureGrid.vue → components/vite/FeatureGrid2.vue} +12 -11
- package/src/{vitepress/components → components}/vite/Hero.vue +9 -18
- package/src/{vitepress/components → components}/vitepress-default/VPDocOutlineItem.vue +2 -2
- package/src/{vitepress/components → components}/vitepress-default/VPFlyout.vue +1 -1
- package/src/{vitepress/components → components}/vitepress-default/VPMenuLink.vue +1 -1
- package/src/{vitepress/components → components}/vitepress-default/VPNavBarMenuLink.vue +1 -1
- package/src/{vitepress/components → components}/vitepress-default/VPSidebarItem.vue +1 -1
- package/src/{vitepress/components → components}/vitepress-default/VPSocialLink.vue +1 -2
- package/src/fonts/APK-Protocol-Semi-Bold.woff2 +0 -0
- package/src/fonts/inter-italic-cyrillic-ext.woff2 +0 -0
- package/src/fonts/inter-italic-cyrillic.woff2 +0 -0
- package/src/fonts/inter-italic-greek-ext.woff2 +0 -0
- package/src/fonts/inter-italic-greek.woff2 +0 -0
- package/src/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/src/fonts/inter-italic-latin.woff2 +0 -0
- package/src/fonts/inter-italic-vietnamese.woff2 +0 -0
- package/src/fonts/inter-roman-cyrillic-ext.woff2 +0 -0
- package/src/fonts/inter-roman-cyrillic.woff2 +0 -0
- package/src/fonts/inter-roman-greek-ext.woff2 +0 -0
- package/src/fonts/inter-roman-greek.woff2 +0 -0
- package/src/fonts/inter-roman-latin-ext.woff2 +0 -0
- package/src/fonts/inter-roman-latin.woff2 +0 -0
- package/src/fonts/inter-roman-vietnamese.woff2 +0 -0
- package/src/index.ts +103 -2
- package/src/{vitepress/layouts → layouts}/VPLayout.vue +2 -17
- package/src/styles/tokens.css +321 -0
- package/src/{vitepress/styles → styles}/vitepress-default/vars.css +1 -1
- package/src/{vitepress/types → types}/theme-config.ts +2 -0
- package/src/types/theme-context.ts +33 -0
- package/src/vitepress/assets/clients/beehiiv.svg +0 -30
- package/src/vitepress/assets/clients/excalidraw.svg +0 -82
- package/src/vitepress/assets/clients/get-your-guide.svg +0 -1
- package/src/vitepress/assets/clients/posthog.svg +0 -1
- package/src/vitepress/assets/clients/ramp.svg +0 -1
- package/src/vitepress/assets/clients/shopee.svg +0 -55
- package/src/vitepress/components/oss/TopBanner.vue +0 -150
- package/src/vitepress/components/vite/FeaturePanel1.vue +0 -41
- package/src/vitepress/components/vite/FeaturePanel2.vue +0 -37
- package/src/vitepress/components/vite/FeaturePanel3.vue +0 -43
- package/src/vitepress/components/vite/FeaturePanel4.vue +0 -46
- package/src/vitepress/components/voidzero/Footer.vue +0 -65
- package/src/vitepress/components/voidzero/Header.vue +0 -560
- package/src/vitepress/components/voidzero/Megamenu.vue +0 -190
- package/src/vitepress/components/voidzero/about/CareerCTA.vue +0 -56
- package/src/vitepress/components/voidzero/about/Hero.vue +0 -206
- package/src/vitepress/components/voidzero/about/Investors.vue +0 -112
- package/src/vitepress/components/voidzero/about/TeamGrid.vue +0 -161
- package/src/vitepress/components/voidzero/about/TeamSectionHeading.vue +0 -13
- package/src/vitepress/components/voidzero/blog/BlogArchive.vue +0 -223
- package/src/vitepress/components/voidzero/blog/BlogSingleContent.vue +0 -364
- package/src/vitepress/components/voidzero/blog/BlogSingleHero.vue +0 -113
- package/src/vitepress/components/voidzero/blog/BlogSingleRelated.vue +0 -92
- package/src/vitepress/components/voidzero/blog/FeaturedArticles.vue +0 -146
- package/src/vitepress/components/voidzero/blog/types.ts +0 -56
- package/src/vitepress/components/voidzero/home/CaseStudySlider.vue +0 -235
- package/src/vitepress/components/voidzero/home/CustomersSectionHeading.vue +0 -5
- package/src/vitepress/components/voidzero/home/GitHubStats.vue +0 -27
- package/src/vitepress/components/voidzero/home/Hero.vue +0 -69
- package/src/vitepress/components/voidzero/home/Investors.vue +0 -30
- package/src/vitepress/components/voidzero/home/NewsletterCTA.vue +0 -23
- package/src/vitepress/components/voidzero/home/OpenSourceSectionHeading.vue +0 -6
- package/src/vitepress/components/voidzero/home/OpenSourceSectionProjects.vue +0 -419
- package/src/vitepress/components/voidzero/home/Resources.vue +0 -144
- package/src/vitepress/components/voidzero/home/Statistics.vue +0 -507
- package/src/vitepress/components/voidzero/home/StatisticsSectionHeading.vue +0 -5
- package/src/vitepress/components/voidzero/home/TeamCTA.vue +0 -17
- package/src/vitepress/components/voidzero/home/TrustedBy.vue +0 -248
- package/src/vitepress/components/voidzero/home/VitePlusSectionFeatures.vue +0 -55
- package/src/vitepress/components/voidzero/home/VitePlusSectionHeading.vue +0 -17
- package/src/vitepress/fonts/KHTeka-Medium.woff2 +0 -0
- package/src/vitepress/fonts/KHTeka-Regular.woff2 +0 -0
- package/src/vitepress/index.ts +0 -269
- package/src/vitepress/layouts/OSSProjectLayout.vue +0 -28
- package/src/vitepress/styles/tokens.css +0 -137
- /package/src/{vitepress/assets → assets}/checkmark.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/airbnb.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/bolt.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/cloudflare.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/framer.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/hugging-face.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/linear.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/mercedes.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/openai.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/paramount.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/plaid.svg +0 -0
- /package/src/{vitepress/assets → assets}/clients/shopify.svg +0 -0
- /package/src/{vitepress/assets → assets}/cta-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/icons/oxc-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/oxc-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/oxc-mono.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/rolldown-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/rolldown-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/rolldown-mono.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/vite-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/vite-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/vite-mono.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/viteplus-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/viteplus-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/viteplus-mono.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/vitest-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/vitest-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/icons/vitest-mono.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/oxc-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/oxc-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/rolldown-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/rolldown-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/vite-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/vite-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/viteplus-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/viteplus-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/vitest-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/vitest-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/voidzero-dark.svg +0 -0
- /package/src/{vitepress/assets → assets}/logos/voidzero-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/oxc/animations/560_x_260_minifier.riv +0 -0
- /package/src/{vitepress/assets → assets}/oxc/animations/640_x_630_oxc masthead_.riv +0 -0
- /package/src/{vitepress/assets → assets}/oxc/footer-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/oxc/oxc-feature-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/oxc/oxc-formatter-terminal.png +0 -0
- /package/src/{vitepress/assets → assets}/oxc/oxc-linter-terminal.png +0 -0
- /package/src/{vitepress/assets → assets}/oxc/oxc-resolver-terminal.png +0 -0
- /package/src/{vitepress/assets → assets}/oxc/oxc-transformer-terminal.png +0 -0
- /package/src/{vitepress/assets → assets}/oxc/primary-button-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/primary-button-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/animations/640_x_300_design_for_vite.riv +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/animations/640_x_300_esbuild.riv +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/animations/640_x_520_rolldown_masthead.riv +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/footer-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/hero-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/hero-terminal.svg +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/primary-button-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/rolldown-esbuild-parity.png +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/rolldown-rollup-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/rolldown-rollup.png +0 -0
- /package/src/{vitepress/assets → assets}/rolldown/rolldown-thumbnail.png +0 -0
- /package/src/{vitepress/assets → assets}/social/bluesky-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/bluesky.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/discord-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/discord.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/github-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/github.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/twitter-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/social/twitter.svg +0 -0
- /package/src/{vitepress/assets → assets}/terminal-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vite/animations/563_x_420_rich_features.riv +0 -0
- /package/src/{vitepress/assets → assets}/vite/animations/640_x_300_flexible_plugin.riv +0 -0
- /package/src/{vitepress/assets → assets}/vite/animations/641_x_629_vite_masthead.riv +0 -0
- /package/src/{vitepress/assets → assets}/vite/footer-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vite/primary-button-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-by-voidzero.png +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-ci.svg +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-1-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-1-terminal.svg +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-2-terminal.png +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-4-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-featurepanel-4-terminal.svg +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-frameworks-mobile.png +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-frameworks.png +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-ssr-support.png +0 -0
- /package/src/{vitepress/assets → assets}/vite/vite-typed-api.svg +0 -0
- /package/src/{vitepress/assets → assets}/viteplus/logo.svg +0 -0
- /package/src/{vitepress/assets → assets}/vitest/animations/640_x_300_esm.riv +0 -0
- /package/src/{vitepress/assets → assets}/vitest/animations/640_x_560_vitest_masthead.riv +0 -0
- /package/src/{vitepress/assets → assets}/vitest/animations/650_x_300_vite_powered.riv +0 -0
- /package/src/{vitepress/assets → assets}/vitest/footer-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vitest/hero-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vitest/hero-terminal.svg +0 -0
- /package/src/{vitepress/assets → assets}/vitest/primary-button-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vitest/vitest-jest-compatible.png +0 -0
- /package/src/{vitepress/assets → assets}/vitest/vitest-watcher-background.jpg +0 -0
- /package/src/{vitepress/assets → assets}/vitest/vitest-watcher.png +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/1280_x_552_homepage.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/343_x_148_homepage_mobile.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_build_tool_for_web.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_fastest_javascript_bundler.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_language_toolchain.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/480_x_480_next_generation_runner.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/about-mobile.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/animations/about.riv +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/backgrounds/casestudies.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/backgrounds/oxc.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/backgrounds/rolldown.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/backgrounds/vite.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/backgrounds/vitest.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/career-illustration.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/footer-logo.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/footer.jpg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/investors/accel.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/investors/amplify.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/investors/peakxv.png +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/investors/resend.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/investors/sentry.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/investors/sunflower.png +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/logo-light.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/logo.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/signature.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/terminals/rolldown.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/terminals/vite.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/terminals/vitest.svg +0 -0
- /package/src/{vitepress/assets → assets}/voidzero/vite-plus-chip.png +0 -0
- /package/src/{vitepress/components → components}/oss/CTAShaderBackground.vue +0 -0
- /package/src/{vitepress/components → components}/oss/HeadingSection.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/FeatureLinter.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/FeatureMinifierFormatter.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/FeatureParser.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/FeatureResolver.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/FeatureToolbar.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/FeatureTransformer.vue +0 -0
- /package/src/{vitepress/components → components}/oxc/Hero.vue +0 -0
- /package/src/{vitepress/components → components}/rolldown/FeatureGrid.vue +0 -0
- /package/src/{vitepress/components → components}/rolldown/Hero.vue +0 -0
- /package/src/{vitepress/components → components}/shared/CodeGroup.vue +0 -0
- /package/src/{vitepress/components → components}/shared/Eyebrow.vue +0 -0
- /package/src/{vitepress/components → components}/shared/LogoGrid.vue +0 -0
- /package/src/{vitepress/components → components}/shared/NewsletterForm.vue +0 -0
- /package/src/{vitepress/components → components}/shared/PerformanceBar.vue +0 -0
- /package/src/{vitepress/components → components}/shared/RiveAnimation.vue +0 -0
- /package/src/{vitepress/components → components}/shared/ShaderBackground.vue +0 -0
- /package/src/{vitepress/components → components}/shared/Spacer.vue +0 -0
- /package/src/{vitepress/components → components}/shared/Terminal.vue +0 -0
- /package/src/{vitepress/components → components}/shared/icons/VZIconBluesky.vue +0 -0
- /package/src/{vitepress/components → components}/shared/icons/VZIconGitHub.vue +0 -0
- /package/src/{vitepress/components → components}/shared/icons/VZIconLogo.vue +0 -0
- /package/src/{vitepress/components → components}/shared/icons/VZIconTwitter.vue +0 -0
- /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation1.vue +0 -0
- /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation2.vue +0 -0
- /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation3.vue +0 -0
- /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation4.vue +0 -0
- /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation5.vue +0 -0
- /package/src/{vitepress/components → components}/shared/terminal-animations/TerminalAnimation6.vue +0 -0
- /package/src/{vitepress/components → components}/vite/Frameworks.vue +0 -0
- /package/src/{vitepress/components → components}/viteplus/Header.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/Layout.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/NotFound.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPAlgoliaSearchBox.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPBackdrop.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPBadge.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPButton.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPCarbonAds.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPContent.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDoc.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDocAside.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDocAsideCarbonAds.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDocAsideOutline.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDocAsideSponsors.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDocFooter.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPDocFooterLastUpdated.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPFeature.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPFeatures.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPFooter.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPHero.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPHome.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPHomeContent.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPHomeFeatures.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPHomeHero.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPHomeSponsors.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPImage.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPLink.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPLocalNav.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPLocalNavOutlineDropdown.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPLocalSearchBox.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPMenu.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPMenuGroup.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNav.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBar.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarAppearance.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarExtra.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarHamburger.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarMenu.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarMenuGroup.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarSearch.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarSearchButton.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarSocialLinks.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarTitle.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavBarTranslations.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreen.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenAppearance.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenu.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuGroup.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuGroupLink.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuGroupSection.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenMenuLink.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenSocialLinks.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPNavScreenTranslations.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPPage.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSearchError.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSidebar.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSidebarGroup.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSkipLink.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSocialLinks.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSponsors.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSponsorsGrid.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSwitch.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPSwitchAppearance.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPTeamMembers.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPTeamMembersItem.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPTeamPage.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPTeamPageSection.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/VPTeamPageTitle.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconAlignJustify.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconAlignLeft.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconAlignRight.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconArrowLeft.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconArrowRight.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronDown.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronLeft.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronRight.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconChevronUp.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconEdit.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconHeart.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconLanguages.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMinus.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMinusSquare.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMoon.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconMoreHorizontal.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconPlus.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconPlusSquare.vue +0 -0
- /package/src/{vitepress/components → components}/vitepress-default/icons/VPIconSun.vue +0 -0
- /package/src/{vitepress/components → components}/vitest/FeatureGrid.vue +0 -0
- /package/src/{vitepress/components → components}/vitest/Hero.vue +0 -0
- /package/src/{vitepress/components → components}/vitest/Intro.vue +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/aside.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/data.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/edit-link.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/flyout.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/langs.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/layout.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/nav.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/outline.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/prev-next.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/sidebar.ts +0 -0
- /package/src/{vitepress/composables → composables}/vitepress-default/sponsor-grid.ts +0 -0
- /package/src/{vitepress/env.d.ts → env.d.ts} +0 -0
- /package/src/{vitepress/fonts → fonts}/APK-Protocol-Medium.woff2 +0 -0
- /package/src/{vitepress/fonts → fonts}/KHTekaMono-Medium.woff2 +0 -0
- /package/src/{vitepress/fonts → fonts}/KHTekaMono-Regular.woff2 +0 -0
- /package/src/{vitepress/styles → styles}/base.css +0 -0
- /package/src/{vitepress/styles → styles}/docs.css +0 -0
- /package/src/{vitepress/styles → styles}/index.css +0 -0
- /package/src/{vitepress/styles → styles}/marketing.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/base-scoped.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/base.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/components/custom-block.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-code-group.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-code.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-doc.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/components/vp-sponsor.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/fonts.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/icons.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/index-scoped.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/index.css +0 -0
- /package/src/{vitepress/styles → styles}/vitepress-default/utils.css +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/app-utils.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/docsearch-loader.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/lru.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/search-config.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/shared-utils.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/sidebar.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/translation.ts +0 -0
- /package/src/{vitepress/support → support}/vitepress-default/utils.ts +0 -0
- /package/src/{vitepress/types → types}/docsearch.d.ts +0 -0
- /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('
|
|
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">
|
|
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">
|
|
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
|
|
10
|
-
<p class="sm:max-w-[28rem] text-pretty">Vite plugins extends Rollup's well-designed plugin interface with a few
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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-[
|
|
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"
|
|
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
|
-
|
|
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>
|
|
@@ -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-
|
|
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-
|
|
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-
|
|
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"
|
|
@@ -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
|
|
37
|
+
useSSRContext()?.vpSocialIcons.add(props.icon)
|
|
39
38
|
}
|
|
40
39
|
</script>
|
|
41
40
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,103 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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 || '
|
|
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>
|