Compare commits

..

25 Commits

Author SHA1 Message Date
zernonia
9080a792ad chore: update deps 2024-10-14 18:13:46 +08:00
zernonia
ddf0023eb3 chore: bump detypes version 2024-10-11 15:50:15 +08:00
zernonia
7cc196ce74 chore: update pnpm-lock, fix import 2024-10-11 13:08:18 +08:00
zernonia
e573ea9bab chore: update test snapshot 2024-10-11 13:01:39 +08:00
zernonia
71c5904a6a Merge remote-tracking branch 'origin/dev' into pr/zernonia/619 2024-10-11 12:44:06 +08:00
zernonia
b55c8b796d refactor: replace detypes with @unovue/detypes 2024-10-11 12:38:48 +08:00
zernonia
524f3ad60d refactor: transform to cater only for class in sfc 2024-06-19 11:23:05 +08:00
zernonia
9bd32b6d8d chore: patch vue-eslint-parser 2024-06-19 11:05:29 +08:00
zernonia
d6460cd236 fix: prefix double quote 2024-06-19 10:48:23 +08:00
zernonia
6d36be6440 fix: transform-sfc not parsing .ts file 2024-06-19 08:59:49 +08:00
zernonia
b2f2981377 refactor: transform tw prefix by specific case 2024-06-19 08:53:16 +08:00
zernonia
20c38b35e9 fix: move vue-metamorph to dep 2024-06-19 07:52:54 +08:00
zernonia
b2d7dabf87 chore: fix test 2024-06-18 22:28:06 +08:00
zernonia
2f5279ffdc Merge remote-tracking branch 'origin/dev' into tailwind-prefix 2024-06-18 22:27:11 +08:00
zernonia
4b2e4a0da1 chore: cleanup 2024-06-18 22:26:18 +08:00
zernonia
2c2c46755e chore: update test 2024-06-18 22:24:08 +08:00
zernonia
e51c6c7742 chore: remove ts-morpg 2024-06-18 22:18:19 +08:00
zernonia
7033b4b02f refactor: goodbye ts-morph 2024-06-18 22:17:01 +08:00
zernonia
42d6cfd252 chore: checkpoint 2024-06-18 20:45:09 +08:00
zernonia
baab087a58 chore: fix wrong import 2024-06-18 16:52:08 +08:00
zernonia
9ca5101448 chore: update registry to make sure tailwind prefix parse correctly 2024-06-18 16:50:18 +08:00
zernonia
386c77c9c6 fix: prevent transforming importDeclaration 2024-06-18 16:49:17 +08:00
zernonia
0f551c85e6 fix: cater for cn function 2024-06-18 14:49:59 +08:00
zernonia
f7a8121fa3 chore: enable tw prefix during init 2024-06-18 10:49:13 +08:00
zernonia
511ae6a62e chore: enable tw prefix 2024-06-18 10:42:55 +08:00
1024 changed files with 4409 additions and 7955 deletions

View File

@ -14,4 +14,3 @@ runs:
with: with:
node-version: lts/* node-version: lts/*
cache: pnpm cache: pnpm
registry-url: 'https://registry.npmjs.org'

View File

@ -21,19 +21,6 @@ jobs:
- name: Setup (Install Node & pnpm) - name: Setup (Install Node & pnpm)
uses: ./.github/actions/setup uses: ./.github/actions/setup
- name: Install dependencies
run: pnpm i --frozen-lockfile
- run: pnpm dlx changelogithub - run: pnpm dlx changelogithub
env: env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Build CLI & Publish to npm
run: pnpm --filter shadcn-vue pub:release
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Build Module & Publish to npm
run: pnpm --filter shadcn-nuxt pub:release
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

View File

@ -1,7 +1,6 @@
{ {
"recommendations": [ "recommendations": [
"Vue.volar", "Vue.volar",
"dbaeumer.vscode-eslint", "dbaeumer.vscode-eslint"
"bradlc.vscode-tailwindcss"
] ]
} }

View File

@ -34,9 +34,5 @@
"json", "json",
"jsonc", "jsonc",
"yaml" "yaml"
],
"tailwindCSS.experimental.classRegex": [
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]
] ]
} }

View File

@ -1,7 +1,7 @@
<p align="center"> <p align="center">
<img align="center" src="https://raw.githubusercontent.com/radix-vue/shadcn-vue/dev/apps/www/src/public/android-chrome-192x192.png" height="96" /> <img align="center" src="https://raw.githubusercontent.com/radix-vue/shadcn-vue/dev/apps/www/src/public/android-chrome-192x192.png" height="96" />
<h1 align="center"> <h1 align="center">
shadcn-vue by Niklas Hermanns shadcn-vue
</h1> </h1>
</p> </p>
@ -31,7 +31,3 @@ All credits go to these open-source works and resources
## License ## License
Licensed under the [MIT license](https://github.com/shadcn/ui/blob/main/LICENSE.md). Licensed under the [MIT license](https://github.com/shadcn/ui/blob/main/LICENSE.md).
## Actions
- Test

View File

@ -1,13 +1,14 @@
import path from 'node:path' import path from 'node:path'
import { transformerMetaWordHighlight } from '@shikijs/transformers'
import autoprefixer from 'autoprefixer'
import tailwind from 'tailwindcss'
import Icons from 'unplugin-icons/vite'
import { defineConfig } from 'vitepress' import { defineConfig } from 'vitepress'
import Icons from 'unplugin-icons/vite'
import tailwind from 'tailwindcss'
import autoprefixer from 'autoprefixer'
import { transformerMetaWordHighlight } from '@shikijs/transformers'
import { cssVariables } from './theme/config/shiki'
import { siteConfig } from './theme/config/site' import { siteConfig } from './theme/config/site'
import CodeWrapperPlugin from './theme/plugins/codewrapper'
import ComponentPreviewPlugin from './theme/plugins/previewer' import ComponentPreviewPlugin from './theme/plugins/previewer'
import CodeWrapperPlugin from './theme/plugins/codewrapper'
// https://vitepress.dev/reference/site-config // https://vitepress.dev/reference/site-config
export default defineConfig({ export default defineConfig({
@ -30,6 +31,7 @@ export default defineConfig({
['meta', { name: 'og:site_name', content: siteConfig.name }], ['meta', { name: 'og:site_name', content: siteConfig.name }],
['meta', { name: 'og:image', content: siteConfig.ogImage }], ['meta', { name: 'og:image', content: siteConfig.ogImage }],
['meta', { name: 'twitter:image', content: siteConfig.ogImage }], ['meta', { name: 'twitter:image', content: siteConfig.ogImage }],
], ],
sitemap: { sitemap: {
@ -48,14 +50,11 @@ export default defineConfig({
pattern: 'https://github.com/radix-vue/shadcn-vue/tree/dev/apps/www/src/:path', pattern: 'https://github.com/radix-vue/shadcn-vue/tree/dev/apps/www/src/:path',
text: 'Edit this page on GitHub', text: 'Edit this page on GitHub',
}, },
carbonAds: {
code: 'CW7DK27U',
placement: 'wwwshadcn-vuecom',
},
}, },
srcDir: path.resolve(__dirname, '../src'), srcDir: path.resolve(__dirname, '../src'),
markdown: { markdown: {
theme: cssVariables,
codeTransformers: [ codeTransformers: [
transformerMetaWordHighlight(), transformerMetaWordHighlight(),
], ],

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { announcementConfig } from '../config/site'
import { Separator } from '@/lib/registry/default/ui/separator' import { Separator } from '@/lib/registry/default/ui/separator'
import ArrowRightIcon from '~icons/radix-icons/arrow-right' import ArrowRightIcon from '~icons/radix-icons/arrow-right'
import { announcementConfig } from '../config/site'
</script> </script>
<template> <template>

View File

@ -1,233 +0,0 @@
<script setup lang="ts">
import { useConfigStore } from '@/stores/config'
import { CircleHelp, Info, Monitor, Smartphone, Tablet } from 'lucide-vue-next'
import MagicString from 'magic-string'
import { reactive, ref, watch } from 'vue'
import { compileScript, parse, walk } from 'vue/compiler-sfc'
import { highlight } from '../config/shiki'
import BlockCopyButton from './BlockCopyButton.vue'
import StyleSwitcher from './StyleSwitcher.vue'
// import { V0Button } from '@/components/v0-button'
import { Badge } from '@/lib/registry/new-york/ui/badge'
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/lib/registry/new-york/ui/resizable'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/lib/registry/new-york/ui/tabs'
import { ToggleGroup, ToggleGroupItem } from '@/lib/registry/new-york/ui/toggle-group'
import BlockPreview from './BlockPreview.vue'
const props = defineProps<{
name: string
}>()
const { style, codeConfig } = useConfigStore()
const isLoading = ref(true)
const tabValue = ref('preview')
const resizableRef = ref<InstanceType<typeof ResizablePanel>>()
const rawString = ref('')
const codeHtml = ref('')
const metadata = reactive({
description: null as string | null,
iframeHeight: null as string | null,
containerClass: null as string | null,
})
function removeScript(code: string) {
const s = new MagicString(code)
const scriptTagRegex = /<script\s+lang="ts"\s*>[\s\S]+?<\/script>/g
let match
// eslint-disable-next-line no-cond-assign
while ((match = scriptTagRegex.exec(code)) !== null) {
const start = match.index
const end = match.index + match[0].length
s.overwrite(start, end, '') // Replace the script tag with an empty string
}
return s.trimStart().toString()
}
function transformImportPath(code: string) {
const s = new MagicString(code)
s.replaceAll(`@/lib/registry/${style.value}`, codeConfig.value.componentsPath)
s.replaceAll(`@/lib/utils`, codeConfig.value.utilsPath)
return s.toString()
}
watch([style, codeConfig], async () => {
try {
const baseRawString = await import(`../../../src/lib/registry/${style.value}/block/${props.name}.vue?raw`).then(res => res.default.trim())
rawString.value = transformImportPath(removeScript(baseRawString))
if (!metadata.description) {
const { descriptor } = parse(baseRawString)
const ast = compileScript(descriptor, { id: '' })
walk(ast.scriptAst, {
enter(node: any) {
const declaration = node.declaration
// Check if the declaration is a variable declaration
if (declaration?.type === 'VariableDeclaration') {
// Extract variable names and their values
declaration.declarations.forEach((decl: any) => {
// @ts-expect-error ignore missing type
metadata[decl.id.name] = decl.init ? decl.init.value : null
})
}
},
})
}
codeHtml.value = highlight(rawString.value, 'vue')
}
catch (err) {
console.error(err)
}
}, { immediate: true, deep: true })
</script>
<template>
<Tabs
:id="name"
v-model="tabValue"
class="relative grid w-full scroll-m-20 gap-4"
:style=" {
'--container-height': metadata.iframeHeight ?? '600px',
}"
>
<div class="flex flex-col items-center gap-4 sm:flex-row">
<div class="flex items-center gap-2">
<TabsList class="hidden sm:flex">
<TabsTrigger value="preview">
Preview
</TabsTrigger>
<TabsTrigger value="code">
Code
</TabsTrigger>
</TabsList>
<div class="hidden items-center gap-2 sm:flex">
<Separator
orientation="vertical"
class="mx-2 hidden h-4 md:flex"
/>
<div class="flex items-center gap-2">
<a :href="`#${name}`">
<Badge variant="outline">{{ name }}</Badge>
</a>
<Popover>
<PopoverTrigger class="hidden text-muted-foreground hover:text-foreground sm:flex">
<Info class="h-3.5 w-3.5" />
<span class="sr-only">Block description</span>
</PopoverTrigger>
<PopoverContent
side="right"
:side-offset="10"
class="text-sm"
>
{{ metadata.description }}
</PopoverContent>
</Popover>
</div>
</div>
</div>
<div class="flex items-center gap-2 pr-[14px] sm:ml-auto">
<div class="hidden h-[28px] items-center gap-1.5 rounded-md border p-[2px] shadow-sm md:flex">
<ToggleGroup
type="single"
default-value="100"
@update:model-value="(value) => {
resizableRef?.resize(parseInt(value as string))
}"
>
<ToggleGroupItem
value="100"
class="h-[22px] w-[22px] rounded-sm p-0"
>
<Monitor class="h-3.5 w-3.5" />
</ToggleGroupItem>
<ToggleGroupItem
value="60"
class="h-[22px] w-[22px] rounded-sm p-0"
>
<Tablet class="h-3.5 w-3.5" />
</ToggleGroupItem>
<ToggleGroupItem
value="30"
class="h-[22px] w-[22px] rounded-sm p-0"
>
<Smartphone class="h-3.5 w-3.5" />
</ToggleGroupItem>
</ToggleGroup>
</div>
<Separator
orientation="vertical"
class="mx-2 hidden h-4 md:flex"
/>
<StyleSwitcher class="h-7" />
<Popover>
<PopoverTrigger class="hidden text-muted-foreground hover:text-foreground sm:flex">
<CircleHelp class="h-3.5 w-3.5" />
<span class="sr-only">Block description</span>
</PopoverTrigger>
<PopoverContent
side="top"
:side-offset="20"
class="space-y-3 rounded-[0.5rem] text-sm"
>
<p class="font-medium">
What is the difference between the New York and Default style?
</p>
<p>
A style comes with its own set of components, animations,
icons and more.
</p>
<p>
The <span class="font-medium">Default</span> style has
larger inputs, uses lucide-vue-next for icons and
tailwindcss-animate for animations.
</p>
<p>
The <span class="font-medium">New York</span> style ships
with smaller buttons and inputs. It also uses shadows on cards
and buttons.
</p>
</PopoverContent>
</Popover>
<Separator orientation="vertical" class="mx-2 h-4" />
<BlockCopyButton :code="rawString" />
<!-- <V0Button
name="{block.name}"
description="{block.description" || "Edit in v0"}
code="{block.code}"
style="{block.style}"
/> -->
</div>
</div>
<TabsContent
v-show="tabValue === 'preview'"
force-mount
value="preview"
class="relative after:absolute after:inset-0 after:right-3 after:z-0 after:rounded-lg after:bg-muted h-[--container-height] px-0"
>
<ResizablePanelGroup id="block-resizable" direction="horizontal" class="relative z-10">
<ResizablePanel
id="block-resizable-panel-1"
ref="resizableRef"
:default-size="100"
:min-size="30"
:as-child="true"
>
<BlockPreview :name="name" styles="default" :container-class="metadata.containerClass ?? ''" container />
</ResizablePanel>
<ResizableHandle id="block-resizable-handle" class="relative hidden w-3 bg-transparent p-0 after:absolute after:right-0 after:top-1/2 after:h-8 after:w-[6px] after:-translate-y-1/2 after:translate-x-[-1px] after:rounded-full after:bg-border after:transition-all after:hover:h-10 sm:block" />
<ResizablePanel id="block-resizable-panel-2" :default-size="0" :min-size="0" />
</ResizablePanelGroup>
</TabsContent>
<TabsContent value="code" class="h-[--container-height]">
<div
class="language-vue !h-full !max-h-[none] !mt-0"
v-html="codeHtml"
/>
</TabsContent>
</Tabs>
</template>

View File

@ -1,13 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { useClipboard } from '@vueuse/core'
import { toRefs } from 'vue'
import { CheckIcon, ClipboardIcon } from '@radix-icons/vue'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { import {
Tooltip, Tooltip,
TooltipContent, TooltipContent,
TooltipTrigger, TooltipTrigger,
} from '@/lib/registry/new-york/ui/tooltip' } from '@/lib/registry/new-york/ui/tooltip'
import { CheckIcon, ClipboardIcon } from '@radix-icons/vue'
import { useClipboard } from '@vueuse/core'
import { toRefs } from 'vue'
const props = withDefaults(defineProps<{ const props = withDefaults(defineProps<{
code?: string code?: string

View File

@ -2,11 +2,11 @@
import { useUrlSearchParams } from '@vueuse/core' import { useUrlSearchParams } from '@vueuse/core'
import ComponentLoader from './ComponentLoader.vue' import ComponentLoader from './ComponentLoader.vue'
const params = useUrlSearchParams('history') const params = useUrlSearchParams('hash-params')
</script> </script>
<template> <template>
<div v-if="params.name" :class="params.containerClass"> <div v-if="params.name && params.style" :class="params.containerClass">
<ComponentLoader :key="params.style?.toString()" :name="params.name?.toString()" :type-name="'block'" /> <ComponentLoader :key="params.style?.toString()" :name="params.name?.toString()" :type-name="'block'" />
</div> </div>
</template> </template>

View File

@ -1,44 +1,245 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, ref } from 'vue' import { useConfigStore } from '@/stores/config'
import { CircleHelp, Info, Monitor, Smartphone, Tablet } from 'lucide-vue-next'
import MagicString from 'magic-string'
import { codeToHtml } from 'shiki'
import { reactive, ref, watch } from 'vue'
import { compileScript, parse, walk } from 'vue/compiler-sfc'
import { cssVariables } from '../config/shiki'
import BlockCopyButton from './BlockCopyButton.vue'
import Spinner from './Spinner.vue' import Spinner from './Spinner.vue'
import StyleSwitcher from './StyleSwitcher.vue'
// import { V0Button } from '@/components/v0-button'
import { Badge } from '@/lib/registry/new-york/ui/badge'
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/lib/registry/new-york/ui/resizable'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/lib/registry/new-york/ui/tabs'
import { ToggleGroup, ToggleGroupItem } from '@/lib/registry/new-york/ui/toggle-group'
const props = defineProps<{ const props = defineProps<{
name: string name: string
styles?: string
containerClass?: string
container?: boolean
}>() }>()
const { style, codeConfig } = useConfigStore()
const isLoading = ref(true) const isLoading = ref(true)
const tabValue = ref('preview')
const resizableRef = ref<InstanceType<typeof ResizablePanel>>()
const iframeURL = computed(() => { const rawString = ref('')
// @ts-expect-error env available in import.meta const codeHtml = ref('')
if (import.meta.env.SSR) const metadata = reactive({
return '' description: null as string | null,
iframeHeight: null as string | null,
const url = new URL(`${window.location.origin}/blocks/renderer`) containerClass: null as string | null,
Object.entries(props).forEach(([key, value]) => {
if (value)
url.searchParams.append(key, value as string)
})
return url.href
}) })
function removeScript(code: string) {
const s = new MagicString(code)
const scriptTagRegex = /<script\s+lang="ts"\s*>[\s\S]+?<\/script>/g
let match
// eslint-disable-next-line no-cond-assign
while ((match = scriptTagRegex.exec(code)) !== null) {
const start = match.index
const end = match.index + match[0].length
s.overwrite(start, end, '') // Replace the script tag with an empty string
}
return s.trimStart().toString()
}
function transformImportPath(code: string) {
const s = new MagicString(code)
s.replaceAll(`@/lib/registry/${style.value}`, codeConfig.value.componentsPath)
s.replaceAll(`@/lib/utils`, codeConfig.value.utilsPath)
return s.toString()
}
watch([style, codeConfig], async () => {
try {
const baseRawString = await import(`../../../src/lib/registry/${style.value}/block/${props.name}.vue?raw`).then(res => res.default.trim())
rawString.value = transformImportPath(removeScript(baseRawString))
if (!metadata.description) {
const { descriptor } = parse(baseRawString)
const ast = compileScript(descriptor, { id: '' })
walk(ast.scriptAst, {
enter(node: any) {
const declaration = node.declaration
// Check if the declaration is a variable declaration
if (declaration?.type === 'VariableDeclaration') {
// Extract variable names and their values
declaration.declarations.forEach((decl: any) => {
// @ts-expect-error ignore missing type
metadata[decl.id.name] = decl.init ? decl.init.value : null
})
}
},
})
}
codeHtml.value = await codeToHtml(rawString.value, {
lang: 'vue',
theme: cssVariables,
})
}
catch (err) {
console.error(err)
}
}, { immediate: true, deep: true })
</script> </script>
<template> <template>
<div class="relative rounded-lg border overflow-hidden bg-background" :class="[container ? '' : 'aspect-[4/2.5]']"> <Tabs
<div v-if="isLoading" class="flex items-center justify-center h-full"> :id="name"
<Spinner /> v-model="tabValue"
class="relative grid w-full scroll-m-20 gap-4"
:style=" {
'--container-height': metadata.iframeHeight ?? '600px',
}"
>
<div class="flex flex-col items-center gap-4 sm:flex-row">
<div class="flex items-center gap-2">
<TabsList class="hidden sm:flex">
<TabsTrigger value="preview">
Preview
</TabsTrigger>
<TabsTrigger value="code">
Code
</TabsTrigger>
</TabsList>
<div class="hidden items-center gap-2 sm:flex">
<Separator
orientation="vertical"
class="mx-2 hidden h-4 md:flex"
/>
<div class="flex items-center gap-2">
<a :href="`#${name}`">
<Badge variant="outline">{{ name }}</Badge>
</a>
<Popover>
<PopoverTrigger class="hidden text-muted-foreground hover:text-foreground sm:flex">
<Info class="h-3.5 w-3.5" />
<span class="sr-only">Block description</span>
</PopoverTrigger>
<PopoverContent
side="right"
:side-offset="10"
class="text-sm"
>
{{ metadata.description }}
</PopoverContent>
</Popover>
</div>
</div>
</div>
<div class="flex items-center gap-2 pr-[14px] sm:ml-auto">
<div class="hidden h-[28px] items-center gap-1.5 rounded-md border p-[2px] shadow-sm md:flex">
<ToggleGroup
type="single"
default-value="100"
@update:model-value="(value) => {
resizableRef?.resize(parseInt(value))
}"
>
<ToggleGroupItem
value="100"
class="h-[22px] w-[22px] rounded-sm p-0"
>
<Monitor class="h-3.5 w-3.5" />
</ToggleGroupItem>
<ToggleGroupItem
value="60"
class="h-[22px] w-[22px] rounded-sm p-0"
>
<Tablet class="h-3.5 w-3.5" />
</ToggleGroupItem>
<ToggleGroupItem
value="30"
class="h-[22px] w-[22px] rounded-sm p-0"
>
<Smartphone class="h-3.5 w-3.5" />
</ToggleGroupItem>
</ToggleGroup>
</div>
<Separator
orientation="vertical"
class="mx-2 hidden h-4 md:flex"
/>
<StyleSwitcher class="h-7" />
<Popover>
<PopoverTrigger class="hidden text-muted-foreground hover:text-foreground sm:flex">
<CircleHelp class="h-3.5 w-3.5" />
<span class="sr-only">Block description</span>
</PopoverTrigger>
<PopoverContent
side="top"
:side-offset="20"
class="space-y-3 rounded-[0.5rem] text-sm"
>
<p class="font-medium">
What is the difference between the New York and Default style?
</p>
<p>
A style comes with its own set of components, animations,
icons and more.
</p>
<p>
The <span class="font-medium">Default</span> style has
larger inputs, uses lucide-vue-next for icons and
tailwindcss-animate for animations.
</p>
<p>
The <span class="font-medium">New York</span> style ships
with smaller buttons and inputs. It also uses shadows on cards
and buttons.
</p>
</PopoverContent>
</Popover>
<Separator orientation="vertical" class="mx-2 h-4" />
<BlockCopyButton :code="rawString" />
<!-- <V0Button
name="{block.name}"
description="{block.description" || "Edit in v0"}
code="{block.code}"
style="{block.style}"
/> -->
</div>
</div> </div>
<div <TabsContent
:class="[container ? 'w-full' : 'absolute inset-0 hidden w-[1600px] bg-background md:block']" v-show="tabValue === 'preview'"
force-mount
value="preview"
class="relative after:absolute after:inset-0 after:right-3 after:z-0 after:rounded-lg after:bg-muted h-[--container-height] px-0"
> >
<iframe <ResizablePanelGroup id="block-resizable" direction="horizontal" class="relative z-10">
v-show="!isLoading" <ResizablePanel
:src="iframeURL" id="block-resizable-panel-1"
class="relative z-20 w-full bg-background" :class="[container ? 'h-[--container-height]' : 'size-full']" ref="resizableRef"
@load="isLoading = false" class="relative rounded-lg border bg-background transition-all "
:default-size="100"
:min-size="30"
>
<div v-if="isLoading" class="flex items-center justify-center h-full">
<Spinner />
</div>
<iframe
v-show="!isLoading"
:src="`/blocks/renderer#name=${name}&style=${style}&containerClass=${encodeURIComponent(metadata.containerClass ?? '')}`"
class="relative z-20 w-full bg-background h-[--container-height]"
@load="isLoading = false"
/>
</ResizablePanel>
<ResizableHandle id="block-resizable-handle" class="relative hidden w-3 bg-transparent p-0 after:absolute after:right-0 after:top-1/2 after:h-8 after:w-[6px] after:-translate-y-1/2 after:translate-x-[-1px] after:rounded-full after:bg-border after:transition-all after:hover:h-10 sm:block" />
<ResizablePanel id="block-resizable-panel-2" :default-size="0" :min-size="0" />
</ResizablePanelGroup>
</TabsContent>
<TabsContent value="code" class="h-[--container-height]">
<div
class="language-vue !h-full !max-h-[none] !mt-0"
v-html="codeHtml"
/> />
</div> </TabsContent>
</div> </Tabs>
</template> </template>

View File

@ -1,15 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import PageHeader from '../components/PageHeader.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import PageAction from '../components/PageAction.vue'
import Announcement from '../components/Announcement.vue'
import BlockPreview from './BlockPreview.vue'
import GitHubIcon from '~icons/radix-icons/github-logo'
import { buttonVariants } from '@/lib/registry/new-york/ui/button' import { buttonVariants } from '@/lib/registry/new-york/ui/button'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import GitHubIcon from '~icons/radix-icons/github-logo'
import { ref } from 'vue'
import Announcement from '../components/Announcement.vue'
import PageAction from '../components/PageAction.vue'
import PageHeader from '../components/PageHeader.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
import BlockContainer from './BlockContainer.vue'
const blocks = ref<string[]>([]) const blocks = ref<string[]>([])
@ -48,6 +48,6 @@ import('../../../__registry__/index').then((res) => {
</PageHeader> </PageHeader>
<section id="blocks" class="grid scroll-mt-24 gap-24 lg:gap-48"> <section id="blocks" class="grid scroll-mt-24 gap-24 lg:gap-48">
<BlockContainer v-for="block in blocks" :key="block" :name="block" /> <BlockPreview v-for="block in blocks" :key="block" :name="block" />
</section> </section>
</template> </template>

View File

@ -1,71 +0,0 @@
<script setup lang="ts">
import { useData } from 'vitepress'
import { onMounted, ref, watch } from 'vue'
const { page, theme } = useData()
const carbonOptions = theme.value.carbonAds
const container = ref()
let isInitialized = false
function init() {
if (!isInitialized) {
isInitialized = true
const s = document.createElement('script')
s.type = 'text/javascript'
s.id = '_carbonads_js'
s.src = `//cdn.carbonads.com/carbon.js?serve=${carbonOptions.code}&placement=${carbonOptions.placement}&format=cover`
s.async = true
container.value.appendChild(s)
}
}
watch(() => page.value.relativePath, () => {
if (isInitialized) {
;(window as any)._carbonads?.refresh()
}
})
// no need to account for option changes during dev, we can just
// refresh the page
if (carbonOptions) {
onMounted(() => {
// @ts-expect-error ignoring env
if (import.meta.env.DEV)
return
// if the page is loaded when aside is active, load carbon directly.
// otherwise, only load it if the page resizes to wide enough. this avoids
// loading carbon at all on mobile where it's never shown
init()
})
}
</script>
<template>
<div
ref="container"
/>
</template>
<style>
#carbon-responsive {
@apply w-[238px] !mt-6;
}
.carbon-responsive-wrap {
@apply bg-muted/50 border border-muted p-4 rounded-md flex flex-col items-center !important;
}
.carbon-responsive-wrap .carbon-img {
@apply flex-none rounded overflow-hidden !important;
}
.carbon-responsive-wrap .carbon-text {
@apply text-muted-foreground text-sm flex-none text-center !important;
}
#carbonads .carbon-poweredby {
@apply bg-background text-muted-foreground block text-right text-[10px] uppercase no-underline !important;
}
</style>

View File

@ -1,13 +1,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Button } from '@/lib/registry/new-york/ui/button'
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/new-york/ui/form'
import { Input } from '@/lib/registry/new-york/ui/input'
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from '@/lib/registry/new-york/ui/sheet'
import { useConfigStore } from '@/stores/config'
import { toTypedSchema } from '@vee-validate/zod'
import RadixIconsGear from '~icons/radix-icons/gear'
import { useForm } from 'vee-validate' import { useForm } from 'vee-validate'
import { toTypedSchema } from '@vee-validate/zod'
import * as z from 'zod' import * as z from 'zod'
import { useConfigStore } from '@/stores/config'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Input } from '@/lib/registry/new-york/ui/input'
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/new-york/ui/form'
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from '@/lib/registry/new-york/ui/sheet'
import RadixIconsGear from '~icons/radix-icons/gear'
const { codeConfig, setCodeConfig } = useConfigStore() const { codeConfig, setCodeConfig } = useConfigStore()

View File

@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import type { Style } from '@/lib/registry/styles'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Icon } from '@iconify/vue'
import { ref, toRefs, watch } from 'vue' import { ref, toRefs, watch } from 'vue'
import { Icon } from '@iconify/vue'
import { makeCodeSandboxParams } from '../utils/codeeditor' import { makeCodeSandboxParams } from '../utils/codeeditor'
import Tooltip from './Tooltip.vue' import Tooltip from './Tooltip.vue'
import { Button } from '@/lib/registry/new-york/ui/button'
import type { Style } from '@/lib/registry/styles'
const props = defineProps<{ const props = defineProps<{
name: string name: string

View File

@ -1,5 +1,5 @@
import { type VNode, type VNodeArrayChildren, cloneVNode, defineComponent } from 'vue'
import { useConfigStore } from '@/stores/config' import { useConfigStore } from '@/stores/config'
import { cloneVNode, defineComponent, type VNode, type VNodeArrayChildren } from 'vue'
function crawlSpan(children: VNodeArrayChildren, cb: (vnode: VNode) => void) { function crawlSpan(children: VNodeArrayChildren, cb: (vnode: VNode) => void) {
children.forEach((childNode) => { children.forEach((childNode) => {

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useConfigStore } from '@/stores/config'
import { defineAsyncComponent } from 'vue' import { defineAsyncComponent } from 'vue'
import Spinner from './Spinner.vue' import Spinner from './Spinner.vue'
import { useConfigStore } from '@/stores/config'
const props = defineProps<{ const props = defineProps<{
name: string name: string

View File

@ -1,15 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/lib/registry/default/ui/tabs'
import { cn } from '@/lib/utils'
import { useConfigStore } from '@/stores/config'
import { useClipboard } from '@vueuse/core'
import MagicString from 'magic-string'
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
import { highlight } from '../config/shiki' import { codeToHtml } from 'shiki'
import CodeSandbox from './CodeSandbox.vue' import MagicString from 'magic-string'
import { useClipboard } from '@vueuse/core'
import { cssVariables } from '../config/shiki'
import StyleSwitcher from './StyleSwitcher.vue'
import ComponentLoader from './ComponentLoader.vue' import ComponentLoader from './ComponentLoader.vue'
import Stackblitz from './Stackblitz.vue' import Stackblitz from './Stackblitz.vue'
import StyleSwitcher from './StyleSwitcher.vue' import CodeSandbox from './CodeSandbox.vue'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/lib/registry/default/ui/tabs'
import { useConfigStore } from '@/stores/config'
import { cn } from '@/lib/utils'
defineOptions({ defineOptions({
inheritAttrs: false, inheritAttrs: false,
@ -36,7 +37,10 @@ function transformImportPath(code: string) {
watch([style, codeConfig], async () => { watch([style, codeConfig], async () => {
try { try {
rawString.value = await import(`../../../src/lib/registry/${style.value}/example/${props.name}.vue?raw`).then(res => res.default.trim()) rawString.value = await import(`../../../src/lib/registry/${style.value}/example/${props.name}.vue?raw`).then(res => res.default.trim())
codeHtml.value = highlight(transformedRawString.value, 'vue') codeHtml.value = await codeToHtml(transformedRawString.value, {
lang: 'vue',
theme: cssVariables,
})
} }
catch (err) { catch (err) {
console.error(err) console.error(err)

View File

@ -1,11 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, ref } from 'vue'
import { useClipboard } from '@vueuse/core'
import { useConfigStore } from '@/stores/config'
import { themes } from '@/lib/registry' import { themes } from '@/lib/registry'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { useConfigStore } from '@/stores/config'
import { useClipboard } from '@vueuse/core'
import CheckIcon from '~icons/radix-icons/check' import CheckIcon from '~icons/radix-icons/check'
import CopyIcon from '~icons/radix-icons/copy' import CopyIcon from '~icons/radix-icons/copy'
import { computed, ref } from 'vue'
const { theme, config } = useConfigStore() const { theme, config } = useConfigStore()

View File

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { useRoute } from 'vitepress'
import { computed } from 'vue'
import { import {
Breadcrumb, Breadcrumb,
BreadcrumbItem, BreadcrumbItem,
@ -6,8 +8,6 @@ import {
BreadcrumbList, BreadcrumbList,
BreadcrumbSeparator, BreadcrumbSeparator,
} from '@/lib/registry/new-york/ui/breadcrumb' } from '@/lib/registry/new-york/ui/breadcrumb'
import { useRoute } from 'vitepress'
import { computed } from 'vue'
const route = useRoute() const route = useRoute()

View File

@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/default/ui/button'
import Pencil2Icon from '~icons/radix-icons/pencil-2'
import { useData } from 'vitepress' import { useData } from 'vitepress'
import { computed } from 'vue' 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 { theme, page } = useData()

View File

@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { ScrollArea, ScrollBar } from '@/lib/registry/default/ui/scroll-area'
import { cn } from '@/lib/utils'
import ArrowRightIcon from '~icons/radix-icons/arrow-right'
import { useRoute } from 'vitepress' import { useRoute } from 'vitepress'
import { computed, toRefs } from 'vue' import { computed, toRefs } from 'vue'
import { cn } from '@/lib/utils'
import { ScrollArea, ScrollBar } from '@/lib/registry/default/ui/scroll-area'
import ArrowRightIcon from '~icons/radix-icons/arrow-right'
const { path } = toRefs(useRoute()) const { path } = toRefs(useRoute())

View File

@ -1,8 +1,8 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { Color } from '../types/colors' import type { Color } from '../types/colors'
import { useConfigStore } from '@/stores/config'
import { colors } from '@/lib/registry' import { colors } from '@/lib/registry'
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/lib/registry/new-york/ui/tooltip' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/lib/registry/new-york/ui/tooltip'
import { useConfigStore } from '@/stores/config'
import RadixIconsCheck from '~icons/radix-icons/check' import RadixIconsCheck from '~icons/radix-icons/check'
defineProps<{ defineProps<{

View File

@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import MailExample from '@/examples/mail/Example.vue' import PageHeader from '../components/PageHeader.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import PageAction from '../components/PageAction.vue'
import ExamplesNav from '../components/ExamplesNav.vue'
import Announcement from '../components/Announcement.vue'
import GitHubIcon from '~icons/radix-icons/github-logo'
import { buttonVariants } from '@/lib/registry/new-york/ui/button' import { buttonVariants } from '@/lib/registry/new-york/ui/button'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import GitHubIcon from '~icons/radix-icons/github-logo'
import Announcement from '../components/Announcement.vue'
import ExamplesNav from '../components/ExamplesNav.vue'
import PageAction from '../components/PageAction.vue'
import PageHeader from '../components/PageHeader.vue' import MailExample from '@/examples/mail/Example.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
</script> </script>
<template> <template>

View File

@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/default/ui/button'
import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
import { Sheet, SheetContent, SheetTrigger } from '@/lib/registry/default/ui/sheet'
import { ref } from 'vue' import { ref } from 'vue'
import { docsConfig } from '../config/docs' import { docsConfig } from '../config/docs'
import Logo from './Logo.vue' import Logo from './Logo.vue'
import { Sheet, SheetContent, SheetTrigger } from '@/lib/registry/default/ui/sheet'
import { Button } from '@/lib/registry/default/ui/button'
import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
const open = ref(false) const open = ref(false)
</script> </script>

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { cn } from '@/lib/utils'
import WrapBalancer from 'vue-wrap-balancer' import WrapBalancer from 'vue-wrap-balancer'
import { cn } from '@/lib/utils'
</script> </script>
<template> <template>

View File

@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import type { Style } from '@/lib/registry/styles'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Icon } from '@iconify/vue'
import { ref, toRefs, watch } from 'vue' import { ref, toRefs, watch } from 'vue'
import { Icon } from '@iconify/vue'
import { makeStackblitzParams } from '../utils/codeeditor' import { makeStackblitzParams } from '../utils/codeeditor'
import Tooltip from './Tooltip.vue' import Tooltip from './Tooltip.vue'
import { Button } from '@/lib/registry/new-york/ui/button'
import type { Style } from '@/lib/registry/styles'
const props = defineProps<{ const props = defineProps<{
name: string name: string

View File

@ -1,5 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import type { SelectTriggerProps } from 'radix-vue' import type { SelectTriggerProps } from 'radix-vue'
import { useConfigStore } from '@/stores/config'
import { cn } from '@/lib/utils'
import { import {
Select, Select,
SelectContent, SelectContent,
@ -7,10 +10,7 @@ import {
SelectTrigger, SelectTrigger,
SelectValue, SelectValue,
} from '@/lib/registry/new-york/ui/select' } from '@/lib/registry/new-york/ui/select'
import { styles } from '@/lib/registry/styles' import { styles } from '@/lib/registry/styles'
import { cn } from '@/lib/utils'
import { useConfigStore } from '@/stores/config'
const props = defineProps<SelectTriggerProps & { class?: string }>() const props = defineProps<SelectTriggerProps & { class?: string }>()
const { config } = useConfigStore() const { config } = useConfigStore()

View File

@ -1,16 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import type { TableOfContents, TableOfContentsItem } from '../types/docs'
import { buttonVariants } from '@/lib/registry/default/ui/button'
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/lib/registry/default/ui/collapsible'
import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
import { onContentUpdated } from 'vitepress' import { onContentUpdated } from 'vitepress'
import { shallowRef } from 'vue' import { shallowRef } from 'vue'
import CarbonAds from '../components/CarbonAds.vue' import type { TableOfContents, TableOfContentsItem } from '../types/docs'
import TableOfContentTree from './TableOfContentTree.vue' import TableOfContentTree from './TableOfContentTree.vue'
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/lib/registry/default/ui/collapsible'
defineProps<{ import { buttonVariants } from '@/lib/registry/default/ui/button'
showCarbonAds?: boolean import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
}>()
const headers = shallowRef<TableOfContents>() const headers = shallowRef<TableOfContents>()
@ -29,7 +24,7 @@ function getHeadingsWithHierarchy(divId: string) {
const level = Number.parseInt(heading.tagName.charAt(1)) const level = Number.parseInt(heading.tagName.charAt(1))
if (!heading.id) { if (!heading.id) {
const newId = heading.textContent const newId = heading.textContent
?.replaceAll(/[^a-z0-9 ]/gi, '') .replaceAll(/[^a-z0-9 ]/gi, '')
.replaceAll(' ', '-') .replaceAll(' ', '-')
.toLowerCase() .toLowerCase()
heading.id = `${newId}` heading.id = `${newId}`
@ -68,7 +63,6 @@ onContentUpdated(() => {
On This Page On This Page
</p> </p>
<TableOfContentTree :tree="headers" :level="1" /> <TableOfContentTree :tree="headers" :level="1" />
<CarbonAds v-if="showCarbonAds" />
</div> </div>
</ScrollArea> </ScrollArea>
</div> </div>

View File

@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, onUnmounted, ref, watch } from 'vue'
import { useRoute } from 'vitepress'
import type { TableOfContentsItem } from '../types/docs' import type { TableOfContentsItem } from '../types/docs'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { useRoute } from 'vitepress'
import { onMounted, onUnmounted, ref, watch } from 'vue'
withDefaults(defineProps<{ withDefaults(defineProps<{
level: number level: number

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { Tabs, TabsList, TabsTrigger } from '@/lib/registry/default/ui/tabs'
import { computed, useSlots } from 'vue' import { computed, useSlots } from 'vue'
import { Tabs, TabsList, TabsTrigger } from '@/lib/registry/default/ui/tabs'
const slots = useSlots() const slots = useSlots()

View File

@ -1,13 +1,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useData } from 'vitepress'
import type { Color } from '../types/colors' import type { Color } from '../types/colors'
import { colors } from '@/lib/registry' import { RADII, useConfigStore } from '@/stores/config'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { Label } from '@/lib/registry/new-york/ui/label' import { Label } from '@/lib/registry/new-york/ui/label'
import { RADII, useConfigStore } from '@/stores/config' import { colors } from '@/lib/registry'
import RadixIconsCheck from '~icons/radix-icons/check' import RadixIconsCheck from '~icons/radix-icons/check'
import RadixIconsMoon from '~icons/radix-icons/moon'
import RadixIconsSun from '~icons/radix-icons/sun' import RadixIconsSun from '~icons/radix-icons/sun'
import { useData } from 'vitepress' import RadixIconsMoon from '~icons/radix-icons/moon'
defineProps<{ defineProps<{
allColors: Color[] allColors: Color[]
@ -43,7 +43,7 @@ const { isDark } = useData()
@click="setTheme(color)" @click="setTheme(color)"
> >
<span <span
class="h-5 w-5 rounded-full flex items-center justify-center shrink-0" class="h-5 w-5 rounded-full flex items-center justify-center"
:style="{ backgroundColor: colors[color][7].rgb }" :style="{ backgroundColor: colors[color][7].rgb }"
> >
<RadixIconsCheck <RadixIconsCheck

View File

@ -1,11 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { Paintbrush } from 'lucide-vue-next'
import { onMounted, watch } from 'vue'
import { allColors } from './theming/utils/data'
import ThemeCustomizer from './ThemeCustomizer.vue'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover' import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import { useConfigStore } from '@/stores/config' import { useConfigStore } from '@/stores/config'
import { Paintbrush } from 'lucide-vue-next'
import { onMounted, watch } from 'vue'
import ThemeCustomizer from './ThemeCustomizer.vue'
import { allColors } from './theming/utils/data'
const { theme, radius } = useConfigStore() const { theme, radius } = useConfigStore()

View File

@ -1,12 +1,11 @@
export { default as APITable } from './APITable.vue'
export { default as BlockPreview } from './BlockPreview.vue'
export { default as Callout } from './Callout.vue'
export { default as CodeWrapper } from './CodeWrapper' export { default as CodeWrapper } from './CodeWrapper'
export { default as ComponentPreview } from './ComponentPreview.vue' export { default as ComponentPreview } from './ComponentPreview.vue'
export { default as APITable } from './APITable.vue'
export { default as TabPreview } from './TabPreview.vue'
export { default as TabMarkdown } from './TabMarkdown.vue'
export { default as TabsMarkdown } from './TabsMarkdown.vue'
export { default as Callout } from './Callout.vue'
export { default as LinkedCard } from './LinkedCard.vue' export { default as LinkedCard } from './LinkedCard.vue'
export { default as ManualInstall } from './ManualInstall.vue' export { default as ManualInstall } from './ManualInstall.vue'
export { default as Steps } from './Steps.vue' export { default as Steps } from './Steps.vue'
export { default as TabMarkdown } from './TabMarkdown.vue'
export { default as TabPreview } from './TabPreview.vue'
export { default as TabsMarkdown } from './TabsMarkdown.vue'
export { default as VPImage } from './VPImage.vue' export { default as VPImage } from './VPImage.vue'

View File

@ -1,25 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import { type Ref, ref } from 'vue'
import type { DateRange } from 'radix-vue' import type { DateRange } from 'radix-vue'
import { getLocalTimeZone, today } from '@internationalized/date'
import ThemingLayout from './../../layout/ThemingLayout.vue'
import CookieSettings from '@/examples/cards/components/CookieSettings.vue' import CookieSettings from '@/examples/cards/components/CookieSettings.vue'
import CreateAccount from '@/examples/cards/components/CreateAccount.vue' import CreateAccount from '@/examples/cards/components/CreateAccount.vue'
import PaymentMethod from '@/examples/cards/components/PaymentMethod.vue' import PaymentMethod from '@/examples/cards/components/PaymentMethod.vue'
import ReportAnIssue from '@/examples/cards/components/ReportAnIssue.vue' import ReportAnIssue from '@/examples/cards/components/ReportAnIssue.vue'
import ShareDocument from '@/examples/cards/components/ShareDocument.vue' import ShareDocument from '@/examples/cards/components/ShareDocument.vue'
import TeamMembers from '@/examples/cards/components/TeamMembers.vue' import TeamMembers from '@/examples/cards/components/TeamMembers.vue'
import CardChat from '@/lib/registry/new-york/example/CardChat.vue' import CardChat from '@/lib/registry/new-york/example/CardChat.vue'
import ActivityGoal from '@/lib/registry/new-york/example/Cards/ActivityGoal.vue' import ActivityGoal from '@/lib/registry/new-york/example/Cards/ActivityGoal.vue'
import DataTable from '@/lib/registry/new-york/example/Cards/DataTable.vue'
import Metric from '@/lib/registry/new-york/example/Cards/Metric.vue' import Metric from '@/lib/registry/new-york/example/Cards/Metric.vue'
import DataTable from '@/lib/registry/new-york/example/Cards/DataTable.vue'
import CardStats from '@/lib/registry/new-york/example/CardStats.vue' import CardStats from '@/lib/registry/new-york/example/CardStats.vue'
import { Card } from '@/lib/registry/new-york/ui/card' import { Card } from '@/lib/registry/new-york/ui/card'
import { RangeCalendar } from '@/lib/registry/new-york/ui/range-calendar' import { RangeCalendar } from '@/lib/registry/new-york/ui/range-calendar'
import { getLocalTimeZone, today } from '@internationalized/date'
import { type Ref, ref } from 'vue'
import ThemingLayout from './../../layout/ThemingLayout.vue'
const now = today(getLocalTimeZone()) const now = today(getLocalTimeZone())

View File

@ -128,10 +128,12 @@ export const docsConfig: DocsConfig = {
title: 'Auto Form', title: 'Auto Form',
href: '/docs/components/auto-form', href: '/docs/components/auto-form',
items: [], items: [],
label: 'New',
}, },
{ {
title: 'Charts', title: 'Charts',
href: '/docs/charts', href: '/docs/charts',
label: 'New Alpha',
items: [], items: [],
}, },
], ],
@ -139,11 +141,6 @@ export const docsConfig: DocsConfig = {
{ {
title: 'Components', title: 'Components',
items: [ items: [
{
title: 'Sidebar',
href: '/docs/components/sidebar',
label: 'New',
},
{ {
title: 'Accordion', title: 'Accordion',
href: '/docs/components/accordion', href: '/docs/components/accordion',
@ -181,6 +178,7 @@ export const docsConfig: DocsConfig = {
title: 'Calendar', title: 'Calendar',
href: '/docs/components/calendar', href: '/docs/components/calendar',
items: [], items: [],
label: 'Updated',
}, },
{ {
title: 'Card', title: 'Card',
@ -219,6 +217,7 @@ export const docsConfig: DocsConfig = {
title: 'Date Picker', title: 'Date Picker',
href: '/docs/components/date-picker', href: '/docs/components/date-picker',
items: [], items: [],
label: 'Updated',
}, },
{ {
title: 'Dialog', title: 'Dialog',
@ -260,6 +259,7 @@ export const docsConfig: DocsConfig = {
{ {
title: 'Number Field', title: 'Number Field',
href: '/docs/components/number-field', href: '/docs/components/number-field',
label: 'New Alpha',
}, },
{ {
title: 'Pagination', title: 'Pagination',
@ -324,6 +324,7 @@ export const docsConfig: DocsConfig = {
{ {
title: 'Stepper', title: 'Stepper',
href: '/docs/components/stepper', href: '/docs/components/stepper',
label: 'New',
}, },
{ {
title: 'Switch', title: 'Switch',

View File

@ -1,41 +1,6 @@
import type { HighlighterCore } from 'shiki/core' import { createCssVariablesTheme } from 'shiki'
import type { ThemeOptions } from 'vitepress'
import { computedAsync } from '@vueuse/core'
import { createHighlighterCore } from 'shiki/core'
import { createJavaScriptRegexEngine } from 'shiki/engine/javascript'
export const shikiThemes: ThemeOptions = { export const cssVariables = createCssVariablesTheme({
light: 'github-light-default', variablePrefix: '--shiki-',
dark: 'github-dark-default', variableDefaults: {},
}
export const highlighter = computedAsync<HighlighterCore>(async (onCancel) => {
const shiki = await createHighlighterCore({
engine: createJavaScriptRegexEngine(),
themes: [
() => import('shiki/themes/github-dark-default.mjs'),
() => import('shiki/themes/github-light-default.mjs'),
],
langs: [
() => import('shiki/langs/javascript.mjs'),
() => import('shiki/langs/vue.mjs'),
],
})
onCancel(() => shiki?.dispose())
return shiki
}) })
export function highlight(code: string, lang: string) {
if (!highlighter.value)
return code
return highlighter.value.codeToHtml(code, {
lang,
defaultColor: false,
themes: {
dark: 'github-dark-default',
light: 'github-light-default',
},
})
}

View File

@ -1,8 +1,8 @@
import * as components from './components'
import DocsLayout from './layout/DocsLayout.vue'
import ExamplesLayout from './layout/ExamplesLayout.vue'
// https://vitepress.dev/guide/custom-theme // https://vitepress.dev/guide/custom-theme
import Layout from './layout/MainLayout.vue' import Layout from './layout/MainLayout.vue'
import DocsLayout from './layout/DocsLayout.vue'
import ExamplesLayout from './layout/ExamplesLayout.vue'
import * as components from './components'
import './style.css' import './style.css'
import './styles/vp-doc.css' import './styles/vp-doc.css'
import './styles/shiki.css' import './styles/shiki.css'

View File

@ -1,12 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { useData, useRoute } from 'vitepress'
import { docsConfig } from '../config/docs'
import TableOfContentVue from '../components/TableOfContent.vue'
import EditLink from '../components/EditLink.vue'
import DocsBreadcrumb from '../components/DocsBreadcrumb.vue'
import { ScrollArea } from '@/lib/registry/default/ui/scroll-area' import { ScrollArea } from '@/lib/registry/default/ui/scroll-area'
import RadixIconsCode from '~icons/radix-icons/code' import RadixIconsCode from '~icons/radix-icons/code'
import RadixIconsExternalLink from '~icons/radix-icons/external-link' import RadixIconsExternalLink from '~icons/radix-icons/external-link'
import { useData, useRoute } from 'vitepress'
import DocsBreadcrumb from '../components/DocsBreadcrumb.vue'
import EditLink from '../components/EditLink.vue'
import TableOfContent from '../components/TableOfContent.vue'
import { docsConfig } from '../config/docs'
const $route = useRoute() const $route = useRoute()
const { frontmatter } = useData() const { frontmatter } = useData()
@ -62,7 +62,7 @@ const sourceLink = 'https://github.com/radix-vue/shadcn-vue/tree/dev/'
<main class="relative py-6 lg:gap-10 lg:py-8 xl:grid xl:grid-cols-[1fr_300px]"> <main class="relative py-6 lg:gap-10 lg:py-8 xl:grid xl:grid-cols-[1fr_300px]">
<div class="mx-auto w-full min-w-0"> <div class="mx-auto w-full min-w-0">
<div class="block xl:hidden"> <div class="block xl:hidden">
<TableOfContent /> <TableOfContentVue />
</div> </div>
<DocsBreadcrumb class="mb-4" /> <DocsBreadcrumb class="mb-4" />
@ -104,7 +104,7 @@ const sourceLink = 'https://github.com/radix-vue/shadcn-vue/tree/dev/'
<div class="hidden text-sm xl:block"> <div class="hidden text-sm xl:block">
<div class="sticky top-16 -mt-10 h-[calc(100vh-3.5rem)] overflow-hidden pt-6"> <div class="sticky top-16 -mt-10 h-[calc(100vh-3.5rem)] overflow-hidden pt-6">
<TableOfContent show-carbon-ads /> <TableOfContentVue />
</div> </div>
</div> </div>
</main> </main>

View File

@ -1,13 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import PageHeader from '../components/PageHeader.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import PageAction from '../components/PageAction.vue'
import ExamplesNav from '../components/ExamplesNav.vue'
import Announcement from '../components/Announcement.vue'
import { buttonVariants } from '@/lib/registry/new-york/ui/button' import { buttonVariants } from '@/lib/registry/new-york/ui/button'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import Announcement from '../components/Announcement.vue'
import ExamplesNav from '../components/ExamplesNav.vue'
import PageAction from '../components/PageAction.vue'
import PageHeader from '../components/PageHeader.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
</script> </script>
<template> <template>

View File

@ -1,29 +1,29 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/default/ui/button' import { useMagicKeys, useToggle } from '@vueuse/core'
import { onMounted, ref, watch } from 'vue'
import { Content, useData, useRoute, useRouter } from 'vitepress'
import { type NavItem, docsConfig } from '../config/docs'
import Logo from '../components/Logo.vue'
import MobileNav from '../components/MobileNav.vue'
import CodeConfigCustomizer from '../components/CodeConfigCustomizer.vue'
import Kbd from '../components/Kbd.vue'
import ThemePopover from '../components/ThemePopover.vue'
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from '@/lib/registry/default/ui/command' import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from '@/lib/registry/default/ui/command'
import { Button } from '@/lib/registry/default/ui/button'
import RadixIconsGithubLogo from '~icons/radix-icons/github-logo'
import RadixIconsMoon from '~icons/radix-icons/moon'
import RadixIconsSun from '~icons/radix-icons/sun'
import { useConfigStore } from '@/stores/config'
import { Dialog, DialogContent } from '@/lib/registry/default/ui/dialog' import { Dialog, DialogContent } from '@/lib/registry/default/ui/dialog'
import { Toaster as DefaultToaster } from '@/lib/registry/default/ui/toast' import { Toaster as DefaultToaster } from '@/lib/registry/default/ui/toast'
import { Toaster as NewYorkSonner } from '@/lib/registry/new-york/ui/sonner' import { Toaster as NewYorkSonner } from '@/lib/registry/new-york/ui/sonner'
import { Toaster as NewYorkToaster } from '@/lib/registry/new-york/ui/toast' import { Toaster as NewYorkToaster } from '@/lib/registry/new-york/ui/toast'
import { TooltipProvider } from '@/lib/registry/new-york/ui/tooltip' import { TooltipProvider } from '@/lib/registry/new-york/ui/tooltip'
import { useConfigStore } from '@/stores/config'
import { useMagicKeys, useToggle } from '@vueuse/core'
import Circle from '~icons/radix-icons/circle'
import File from '~icons/radix-icons/file' import File from '~icons/radix-icons/file'
import RadixIconsGithubLogo from '~icons/radix-icons/github-logo' import Circle from '~icons/radix-icons/circle'
import RadixIconsMoon from '~icons/radix-icons/moon'
import RadixIconsSun from '~icons/radix-icons/sun'
import { Content, useData, useRoute, useRouter } from 'vitepress'
import { onMounted, ref, watch } from 'vue'
import CodeConfigCustomizer from '../components/CodeConfigCustomizer.vue'
import Kbd from '../components/Kbd.vue'
import Logo from '../components/Logo.vue'
import MobileNav from '../components/MobileNav.vue'
import ThemePopover from '../components/ThemePopover.vue'
import { docsConfig, type NavItem } from '../config/docs'
const { radius, theme } = useConfigStore() const { radius, theme } = useConfigStore()
// Whenever the component is mounted, update the document class list // Whenever the component is mounted, update the document class list
@ -41,7 +41,7 @@ const toggleDark = useToggle(isDark)
const links = [ const links = [
{ {
name: 'GitHub', name: 'GitHub',
href: 'https://github.com/unovue/shadcn-vue', href: 'https://github.com/radix-vue/shadcn-vue',
icon: RadixIconsGithubLogo, icon: RadixIconsGithubLogo,
}, },
// { // {
@ -209,7 +209,7 @@ watch(() => $route.path, (n) => {
<span class="inline-block ml-2"> <span class="inline-block ml-2">
Ported to Vue by Ported to Vue by
<a <a
href="https://github.com/unovue" href="https://github.com/radix-vue"
target="_blank" target="_blank"
class="underline underline-offset-4 font-bold decoration-foreground" class="underline underline-offset-4 font-bold decoration-foreground"
> >
@ -220,7 +220,7 @@ watch(() => $route.path, (n) => {
<span class="inline-block ml-2"> <span class="inline-block ml-2">
The code source is available on The code source is available on
<a <a
href="https://github.com/unovue/shadcn-vue" href="https://github.com/radix-vue/shadcn-vue"
target="_blank" target="_blank"
class="underline underline-offset-4 font-bold decoration-foreground" class="underline underline-offset-4 font-bold decoration-foreground"
> >

View File

@ -1,19 +1,19 @@
<script setup lang="ts"> <script setup lang="ts">
import type { Color } from '../types/colors'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/lib/registry/new-york/ui/dialog'
import { Drawer, DrawerContent, DrawerTrigger } from '@/lib/registry/new-york/ui/drawer'
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import { useConfigStore } from '@/stores/config'
import { Paintbrush } from 'lucide-vue-next'
import { onMounted, watch } from 'vue' import { onMounted, watch } from 'vue'
import { Paintbrush } from 'lucide-vue-next'
import PageHeader from '../components/PageHeader.vue'
import PageHeaderHeading from '../components/PageHeaderHeading.vue'
import PageHeaderDescription from '../components/PageHeaderDescription.vue'
import CustomizerCode from '../components/CustomizerCode.vue' import CustomizerCode from '../components/CustomizerCode.vue'
import type { Color } from '../types/colors'
import ThemeCustomizer from '../components/ThemeCustomizer.vue'
import InlineThemePicker from '../components/InlineThemePicker.vue' import InlineThemePicker from '../components/InlineThemePicker.vue'
import PageAction from '../components/PageAction.vue' import PageAction from '../components/PageAction.vue'
import PageHeader from '../components/PageHeader.vue' import { useConfigStore } from '@/stores/config'
import PageHeaderDescription from '../components/PageHeaderDescription.vue' import { Button } from '@/lib/registry/new-york/ui/button'
import PageHeaderHeading from '../components/PageHeaderHeading.vue' import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import ThemeCustomizer from '../components/ThemeCustomizer.vue' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/lib/registry/new-york/ui/dialog'
import { Drawer, DrawerContent, DrawerTrigger } from '@/lib/registry/new-york/ui/drawer'
// Create an array of color values // Create an array of color values
const allColors: Color[] = [ const allColors: Color[] = [

View File

@ -1,7 +1,7 @@
// Credit to @hairyf https://github.com/hairyf/markdown-it-vitepress-demo // Credit to @hairyf https://github.com/hairyf/markdown-it-vitepress-demo
import type { AttributeNode, ElementNode } from '@vue/compiler-core'
import { baseParse } from '@vue/compiler-core' import { baseParse } from '@vue/compiler-core'
import type { AttributeNode, ElementNode } from '@vue/compiler-core'
export interface GenerateOptions { export interface GenerateOptions {
attrs?: string attrs?: string

View File

@ -6,7 +6,7 @@
:root { :root {
--font-geist-sans: "geist-sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, --font-geist-sans: "geist-sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
--background: 0 0% 100%; --background: 0 0% 100%;
--foreground: 240 10% 3.9%; --foreground: 240 10% 3.9%;
--card: 0 0% 100%; --card: 0 0% 100%;
@ -28,16 +28,6 @@
--ring: 240 5% 64.9%; --ring: 240 5% 64.9%;
--radius: 0.5rem; --radius: 0.5rem;
--sidebar-background: 0 0% 98%;
--sidebar-foreground: 240 5.3% 26.1%;
--sidebar-primary: 240 5.9% 10%;
--sidebar-primary-foreground: 0 0% 98%;
--sidebar-accent: 240 4.8% 95.9%;
--sidebar-accent-foreground: 240 5.9% 10%;
--sidebar-border: 220 13% 91%;
--sidebar-ring: 217.2 91.2% 59.8%;
--vis-primary-color: var(--primary); --vis-primary-color: var(--primary);
--vis-secondary-color: 160 81% 40%; --vis-secondary-color: 160 81% 40%;
--vis-text-color: var(--muted-foreground); --vis-text-color: var(--muted-foreground);
@ -74,22 +64,11 @@
--border: 240 3.7% 15.9%; --border: 240 3.7% 15.9%;
--input: 240 3.7% 15.9%; --input: 240 3.7% 15.9%;
--ring: 240 4.9% 83.9%; --ring: 240 4.9% 83.9%;
--sidebar-background: 240 5.9% 10%;
--sidebar-foreground: 240 4.8% 95.9%;
--sidebar-primary: 224.3 76.3% 48%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 240 3.7% 15.9%;
--sidebar-accent-foreground: 240 4.8% 95.9%;
--sidebar-border: 240 3.7% 15.9%;
--sidebar-ring: 217.2 91.2% 59.8%;
} }
* { * {
@apply border-border; @apply border-border;
scrollbar-width: thin;
scrollbar-color: hsl(var(--border)) transparent;
} }
html { html {
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
@ -118,6 +97,19 @@
src: url("/fonts/Geist/GeistVariableVF.woff2") format("woff2"); src: url("/fonts/Geist/GeistVariableVF.woff2") format("woff2");
} }
/* === Scrollbars === */
::-webkit-scrollbar {
@apply w-2;
@apply h-2;
}
::-webkit-scrollbar-track {
@apply !bg-muted;
}
::-webkit-scrollbar-thumb {
@apply rounded-sm !bg-muted-foreground/30;
}
/* Firefox */ /* Firefox */
/* https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-color#browser_compatibility */ /* https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-color#browser_compatibility */
@ -129,14 +121,14 @@
scrollbar-color: hsl(215.4 16.3% 56.9% / 0.3); scrollbar-color: hsl(215.4 16.3% 56.9% / 0.3);
} }
html.dark .shiki, .hide-scrollbar::-webkit-scrollbar {
html.dark .shiki span { display: none;
color: var(--shiki-dark); }
}
html:not(.dark) .shiki, .hide-scrollbar {
html:not(.dark) .shiki span { -ms-overflow-style: none;
color: var(--shiki-light); scrollbar-width: none;
} }
.antialised { .antialised {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
@ -155,7 +147,7 @@
@apply absolute w-9 h-9 bg-muted rounded-full font-mono font-medium text-center text-base inline-flex items-center justify-center -indent-px border-4 border-background; @apply absolute w-9 h-9 bg-muted rounded-full font-mono font-medium text-center text-base inline-flex items-center justify-center -indent-px border-4 border-background;
@apply -ml-[50px] -mt-1; @apply -ml-[50px] -mt-1;
content: counter(step); content: counter(step);
} }
} }
@media (max-width: 640px) { @media (max-width: 640px) {
@ -165,7 +157,7 @@
} }
div[class^="language-"] { div[class^="language-"] {
@apply mb-4 mt-6 max-h-[650px] overflow-x-auto md:rounded-lg border @apply mb-4 mt-6 max-h-[650px] overflow-x-auto md:rounded-lg border !bg-secondary-foreground dark:!bg-secondary
} }
pre { pre {
@apply py-4; @apply py-4;
@ -185,7 +177,7 @@ pre code {
pre code .line { pre code .line {
@apply px-4 min-h-4 !py-0.5 w-full inline-block leading-[--vp-code-line-height]; @apply px-4 min-h-4 !py-0.5 w-full inline-block leading-[--vp-code-line-height];
} }
.line-number { .line-number {
@apply !text-[.75rem] !inline-block text-muted-foreground leading-[--vp-code-line-height]; @apply !text-[.75rem] !inline-block text-muted-foreground leading-[--vp-code-line-height];

View File

@ -350,7 +350,7 @@
padding: 0 24px; */ padding: 0 24px; */
width: calc(100% + 2 * 24px); width: calc(100% + 2 * 24px);
display: inline-block; display: inline-block;
@apply bg-[hsl(var(--muted))] dark:bg-[hsl(var(--muted))] @apply bg-[hsl(var(--foreground))] dark:bg-[hsl(var(--background)_/_50%)]
} }
.vp-doc [class*='language-'] code .highlighted.error { .vp-doc [class*='language-'] code .highlighted.error {

View File

@ -62,56 +62,56 @@ export const Index = {
"AutoFormApi": { "AutoFormApi": {
name: "AutoFormApi", name: "AutoFormApi",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormApi.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormApi.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormApi.vue"], files: ["../src/lib/registry/default/example/AutoFormApi.vue"],
}, },
"AutoFormArray": { "AutoFormArray": {
name: "AutoFormArray", name: "AutoFormArray",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormArray.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormArray.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormArray.vue"], files: ["../src/lib/registry/default/example/AutoFormArray.vue"],
}, },
"AutoFormBasic": { "AutoFormBasic": {
name: "AutoFormBasic", name: "AutoFormBasic",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormBasic.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormBasic.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormBasic.vue"], files: ["../src/lib/registry/default/example/AutoFormBasic.vue"],
}, },
"AutoFormConfirmPassword": { "AutoFormConfirmPassword": {
name: "AutoFormConfirmPassword", name: "AutoFormConfirmPassword",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormConfirmPassword.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormConfirmPassword.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormConfirmPassword.vue"], files: ["../src/lib/registry/default/example/AutoFormConfirmPassword.vue"],
}, },
"AutoFormControlled": { "AutoFormControlled": {
name: "AutoFormControlled", name: "AutoFormControlled",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormControlled.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormControlled.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormControlled.vue"], files: ["../src/lib/registry/default/example/AutoFormControlled.vue"],
}, },
"AutoFormDependencies": { "AutoFormDependencies": {
name: "AutoFormDependencies", name: "AutoFormDependencies",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormDependencies.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormDependencies.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormDependencies.vue"], files: ["../src/lib/registry/default/example/AutoFormDependencies.vue"],
}, },
"AutoFormInputWithoutLabel": { "AutoFormInputWithoutLabel": {
name: "AutoFormInputWithoutLabel", name: "AutoFormInputWithoutLabel",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormInputWithoutLabel.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormInputWithoutLabel.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormInputWithoutLabel.vue"], files: ["../src/lib/registry/default/example/AutoFormInputWithoutLabel.vue"],
}, },
"AutoFormSubObject": { "AutoFormSubObject": {
name: "AutoFormSubObject", name: "AutoFormSubObject",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/default/example/AutoFormSubObject.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/AutoFormSubObject.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/AutoFormSubObject.vue"], files: ["../src/lib/registry/default/example/AutoFormSubObject.vue"],
}, },
@ -300,7 +300,7 @@ export const Index = {
"CalendarForm": { "CalendarForm": {
name: "CalendarForm", name: "CalendarForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","form","popover","toast","utils"], registryDependencies: ["calendar","button","form","popover","toast","utils"],
component: () => import("../src/lib/registry/default/example/CalendarForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CalendarForm.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CalendarForm.vue"], files: ["../src/lib/registry/default/example/CalendarForm.vue"],
}, },
@ -314,7 +314,7 @@ export const Index = {
"CardChat": { "CardChat": {
name: "CardChat", name: "CardChat",
type: "components:example", type: "components:example",
registryDependencies: ["avatar","button","card","command","dialog","input","tooltip","utils"], registryDependencies: ["card","dialog","command","avatar","tooltip","button","input","utils"],
component: () => import("../src/lib/registry/default/example/CardChat.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CardChat.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CardChat.vue"], files: ["../src/lib/registry/default/example/CardChat.vue"],
}, },
@ -328,14 +328,14 @@ export const Index = {
"CardFormDemo": { "CardFormDemo": {
name: "CardFormDemo", name: "CardFormDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","card","input","label","select"], registryDependencies: ["card","select","input","label","button"],
component: () => import("../src/lib/registry/default/example/CardFormDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CardFormDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CardFormDemo.vue"], files: ["../src/lib/registry/default/example/CardFormDemo.vue"],
}, },
"CardStats": { "CardStats": {
name: "CardStats", name: "CardStats",
type: "components:example", type: "components:example",
registryDependencies: ["card","themes","config"], registryDependencies: ["card","config","themes"],
component: () => import("../src/lib/registry/default/example/CardStats.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CardStats.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CardStats.vue"], files: ["../src/lib/registry/default/example/CardStats.vue"],
}, },
@ -356,42 +356,42 @@ export const Index = {
"CarouselDemo": { "CarouselDemo": {
name: "CarouselDemo", name: "CarouselDemo",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/default/example/CarouselDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CarouselDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CarouselDemo.vue"], files: ["../src/lib/registry/default/example/CarouselDemo.vue"],
}, },
"CarouselOrientation": { "CarouselOrientation": {
name: "CarouselOrientation", name: "CarouselOrientation",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/default/example/CarouselOrientation.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CarouselOrientation.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CarouselOrientation.vue"], files: ["../src/lib/registry/default/example/CarouselOrientation.vue"],
}, },
"CarouselPlugin": { "CarouselPlugin": {
name: "CarouselPlugin", name: "CarouselPlugin",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/default/example/CarouselPlugin.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CarouselPlugin.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CarouselPlugin.vue"], files: ["../src/lib/registry/default/example/CarouselPlugin.vue"],
}, },
"CarouselSize": { "CarouselSize": {
name: "CarouselSize", name: "CarouselSize",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/default/example/CarouselSize.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CarouselSize.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CarouselSize.vue"], files: ["../src/lib/registry/default/example/CarouselSize.vue"],
}, },
"CarouselSpacing": { "CarouselSpacing": {
name: "CarouselSpacing", name: "CarouselSpacing",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/default/example/CarouselSpacing.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CarouselSpacing.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CarouselSpacing.vue"], files: ["../src/lib/registry/default/example/CarouselSpacing.vue"],
}, },
"CarouselThumbnails": { "CarouselThumbnails": {
name: "CarouselThumbnails", name: "CarouselThumbnails",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/default/example/CarouselThumbnails.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CarouselThumbnails.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CarouselThumbnails.vue"], files: ["../src/lib/registry/default/example/CarouselThumbnails.vue"],
}, },
@ -412,14 +412,14 @@ export const Index = {
"CheckboxFormMultiple": { "CheckboxFormMultiple": {
name: "CheckboxFormMultiple", name: "CheckboxFormMultiple",
type: "components:example", type: "components:example",
registryDependencies: ["button","checkbox","form","toast"], registryDependencies: ["button","form","checkbox","toast"],
component: () => import("../src/lib/registry/default/example/CheckboxFormMultiple.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CheckboxFormMultiple.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CheckboxFormMultiple.vue"], files: ["../src/lib/registry/default/example/CheckboxFormMultiple.vue"],
}, },
"CheckboxFormSingle": { "CheckboxFormSingle": {
name: "CheckboxFormSingle", name: "CheckboxFormSingle",
type: "components:example", type: "components:example",
registryDependencies: ["button","checkbox","form","toast"], registryDependencies: ["button","form","checkbox","toast"],
component: () => import("../src/lib/registry/default/example/CheckboxFormSingle.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/CheckboxFormSingle.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/CheckboxFormSingle.vue"], files: ["../src/lib/registry/default/example/CheckboxFormSingle.vue"],
}, },
@ -440,7 +440,7 @@ export const Index = {
"ComboboxDemo": { "ComboboxDemo": {
name: "ComboboxDemo", name: "ComboboxDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","command","popover","utils"], registryDependencies: ["utils","button","command","popover"],
component: () => import("../src/lib/registry/default/example/ComboboxDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/ComboboxDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/ComboboxDemo.vue"], files: ["../src/lib/registry/default/example/ComboboxDemo.vue"],
}, },
@ -454,14 +454,14 @@ export const Index = {
"ComboboxForm": { "ComboboxForm": {
name: "ComboboxForm", name: "ComboboxForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","command","form","popover","toast","utils"], registryDependencies: ["utils","button","command","form","popover","toast"],
component: () => import("../src/lib/registry/default/example/ComboboxForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/ComboboxForm.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/ComboboxForm.vue"], files: ["../src/lib/registry/default/example/ComboboxForm.vue"],
}, },
"ComboboxPopover": { "ComboboxPopover": {
name: "ComboboxPopover", name: "ComboboxPopover",
type: "components:example", type: "components:example",
registryDependencies: ["button","command","popover","utils"], registryDependencies: ["utils","button","command","popover"],
component: () => import("../src/lib/registry/default/example/ComboboxPopover.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/ComboboxPopover.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/ComboboxPopover.vue"], files: ["../src/lib/registry/default/example/ComboboxPopover.vue"],
}, },
@ -517,7 +517,7 @@ export const Index = {
"DataTableDemoColumn": { "DataTableDemoColumn": {
name: "DataTableDemoColumn", name: "DataTableDemoColumn",
type: "components:example", type: "components:example",
registryDependencies: ["button","dropdown-menu"], registryDependencies: ["dropdown-menu","button"],
component: () => import("../src/lib/registry/default/example/DataTableDemoColumn.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DataTableDemoColumn.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DataTableDemoColumn.vue"], files: ["../src/lib/registry/default/example/DataTableDemoColumn.vue"],
}, },
@ -531,35 +531,35 @@ export const Index = {
"DatePickerDemo": { "DatePickerDemo": {
name: "DatePickerDemo", name: "DatePickerDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","popover","utils"], registryDependencies: ["calendar","button","popover","utils"],
component: () => import("../src/lib/registry/default/example/DatePickerDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DatePickerDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DatePickerDemo.vue"], files: ["../src/lib/registry/default/example/DatePickerDemo.vue"],
}, },
"DatePickerForm": { "DatePickerForm": {
name: "DatePickerForm", name: "DatePickerForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","form","popover","toast","utils"], registryDependencies: ["calendar","button","form","popover","toast","utils"],
component: () => import("../src/lib/registry/default/example/DatePickerForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DatePickerForm.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DatePickerForm.vue"], files: ["../src/lib/registry/default/example/DatePickerForm.vue"],
}, },
"DatePickerWithIndependentMonths": { "DatePickerWithIndependentMonths": {
name: "DatePickerWithIndependentMonths", name: "DatePickerWithIndependentMonths",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","range-calendar","utils"], registryDependencies: ["range-calendar","button","popover","utils"],
component: () => import("../src/lib/registry/default/example/DatePickerWithIndependentMonths.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DatePickerWithIndependentMonths.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DatePickerWithIndependentMonths.vue"], files: ["../src/lib/registry/default/example/DatePickerWithIndependentMonths.vue"],
}, },
"DatePickerWithPresets": { "DatePickerWithPresets": {
name: "DatePickerWithPresets", name: "DatePickerWithPresets",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","popover","select","utils"], registryDependencies: ["calendar","button","popover","select","utils"],
component: () => import("../src/lib/registry/default/example/DatePickerWithPresets.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DatePickerWithPresets.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DatePickerWithPresets.vue"], files: ["../src/lib/registry/default/example/DatePickerWithPresets.vue"],
}, },
"DatePickerWithRange": { "DatePickerWithRange": {
name: "DatePickerWithRange", name: "DatePickerWithRange",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","range-calendar","utils"], registryDependencies: ["range-calendar","button","popover","utils"],
component: () => import("../src/lib/registry/default/example/DatePickerWithRange.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DatePickerWithRange.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DatePickerWithRange.vue"], files: ["../src/lib/registry/default/example/DatePickerWithRange.vue"],
}, },
@ -580,7 +580,7 @@ export const Index = {
"DialogForm": { "DialogForm": {
name: "DialogForm", name: "DialogForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","dialog","form","input","toast"], registryDependencies: ["button","form","dialog","input","toast"],
component: () => import("../src/lib/registry/default/example/DialogForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DialogForm.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DialogForm.vue"], files: ["../src/lib/registry/default/example/DialogForm.vue"],
}, },
@ -636,7 +636,7 @@ export const Index = {
"DrawerDialog": { "DrawerDialog": {
name: "DrawerDialog", name: "DrawerDialog",
type: "components:example", type: "components:example",
registryDependencies: ["button","dialog","drawer","input","label"], registryDependencies: ["button","dialog","drawer","label","input"],
component: () => import("../src/lib/registry/default/example/DrawerDialog.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/DrawerDialog.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/DrawerDialog.vue"], files: ["../src/lib/registry/default/example/DrawerDialog.vue"],
}, },
@ -706,7 +706,7 @@ export const Index = {
"InputWithButton": { "InputWithButton": {
name: "InputWithButton", name: "InputWithButton",
type: "components:example", type: "components:example",
registryDependencies: ["button","input"], registryDependencies: ["input","button"],
component: () => import("../src/lib/registry/default/example/InputWithButton.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/InputWithButton.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/InputWithButton.vue"], files: ["../src/lib/registry/default/example/InputWithButton.vue"],
}, },
@ -769,28 +769,28 @@ export const Index = {
"NumberFieldCurrency": { "NumberFieldCurrency": {
name: "NumberFieldCurrency", name: "NumberFieldCurrency",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/default/example/NumberFieldCurrency.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/NumberFieldCurrency.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/NumberFieldCurrency.vue"], files: ["../src/lib/registry/default/example/NumberFieldCurrency.vue"],
}, },
"NumberFieldDecimal": { "NumberFieldDecimal": {
name: "NumberFieldDecimal", name: "NumberFieldDecimal",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/default/example/NumberFieldDecimal.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/NumberFieldDecimal.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/NumberFieldDecimal.vue"], files: ["../src/lib/registry/default/example/NumberFieldDecimal.vue"],
}, },
"NumberFieldDemo": { "NumberFieldDemo": {
name: "NumberFieldDemo", name: "NumberFieldDemo",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/default/example/NumberFieldDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/NumberFieldDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/NumberFieldDemo.vue"], files: ["../src/lib/registry/default/example/NumberFieldDemo.vue"],
}, },
"NumberFieldDisabled": { "NumberFieldDisabled": {
name: "NumberFieldDisabled", name: "NumberFieldDisabled",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/default/example/NumberFieldDisabled.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/NumberFieldDisabled.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/NumberFieldDisabled.vue"], files: ["../src/lib/registry/default/example/NumberFieldDisabled.vue"],
}, },
@ -804,14 +804,14 @@ export const Index = {
"NumberFieldPercentage": { "NumberFieldPercentage": {
name: "NumberFieldPercentage", name: "NumberFieldPercentage",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/default/example/NumberFieldPercentage.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/NumberFieldPercentage.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/NumberFieldPercentage.vue"], files: ["../src/lib/registry/default/example/NumberFieldPercentage.vue"],
}, },
"PaginationDemo": { "PaginationDemo": {
name: "PaginationDemo", name: "PaginationDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","pagination"], registryDependencies: ["pagination","button"],
component: () => import("../src/lib/registry/default/example/PaginationDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/PaginationDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/PaginationDemo.vue"], files: ["../src/lib/registry/default/example/PaginationDemo.vue"],
}, },
@ -839,7 +839,7 @@ export const Index = {
"PinInputFormDemo": { "PinInputFormDemo": {
name: "PinInputFormDemo", name: "PinInputFormDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","pin-input","toast"], registryDependencies: ["pin-input","button","form","toast"],
component: () => import("../src/lib/registry/default/example/PinInputFormDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/PinInputFormDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/PinInputFormDemo.vue"], files: ["../src/lib/registry/default/example/PinInputFormDemo.vue"],
}, },
@ -853,7 +853,7 @@ export const Index = {
"PopoverDemo": { "PopoverDemo": {
name: "PopoverDemo", name: "PopoverDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","input","label","popover"], registryDependencies: ["popover","button","label","input"],
component: () => import("../src/lib/registry/default/example/PopoverDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/PopoverDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/PopoverDemo.vue"], files: ["../src/lib/registry/default/example/PopoverDemo.vue"],
}, },
@ -979,7 +979,7 @@ export const Index = {
"SliderDemo": { "SliderDemo": {
name: "SliderDemo", name: "SliderDemo",
type: "components:example", type: "components:example",
registryDependencies: ["slider","utils"], registryDependencies: ["utils","slider"],
component: () => import("../src/lib/registry/default/example/SliderDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/SliderDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/SliderDemo.vue"], files: ["../src/lib/registry/default/example/SliderDemo.vue"],
}, },
@ -1014,21 +1014,21 @@ export const Index = {
"StepperForm": { "StepperForm": {
name: "StepperForm", name: "StepperForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","input","select","stepper","toast"], registryDependencies: ["stepper","form","select","input","button","toast"],
component: () => import("../src/lib/registry/default/example/StepperForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/StepperForm.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/StepperForm.vue"], files: ["../src/lib/registry/default/example/StepperForm.vue"],
}, },
"StepperHorizental": { "StepperHorizental": {
name: "StepperHorizental", name: "StepperHorizental",
type: "components:example", type: "components:example",
registryDependencies: ["button","stepper"], registryDependencies: ["stepper","button"],
component: () => import("../src/lib/registry/default/example/StepperHorizental.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/StepperHorizental.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/StepperHorizental.vue"], files: ["../src/lib/registry/default/example/StepperHorizental.vue"],
}, },
"StepperVertical": { "StepperVertical": {
name: "StepperVertical", name: "StepperVertical",
type: "components:example", type: "components:example",
registryDependencies: ["button","stepper"], registryDependencies: ["stepper","button"],
component: () => import("../src/lib/registry/default/example/StepperVertical.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/StepperVertical.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/StepperVertical.vue"], files: ["../src/lib/registry/default/example/StepperVertical.vue"],
}, },
@ -1084,7 +1084,7 @@ export const Index = {
"TagsInputFormDemo": { "TagsInputFormDemo": {
name: "TagsInputFormDemo", name: "TagsInputFormDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","tags-input","toast"], registryDependencies: ["tags-input","button","form","toast"],
component: () => import("../src/lib/registry/default/example/TagsInputFormDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/TagsInputFormDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/TagsInputFormDemo.vue"], files: ["../src/lib/registry/default/example/TagsInputFormDemo.vue"],
}, },
@ -1112,21 +1112,21 @@ export const Index = {
"TextareaWithButton": { "TextareaWithButton": {
name: "TextareaWithButton", name: "TextareaWithButton",
type: "components:example", type: "components:example",
registryDependencies: ["button","textarea"], registryDependencies: ["textarea","button"],
component: () => import("../src/lib/registry/default/example/TextareaWithButton.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/TextareaWithButton.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/TextareaWithButton.vue"], files: ["../src/lib/registry/default/example/TextareaWithButton.vue"],
}, },
"TextareaWithLabel": { "TextareaWithLabel": {
name: "TextareaWithLabel", name: "TextareaWithLabel",
type: "components:example", type: "components:example",
registryDependencies: ["label","textarea"], registryDependencies: ["textarea","label"],
component: () => import("../src/lib/registry/default/example/TextareaWithLabel.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/TextareaWithLabel.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/TextareaWithLabel.vue"], files: ["../src/lib/registry/default/example/TextareaWithLabel.vue"],
}, },
"TextareaWithText": { "TextareaWithText": {
name: "TextareaWithText", name: "TextareaWithText",
type: "components:example", type: "components:example",
registryDependencies: ["label","textarea"], registryDependencies: ["textarea","label"],
component: () => import("../src/lib/registry/default/example/TextareaWithText.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/TextareaWithText.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/TextareaWithText.vue"], files: ["../src/lib/registry/default/example/TextareaWithText.vue"],
}, },
@ -1140,7 +1140,7 @@ export const Index = {
"ToastDestructive": { "ToastDestructive": {
name: "ToastDestructive", name: "ToastDestructive",
type: "components:example", type: "components:example",
registryDependencies: ["button","toast","use-toast"], registryDependencies: ["button","use-toast","toast"],
component: () => import("../src/lib/registry/default/example/ToastDestructive.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/ToastDestructive.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/ToastDestructive.vue"], files: ["../src/lib/registry/default/example/ToastDestructive.vue"],
}, },
@ -1154,7 +1154,7 @@ export const Index = {
"ToastWithAction": { "ToastWithAction": {
name: "ToastWithAction", name: "ToastWithAction",
type: "components:example", type: "components:example",
registryDependencies: ["button","toast","use-toast"], registryDependencies: ["button","use-toast","toast"],
component: () => import("../src/lib/registry/default/example/ToastWithAction.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/ToastWithAction.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/ToastWithAction.vue"], files: ["../src/lib/registry/default/example/ToastWithAction.vue"],
}, },
@ -1364,42 +1364,42 @@ export const Index = {
"VDatePickerDemo": { "VDatePickerDemo": {
name: "VDatePickerDemo", name: "VDatePickerDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/default/example/VDatePickerDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/VDatePickerDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/VDatePickerDemo.vue"], files: ["../src/lib/registry/default/example/VDatePickerDemo.vue"],
}, },
"VDatePickerForm": { "VDatePickerForm": {
name: "VDatePickerForm", name: "VDatePickerForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","popover","toast","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","form","popover","toast"],
component: () => import("../src/lib/registry/default/example/VDatePickerForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/VDatePickerForm.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/VDatePickerForm.vue"], files: ["../src/lib/registry/default/example/VDatePickerForm.vue"],
}, },
"VDatePickerWithPresets": { "VDatePickerWithPresets": {
name: "VDatePickerWithPresets", name: "VDatePickerWithPresets",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","select","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover","select"],
component: () => import("../src/lib/registry/default/example/VDatePickerWithPresets.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/VDatePickerWithPresets.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/VDatePickerWithPresets.vue"], files: ["../src/lib/registry/default/example/VDatePickerWithPresets.vue"],
}, },
"VDatePickerWithRange": { "VDatePickerWithRange": {
name: "VDatePickerWithRange", name: "VDatePickerWithRange",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/default/example/VDatePickerWithRange.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/VDatePickerWithRange.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/VDatePickerWithRange.vue"], files: ["../src/lib/registry/default/example/VDatePickerWithRange.vue"],
}, },
"VDateTimePickerDemo": { "VDateTimePickerDemo": {
name: "VDateTimePickerDemo", name: "VDateTimePickerDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/default/example/VDateTimePickerDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/VDateTimePickerDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/VDateTimePickerDemo.vue"], files: ["../src/lib/registry/default/example/VDateTimePickerDemo.vue"],
}, },
"VRangePickerWithSlot": { "VRangePickerWithSlot": {
name: "VRangePickerWithSlot", name: "VRangePickerWithSlot",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/default/example/VRangePickerWithSlot.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/VRangePickerWithSlot.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/VRangePickerWithSlot.vue"], files: ["../src/lib/registry/default/example/VRangePickerWithSlot.vue"],
}, },
@ -1413,7 +1413,7 @@ export const Index = {
"DataTable": { "DataTable": {
name: "DataTable", name: "DataTable",
type: "components:example", type: "components:example",
registryDependencies: ["button","card","checkbox","dropdown-menu","input","table","utils"], registryDependencies: ["button","checkbox","dropdown-menu","input","table","card","utils"],
component: () => import("../src/lib/registry/default/example/Cards/DataTable.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/example/Cards/DataTable.vue").then((m) => m.default),
files: ["../src/lib/registry/default/example/Cards/DataTable.vue"], files: ["../src/lib/registry/default/example/Cards/DataTable.vue"],
}, },
@ -1483,38 +1483,24 @@ export const Index = {
"Dashboard05": { "Dashboard05": {
name: "Dashboard05", name: "Dashboard05",
type: "components:block", type: "components:block",
registryDependencies: ["badge","breadcrumb","button","card","checkbox","dropdown-menu","input","pagination","progress","separator","sheet","table","tabs","tooltip"], registryDependencies: ["badge","button","card","dropdown-menu","input","breadcrumb","sheet","pagination","progress","separator","table","tabs","tooltip","checkbox"],
component: () => import("../src/lib/registry/default/block/Dashboard05.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/block/Dashboard05.vue").then((m) => m.default),
files: ["../src/lib/registry/default/block/Dashboard05.vue"], files: ["../src/lib/registry/default/block/Dashboard05.vue"],
}, },
"Dashboard06": { "Dashboard06": {
name: "Dashboard06", name: "Dashboard06",
type: "components:block", type: "components:block",
registryDependencies: ["badge","breadcrumb","button","card","dropdown-menu","input","sheet","table","tabs","tooltip"], registryDependencies: ["badge","button","card","dropdown-menu","input","breadcrumb","sheet","table","tabs","tooltip"],
component: () => import("../src/lib/registry/default/block/Dashboard06.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/block/Dashboard06.vue").then((m) => m.default),
files: ["../src/lib/registry/default/block/Dashboard06.vue"], files: ["../src/lib/registry/default/block/Dashboard06.vue"],
}, },
"Dashboard07": { "Dashboard07": {
name: "Dashboard07", name: "Dashboard07",
type: "components:block", type: "components:block",
registryDependencies: ["badge","breadcrumb","button","card","dropdown-menu","input","label","select","sheet","table","textarea","toggle-group","tooltip"], registryDependencies: ["badge","button","card","dropdown-menu","input","textarea","label","toggle-group","breadcrumb","sheet","table","select","tooltip"],
component: () => import("../src/lib/registry/default/block/Dashboard07.vue").then((m) => m.default), component: () => import("../src/lib/registry/default/block/Dashboard07.vue").then((m) => m.default),
files: ["../src/lib/registry/default/block/Dashboard07.vue"], files: ["../src/lib/registry/default/block/Dashboard07.vue"],
}, },
"Sidebar01": {
name: "Sidebar01",
type: "components:block",
registryDependencies: ["breadcrumb","dropdown-menu","label","separator","sidebar"],
component: () => import("../src/lib/registry/default/block/Sidebar01.vue").then((m) => m.default),
files: ["../src/lib/registry/default/block/Sidebar01.vue"],
},
"Sidebar07": {
name: "Sidebar07",
type: "components:block",
registryDependencies: ["avatar","breadcrumb","collapsible","dropdown-menu","separator","sidebar"],
component: () => import("../src/lib/registry/default/block/Sidebar07.vue").then((m) => m.default),
files: ["../src/lib/registry/default/block/Sidebar07.vue"],
},
}, "new-york": { }, "new-york": {
"AccordionDemo": { "AccordionDemo": {
name: "AccordionDemo", name: "AccordionDemo",
@ -1575,56 +1561,56 @@ export const Index = {
"AutoFormApi": { "AutoFormApi": {
name: "AutoFormApi", name: "AutoFormApi",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormApi.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormApi.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormApi.vue"], files: ["../src/lib/registry/new-york/example/AutoFormApi.vue"],
}, },
"AutoFormArray": { "AutoFormArray": {
name: "AutoFormArray", name: "AutoFormArray",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormArray.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormArray.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormArray.vue"], files: ["../src/lib/registry/new-york/example/AutoFormArray.vue"],
}, },
"AutoFormBasic": { "AutoFormBasic": {
name: "AutoFormBasic", name: "AutoFormBasic",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormBasic.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormBasic.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormBasic.vue"], files: ["../src/lib/registry/new-york/example/AutoFormBasic.vue"],
}, },
"AutoFormConfirmPassword": { "AutoFormConfirmPassword": {
name: "AutoFormConfirmPassword", name: "AutoFormConfirmPassword",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormConfirmPassword.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormConfirmPassword.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormConfirmPassword.vue"], files: ["../src/lib/registry/new-york/example/AutoFormConfirmPassword.vue"],
}, },
"AutoFormControlled": { "AutoFormControlled": {
name: "AutoFormControlled", name: "AutoFormControlled",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormControlled.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormControlled.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormControlled.vue"], files: ["../src/lib/registry/new-york/example/AutoFormControlled.vue"],
}, },
"AutoFormDependencies": { "AutoFormDependencies": {
name: "AutoFormDependencies", name: "AutoFormDependencies",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormDependencies.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormDependencies.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormDependencies.vue"], files: ["../src/lib/registry/new-york/example/AutoFormDependencies.vue"],
}, },
"AutoFormInputWithoutLabel": { "AutoFormInputWithoutLabel": {
name: "AutoFormInputWithoutLabel", name: "AutoFormInputWithoutLabel",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormInputWithoutLabel.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormInputWithoutLabel.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormInputWithoutLabel.vue"], files: ["../src/lib/registry/new-york/example/AutoFormInputWithoutLabel.vue"],
}, },
"AutoFormSubObject": { "AutoFormSubObject": {
name: "AutoFormSubObject", name: "AutoFormSubObject",
type: "components:example", type: "components:example",
registryDependencies: ["auto-form","button","toast"], registryDependencies: ["button","toast","auto-form"],
component: () => import("../src/lib/registry/new-york/example/AutoFormSubObject.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/AutoFormSubObject.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/AutoFormSubObject.vue"], files: ["../src/lib/registry/new-york/example/AutoFormSubObject.vue"],
}, },
@ -1813,7 +1799,7 @@ export const Index = {
"CalendarForm": { "CalendarForm": {
name: "CalendarForm", name: "CalendarForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","form","popover","toast","utils"], registryDependencies: ["calendar","button","form","popover","toast","utils"],
component: () => import("../src/lib/registry/new-york/example/CalendarForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CalendarForm.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CalendarForm.vue"], files: ["../src/lib/registry/new-york/example/CalendarForm.vue"],
}, },
@ -1827,7 +1813,7 @@ export const Index = {
"CardChat": { "CardChat": {
name: "CardChat", name: "CardChat",
type: "components:example", type: "components:example",
registryDependencies: ["avatar","button","card","command","dialog","input","tooltip","utils"], registryDependencies: ["card","dialog","command","avatar","tooltip","button","input","utils"],
component: () => import("../src/lib/registry/new-york/example/CardChat.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CardChat.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CardChat.vue"], files: ["../src/lib/registry/new-york/example/CardChat.vue"],
}, },
@ -1841,14 +1827,14 @@ export const Index = {
"CardFormDemo": { "CardFormDemo": {
name: "CardFormDemo", name: "CardFormDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","card","input","label","select"], registryDependencies: ["card","select","input","label","button"],
component: () => import("../src/lib/registry/new-york/example/CardFormDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CardFormDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CardFormDemo.vue"], files: ["../src/lib/registry/new-york/example/CardFormDemo.vue"],
}, },
"CardStats": { "CardStats": {
name: "CardStats", name: "CardStats",
type: "components:example", type: "components:example",
registryDependencies: ["card","themes","config"], registryDependencies: ["card","config","themes"],
component: () => import("../src/lib/registry/new-york/example/CardStats.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CardStats.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CardStats.vue"], files: ["../src/lib/registry/new-york/example/CardStats.vue"],
}, },
@ -1869,42 +1855,42 @@ export const Index = {
"CarouselDemo": { "CarouselDemo": {
name: "CarouselDemo", name: "CarouselDemo",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/new-york/example/CarouselDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CarouselDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CarouselDemo.vue"], files: ["../src/lib/registry/new-york/example/CarouselDemo.vue"],
}, },
"CarouselOrientation": { "CarouselOrientation": {
name: "CarouselOrientation", name: "CarouselOrientation",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/new-york/example/CarouselOrientation.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CarouselOrientation.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CarouselOrientation.vue"], files: ["../src/lib/registry/new-york/example/CarouselOrientation.vue"],
}, },
"CarouselPlugin": { "CarouselPlugin": {
name: "CarouselPlugin", name: "CarouselPlugin",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/new-york/example/CarouselPlugin.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CarouselPlugin.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CarouselPlugin.vue"], files: ["../src/lib/registry/new-york/example/CarouselPlugin.vue"],
}, },
"CarouselSize": { "CarouselSize": {
name: "CarouselSize", name: "CarouselSize",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/new-york/example/CarouselSize.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CarouselSize.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CarouselSize.vue"], files: ["../src/lib/registry/new-york/example/CarouselSize.vue"],
}, },
"CarouselSpacing": { "CarouselSpacing": {
name: "CarouselSpacing", name: "CarouselSpacing",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/new-york/example/CarouselSpacing.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CarouselSpacing.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CarouselSpacing.vue"], files: ["../src/lib/registry/new-york/example/CarouselSpacing.vue"],
}, },
"CarouselThumbnails": { "CarouselThumbnails": {
name: "CarouselThumbnails", name: "CarouselThumbnails",
type: "components:example", type: "components:example",
registryDependencies: ["card","carousel"], registryDependencies: ["carousel","card"],
component: () => import("../src/lib/registry/new-york/example/CarouselThumbnails.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CarouselThumbnails.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CarouselThumbnails.vue"], files: ["../src/lib/registry/new-york/example/CarouselThumbnails.vue"],
}, },
@ -1925,14 +1911,14 @@ export const Index = {
"CheckboxFormMultiple": { "CheckboxFormMultiple": {
name: "CheckboxFormMultiple", name: "CheckboxFormMultiple",
type: "components:example", type: "components:example",
registryDependencies: ["button","checkbox","form","toast"], registryDependencies: ["button","form","checkbox","toast"],
component: () => import("../src/lib/registry/new-york/example/CheckboxFormMultiple.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CheckboxFormMultiple.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CheckboxFormMultiple.vue"], files: ["../src/lib/registry/new-york/example/CheckboxFormMultiple.vue"],
}, },
"CheckboxFormSingle": { "CheckboxFormSingle": {
name: "CheckboxFormSingle", name: "CheckboxFormSingle",
type: "components:example", type: "components:example",
registryDependencies: ["button","checkbox","form","toast"], registryDependencies: ["button","form","checkbox","toast"],
component: () => import("../src/lib/registry/new-york/example/CheckboxFormSingle.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/CheckboxFormSingle.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/CheckboxFormSingle.vue"], files: ["../src/lib/registry/new-york/example/CheckboxFormSingle.vue"],
}, },
@ -1953,7 +1939,7 @@ export const Index = {
"ComboboxDemo": { "ComboboxDemo": {
name: "ComboboxDemo", name: "ComboboxDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","command","popover","utils"], registryDependencies: ["utils","button","command","popover"],
component: () => import("../src/lib/registry/new-york/example/ComboboxDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/ComboboxDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/ComboboxDemo.vue"], files: ["../src/lib/registry/new-york/example/ComboboxDemo.vue"],
}, },
@ -1967,14 +1953,14 @@ export const Index = {
"ComboboxForm": { "ComboboxForm": {
name: "ComboboxForm", name: "ComboboxForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","command","form","popover","toast","utils"], registryDependencies: ["utils","button","command","form","popover","toast"],
component: () => import("../src/lib/registry/new-york/example/ComboboxForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/ComboboxForm.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/ComboboxForm.vue"], files: ["../src/lib/registry/new-york/example/ComboboxForm.vue"],
}, },
"ComboboxPopover": { "ComboboxPopover": {
name: "ComboboxPopover", name: "ComboboxPopover",
type: "components:example", type: "components:example",
registryDependencies: ["button","command","popover","utils"], registryDependencies: ["utils","button","command","popover"],
component: () => import("../src/lib/registry/new-york/example/ComboboxPopover.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/ComboboxPopover.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/ComboboxPopover.vue"], files: ["../src/lib/registry/new-york/example/ComboboxPopover.vue"],
}, },
@ -2030,7 +2016,7 @@ export const Index = {
"DataTableDemoColumn": { "DataTableDemoColumn": {
name: "DataTableDemoColumn", name: "DataTableDemoColumn",
type: "components:example", type: "components:example",
registryDependencies: ["button","dropdown-menu"], registryDependencies: ["dropdown-menu","button"],
component: () => import("../src/lib/registry/new-york/example/DataTableDemoColumn.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DataTableDemoColumn.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DataTableDemoColumn.vue"], files: ["../src/lib/registry/new-york/example/DataTableDemoColumn.vue"],
}, },
@ -2044,35 +2030,35 @@ export const Index = {
"DatePickerDemo": { "DatePickerDemo": {
name: "DatePickerDemo", name: "DatePickerDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","popover","utils"], registryDependencies: ["calendar","button","popover","utils"],
component: () => import("../src/lib/registry/new-york/example/DatePickerDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DatePickerDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DatePickerDemo.vue"], files: ["../src/lib/registry/new-york/example/DatePickerDemo.vue"],
}, },
"DatePickerForm": { "DatePickerForm": {
name: "DatePickerForm", name: "DatePickerForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","form","popover","toast","utils"], registryDependencies: ["calendar","button","form","popover","toast","utils"],
component: () => import("../src/lib/registry/new-york/example/DatePickerForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DatePickerForm.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DatePickerForm.vue"], files: ["../src/lib/registry/new-york/example/DatePickerForm.vue"],
}, },
"DatePickerWithIndependentMonths": { "DatePickerWithIndependentMonths": {
name: "DatePickerWithIndependentMonths", name: "DatePickerWithIndependentMonths",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","range-calendar","utils"], registryDependencies: ["range-calendar","button","popover","utils"],
component: () => import("../src/lib/registry/new-york/example/DatePickerWithIndependentMonths.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DatePickerWithIndependentMonths.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DatePickerWithIndependentMonths.vue"], files: ["../src/lib/registry/new-york/example/DatePickerWithIndependentMonths.vue"],
}, },
"DatePickerWithPresets": { "DatePickerWithPresets": {
name: "DatePickerWithPresets", name: "DatePickerWithPresets",
type: "components:example", type: "components:example",
registryDependencies: ["button","calendar","popover","select","utils"], registryDependencies: ["calendar","button","popover","select","utils"],
component: () => import("../src/lib/registry/new-york/example/DatePickerWithPresets.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DatePickerWithPresets.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DatePickerWithPresets.vue"], files: ["../src/lib/registry/new-york/example/DatePickerWithPresets.vue"],
}, },
"DatePickerWithRange": { "DatePickerWithRange": {
name: "DatePickerWithRange", name: "DatePickerWithRange",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","range-calendar","utils"], registryDependencies: ["range-calendar","button","popover","utils"],
component: () => import("../src/lib/registry/new-york/example/DatePickerWithRange.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DatePickerWithRange.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DatePickerWithRange.vue"], files: ["../src/lib/registry/new-york/example/DatePickerWithRange.vue"],
}, },
@ -2093,7 +2079,7 @@ export const Index = {
"DialogForm": { "DialogForm": {
name: "DialogForm", name: "DialogForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","dialog","form","input","toast"], registryDependencies: ["button","form","dialog","input","toast"],
component: () => import("../src/lib/registry/new-york/example/DialogForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DialogForm.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DialogForm.vue"], files: ["../src/lib/registry/new-york/example/DialogForm.vue"],
}, },
@ -2149,7 +2135,7 @@ export const Index = {
"DrawerDialog": { "DrawerDialog": {
name: "DrawerDialog", name: "DrawerDialog",
type: "components:example", type: "components:example",
registryDependencies: ["button","dialog","drawer","input","label"], registryDependencies: ["button","dialog","drawer","label","input"],
component: () => import("../src/lib/registry/new-york/example/DrawerDialog.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/DrawerDialog.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/DrawerDialog.vue"], files: ["../src/lib/registry/new-york/example/DrawerDialog.vue"],
}, },
@ -2219,7 +2205,7 @@ export const Index = {
"InputWithButton": { "InputWithButton": {
name: "InputWithButton", name: "InputWithButton",
type: "components:example", type: "components:example",
registryDependencies: ["button","input"], registryDependencies: ["input","button"],
component: () => import("../src/lib/registry/new-york/example/InputWithButton.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/InputWithButton.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/InputWithButton.vue"], files: ["../src/lib/registry/new-york/example/InputWithButton.vue"],
}, },
@ -2282,28 +2268,28 @@ export const Index = {
"NumberFieldCurrency": { "NumberFieldCurrency": {
name: "NumberFieldCurrency", name: "NumberFieldCurrency",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/new-york/example/NumberFieldCurrency.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/NumberFieldCurrency.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/NumberFieldCurrency.vue"], files: ["../src/lib/registry/new-york/example/NumberFieldCurrency.vue"],
}, },
"NumberFieldDecimal": { "NumberFieldDecimal": {
name: "NumberFieldDecimal", name: "NumberFieldDecimal",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/new-york/example/NumberFieldDecimal.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/NumberFieldDecimal.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/NumberFieldDecimal.vue"], files: ["../src/lib/registry/new-york/example/NumberFieldDecimal.vue"],
}, },
"NumberFieldDemo": { "NumberFieldDemo": {
name: "NumberFieldDemo", name: "NumberFieldDemo",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/new-york/example/NumberFieldDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/NumberFieldDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/NumberFieldDemo.vue"], files: ["../src/lib/registry/new-york/example/NumberFieldDemo.vue"],
}, },
"NumberFieldDisabled": { "NumberFieldDisabled": {
name: "NumberFieldDisabled", name: "NumberFieldDisabled",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/new-york/example/NumberFieldDisabled.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/NumberFieldDisabled.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/NumberFieldDisabled.vue"], files: ["../src/lib/registry/new-york/example/NumberFieldDisabled.vue"],
}, },
@ -2317,14 +2303,14 @@ export const Index = {
"NumberFieldPercentage": { "NumberFieldPercentage": {
name: "NumberFieldPercentage", name: "NumberFieldPercentage",
type: "components:example", type: "components:example",
registryDependencies: ["label","number-field"], registryDependencies: ["number-field","label"],
component: () => import("../src/lib/registry/new-york/example/NumberFieldPercentage.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/NumberFieldPercentage.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/NumberFieldPercentage.vue"], files: ["../src/lib/registry/new-york/example/NumberFieldPercentage.vue"],
}, },
"PaginationDemo": { "PaginationDemo": {
name: "PaginationDemo", name: "PaginationDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","pagination"], registryDependencies: ["pagination","button"],
component: () => import("../src/lib/registry/new-york/example/PaginationDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/PaginationDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/PaginationDemo.vue"], files: ["../src/lib/registry/new-york/example/PaginationDemo.vue"],
}, },
@ -2352,7 +2338,7 @@ export const Index = {
"PinInputFormDemo": { "PinInputFormDemo": {
name: "PinInputFormDemo", name: "PinInputFormDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","pin-input","toast"], registryDependencies: ["pin-input","button","form","toast"],
component: () => import("../src/lib/registry/new-york/example/PinInputFormDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/PinInputFormDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/PinInputFormDemo.vue"], files: ["../src/lib/registry/new-york/example/PinInputFormDemo.vue"],
}, },
@ -2366,7 +2352,7 @@ export const Index = {
"PopoverDemo": { "PopoverDemo": {
name: "PopoverDemo", name: "PopoverDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","input","label","popover"], registryDependencies: ["popover","button","label","input"],
component: () => import("../src/lib/registry/new-york/example/PopoverDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/PopoverDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/PopoverDemo.vue"], files: ["../src/lib/registry/new-york/example/PopoverDemo.vue"],
}, },
@ -2492,7 +2478,7 @@ export const Index = {
"SliderDemo": { "SliderDemo": {
name: "SliderDemo", name: "SliderDemo",
type: "components:example", type: "components:example",
registryDependencies: ["slider","utils"], registryDependencies: ["utils","slider"],
component: () => import("../src/lib/registry/new-york/example/SliderDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/SliderDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/SliderDemo.vue"], files: ["../src/lib/registry/new-york/example/SliderDemo.vue"],
}, },
@ -2527,21 +2513,21 @@ export const Index = {
"StepperForm": { "StepperForm": {
name: "StepperForm", name: "StepperForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","input","select","stepper","toast"], registryDependencies: ["stepper","form","select","input","button","toast"],
component: () => import("../src/lib/registry/new-york/example/StepperForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/StepperForm.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/StepperForm.vue"], files: ["../src/lib/registry/new-york/example/StepperForm.vue"],
}, },
"StepperHorizental": { "StepperHorizental": {
name: "StepperHorizental", name: "StepperHorizental",
type: "components:example", type: "components:example",
registryDependencies: ["button","stepper"], registryDependencies: ["stepper","button"],
component: () => import("../src/lib/registry/new-york/example/StepperHorizental.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/StepperHorizental.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/StepperHorizental.vue"], files: ["../src/lib/registry/new-york/example/StepperHorizental.vue"],
}, },
"StepperVertical": { "StepperVertical": {
name: "StepperVertical", name: "StepperVertical",
type: "components:example", type: "components:example",
registryDependencies: ["button","stepper"], registryDependencies: ["stepper","button"],
component: () => import("../src/lib/registry/new-york/example/StepperVertical.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/StepperVertical.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/StepperVertical.vue"], files: ["../src/lib/registry/new-york/example/StepperVertical.vue"],
}, },
@ -2597,7 +2583,7 @@ export const Index = {
"TagsInputFormDemo": { "TagsInputFormDemo": {
name: "TagsInputFormDemo", name: "TagsInputFormDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","tags-input","toast"], registryDependencies: ["tags-input","button","form","toast"],
component: () => import("../src/lib/registry/new-york/example/TagsInputFormDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/TagsInputFormDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/TagsInputFormDemo.vue"], files: ["../src/lib/registry/new-york/example/TagsInputFormDemo.vue"],
}, },
@ -2625,21 +2611,21 @@ export const Index = {
"TextareaWithButton": { "TextareaWithButton": {
name: "TextareaWithButton", name: "TextareaWithButton",
type: "components:example", type: "components:example",
registryDependencies: ["button","textarea"], registryDependencies: ["textarea","button"],
component: () => import("../src/lib/registry/new-york/example/TextareaWithButton.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/TextareaWithButton.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/TextareaWithButton.vue"], files: ["../src/lib/registry/new-york/example/TextareaWithButton.vue"],
}, },
"TextareaWithLabel": { "TextareaWithLabel": {
name: "TextareaWithLabel", name: "TextareaWithLabel",
type: "components:example", type: "components:example",
registryDependencies: ["label","textarea"], registryDependencies: ["textarea","label"],
component: () => import("../src/lib/registry/new-york/example/TextareaWithLabel.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/TextareaWithLabel.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/TextareaWithLabel.vue"], files: ["../src/lib/registry/new-york/example/TextareaWithLabel.vue"],
}, },
"TextareaWithText": { "TextareaWithText": {
name: "TextareaWithText", name: "TextareaWithText",
type: "components:example", type: "components:example",
registryDependencies: ["label","textarea"], registryDependencies: ["textarea","label"],
component: () => import("../src/lib/registry/new-york/example/TextareaWithText.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/TextareaWithText.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/TextareaWithText.vue"], files: ["../src/lib/registry/new-york/example/TextareaWithText.vue"],
}, },
@ -2653,7 +2639,7 @@ export const Index = {
"ToastDestructive": { "ToastDestructive": {
name: "ToastDestructive", name: "ToastDestructive",
type: "components:example", type: "components:example",
registryDependencies: ["button","toast","use-toast"], registryDependencies: ["button","use-toast","toast"],
component: () => import("../src/lib/registry/new-york/example/ToastDestructive.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/ToastDestructive.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/ToastDestructive.vue"], files: ["../src/lib/registry/new-york/example/ToastDestructive.vue"],
}, },
@ -2667,7 +2653,7 @@ export const Index = {
"ToastWithAction": { "ToastWithAction": {
name: "ToastWithAction", name: "ToastWithAction",
type: "components:example", type: "components:example",
registryDependencies: ["button","toast","use-toast"], registryDependencies: ["button","use-toast","toast"],
component: () => import("../src/lib/registry/new-york/example/ToastWithAction.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/ToastWithAction.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/ToastWithAction.vue"], files: ["../src/lib/registry/new-york/example/ToastWithAction.vue"],
}, },
@ -2877,42 +2863,42 @@ export const Index = {
"VDatePickerDemo": { "VDatePickerDemo": {
name: "VDatePickerDemo", name: "VDatePickerDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/new-york/example/VDatePickerDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/VDatePickerDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/VDatePickerDemo.vue"], files: ["../src/lib/registry/new-york/example/VDatePickerDemo.vue"],
}, },
"VDatePickerForm": { "VDatePickerForm": {
name: "VDatePickerForm", name: "VDatePickerForm",
type: "components:example", type: "components:example",
registryDependencies: ["button","form","popover","toast","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","form","popover","toast"],
component: () => import("../src/lib/registry/new-york/example/VDatePickerForm.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/VDatePickerForm.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/VDatePickerForm.vue"], files: ["../src/lib/registry/new-york/example/VDatePickerForm.vue"],
}, },
"VDatePickerWithPresets": { "VDatePickerWithPresets": {
name: "VDatePickerWithPresets", name: "VDatePickerWithPresets",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","select","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover","select"],
component: () => import("../src/lib/registry/new-york/example/VDatePickerWithPresets.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/VDatePickerWithPresets.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/VDatePickerWithPresets.vue"], files: ["../src/lib/registry/new-york/example/VDatePickerWithPresets.vue"],
}, },
"VDatePickerWithRange": { "VDatePickerWithRange": {
name: "VDatePickerWithRange", name: "VDatePickerWithRange",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/new-york/example/VDatePickerWithRange.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/VDatePickerWithRange.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/VDatePickerWithRange.vue"], files: ["../src/lib/registry/new-york/example/VDatePickerWithRange.vue"],
}, },
"VDateTimePickerDemo": { "VDateTimePickerDemo": {
name: "VDateTimePickerDemo", name: "VDateTimePickerDemo",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/new-york/example/VDateTimePickerDemo.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/VDateTimePickerDemo.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/VDateTimePickerDemo.vue"], files: ["../src/lib/registry/new-york/example/VDateTimePickerDemo.vue"],
}, },
"VRangePickerWithSlot": { "VRangePickerWithSlot": {
name: "VRangePickerWithSlot", name: "VRangePickerWithSlot",
type: "components:example", type: "components:example",
registryDependencies: ["button","popover","v-calendar","utils"], registryDependencies: ["utils","button","v-calendar","popover"],
component: () => import("../src/lib/registry/new-york/example/VRangePickerWithSlot.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/VRangePickerWithSlot.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/VRangePickerWithSlot.vue"], files: ["../src/lib/registry/new-york/example/VRangePickerWithSlot.vue"],
}, },
@ -2926,7 +2912,7 @@ export const Index = {
"DataTable": { "DataTable": {
name: "DataTable", name: "DataTable",
type: "components:example", type: "components:example",
registryDependencies: ["button","card","checkbox","dropdown-menu","input","table","utils"], registryDependencies: ["button","checkbox","dropdown-menu","input","table","card","utils"],
component: () => import("../src/lib/registry/new-york/example/Cards/DataTable.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/example/Cards/DataTable.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/example/Cards/DataTable.vue"], files: ["../src/lib/registry/new-york/example/Cards/DataTable.vue"],
}, },
@ -2996,37 +2982,23 @@ export const Index = {
"Dashboard05": { "Dashboard05": {
name: "Dashboard05", name: "Dashboard05",
type: "components:block", type: "components:block",
registryDependencies: ["badge","breadcrumb","button","card","checkbox","dropdown-menu","input","pagination","progress","separator","sheet","table","tabs","tooltip"], registryDependencies: ["badge","button","card","dropdown-menu","input","breadcrumb","sheet","pagination","progress","separator","table","tabs","tooltip","checkbox"],
component: () => import("../src/lib/registry/new-york/block/Dashboard05.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/block/Dashboard05.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/block/Dashboard05.vue"], files: ["../src/lib/registry/new-york/block/Dashboard05.vue"],
}, },
"Dashboard06": { "Dashboard06": {
name: "Dashboard06", name: "Dashboard06",
type: "components:block", type: "components:block",
registryDependencies: ["badge","breadcrumb","button","card","dropdown-menu","input","sheet","table","tabs","tooltip"], registryDependencies: ["badge","button","card","dropdown-menu","input","breadcrumb","sheet","table","tabs","tooltip"],
component: () => import("../src/lib/registry/new-york/block/Dashboard06.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/block/Dashboard06.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/block/Dashboard06.vue"], files: ["../src/lib/registry/new-york/block/Dashboard06.vue"],
}, },
"Dashboard07": { "Dashboard07": {
name: "Dashboard07", name: "Dashboard07",
type: "components:block", type: "components:block",
registryDependencies: ["badge","breadcrumb","button","card","dropdown-menu","input","label","select","sheet","table","textarea","toggle-group","tooltip"], registryDependencies: ["badge","button","card","dropdown-menu","input","textarea","label","toggle-group","breadcrumb","sheet","table","select","tooltip"],
component: () => import("../src/lib/registry/new-york/block/Dashboard07.vue").then((m) => m.default), component: () => import("../src/lib/registry/new-york/block/Dashboard07.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/block/Dashboard07.vue"], files: ["../src/lib/registry/new-york/block/Dashboard07.vue"],
}, },
"Sidebar01": {
name: "Sidebar01",
type: "components:block",
registryDependencies: ["breadcrumb","dropdown-menu","label","separator","sidebar"],
component: () => import("../src/lib/registry/new-york/block/Sidebar01.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/block/Sidebar01.vue"],
},
"Sidebar07": {
name: "Sidebar07",
type: "components:block",
registryDependencies: ["avatar","breadcrumb","collapsible","dropdown-menu","separator","sidebar"],
component: () => import("../src/lib/registry/new-york/block/Sidebar07.vue").then((m) => m.default),
files: ["../src/lib/registry/new-york/block/Sidebar07.vue"],
},
}, },
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "www", "name": "www",
"type": "module", "type": "module",
"version": "0.11.3", "version": "0.10.5",
"files": [ "files": [
"dist" "dist"
], ],
@ -68,11 +68,11 @@
"markdown-it": "^14.1.0", "markdown-it": "^14.1.0",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"rimraf": "^6.0.1", "rimraf": "^6.0.1",
"shiki": "^1.22.1", "shiki": "^1.17.7",
"tailwind-merge": "^2.5.2", "tailwind-merge": "^2.5.2",
"tailwindcss": "^3.4.12", "tailwindcss": "^3.4.12",
"tsx": "^4.19.1", "tsx": "^4.19.1",
"typescript": "catalog:", "typescript": "^5.6.2",
"unplugin-icons": "^0.19.3", "unplugin-icons": "^0.19.3",
"vitepress": "^1.3.4", "vitepress": "^1.3.4",
"vue-component-meta": "^2.1.6", "vue-component-meta": "^2.1.6",

View File

@ -1,9 +1,9 @@
import type { ComponentMeta, MetaCheckerOptions, PropertyMeta, PropertyMetaSchema } from 'vue-component-meta'
import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
import { join, parse, resolve } from 'node:path' import { join, parse, resolve } from 'node:path'
import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
import { fileURLToPath } from 'node:url' import { fileURLToPath } from 'node:url'
import fg from 'fast-glob' import fg from 'fast-glob'
import MarkdownIt from 'markdown-it' import MarkdownIt from 'markdown-it'
import type { ComponentMeta, MetaCheckerOptions, PropertyMeta, PropertyMetaSchema } from 'vue-component-meta'
import { createComponentMetaChecker } from 'vue-component-meta' import { createComponentMetaChecker } from 'vue-component-meta'
const __dirname = fileURLToPath(new URL('.', import.meta.url)) const __dirname = fileURLToPath(new URL('.', import.meta.url))

View File

@ -4,10 +4,10 @@ import { template } from 'lodash-es'
import { rimraf } from 'rimraf' import { rimraf } from 'rimraf'
import { colorMapping, colors } from '../src/lib/registry/colors' import { colorMapping, colors } from '../src/lib/registry/colors'
import { buildRegistry } from '../src/lib/registry/registry'
import { registrySchema } from '../src/lib/registry/schema' import { registrySchema } from '../src/lib/registry/schema'
import { styles } from '../src/lib/registry/styles' import { styles } from '../src/lib/registry/styles'
import { themes } from '../src/lib/registry/themes' import { themes } from '../src/lib/registry/themes'
import { buildRegistry } from '../src/lib/registry/registry'
const REGISTRY_PATH = path.join(process.cwd(), 'src/public/registry') const REGISTRY_PATH = path.join(process.cwd(), 'src/public/registry')
@ -80,17 +80,10 @@ for (const style of styles) {
continue continue
const files = item.files?.map((file) => { const files = item.files?.map((file) => {
let content: string = '' let content = fs.readFileSync(
path.join(process.cwd(), 'src/lib/registry', style.name, file),
try { 'utf8',
content = fs.readFileSync( )
path.join(process.cwd(), 'src/lib/registry', style.name, file),
'utf8',
)
}
catch (err) {
console.log(`'${file}' is missing`)
}
// Replace Windows-style newlines with Unix-style newlines // Replace Windows-style newlines with Unix-style newlines
content = content.replace(/\r\n/g, newLine) content = content.replace(/\r\n/g, newLine)
@ -106,7 +99,7 @@ for (const style of styles) {
files, files,
} }
const payloadStr = `${JSON.stringify(payload, null, 2).replace(/\r\n/g, newLine)}\n` const payloadStr = JSON.stringify(payload, null, 2).replace(/\r\n/g, newLine)
fs.writeFileSync( fs.writeFileSync(
path.join(targetPath, `${item.name}.json`), path.join(targetPath, `${item.name}.json`),
@ -202,73 +195,73 @@ export const BASE_STYLES = `@tailwind base;
export const BASE_STYLES_WITH_VARIABLES = `@tailwind base; export const BASE_STYLES_WITH_VARIABLES = `@tailwind base;
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
@layer base { @layer base {
:root { :root {
--background: <%- colors.light["background"] %>; --background: <%- colors.light["background"] %>;
--foreground: <%- colors.light["foreground"] %>; --foreground: <%- colors.light["foreground"] %>;
--muted: <%- colors.light["muted"] %>; --muted: <%- colors.light["muted"] %>;
--muted-foreground: <%- colors.light["muted-foreground"] %>; --muted-foreground: <%- colors.light["muted-foreground"] %>;
--popover: <%- colors.light["popover"] %>; --popover: <%- colors.light["popover"] %>;
--popover-foreground: <%- colors.light["popover-foreground"] %>; --popover-foreground: <%- colors.light["popover-foreground"] %>;
--card: <%- colors.light["card"] %>; --card: <%- colors.light["card"] %>;
--card-foreground: <%- colors.light["card-foreground"] %>; --card-foreground: <%- colors.light["card-foreground"] %>;
--border: <%- colors.light["border"] %>; --border: <%- colors.light["border"] %>;
--input: <%- colors.light["input"] %>; --input: <%- colors.light["input"] %>;
--primary: <%- colors.light["primary"] %>; --primary: <%- colors.light["primary"] %>;
--primary-foreground: <%- colors.light["primary-foreground"] %>; --primary-foreground: <%- colors.light["primary-foreground"] %>;
--secondary: <%- colors.light["secondary"] %>; --secondary: <%- colors.light["secondary"] %>;
--secondary-foreground: <%- colors.light["secondary-foreground"] %>; --secondary-foreground: <%- colors.light["secondary-foreground"] %>;
--accent: <%- colors.light["accent"] %>; --accent: <%- colors.light["accent"] %>;
--accent-foreground: <%- colors.light["accent-foreground"] %>; --accent-foreground: <%- colors.light["accent-foreground"] %>;
--destructive: <%- colors.light["destructive"] %>; --destructive: <%- colors.light["destructive"] %>;
--destructive-foreground: <%- colors.light["destructive-foreground"] %>; --destructive-foreground: <%- colors.light["destructive-foreground"] %>;
--ring: <%- colors.light["ring"] %>; --ring: <%- colors.light["ring"] %>;
--radius: 0.5rem; --radius: 0.5rem;
} }
.dark { .dark {
--background: <%- colors.dark["background"] %>; --background: <%- colors.dark["background"] %>;
--foreground: <%- colors.dark["foreground"] %>; --foreground: <%- colors.dark["foreground"] %>;
--muted: <%- colors.dark["muted"] %>; --muted: <%- colors.dark["muted"] %>;
--muted-foreground: <%- colors.dark["muted-foreground"] %>; --muted-foreground: <%- colors.dark["muted-foreground"] %>;
--popover: <%- colors.dark["popover"] %>; --popover: <%- colors.dark["popover"] %>;
--popover-foreground: <%- colors.dark["popover-foreground"] %>; --popover-foreground: <%- colors.dark["popover-foreground"] %>;
--card: <%- colors.dark["card"] %>; --card: <%- colors.dark["card"] %>;
--card-foreground: <%- colors.dark["card-foreground"] %>; --card-foreground: <%- colors.dark["card-foreground"] %>;
--border: <%- colors.dark["border"] %>; --border: <%- colors.dark["border"] %>;
--input: <%- colors.dark["input"] %>; --input: <%- colors.dark["input"] %>;
--primary: <%- colors.dark["primary"] %>; --primary: <%- colors.dark["primary"] %>;
--primary-foreground: <%- colors.dark["primary-foreground"] %>; --primary-foreground: <%- colors.dark["primary-foreground"] %>;
--secondary: <%- colors.dark["secondary"] %>; --secondary: <%- colors.dark["secondary"] %>;
--secondary-foreground: <%- colors.dark["secondary-foreground"] %>; --secondary-foreground: <%- colors.dark["secondary-foreground"] %>;
--accent: <%- colors.dark["accent"] %>; --accent: <%- colors.dark["accent"] %>;
--accent-foreground: <%- colors.dark["accent-foreground"] %>; --accent-foreground: <%- colors.dark["accent-foreground"] %>;
--destructive: <%- colors.dark["destructive"] %>; --destructive: <%- colors.dark["destructive"] %>;
--destructive-foreground: <%- colors.dark["destructive-foreground"] %>; --destructive-foreground: <%- colors.dark["destructive-foreground"] %>;
--ring: <%- colors.dark["ring"] %>; --ring: <%- colors.dark["ring"] %>;
} }
} }
@layer base { @layer base {
* { * {
@apply border-border; @apply border-border;
@ -290,7 +283,7 @@ for (const baseColor of ['slate', 'gray', 'zinc', 'neutral', 'stone', 'lime']) {
if (typeof value === 'string') { if (typeof value === 'string') {
const resolvedColor = value.replace( const resolvedColor = value.replace(
/\{\{base\}\}-/g, /\{\{base\}\}-/g,
`${baseColor}-`, `${baseColor}-`,
) )
base.inlineColors[mode][key] = resolvedColor base.inlineColors[mode][key] = resolvedColor
@ -326,64 +319,64 @@ export const THEME_STYLES_WITH_VARIABLES = `
.theme-<%- theme %> { .theme-<%- theme %> {
--background: <%- colors.light["background"] %>; --background: <%- colors.light["background"] %>;
--foreground: <%- colors.light["foreground"] %>; --foreground: <%- colors.light["foreground"] %>;
--muted: <%- colors.light["muted"] %>; --muted: <%- colors.light["muted"] %>;
--muted-foreground: <%- colors.light["muted-foreground"] %>; --muted-foreground: <%- colors.light["muted-foreground"] %>;
--popover: <%- colors.light["popover"] %>; --popover: <%- colors.light["popover"] %>;
--popover-foreground: <%- colors.light["popover-foreground"] %>; --popover-foreground: <%- colors.light["popover-foreground"] %>;
--card: <%- colors.light["card"] %>; --card: <%- colors.light["card"] %>;
--card-foreground: <%- colors.light["card-foreground"] %>; --card-foreground: <%- colors.light["card-foreground"] %>;
--border: <%- colors.light["border"] %>; --border: <%- colors.light["border"] %>;
--input: <%- colors.light["input"] %>; --input: <%- colors.light["input"] %>;
--primary: <%- colors.light["primary"] %>; --primary: <%- colors.light["primary"] %>;
--primary-foreground: <%- colors.light["primary-foreground"] %>; --primary-foreground: <%- colors.light["primary-foreground"] %>;
--secondary: <%- colors.light["secondary"] %>; --secondary: <%- colors.light["secondary"] %>;
--secondary-foreground: <%- colors.light["secondary-foreground"] %>; --secondary-foreground: <%- colors.light["secondary-foreground"] %>;
--accent: <%- colors.light["accent"] %>; --accent: <%- colors.light["accent"] %>;
--accent-foreground: <%- colors.light["accent-foreground"] %>; --accent-foreground: <%- colors.light["accent-foreground"] %>;
--destructive: <%- colors.light["destructive"] %>; --destructive: <%- colors.light["destructive"] %>;
--destructive-foreground: <%- colors.light["destructive-foreground"] %>; --destructive-foreground: <%- colors.light["destructive-foreground"] %>;
--ring: <%- colors.light["ring"] %>; --ring: <%- colors.light["ring"] %>;
--radius: 0.5rem; --radius: 0.5rem;
} }
.dark .theme-<%- theme %> { .dark .theme-<%- theme %> {
--background: <%- colors.dark["background"] %>; --background: <%- colors.dark["background"] %>;
--foreground: <%- colors.dark["foreground"] %>; --foreground: <%- colors.dark["foreground"] %>;
--muted: <%- colors.dark["muted"] %>; --muted: <%- colors.dark["muted"] %>;
--muted-foreground: <%- colors.dark["muted-foreground"] %>; --muted-foreground: <%- colors.dark["muted-foreground"] %>;
--popover: <%- colors.dark["popover"] %>; --popover: <%- colors.dark["popover"] %>;
--popover-foreground: <%- colors.dark["popover-foreground"] %>; --popover-foreground: <%- colors.dark["popover-foreground"] %>;
--card: <%- colors.dark["card"] %>; --card: <%- colors.dark["card"] %>;
--card-foreground: <%- colors.dark["card-foreground"] %>; --card-foreground: <%- colors.dark["card-foreground"] %>;
--border: <%- colors.dark["border"] %>; --border: <%- colors.dark["border"] %>;
--input: <%- colors.dark["input"] %>; --input: <%- colors.dark["input"] %>;
--primary: <%- colors.dark["primary"] %>; --primary: <%- colors.dark["primary"] %>;
--primary-foreground: <%- colors.dark["primary-foreground"] %>; --primary-foreground: <%- colors.dark["primary-foreground"] %>;
--secondary: <%- colors.dark["secondary"] %>; --secondary: <%- colors.dark["secondary"] %>;
--secondary-foreground: <%- colors.dark["secondary-foreground"] %>; --secondary-foreground: <%- colors.dark["secondary-foreground"] %>;
--accent: <%- colors.dark["accent"] %>; --accent: <%- colors.dark["accent"] %>;
--accent-foreground: <%- colors.dark["accent-foreground"] %>; --accent-foreground: <%- colors.dark["accent-foreground"] %>;
--destructive: <%- colors.dark["destructive"] %>; --destructive: <%- colors.dark["destructive"] %>;
--destructive-foreground: <%- colors.dark["destructive-foreground"] %>; --destructive-foreground: <%- colors.dark["destructive-foreground"] %>;
--ring: <%- colors.dark["ring"] %>; --ring: <%- colors.dark["ring"] %>;
}` }`

View File

@ -15,7 +15,7 @@ npx shadcn-vue@latest init
You will be asked a few questions to configure `components.json`: You will be asked a few questions to configure `components.json`:
```ansi:line-numbers ```txt:line-numbers
Would you like to use TypeScript (recommended)? no / yes Would you like to use TypeScript (recommended)? no / yes
Which framework are you using? Vite / Nuxt / Laravel Which framework are you using? Vite / Nuxt / Laravel
Which style would you like to use? Default Which style would you like to use? Default
@ -29,7 +29,7 @@ Configure the import alias for utils: @/lib/utils
### Options ### Options
```ansi ```txt
Usage: shadcn-vue init [options] Usage: shadcn-vue init [options]
initialize your project and install dependencies initialize your project and install dependencies
@ -50,7 +50,7 @@ npx shadcn-vue@latest add [component]
You will be presented with a list of components to choose from: You will be presented with a list of components to choose from:
```ansi ```txt
Which components would you like to add? Space to select. Return to submit. Which components would you like to add? Space to select. Return to submit.
◯ accordion ◯ accordion
@ -67,7 +67,7 @@ Which components would you like to add? Space to select. Return to submit.
### Options ### Options
```ansi ```txt
Usage: shadcn-vue add [options] [components...] Usage: shadcn-vue add [options] [components...]
add components to your project add components to your project
@ -90,7 +90,7 @@ Use the `update` command to update components in your project. This will overwri
We plan on improving this command in the future to improve the update experience. We plan on improving this command in the future to improve the update experience.
```ansi ```txt
Usage: shadcn-vue update [options] [components...] Usage: shadcn-vue update [options] [components...]
update components in your project update components in your project

View File

@ -312,12 +312,12 @@ In `CustomField.vue`
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import type { FieldProps } from './interface'
import { AutoFormLabel } from '@/ui/auto-form'
import { FormControl, FormDescription, FormField, FormItem, FormMessage } from '@/ui/form'
import { Input } from '@/ui/input'
import { computed } from 'vue' import { computed } from 'vue'
import AutoFormLabel from './AutoFormLabel.vue' import AutoFormLabel from './AutoFormLabel.vue'
import type { FieldProps } from './interface'
import { FormControl, FormDescription, FormField, FormItem, FormMessage } from '@/ui/form'
import { Input } from '@/ui/input'
import { AutoFormLabel } from '@/ui/auto-form'
const props = defineProps<FieldProps>() const props = defineProps<FieldProps>()
</script> </script>
@ -403,10 +403,9 @@ By passing the `form` as props, you can control and use the method provided by `
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { AutoForm } from '@/components/ui/auto-form'
import { toTypedSchema } from '@vee-validate/zod'
import { useForm } from 'vee-validate'
import * as z from 'zod' import * as z from 'zod'
import { useForm } from 'vee-validate'
import { toTypedSchema } from '@vee-validate/zod'
const schema = z.object({ const schema = z.object({
username: z.string(), username: z.string(),

View File

@ -23,8 +23,8 @@ npx shadcn-vue@latest add badge
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { type VariantProps, cva } from 'class-variance-authority'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { cva, type VariantProps } from 'class-variance-authority'
defineProps<Props>() defineProps<Props>()

View File

@ -23,8 +23,8 @@ npx shadcn-vue@latest add button
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { cn } from '@/lib/utils'
import { cva } from 'class-variance-authority' import { cva } from 'class-variance-authority'
import { cn } from '@/lib/utils'
const buttonVariants = cva( const buttonVariants = cva(
'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50', 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',

View File

@ -183,7 +183,7 @@ Use the `@init-api` emit method on `<Carousel />` component to set the instance
You can access it through setting a template ref on the `<Carousel />` component. You can access it through setting a template ref on the `<Carousel />` component.
```vue:line-numbers {2,5,10} ```vue:line-numbers {2,5,9}
<script setup> <script setup>
const carouselContainerRef = ref<InstanceType<typeof Carousel> | null>(null) const carouselContainerRef = ref<InstanceType<typeof Carousel> | null>(null)

View File

@ -51,12 +51,12 @@ module.exports = {
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import { import {
Collapsible, Collapsible,
CollapsibleContent, CollapsibleContent,
CollapsibleTrigger, CollapsibleTrigger,
} from '@/components/ui/collapsible' } from '@/components/ui/collapsible'
import { ref } from 'vue'
const isOpen = ref(false) const isOpen = ref(false)
</script> </script>

View File

@ -22,8 +22,11 @@ See installation instructions for the [Popover](/docs/components/popover#install
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/components/ui/button' import { Check, ChevronsUpDown } from 'lucide-vue-next'
import { ref } from 'vue'
import { cn } from '@/lib/utils'
import { Button } from '@/components/ui/button'
import { import {
Command, Command,
CommandEmpty, CommandEmpty,
@ -37,9 +40,6 @@ import {
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
} from '@/components/ui/popover' } from '@/components/ui/popover'
import { cn } from '@/lib/utils'
import { Check, ChevronsUpDown } from 'lucide-vue-next'
import { ref } from 'vue'
const frameworks = [ const frameworks = [
{ value: 'next.js', label: 'Next.js' }, { value: 'next.js', label: 'Next.js' },
@ -76,7 +76,7 @@ const value = ref('')
<CommandItem <CommandItem
v-for="framework in frameworks" v-for="framework in frameworks"
:key="framework.value" :key="framework.value"
:value="framework.value" :value="framework"
@select="open = false" @select="open = false"
> >
<Check <Check

View File

@ -1,7 +1,7 @@
--- ---
title: Data Table title: Data Table
description: Powerful table and datagrids built using TanStack Table. description: Powerful table and datagrids built using TanStack Table.
primitive: https://tanstack.com/table/v8/docs/introduction primitive: https://tanstack.com/table/v8/docs/guide/introduction
--- ---
<ComponentPreview name="DataTableDemo" /> <ComponentPreview name="DataTableDemo" />
@ -102,7 +102,7 @@ export const payments: Payment[] = [
Start by creating the following file structure: Start by creating the following file structure:
```ansi ```txt
components components
└── payments └── payments
├── columns.ts ├── columns.ts

View File

@ -17,10 +17,6 @@ npx shadcn-vue@latest add pagination
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import {
Button,
} from '@/components/ui/button'
import { import {
Pagination, Pagination,
PaginationEllipsis, PaginationEllipsis,
@ -31,6 +27,10 @@ import {
PaginationNext, PaginationNext,
PaginationPrev, PaginationPrev,
} from '@/components/ui/pagination' } from '@/components/ui/pagination'
import {
Button,
} from '@/components/ui/button'
</script> </script>
<template> <template>

View File

@ -1,12 +0,0 @@
---
title: Sidebar
description: A composable, themeable and customizable sidebar component.
---
<BlockPreview name="Sidebar07" ></BlockPreview>
## Installation
```bash
npx shadcn-vue@latest add sidebar
```

View File

@ -41,8 +41,8 @@ import { Toaster } from '@/components/ui/sonner'
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/components/ui/button'
import { toast } from 'vue-sonner' import { toast } from 'vue-sonner'
import { Button } from '@/components/ui/button'
</script> </script>
<template> <template>

View File

@ -48,19 +48,6 @@ import { Switch } from '@/components/ui/switch'
</template> </template>
``` ```
# Add icon inside switch thumb
```vue
<template>
<Switch :checked="isDark" @update:checked="toggleTheme">
<template #thumb>
<Icon v-if="isDark" icon="lucide:moon" class="size-3" />
<Icon v-else icon="lucide:sun" class="size-3" />
</template>
</Switch>
</template>
```
## Examples ## Examples
### Form ### Form

View File

@ -44,8 +44,8 @@ import { useToast } from '@/components/ui/toast/use-toast'
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Toaster } from '@/components/ui/toast'
import { useToast } from '@/components/ui/toast/use-toast' import { useToast } from '@/components/ui/toast/use-toast'
import { Toaster } from '@/components/ui/toast'
const { toast } = useToast() const { toast } = useToast()
</script> </script>

View File

@ -15,19 +15,19 @@ See installation instructions for the [Popover](/docs/components/popover#install
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { format } from 'date-fns'
import { Calendar as CalendarIcon } from 'lucide-vue-next'
import { ref } from 'vue'
import { cn } from '@/lib/utils'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Calendar } from '@/components/ui/v-calendar'
import { import {
Popover, Popover,
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
} from '@/components/ui/popover' } from '@/components/ui/popover'
import { Calendar } from '@/components/ui/v-calendar'
import { cn } from '@/lib/utils'
import { format } from 'date-fns'
import { Calendar as CalendarIcon } from 'lucide-vue-next'
import { ref } from 'vue'
const date = ref<Date>() const date = ref<Date>()
</script> </script>

View File

@ -101,13 +101,13 @@ You can use the `pnpm --filter=[WORKSPACE]` command to start the development pro
1. To run the `shadcn-vue.com` website: 1. To run the `shadcn-vue.com` website:
```bash ```
pnpm dev pnpm dev
``` ```
2. To run the `shadcn-vue` cli package: 2. To run the `shadcn-vue` cli package:
```bash ```
pnpm dev:cli pnpm dev:cli
``` ```

View File

@ -27,9 +27,9 @@ We're using [`useToggle`](https://vueuse.org/shared/useToggle/) from [`@vueuse/c
```vue ```vue
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/default/ui/button'
import { useToggle } from '@vueuse/core'
import { useData } from 'vitepress' import { useData } from 'vitepress'
import { useToggle } from '@vueuse/core'
import { Button } from '@/lib/registry/default/ui/button'
const { frontmatter, isDark } = useData() const { frontmatter, isDark } = useData()
const toggleDark = useToggle(isDark) const toggleDark = useToggle(isDark)

View File

@ -17,7 +17,7 @@ npm create astro@latest
You will be asked a few questions to configure your project: You will be asked a few questions to configure your project:
```ansi:line-numbers ```txt:line-numbers
- Where should we create your new project? - Where should we create your new project?
./your-app-name ./your-app-name
- How would you like to start your new project? - How would you like to start your new project?
@ -99,7 +99,7 @@ npx shadcn-vue@latest init
You will be asked a few questions to configure `components.json`: You will be asked a few questions to configure `components.json`:
```ansi:line-numbers ```txt:line-numbers
Would you like to use TypeScript (recommended)? no / yes Would you like to use TypeScript (recommended)? no / yes
Which framework are you using? Astro Which framework are you using? Astro
Which style would you like to use? Default Which style would you like to use? Default

View File

@ -25,7 +25,7 @@ npx shadcn-vue@latest init
You will be asked a few questions to configure `components.json`: You will be asked a few questions to configure `components.json`:
```ansi:line-numbers ```txt:line-numbers
Would you like to use TypeScript (recommended)? no / yes Would you like to use TypeScript (recommended)? no / yes
Which framework are you using? Vite / Nuxt / Laravel Which framework are you using? Vite / Nuxt / Laravel
Which style would you like to use? Default Which style would you like to use? Default

View File

@ -33,22 +33,6 @@ npm install -D typescript
npx nuxi@latest module add @nuxtjs/tailwindcss npx nuxi@latest module add @nuxtjs/tailwindcss
``` ```
Alternatively, you can manually add `@nuxtjs/tailwindcss` using your dependency manager
```bash
npm install --save-dev @nuxtjs/tailwindcss
```
and then to the `modules` section of `nuxt.config.{ts,js}`
```ts
export default defineNuxtConfig({
modules: [
'@nuxtjs/tailwindcss'
]
})
```
### Add `Nuxt` module ### Add `Nuxt` module
<br> <br>
@ -213,7 +197,7 @@ npx shadcn-vue@latest init
You will be asked a few questions to configure `components.json`: You will be asked a few questions to configure `components.json`:
```ansi:line-numbers ```txt:line-numbers
Would you like to use TypeScript (recommended)? no / yes Would you like to use TypeScript (recommended)? no / yes
Which framework are you using? Vite / Nuxt / Laravel Which framework are you using? Vite / Nuxt / Laravel
Which style would you like to use? Default Which style would you like to use? Default
@ -231,7 +215,7 @@ Write configuration to components.json. Proceed? > Y/n
Here's the default structure of Nuxt app. You can use this as a reference: Here's the default structure of Nuxt app. You can use this as a reference:
```ansi {6-16,20-21} ```txt {6-16,20-21}
. .
├── pages ├── pages
│ ├── index.vue │ ├── index.vue

View File

@ -44,22 +44,28 @@ Install `tailwindcss` and its peer dependencies, then generate your `tailwind.co
#### `vite.config` #### `vite.config`
```typescript {2,3,8-12} ```typescript {5,6,9-13}
import vue from '@vitejs/plugin-vue' import path from 'node:path'
import autoprefixer from 'autoprefixer' import vue from '@vitejs/plugin-vue'
import tailwind from 'tailwindcss' import autoprefixer from 'autoprefixer'
import { defineConfig } from 'vite'
// https://vite.dev/config/ import tailwind from 'tailwindcss'
export default defineConfig({ import { defineConfig } from 'vite'
css: {
postcss: { export default defineConfig({
plugins: [tailwind(), autoprefixer()], css: {
postcss: {
plugins: [tailwind(), autoprefixer()],
},
}, },
}, plugins: [vue()],
plugins: [vue()], resolve: {
}) alias: {
``` '@': path.resolve(__dirname, './src'),
},
},
})
```
</TabMarkdown> </TabMarkdown>
@ -115,14 +121,14 @@ Add the code below to the vite.config.ts so your app can resolve paths without e
npm i -D @types/node npm i -D @types/node
``` ```
```typescript {1,15-19} ```typescript {15-19}
import { fileURLToPath, URL } from 'node:url' import path from 'node:path'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import autoprefixer from 'autoprefixer' import autoprefixer from 'autoprefixer'
import tailwind from 'tailwindcss' import tailwind from 'tailwindcss'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
// https://vite.dev/config/
export default defineConfig({ export default defineConfig({
css: { css: {
postcss: { postcss: {
@ -132,9 +138,9 @@ export default defineConfig({
plugins: [vue()], plugins: [vue()],
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) '@': path.resolve(__dirname, './src'),
} },
} },
}) })
``` ```
@ -154,7 +160,7 @@ npx shadcn-vue@latest init
You will be asked a few questions to configure `components.json`: You will be asked a few questions to configure `components.json`:
```ansi:line-numbers ```txt:line-numbers
Would you like to use TypeScript (recommended)? no / yes Would you like to use TypeScript (recommended)? no / yes
Which framework are you using? Vite / Nuxt / Laravel Which framework are you using? Vite / Nuxt / Laravel
Which style would you like to use? Default Which style would you like to use? Default

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { buttonVariants } from '@/lib/registry/new-york/ui/button'
import { cn } from '@/lib/utils'
import UserAuthForm from './components/UserAuthForm.vue' import UserAuthForm from './components/UserAuthForm.vue'
import { cn } from '@/lib/utils'
import { buttonVariants } from '@/lib/registry/new-york/ui/button'
</script> </script>
<template> <template>

View File

@ -1,13 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import LucideSpinner from '~icons/lucide/loader-2'
import GitHubLogo from '~icons/radix-icons/github-logo'
import { cn } from '@/lib/utils'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { Input } from '@/lib/registry/new-york/ui/input' import { Input } from '@/lib/registry/new-york/ui/input'
import { Label } from '@/lib/registry/new-york/ui/label' import { Label } from '@/lib/registry/new-york/ui/label'
import { cn } from '@/lib/utils'
import LucideSpinner from '~icons/lucide/loader-2'
import GitHubLogo from '~icons/radix-icons/github-logo'
import { ref } from 'vue'
const isLoading = ref(false) const isLoading = ref(false)
async function onSubmit(event: Event) { async function onSubmit(event: Event) {
event.preventDefault() event.preventDefault()

View File

@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import GitHubIcon from '~icons/radix-icons/github-logo'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { import {
Card, Card,
@ -10,7 +11,6 @@ import {
} from '@/lib/registry/new-york/ui/card' } from '@/lib/registry/new-york/ui/card'
import { Input } from '@/lib/registry/new-york/ui/input' import { Input } from '@/lib/registry/new-york/ui/input'
import { Label } from '@/lib/registry/new-york/ui/label' import { Label } from '@/lib/registry/new-york/ui/label'
import GitHubIcon from '~icons/radix-icons/github-logo'
</script> </script>
<template> <template>

View File

@ -1,4 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import ChevronDownIcon from '~icons/radix-icons/chevron-down'
import CircleIcon from '~icons/radix-icons/circle'
import PlusIcon from '~icons/radix-icons/plus'
import StarIcon from '~icons/radix-icons/star'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { import {
Card, Card,
@ -17,11 +22,6 @@ import {
DropdownMenuTrigger, DropdownMenuTrigger,
} from '@/lib/registry/new-york/ui/dropdown-menu' } from '@/lib/registry/new-york/ui/dropdown-menu'
import { Separator } from '@/lib/registry/new-york/ui/separator' import { Separator } from '@/lib/registry/new-york/ui/separator'
import ChevronDownIcon from '~icons/radix-icons/chevron-down'
import CircleIcon from '~icons/radix-icons/circle'
import PlusIcon from '~icons/radix-icons/plus'
import StarIcon from '~icons/radix-icons/star'
</script> </script>
<template> <template>

View File

@ -1,4 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import BellIcon from '~icons/radix-icons/bell'
import EyeNoneIcon from '~icons/radix-icons/eye-none'
import PersonIcon from '~icons/radix-icons/person'
import { import {
Card, Card,
CardContent, CardContent,
@ -6,10 +10,6 @@ import {
CardHeader, CardHeader,
CardTitle, CardTitle,
} from '@/lib/registry/new-york/ui/card' } from '@/lib/registry/new-york/ui/card'
import BellIcon from '~icons/radix-icons/bell'
import EyeNoneIcon from '~icons/radix-icons/eye-none'
import PersonIcon from '~icons/radix-icons/person'
</script> </script>
<template> <template>

View File

@ -1,4 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import Overview from './components/Overview.vue'
import DateRangePicker from './components/DateRangePicker.vue'
import MainNav from './components/MainNav.vue'
import RecentSales from './components/RecentSales.vue'
import Search from './components/Search.vue'
import TeamSwitcher from './components/TeamSwitcher.vue'
import UserNav from './components/UserNav.vue'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { import {
Card, Card,
@ -13,14 +21,6 @@ import {
TabsList, TabsList,
TabsTrigger, TabsTrigger,
} from '@/lib/registry/new-york/ui/tabs' } from '@/lib/registry/new-york/ui/tabs'
import DateRangePicker from './components/DateRangePicker.vue'
import MainNav from './components/MainNav.vue'
import Overview from './components/Overview.vue'
import RecentSales from './components/RecentSales.vue'
import Search from './components/Search.vue'
import TeamSwitcher from './components/TeamSwitcher.vue'
import UserNav from './components/UserNav.vue'
</script> </script>
<template> <template>

View File

@ -1,18 +1,18 @@
<script setup lang="ts"> <script setup lang="ts">
import { Calendar as CalendarIcon } from 'lucide-vue-next'
import type { DateRange } from 'radix-vue' import type { DateRange } from 'radix-vue'
import { CalendarDate, DateFormatter, getLocalTimeZone } from '@internationalized/date'
import { type Ref, ref } from 'vue'
import { cn } from '@/lib/utils'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { RangeCalendar } from '@/lib/registry/new-york/ui/range-calendar'
import { import {
Popover, Popover,
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
} from '@/lib/registry/new-york/ui/popover' } from '@/lib/registry/new-york/ui/popover'
import { RangeCalendar } from '@/lib/registry/new-york/ui/range-calendar'
import { cn } from '@/lib/utils'
import { CalendarDate, DateFormatter, getLocalTimeZone } from '@internationalized/date'
import { Calendar as CalendarIcon } from 'lucide-vue-next'
import { type Ref, ref } from 'vue'
const df = new DateFormatter('en-US', { const df = new DateFormatter('en-US', {
dateStyle: 'medium', dateStyle: 'medium',
}) })

View File

@ -1,11 +1,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import CaretSortIcon from '~icons/radix-icons/caret-sort'
import CheckIcon from '~icons/radix-icons/check'
import PlusCircledIcon from '~icons/radix-icons/plus-circled'
import { cn } from '@/lib/utils'
import { import {
Avatar, Avatar,
AvatarFallback, AvatarFallback,
AvatarImage, AvatarImage,
} from '@/lib/registry/new-york/ui/avatar' } from '@/lib/registry/new-york/ui/avatar'
import { Button } from '@/lib/registry/new-york/ui/button' import { Button } from '@/lib/registry/new-york/ui/button'
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from '@/lib/registry/new-york/ui/command'
import { import {
Dialog, Dialog,
DialogContent, DialogContent,
@ -15,7 +21,7 @@ import {
DialogTitle, DialogTitle,
DialogTrigger, DialogTrigger,
} from '@/lib/registry/new-york/ui/dialog' } from '@/lib/registry/new-york/ui/dialog'
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from '@/lib/registry/new-york/ui/command'
import { Input } from '@/lib/registry/new-york/ui/input' import { Input } from '@/lib/registry/new-york/ui/input'
import { Label } from '@/lib/registry/new-york/ui/label' import { Label } from '@/lib/registry/new-york/ui/label'
import { import {
@ -23,7 +29,6 @@ import {
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
} from '@/lib/registry/new-york/ui/popover' } from '@/lib/registry/new-york/ui/popover'
import { import {
Select, Select,
SelectContent, SelectContent,
@ -31,11 +36,6 @@ import {
SelectTrigger, SelectTrigger,
SelectValue, SelectValue,
} from '@/lib/registry/new-york/ui/select' } from '@/lib/registry/new-york/ui/select'
import { cn } from '@/lib/utils'
import CaretSortIcon from '~icons/radix-icons/caret-sort'
import CheckIcon from '~icons/radix-icons/check'
import PlusCircledIcon from '~icons/radix-icons/plus-circled'
import { ref } from 'vue'
const groups = [ const groups = [
{ {

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import AccountForm from './components/AccountForm.vue'
import FormsLayout from './layouts/FormsLayout.vue' import FormsLayout from './layouts/FormsLayout.vue'
import AccountForm from './components/AccountForm.vue'
</script> </script>
<template> <template>

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import AppearanceForm from './components/AppearanceForm.vue'
import FormsLayout from './layouts/FormsLayout.vue' import FormsLayout from './layouts/FormsLayout.vue'
import AppearanceForm from './components/AppearanceForm.vue'
</script> </script>
<template> <template>

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import DisplayForm from './components/DisplayForm.vue'
import FormsLayout from './layouts/FormsLayout.vue' import FormsLayout from './layouts/FormsLayout.vue'
import DisplayForm from './components/DisplayForm.vue'
</script> </script>
<template> <template>

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ProfileForm from './components/ProfileForm.vue'
import FormsLayout from './layouts/FormsLayout.vue' import FormsLayout from './layouts/FormsLayout.vue'
import ProfileForm from './components/ProfileForm.vue'
</script> </script>
<template> <template>

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import NotificationsForm from './components/NotificationsForm.vue'
import FormsLayout from './layouts/FormsLayout.vue' import FormsLayout from './layouts/FormsLayout.vue'
import NotificationsForm from './components/NotificationsForm.vue'
</script> </script>
<template> <template>

View File

@ -1,6 +1,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/new-york/ui/button' import { h, ref } from 'vue'
import { Calendar } from '@/lib/registry/new-york/ui/calendar' import * as z from 'zod'
import { toDate } from 'radix-vue/date'
import { toTypedSchema } from '@vee-validate/zod'
import { Check, ChevronsUpDown } from 'lucide-vue-next'
import { CalendarDate, DateFormatter, getLocalTimeZone, today } from '@internationalized/date'
import { cn } from '@/lib/utils'
import RadixIconsCalendar from '~icons/radix-icons/calendar'
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/new-york/ui/form'
import { Input } from '@/lib/registry/new-york/ui/input'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { import {
Command, Command,
CommandEmpty, CommandEmpty,
@ -9,26 +20,15 @@ import {
CommandItem, CommandItem,
CommandList, CommandList,
} from '@/lib/registry/new-york/ui/command' } from '@/lib/registry/new-york/ui/command'
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/new-york/ui/form' import { Button } from '@/lib/registry/new-york/ui/button'
import { Input } from '@/lib/registry/new-york/ui/input'
import { import {
Popover, Popover,
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
} from '@/lib/registry/new-york/ui/popover' } from '@/lib/registry/new-york/ui/popover'
import { Separator } from '@/lib/registry/new-york/ui/separator' import { Calendar } from '@/lib/registry/new-york/ui/calendar'
import { toast } from '@/lib/registry/new-york/ui/toast' import { toast } from '@/lib/registry/new-york/ui/toast'
import { cn } from '@/lib/utils'
import { CalendarDate, DateFormatter, getLocalTimeZone, today } from '@internationalized/date'
import { toTypedSchema } from '@vee-validate/zod'
import RadixIconsCalendar from '~icons/radix-icons/calendar'
import { Check, ChevronsUpDown } from 'lucide-vue-next'
import { toDate } from 'radix-vue/date'
import { h, ref } from 'vue'
import * as z from 'zod'
const open = ref(false) const open = ref(false)
const dateValue = ref() const dateValue = ref()
const placeholder = ref() const placeholder = ref()

View File

@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { h } from 'vue'
import { useForm } from 'vee-validate'
import { toTypedSchema } from '@vee-validate/zod'
import * as z from 'zod'
import { ChevronDownIcon } from '@radix-icons/vue'
import { cn } from '@/lib/utils'
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/default/ui/form' import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/default/ui/form'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { RadioGroup, RadioGroupItem } from '@/lib/registry/default/ui/radio-group' import { RadioGroup, RadioGroupItem } from '@/lib/registry/default/ui/radio-group'
import { Button, buttonVariants } from '@/lib/registry/new-york/ui/button' import { Button, buttonVariants } from '@/lib/registry/new-york/ui/button'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { toast } from '@/lib/registry/new-york/ui/toast' import { toast } from '@/lib/registry/new-york/ui/toast'
import { cn } from '@/lib/utils'
import { ChevronDownIcon } from '@radix-icons/vue'
import { toTypedSchema } from '@vee-validate/zod'
import { useForm } from 'vee-validate'
import { h } from 'vue'
import * as z from 'zod'
const appearanceFormSchema = toTypedSchema(z.object({ const appearanceFormSchema = toTypedSchema(z.object({
theme: z.enum(['light', 'dark'], { theme: z.enum(['light', 'dark'], {

View File

@ -1,15 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/default/ui/form'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Checkbox } from '@/lib/registry/new-york/ui/checkbox'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { toast } from '@/lib/registry/new-york/ui/toast'
import { toTypedSchema } from '@vee-validate/zod'
import { useForm } from 'vee-validate'
import { h } from 'vue' import { h } from 'vue'
import { useForm } from 'vee-validate'
import { toTypedSchema } from '@vee-validate/zod'
import * as z from 'zod' import * as z from 'zod'
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/default/ui/form'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Checkbox } from '@/lib/registry/new-york/ui/checkbox'
import { Button } from '@/lib/registry/new-york/ui/button'
import { toast } from '@/lib/registry/new-york/ui/toast'
const items = [ const items = [
{ {
id: 'recents', id: 'recents',

View File

@ -1,7 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/default/ui/form' import { h, ref } from 'vue'
import { Button } from '@/lib/registry/new-york/ui/button' import { FieldArray, useForm } from 'vee-validate'
import { toTypedSchema } from '@vee-validate/zod'
import * as z from 'zod'
import { Cross1Icon } from '@radix-icons/vue'
import { cn } from '@/lib/utils'
import { Input } from '@/lib/registry/new-york/ui/input' import { Input } from '@/lib/registry/new-york/ui/input'
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/lib/registry/default/ui/form'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Textarea } from '@/lib/registry/new-york/ui/textarea'
import { import {
Select, Select,
SelectContent, SelectContent,
@ -10,16 +18,8 @@ import {
SelectTrigger, SelectTrigger,
SelectValue, SelectValue,
} from '@/lib/registry/new-york/ui/select' } from '@/lib/registry/new-york/ui/select'
import { Separator } from '@/lib/registry/new-york/ui/separator' import { Button } from '@/lib/registry/new-york/ui/button'
import { Textarea } from '@/lib/registry/new-york/ui/textarea'
import { toast } from '@/lib/registry/new-york/ui/toast' import { toast } from '@/lib/registry/new-york/ui/toast'
import { cn } from '@/lib/utils'
import { Cross1Icon } from '@radix-icons/vue'
import { toTypedSchema } from '@vee-validate/zod'
import { FieldArray, useForm } from 'vee-validate'
import { h, ref } from 'vue'
import * as z from 'zod'
const verifiedEmails = ref(['m@example.com', 'm@google.com', 'm@support.com']) const verifiedEmails = ref(['m@example.com', 'm@google.com', 'm@support.com'])

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/new-york/ui/button'
import { cn } from '@/lib/utils'
import { useRoute } from 'vitepress' import { useRoute } from 'vitepress'
import { cn } from '@/lib/utils'
import { Button } from '@/lib/registry/new-york/ui/button'
interface Item { interface Item {
title: string title: string

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { Separator } from '@/lib/registry/new-york/ui/separator'
import SidebarNav from '../components/SidebarNav.vue' import SidebarNav from '../components/SidebarNav.vue'
import { Separator } from '@/lib/registry/new-york/ui/separator'
</script> </script>
<template> <template>

View File

@ -1,8 +1,8 @@
<script lang="ts" setup> <script lang="ts" setup>
import { computed, ref } from 'vue'
import { Icon } from '@iconify/vue'
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/lib/registry/new-york/ui/select' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/lib/registry/new-york/ui/select'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { Icon } from '@iconify/vue'
import { computed, ref } from 'vue'
interface AccountSwitcherProps { interface AccountSwitcherProps {
isCollapsed: boolean isCollapsed: boolean

View File

@ -1,9 +1,18 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { Mail } from '../data/mails' import {
Search,
} from 'lucide-vue-next'
import { Input } from '@/lib/registry/new-york/ui/input' import { computed, ref } from 'vue'
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/lib/registry/new-york/ui/resizable' import { refDebounced } from '@vueuse/core'
import type { Mail } from '../data/mails'
import AccountSwitcher from './AccountSwitcher.vue'
import MailList from './MailList.vue'
import MailDisplay from './MailDisplay.vue'
import Nav, { type LinkProp } from './Nav.vue'
import { cn } from '@/lib/utils'
import { Separator } from '@/lib/registry/new-york/ui/separator' import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Input } from '@/lib/registry/new-york/ui/input'
import { import {
Tabs, Tabs,
TabsContent, TabsContent,
@ -11,16 +20,7 @@ import {
TabsTrigger, TabsTrigger,
} from '@/lib/registry/new-york/ui/tabs' } from '@/lib/registry/new-york/ui/tabs'
import { TooltipProvider } from '@/lib/registry/new-york/ui/tooltip' import { TooltipProvider } from '@/lib/registry/new-york/ui/tooltip'
import { cn } from '@/lib/utils' import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@/lib/registry/new-york/ui/resizable'
import { refDebounced } from '@vueuse/core'
import {
Search,
} from 'lucide-vue-next'
import { computed, ref } from 'vue'
import AccountSwitcher from './AccountSwitcher.vue'
import MailDisplay from './MailDisplay.vue'
import MailList from './MailList.vue'
import Nav, { type LinkProp } from './Nav.vue'
interface MailProps { interface MailProps {
accounts: { accounts: {

View File

@ -1,21 +1,21 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { Mail } from '../data/mails' import { Archive, ArchiveX, Clock, Forward, MoreVertical, Reply, ReplyAll, Trash2 } from 'lucide-vue-next'
import { Avatar, AvatarFallback } from '@/lib/registry/new-york/ui/avatar' import { computed } from 'vue'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Calendar } from '@/lib/registry/new-york/ui/calendar'
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/lib/registry/new-york/ui/dropdown-menu'
import { Label } from '@/lib/registry/new-york/ui/label'
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Switch } from '@/lib/registry/new-york/ui/switch'
import { Textarea } from '@/lib/registry/new-york/ui/textarea'
import { Tooltip, TooltipContent, TooltipTrigger } from '@/lib/registry/new-york/ui/tooltip'
import addDays from 'date-fns/addDays' import addDays from 'date-fns/addDays'
import addHours from 'date-fns/addHours' import addHours from 'date-fns/addHours'
import format from 'date-fns/format' import format from 'date-fns/format'
import nextSaturday from 'date-fns/nextSaturday' import nextSaturday from 'date-fns/nextSaturday'
import { Archive, ArchiveX, Clock, Forward, MoreVertical, Reply, ReplyAll, Trash2 } from 'lucide-vue-next' import type { Mail } from '../data/mails'
import { computed } from 'vue' import { Calendar } from '@/lib/registry/new-york/ui/calendar'
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/lib/registry/new-york/ui/dropdown-menu'
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/registry/new-york/ui/popover'
import { Avatar, AvatarFallback } from '@/lib/registry/new-york/ui/avatar'
import { Button } from '@/lib/registry/new-york/ui/button'
import { Label } from '@/lib/registry/new-york/ui/label'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Switch } from '@/lib/registry/new-york/ui/switch'
import { Textarea } from '@/lib/registry/new-york/ui/textarea'
import { Tooltip, TooltipContent, TooltipTrigger } from '@/lib/registry/new-york/ui/tooltip'
interface MailDisplayProps { interface MailDisplayProps {
mail: Mail | undefined mail: Mail | undefined

View File

@ -1,9 +1,9 @@
<script lang="ts" setup> <script lang="ts" setup>
import { formatDistanceToNow } from 'date-fns'
import type { Mail } from '../data/mails' import type { Mail } from '../data/mails'
import { Badge } from '@/lib/registry/new-york/ui/badge'
import { ScrollArea } from '@/lib/registry/new-york/ui/scroll-area' import { ScrollArea } from '@/lib/registry/new-york/ui/scroll-area'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { formatDistanceToNow } from 'date-fns' import { Badge } from '@/lib/registry/new-york/ui/badge'
interface MailListProps { interface MailListProps {
items: Mail[] items: Mail[]

View File

@ -1,12 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Icon } from '@iconify/vue'
import { cn } from '@/lib/utils'
import { buttonVariants } from '@/lib/registry/new-york/ui/button' import { buttonVariants } from '@/lib/registry/new-york/ui/button'
import { import {
Tooltip, Tooltip,
TooltipContent, TooltipContent,
TooltipTrigger, TooltipTrigger,
} from '@/lib/registry/new-york/ui/tooltip' } from '@/lib/registry/new-york/ui/tooltip'
import { cn } from '@/lib/utils'
import { Icon } from '@iconify/vue'
export interface LinkProp { export interface LinkProp {
title: string title: string

View File

@ -1,21 +1,21 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/lib/registry/new-york/ui/button' import AlbumArtwork from './components/AlbumArtwork.vue'
import { ScrollArea, ScrollBar } from '@/lib/registry/new-york/ui/scroll-area' import Menu from './components/Menu.vue'
import { Separator } from '@/lib/registry/new-york/ui/separator' import PodcastEmptyPlaceholder from './components/PodcastEmptyPlaceholder.vue'
import Sidebar from './components/Sidebar.vue'
import { listenNowAlbums, madeForYouAlbums } from './data/albums'
import { playlists } from './data/playlists'
import { import {
Tabs, Tabs,
TabsContent, TabsContent,
TabsList, TabsList,
TabsTrigger, TabsTrigger,
} from '@/lib/registry/new-york/ui/tabs' } from '@/lib/registry/new-york/ui/tabs'
import { Separator } from '@/lib/registry/new-york/ui/separator'
import { Button } from '@/lib/registry/new-york/ui/button'
import { ScrollArea, ScrollBar } from '@/lib/registry/new-york/ui/scroll-area'
import PlusCircledIcon from '~icons/radix-icons/plus-circled' import PlusCircledIcon from '~icons/radix-icons/plus-circled'
import AlbumArtwork from './components/AlbumArtwork.vue'
import Menu from './components/Menu.vue'
import PodcastEmptyPlaceholder from './components/PodcastEmptyPlaceholder.vue'
import Sidebar from './components/Sidebar.vue'
import { listenNowAlbums, madeForYouAlbums } from './data/albums'
import { playlists } from './data/playlists'
</script> </script>
<template> <template>

Some files were not shown because too many files have changed in this diff Show More