diff --git a/apps/www/.vitepress/theme/config/docs.ts b/apps/www/.vitepress/theme/config/docs.ts index f22bf81c..646cc85a 100644 --- a/apps/www/.vitepress/theme/config/docs.ts +++ b/apps/www/.vitepress/theme/config/docs.ts @@ -299,6 +299,12 @@ export const docsConfig: DocsConfig = { href: '/docs/components/slider', items: [], }, + { + title: 'Sonner', + href: '/docs/components/sonner', + label: 'New', + items: [], + }, { title: 'Switch', href: '/docs/components/switch', diff --git a/apps/www/.vitepress/theme/layout/DocsLayout.vue b/apps/www/.vitepress/theme/layout/DocsLayout.vue index c8cd7649..388301e0 100644 --- a/apps/www/.vitepress/theme/layout/DocsLayout.vue +++ b/apps/www/.vitepress/theme/layout/DocsLayout.vue @@ -6,6 +6,7 @@ import EditLink from '../components/EditLink.vue' import { ScrollArea } from '@/lib/registry/default/ui/scroll-area' import { Badge } from '@/lib/registry/default/ui/badge' import RadixIconsCode from '~icons/radix-icons/code' +import RadixIconsExternalLink from '~icons/radix-icons/external-link' import ChevronRightIcon from '~icons/lucide/chevron-right' const $route = useRoute() @@ -81,6 +82,10 @@ const sourceLink = 'https://github.com/radix-vue/shadcn-vue/tree/dev/'
+ + + Docs + Component Source diff --git a/apps/www/.vitepress/theme/layout/MainLayout.vue b/apps/www/.vitepress/theme/layout/MainLayout.vue index 41c0199c..3caf425d 100644 --- a/apps/www/.vitepress/theme/layout/MainLayout.vue +++ b/apps/www/.vitepress/theme/layout/MainLayout.vue @@ -17,6 +17,7 @@ import RadixIconsSun from '~icons/radix-icons/sun' import { useConfigStore } from '@/stores/config' import { Dialog, DialogContent } from '@/lib/registry/default/ui/dialog' import { Toaster as DefaultToaster } from '@/lib/registry/default/ui/toast' +import { Toaster as NewYorkSonner } from '@/lib/registry/new-york/ui/sonner' import { Toaster as NewYorkToaster } from '@/lib/registry/new-york/ui/toast' import File from '~icons/radix-icons/file' @@ -287,6 +288,7 @@ watch(() => $route.path, (n) => { +
diff --git a/apps/www/__registry__/index.ts b/apps/www/__registry__/index.ts index 2c7ae3aa..fa91bc27 100644 --- a/apps/www/__registry__/index.ts +++ b/apps/www/__registry__/index.ts @@ -576,6 +576,13 @@ export const Index = { component: () => import('../src/lib/registry/default/example/SliderDemo.vue').then(m => m.default), files: ['../src/lib/registry/default/example/SliderDemo.vue'], }, + SonnerDemo: { + name: 'SonnerDemo', + type: 'components:example', + registryDependencies: ['button'], + component: () => import('../src/lib/registry/default/example/SonnerDemo.vue').then(m => m.default), + files: ['../src/lib/registry/default/example/SonnerDemo.vue'], + }, SwitchDemo: { name: 'SwitchDemo', type: 'components:example', @@ -1467,6 +1474,13 @@ export const Index = { component: () => import('../src/lib/registry/new-york/example/SliderDemo.vue').then(m => m.default), files: ['../src/lib/registry/new-york/example/SliderDemo.vue'], }, + SonnerDemo: { + name: 'SonnerDemo', + type: 'components:example', + registryDependencies: ['button'], + component: () => import('../src/lib/registry/new-york/example/SonnerDemo.vue').then(m => m.default), + files: ['../src/lib/registry/new-york/example/SonnerDemo.vue'], + }, SwitchDemo: { name: 'SwitchDemo', type: 'components:example', diff --git a/apps/www/package.json b/apps/www/package.json index cdc17e69..186171f7 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -37,6 +37,7 @@ "v-calendar": "^3.1.2", "vee-validate": "4.12.4", "vue": "^3.4.15", + "vue-sonner": "^1.0.2", "vue-wrap-balancer": "^1.1.3", "zod": "^3.22.4" }, diff --git a/apps/www/src/content/docs/components/sonner.md b/apps/www/src/content/docs/components/sonner.md new file mode 100644 index 00000000..0aa8298e --- /dev/null +++ b/apps/www/src/content/docs/components/sonner.md @@ -0,0 +1,63 @@ +--- +title: Sonner +description: An opinionated toast component for Vue. +docs: https://vue-sonner.vercel.app +source: apps/www/src/lib/registry/default/ui/sonner +--- + + + +## About + +The Sonner component is provided by [vue-sonner](https://vue-sonner.vercel.app/), which is a Vue port of Sonner, originally created by [Emil Kowalski](https://twitter.com/emilkowalski_) for React. + +## Installation + + + +### Run the following command + +```bash +npx shadcn-vue@latest add sonner +``` + +### Add the Toaster component + +Add the following `Toaster` component to your `App.vue` file: + +```vue title="App.vue" {2,6} + + + +``` + + + +## Usage + +```vue + + + +``` diff --git a/apps/www/src/lib/registry/default/example/SonnerDemo.vue b/apps/www/src/lib/registry/default/example/SonnerDemo.vue new file mode 100644 index 00000000..da34f15c --- /dev/null +++ b/apps/www/src/lib/registry/default/example/SonnerDemo.vue @@ -0,0 +1,20 @@ + + + diff --git a/apps/www/src/lib/registry/default/ui/sonner/Sonner.vue b/apps/www/src/lib/registry/default/ui/sonner/Sonner.vue new file mode 100644 index 00000000..98201a1e --- /dev/null +++ b/apps/www/src/lib/registry/default/ui/sonner/Sonner.vue @@ -0,0 +1,21 @@ + + + diff --git a/apps/www/src/lib/registry/default/ui/sonner/index.ts b/apps/www/src/lib/registry/default/ui/sonner/index.ts new file mode 100644 index 00000000..0d4a6423 --- /dev/null +++ b/apps/www/src/lib/registry/default/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Toaster } from './Sonner.vue' diff --git a/apps/www/src/lib/registry/new-york/example/SonnerDemo.vue b/apps/www/src/lib/registry/new-york/example/SonnerDemo.vue new file mode 100644 index 00000000..c46d9482 --- /dev/null +++ b/apps/www/src/lib/registry/new-york/example/SonnerDemo.vue @@ -0,0 +1,20 @@ + + + diff --git a/apps/www/src/lib/registry/new-york/ui/sonner/Sonner.vue b/apps/www/src/lib/registry/new-york/ui/sonner/Sonner.vue new file mode 100644 index 00000000..98201a1e --- /dev/null +++ b/apps/www/src/lib/registry/new-york/ui/sonner/Sonner.vue @@ -0,0 +1,21 @@ + + + diff --git a/apps/www/src/lib/registry/new-york/ui/sonner/index.ts b/apps/www/src/lib/registry/new-york/ui/sonner/index.ts new file mode 100644 index 00000000..0d4a6423 --- /dev/null +++ b/apps/www/src/lib/registry/new-york/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Toaster } from './Sonner.vue' diff --git a/apps/www/src/public/registry/index.json b/apps/www/src/public/registry/index.json index ee1339ec..2cae0d54 100644 --- a/apps/www/src/public/registry/index.json +++ b/apps/www/src/public/registry/index.json @@ -517,6 +517,16 @@ ], "type": "components:ui" }, + { + "name": "sonner", + "dependencies": [], + "registryDependencies": [], + "files": [ + "ui/sonner/Sonner.vue", + "ui/sonner/index.ts" + ], + "type": "components:ui" + }, { "name": "switch", "dependencies": [], diff --git a/apps/www/src/public/registry/styles/default/sonner.json b/apps/www/src/public/registry/styles/default/sonner.json new file mode 100644 index 00000000..33827c77 --- /dev/null +++ b/apps/www/src/public/registry/styles/default/sonner.json @@ -0,0 +1,16 @@ +{ + "name": "sonner", + "dependencies": [], + "registryDependencies": [], + "files": [ + { + "name": "Sonner.vue", + "content": "\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as Toaster } from './Sonner.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/apps/www/src/public/registry/styles/new-york/sonner.json b/apps/www/src/public/registry/styles/new-york/sonner.json new file mode 100644 index 00000000..33827c77 --- /dev/null +++ b/apps/www/src/public/registry/styles/new-york/sonner.json @@ -0,0 +1,16 @@ +{ + "name": "sonner", + "dependencies": [], + "registryDependencies": [], + "files": [ + { + "name": "Sonner.vue", + "content": "\n\n\n" + }, + { + "name": "index.ts", + "content": "export { default as Toaster } from './Sonner.vue'\n" + } + ], + "type": "components:ui" +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68572cc4..e227bc8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,6 +110,9 @@ importers: vue: specifier: ^3.4.15 version: 3.4.15(typescript@5.3.3) + vue-sonner: + specifier: ^1.0.2 + version: 1.0.2 vue-wrap-balancer: specifier: ^1.1.3 version: 1.1.3(vue@3.4.15) @@ -14611,6 +14614,10 @@ packages: vue: 3.4.15(typescript@5.3.3) dev: false + /vue-sonner@1.0.2: + resolution: {integrity: sha512-BXIyb9lGSMUjTpOukISp7oV9nrczgbfYz+TnDeoap3io3ayGXiWv+/3eQ9UKnmofwUlC4nh/H5jzBOO89lRItQ==} + dev: false + /vue-template-compiler@2.7.14: resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} dependencies: