feat: add landing page and docs website (#537)
* feat: add landing page and docs website package Add packages/website — a Vue 3 + Naive UI static site with landing page and documentation, sharing the Pure Ink monochrome design with the main app. Features: particle network hero animation, screenshot carousel, feature grid, install guide tabs, GitHub star history, scroll reveal animations, and Chinese/English bilingual support. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore: add favicon to website package Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: use dynamic theme param for star history chart Switch from CSS media query to JS-based dark mode detection so the star-history SVG matches the current theme toggle state. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: resolve TypeScript strict mode errors in website components - Remove unused isDark import in HeroSection - Add null check for canvas parent element - Rename unused img loop variable in ScreenshotsSection - Remove unused NIcon import in SiteHeader Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: resolve TS narrowing errors in canvas resize closure Use canvasRef.value directly inside resize() with local null check instead of relying on outer closure narrowing. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
<script setup lang="ts">
|
||||
import { useRoute } from 'vue-router'
|
||||
import DocSidebar from '@/components/docs/DocSidebar.vue'
|
||||
import DocContent from '@/components/docs/DocContent.vue'
|
||||
|
||||
const route = useRoute()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="docs-layout">
|
||||
<DocSidebar v-if="route.meta.page" />
|
||||
<div class="docs-main">
|
||||
<router-view />
|
||||
<DocContent v-if="route.meta.page" />
|
||||
<div v-else class="docs-placeholder">
|
||||
<p>Select a section from the sidebar to get started.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.docs-layout {
|
||||
display: flex;
|
||||
max-width: 1120px;
|
||||
margin: 0 auto;
|
||||
min-height: calc(100vh - 60px - 200px);
|
||||
}
|
||||
|
||||
.docs-main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.docs-placeholder {
|
||||
padding: 60px 32px;
|
||||
color: var(--text-muted);
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,40 @@
|
||||
<script setup lang="ts">
|
||||
import HeroSection from '@/components/landing/HeroSection.vue'
|
||||
import ScreenshotsSection from '@/components/landing/ScreenshotsSection.vue'
|
||||
import FeaturesGrid from '@/components/landing/FeaturesGrid.vue'
|
||||
import InstallSection from '@/components/landing/InstallSection.vue'
|
||||
import StarHistorySection from '@/components/landing/StarHistorySection.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="landing">
|
||||
<HeroSection />
|
||||
<ScreenshotsSection />
|
||||
<FeaturesGrid />
|
||||
<div class="cta-row">
|
||||
<InstallSection class="cta-col" />
|
||||
<StarHistorySection class="cta-col" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.cta-row {
|
||||
max-width: 1120px;
|
||||
margin: 0 auto;
|
||||
padding: 80px 24px;
|
||||
display: flex;
|
||||
gap: 40px;
|
||||
|
||||
@media (max-width: $breakpoint-mobile) {
|
||||
flex-direction: column;
|
||||
padding: 48px 16px;
|
||||
gap: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.cta-col {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user