docs: improve docs site
This commit is contained in:
parent
6dff115347
commit
7200c53a8a
|
|
@ -1,12 +1,44 @@
|
||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
import Icons from 'unplugin-icons/vite'
|
import Icons from 'unplugin-icons/vite'
|
||||||
|
import { siteConfig } from './theme/config/site'
|
||||||
import ComponentPreviewPlugin from './theme/plugins/previewer'
|
import ComponentPreviewPlugin from './theme/plugins/previewer'
|
||||||
|
|
||||||
// https://vitepress.dev/reference/site-config
|
// https://vitepress.dev/reference/site-config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
title: 'shadcn-vue',
|
title: siteConfig.name,
|
||||||
description: 'A VitePress Site',
|
titleTemplate: ':title - shadcn/vue',
|
||||||
|
description: siteConfig.description,
|
||||||
|
head: [
|
||||||
|
['link', { rel: 'icon', href: '/favicon.ico' }],
|
||||||
|
['meta', { name: 'theme-color', content: '#41b883' }],
|
||||||
|
['meta', { name: 'og:type', content: 'website' }],
|
||||||
|
['meta', { name: 'og:locale', content: 'en' }],
|
||||||
|
['meta', { name: 'og:site_name', content: siteConfig.name }],
|
||||||
|
['meta', { name: 'og:image', content: siteConfig.ogImage }],
|
||||||
|
['meta', { name: 'twitter:image', content: siteConfig.ogImage }],
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
sitemap: {
|
||||||
|
hostname: 'https://www.shadcn-vue.com',
|
||||||
|
transformItems(items) {
|
||||||
|
return items.filter(item => !item.url.includes('migration'))
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
appearance: false,
|
||||||
|
lastUpdated: true,
|
||||||
|
themeConfig: {
|
||||||
|
search: {
|
||||||
|
provider: 'local',
|
||||||
|
},
|
||||||
|
editLink: {
|
||||||
|
pattern: 'https://github.com/radix-vue/shadcn-vue/tree/dev/apps/www/src/:path',
|
||||||
|
text: 'Edit this page on GitHub',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
srcDir: path.resolve(__dirname, '../src'),
|
srcDir: path.resolve(__dirname, '../src'),
|
||||||
markdown: {
|
markdown: {
|
||||||
theme: 'css-variables',
|
theme: 'css-variables',
|
||||||
|
|
|
||||||
27
apps/www/.vitepress/theme/components/EditLink.vue
Normal file
27
apps/www/.vitepress/theme/components/EditLink.vue
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useData } from 'vitepress'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
import Pencil2Icon from '~icons/radix-icons/pencil-2'
|
||||||
|
import { Button } from '@/lib/registry/default/ui/button'
|
||||||
|
|
||||||
|
const { theme, page } = useData()
|
||||||
|
|
||||||
|
const link = computed(() => {
|
||||||
|
const { text = 'Edit this page', pattern = '' } = theme.value.editLink || {}
|
||||||
|
let url: string
|
||||||
|
if (typeof pattern === 'function')
|
||||||
|
url = pattern(page.value)
|
||||||
|
|
||||||
|
else
|
||||||
|
url = pattern.replace(/:path/g, page.value.filePath)
|
||||||
|
|
||||||
|
return { url, text }
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<Button as="a" :href="link.url" target="_blank" :variant="'ghost'" class="underline mt-8">
|
||||||
|
<Pencil2Icon class="mr-2" />
|
||||||
|
{{ link.text }}
|
||||||
|
</Button>
|
||||||
|
</template>
|
||||||
|
|
@ -59,7 +59,7 @@ import DashboardExample from '@/examples/dashboard/Example.vue'
|
||||||
width="1280"
|
width="1280"
|
||||||
height="866" class="block" :image="{
|
height="866" class="block" :image="{
|
||||||
dark: '/examples/dashboard-dark.png',
|
dark: '/examples/dashboard-dark.png',
|
||||||
light: 'examples/dashboard-light.png',
|
light: '/examples/dashboard-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,15 @@
|
||||||
import { useData, useRoute } from 'vitepress'
|
import { useData, useRoute } from 'vitepress'
|
||||||
import { docsConfig } from '../config/docs'
|
import { docsConfig } from '../config/docs'
|
||||||
import TableOfContentVue from '../components/TableOfContent.vue'
|
import TableOfContentVue from '../components/TableOfContent.vue'
|
||||||
|
import EditLink from '../components/EditLink.vue'
|
||||||
import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
|
import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
|
||||||
import { Badge } from '@/lib/registry/default/ui/badge'
|
import { Badge } from '@/lib/registry/default/ui/badge'
|
||||||
import RadixIconsCode from '~icons/radix-icons/code'
|
import RadixIconsCode from '~icons/radix-icons/code'
|
||||||
import ChevronRightIcon from '~icons/lucide/chevron-right'
|
import ChevronRightIcon from '~icons/lucide/chevron-right'
|
||||||
|
|
||||||
const $route = useRoute()
|
const $route = useRoute()
|
||||||
const { frontmatter } = useData()
|
const { frontmatter, ...a } = useData()
|
||||||
|
console.log(a)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -90,6 +92,8 @@ const { frontmatter } = useData()
|
||||||
<div class="vp-doc">
|
<div class="vp-doc">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<EditLink />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="hidden text-sm xl:block">
|
<div class="hidden text-sm xl:block">
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,14 @@ import { Content, useData, useRoute } from 'vitepress'
|
||||||
import { docsConfig } from '../config/docs'
|
import { docsConfig } from '../config/docs'
|
||||||
import Logo from '../components/Logo.vue'
|
import Logo from '../components/Logo.vue'
|
||||||
import MobileNav from '../components/MobileNav.vue'
|
import MobileNav from '../components/MobileNav.vue'
|
||||||
import { Button } from '@/lib/registry/default/ui/button'
|
|
||||||
import { Kbd } from '@/lib/registry/default/ui/kbd'
|
// import { Button } from '@/lib/registry/default/ui/button'
|
||||||
|
// import { Kbd } from '@/lib/registry/default/ui/kbd'
|
||||||
|
// import LucideSearch from '~icons/lucide/search'
|
||||||
import RadixIconsGithubLogo from '~icons/radix-icons/github-logo'
|
import RadixIconsGithubLogo from '~icons/radix-icons/github-logo'
|
||||||
import TablerBrandX from '~icons/tabler/brand-x'
|
import TablerBrandX from '~icons/tabler/brand-x'
|
||||||
import RadixIconsMoon from '~icons/radix-icons/moon'
|
import RadixIconsMoon from '~icons/radix-icons/moon'
|
||||||
import RadixIconsSun from '~icons/radix-icons/sun'
|
import RadixIconsSun from '~icons/radix-icons/sun'
|
||||||
import LucideSearch from '~icons/lucide/search'
|
|
||||||
|
|
||||||
const { frontmatter } = useData()
|
const { frontmatter } = useData()
|
||||||
|
|
||||||
|
|
@ -37,8 +38,10 @@ const links = [
|
||||||
<div class="flex min-h-screen flex-col bg-background">
|
<div class="flex min-h-screen flex-col bg-background">
|
||||||
<header class="sticky z-40 top-0 bg-background/80 backdrop-blur-lg border-b border-border">
|
<header class="sticky z-40 top-0 bg-background/80 backdrop-blur-lg border-b border-border">
|
||||||
<div
|
<div
|
||||||
class="container flex h-14 items-center"
|
class="container flex justify-between h-14 items-center"
|
||||||
>
|
>
|
||||||
|
<MobileNav />
|
||||||
|
|
||||||
<div class="mr-4 hidden md:flex">
|
<div class="mr-4 hidden md:flex">
|
||||||
<Logo />
|
<Logo />
|
||||||
|
|
||||||
|
|
@ -60,8 +63,8 @@ const links = [
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="md:flex flex-1 items-center justify-end space-x-4 hidden">
|
<div class=" flex items-center justify-end space-x-4 ">
|
||||||
<Button
|
<!-- <Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
class="w-72 h-8 px-3 hidden lg:flex lg:justify-between lg:items-center"
|
class="w-72 h-8 px-3 hidden lg:flex lg:justify-between lg:items-center"
|
||||||
>
|
>
|
||||||
|
|
@ -73,7 +76,7 @@ const links = [
|
||||||
<Kbd>⌘</Kbd>
|
<Kbd>⌘</Kbd>
|
||||||
<Kbd>K</Kbd>
|
<Kbd>K</Kbd>
|
||||||
</div>
|
</div>
|
||||||
</Button>
|
</Button> -->
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-for="link in links"
|
v-for="link in links"
|
||||||
|
|
@ -96,8 +99,6 @@ const links = [
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<MobileNav />
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
home: true
|
home: true
|
||||||
|
title: Shadcn for Vue
|
||||||
---
|
---
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import { buttonVariants } from '@/lib/registry/default/ui/button'
|
||||||
width="1280"
|
width="1280"
|
||||||
height="1214" class="block" :image="{
|
height="1214" class="block" :image="{
|
||||||
dark: '/examples/authentication-dark.png',
|
dark: '/examples/authentication-dark.png',
|
||||||
light: 'examples/authentication-light.png',
|
light: '/examples/authentication-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import TeamMembers from './components/TeamMembers.vue'
|
||||||
width="1280"
|
width="1280"
|
||||||
height="1214" class="block" :image="{
|
height="1214" class="block" :image="{
|
||||||
dark: '/examples/cards-dark.png',
|
dark: '/examples/cards-dark.png',
|
||||||
light: 'examples/cards-light.png',
|
light: '/examples/cards-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,6 @@ import { Separator } from '@/lib/registry/default/ui/separator'
|
||||||
align="end"
|
align="end"
|
||||||
:align-offset="-5"
|
:align-offset="-5"
|
||||||
class="w-[200px]"
|
class="w-[200px]"
|
||||||
force-mount
|
|
||||||
>
|
>
|
||||||
<DropdownMenuLabel>Suggested Lists</DropdownMenuLabel>
|
<DropdownMenuLabel>Suggested Lists</DropdownMenuLabel>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import {
|
||||||
width="1280"
|
width="1280"
|
||||||
height="1214" class="block" :image="{
|
height="1214" class="block" :image="{
|
||||||
dark: '/examples/dashboard-dark.png',
|
dark: '/examples/dashboard-dark.png',
|
||||||
light: 'examples/dashboard-light.png',
|
light: '/examples/dashboard-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -6,29 +6,29 @@ import { cn } from '@/lib/utils'
|
||||||
<nav
|
<nav
|
||||||
:class="cn('flex items-center space-x-4 lg:space-x-6', $attrs.class ?? '')"
|
:class="cn('flex items-center space-x-4 lg:space-x-6', $attrs.class ?? '')"
|
||||||
>
|
>
|
||||||
<Link
|
<a
|
||||||
href="/examples/dashboard"
|
href="/examples/dashboard"
|
||||||
class="text-sm font-medium transition-colors hover:text-primary"
|
class="text-sm font-medium transition-colors hover:text-primary"
|
||||||
>
|
>
|
||||||
Overview
|
Overview
|
||||||
</Link>
|
</a>
|
||||||
<Link
|
<a
|
||||||
href="/examples/dashboard"
|
href="/examples/dashboard"
|
||||||
class="text-sm font-medium text-muted-foreground transition-colors hover:text-primary"
|
class="text-sm font-medium text-muted-foreground transition-colors hover:text-primary"
|
||||||
>
|
>
|
||||||
Customers
|
Customers
|
||||||
</Link>
|
</a>
|
||||||
<Link
|
<a
|
||||||
href="/examples/dashboard"
|
href="/examples/dashboard"
|
||||||
class="text-sm font-medium text-muted-foreground transition-colors hover:text-primary"
|
class="text-sm font-medium text-muted-foreground transition-colors hover:text-primary"
|
||||||
>
|
>
|
||||||
Products
|
Products
|
||||||
</Link>
|
</a>
|
||||||
<Link
|
<a
|
||||||
href="/examples/dashboard"
|
href="/examples/dashboard"
|
||||||
class="text-sm font-medium text-muted-foreground transition-colors hover:text-primary"
|
class="text-sm font-medium text-muted-foreground transition-colors hover:text-primary"
|
||||||
>
|
>
|
||||||
Settings
|
Settings
|
||||||
</Link>
|
</a>
|
||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import {
|
||||||
</Avatar>
|
</Avatar>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent class="w-56" align="end" force-mount>
|
<DropdownMenuContent class="w-56" align="end">
|
||||||
<DropdownMenuLabel class="font-normal flex">
|
<DropdownMenuLabel class="font-normal flex">
|
||||||
<div class="flex flex-col space-y-1">
|
<div class="flex flex-col space-y-1">
|
||||||
<p class="text-sm font-medium leading-none">
|
<p class="text-sm font-medium leading-none">
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import PlusCircledIcon from '~icons/radix-icons/plus-circled'
|
||||||
width="1280"
|
width="1280"
|
||||||
height="1214" class="block" :image="{
|
height="1214" class="block" :image="{
|
||||||
dark: '/examples/music-dark.png',
|
dark: '/examples/music-dark.png',
|
||||||
light: 'examples/music-light.png',
|
light: '/examples/music-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,7 @@ import {
|
||||||
<MenubarTrigger class="hidden md:block">
|
<MenubarTrigger class="hidden md:block">
|
||||||
Account
|
Account
|
||||||
</MenubarTrigger>
|
</MenubarTrigger>
|
||||||
<MenubarContent force-mount>
|
<MenubarContent>
|
||||||
<MenubarLabel inset>
|
<MenubarLabel inset>
|
||||||
Switch Account
|
Switch Account
|
||||||
</MenubarLabel>
|
</MenubarLabel>
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ import CounterClockwiseClockIcon from '~icons/radix-icons/counter-clockwise-cloc
|
||||||
width="1280"
|
width="1280"
|
||||||
height="1214" class="block" :image="{
|
height="1214" class="block" :image="{
|
||||||
dark: '/examples/playground-dark.png',
|
dark: '/examples/playground-dark.png',
|
||||||
light: 'examples/playground-light.png',
|
light: '/examples/playground-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import { columns } from './components/columns'
|
||||||
width="1280"
|
width="1280"
|
||||||
height="1214" class="block" :image="{
|
height="1214" class="block" :image="{
|
||||||
dark: '/examples/tasks-dark.png',
|
dark: '/examples/tasks-dark.png',
|
||||||
light: 'examples/tasks-light.png',
|
light: '/examples/tasks-light.png',
|
||||||
}"
|
}"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import {
|
||||||
</Avatar>
|
</Avatar>
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent class="w-56" align="end" force-mount>
|
<DropdownMenuContent class="w-56" align="end">
|
||||||
<DropdownMenuLabel class="font-normal flex">
|
<DropdownMenuLabel class="font-normal flex">
|
||||||
<div class="flex flex-col space-y-1">
|
<div class="flex flex-col space-y-1">
|
||||||
<p class="text-sm font-medium leading-none">
|
<p class="text-sm font-medium leading-none">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user