- import('@/components/ui/button').then((mod) => mod.Button)
+ import('@shadcn/components/ui/button').then((mod) => mod.Button)
+)
+const Card = defineAsyncComponent(() =>
+ import('@shadcn/components/ui/card').then((mod) => mod.Card)
)
-const Card = defineAsyncComponent(() => import('@/components/ui/card').then((mod) => mod.Card))
const CardHeader = defineAsyncComponent(() =>
- import('@/components/ui/card').then((mod) => mod.CardHeader)
+ import('@shadcn/components/ui/card').then((mod) => mod.CardHeader)
)
const CardContent = defineAsyncComponent(() =>
- import('@/components/ui/card').then((mod) => mod.CardContent)
+ import('@shadcn/components/ui/card').then((mod) => mod.CardContent)
)
const CardFooter = defineAsyncComponent(() =>
- import('@/components/ui/card').then((mod) => mod.CardFooter)
+ import('@shadcn/components/ui/card').then((mod) => mod.CardFooter)
+)
+const Label = defineAsyncComponent(() =>
+ import('@shadcn/components/ui/label').then((mod) => mod.Label)
)
-const Label = defineAsyncComponent(() => import('@/components/ui/label').then((mod) => mod.Label))
const ModelIcon = defineAsyncComponent(() => import('@/components/icons/ModelIcon.vue'))
-const Input = defineAsyncComponent(() => import('@/components/ui/input').then((mod) => mod.Input))
+const Input = defineAsyncComponent(() =>
+ import('@shadcn/components/ui/input').then((mod) => mod.Input)
+)
const Select = defineAsyncComponent(() =>
- import('@/components/ui/select').then((mod) => mod.Select)
+ import('@shadcn/components/ui/select').then((mod) => mod.Select)
)
const SelectContent = defineAsyncComponent(() =>
- import('@/components/ui/select').then((mod) => mod.SelectContent)
+ import('@shadcn/components/ui/select').then((mod) => mod.SelectContent)
)
const SelectItem = defineAsyncComponent(() =>
- import('@/components/ui/select').then((mod) => mod.SelectItem)
+ import('@shadcn/components/ui/select').then((mod) => mod.SelectItem)
)
const SelectTrigger = defineAsyncComponent(() =>
- import('@/components/ui/select').then((mod) => mod.SelectTrigger)
+ import('@shadcn/components/ui/select').then((mod) => mod.SelectTrigger)
)
const SelectValue = defineAsyncComponent(() =>
- import('@/components/ui/select').then((mod) => mod.SelectValue)
+ import('@shadcn/components/ui/select').then((mod) => mod.SelectValue)
)
const ModelConfigItem = defineAsyncComponent(
() => import('@/components/settings/ModelConfigItem.vue')
)
const Dialog = defineAsyncComponent(() =>
- import('@/components/ui/dialog').then((mod) => mod.Dialog)
+ import('@shadcn/components/ui/dialog').then((mod) => mod.Dialog)
)
const DialogContent = defineAsyncComponent(() =>
- import('@/components/ui/dialog').then((mod) => mod.DialogContent)
+ import('@shadcn/components/ui/dialog').then((mod) => mod.DialogContent)
)
const DialogHeader = defineAsyncComponent(() =>
- import('@/components/ui/dialog').then((mod) => mod.DialogHeader)
+ import('@shadcn/components/ui/dialog').then((mod) => mod.DialogHeader)
)
const DialogTitle = defineAsyncComponent(() =>
- import('@/components/ui/dialog').then((mod) => mod.DialogTitle)
+ import('@shadcn/components/ui/dialog').then((mod) => mod.DialogTitle)
)
const DialogDescription = defineAsyncComponent(() =>
- import('@/components/ui/dialog').then((mod) => mod.DialogDescription)
+ import('@shadcn/components/ui/dialog').then((mod) => mod.DialogDescription)
)
const DialogFooter = defineAsyncComponent(() =>
- import('@/components/ui/dialog').then((mod) => mod.DialogFooter)
+ import('@shadcn/components/ui/dialog').then((mod) => mod.DialogFooter)
)
const ModelCheckDialog = defineAsyncComponent(
() => import('@/components/settings/ModelCheckDialog.vue')
diff --git a/src/renderer/src/views/playground/DemoSection.vue b/src/renderer/src/views/playground/DemoSection.vue
new file mode 100644
index 000000000..09eb961a7
--- /dev/null
+++ b/src/renderer/src/views/playground/DemoSection.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
{{ title }}
+
+ {{ description }}
+
+
+
+ {{ componentName }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/AccordionDemo.vue b/src/renderer/src/views/playground/demos/AccordionDemo.vue
new file mode 100644
index 000000000..4ff096540
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/AccordionDemo.vue
@@ -0,0 +1,31 @@
+
+
+
+ Product updates
+
+ Stay up to date with the latest improvements, fixes, and features.
+
+
+
+ Team highlights
+
+ Meet the people building the experience and learn about their process.
+
+
+
+ FAQ
+
+ Answers to the most common questions from our community.
+
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/CardDemo.vue b/src/renderer/src/views/playground/demos/CardDemo.vue
new file mode 100644
index 000000000..c11367de9
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/CardDemo.vue
@@ -0,0 +1,34 @@
+
+
+
+ Analytics overview
+ Track performance and monitor key metrics.
+
+
+
+
+
+
+ Download
+ View details
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/DialogDemo.vue b/src/renderer/src/views/playground/demos/DialogDemo.vue
new file mode 100644
index 000000000..c5b32f9a1
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/DialogDemo.vue
@@ -0,0 +1,44 @@
+
+
+
+ Open dialog
+
+
+
+ Stay in the loop
+
+ Subscribe to product announcements and feature updates.
+
+
+
+
+ Email
+
+
+
+
+ Weekly digest
+
+
+
+ Cancel
+ Confirm
+
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/FormDemo.vue b/src/renderer/src/views/playground/demos/FormDemo.vue
new file mode 100644
index 000000000..6fcc4b5b2
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/FormDemo.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/PopoverDemo.vue b/src/renderer/src/views/playground/demos/PopoverDemo.vue
new file mode 100644
index 000000000..09cd03a15
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/PopoverDemo.vue
@@ -0,0 +1,25 @@
+
+
+
+ Show popover
+
+
+
+
Saved searches
+
Quick access to the segments you visit most.
+
+
+
+ All customers
+ VIP prospects
+ Churn risk
+
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/SelectDemo.vue b/src/renderer/src/views/playground/demos/SelectDemo.vue
new file mode 100644
index 000000000..95bcd0d22
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/SelectDemo.vue
@@ -0,0 +1,27 @@
+
+
+ Framework
+
+
+
+
+
+ Vue.js
+ React
+ Svelte
+ Solid.js
+
+
+
+
+
+
diff --git a/src/renderer/src/views/playground/demos/TabsDemo.vue b/src/renderer/src/views/playground/demos/TabsDemo.vue
new file mode 100644
index 000000000..57b52dd88
--- /dev/null
+++ b/src/renderer/src/views/playground/demos/TabsDemo.vue
@@ -0,0 +1,28 @@
+
+
+
+ Account
+ Password
+ Security
+
+
+
+ Make changes to your account here. Click save when you're done.
+
+ Save changes
+
+
+ Update your password regularly to stay secure.
+
+
+
+ Set up two-factor authentication and review active sessions.
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/accordion/Accordion.vue b/src/shadcn/components/ui/accordion/Accordion.vue
similarity index 63%
rename from src/renderer/src/components/ui/accordion/Accordion.vue
rename to src/shadcn/components/ui/accordion/Accordion.vue
index 1cd25bbe8..bd8335b36 100644
--- a/src/renderer/src/components/ui/accordion/Accordion.vue
+++ b/src/shadcn/components/ui/accordion/Accordion.vue
@@ -1,19 +1,19 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/accordion/AccordionContent.vue b/src/shadcn/components/ui/accordion/AccordionContent.vue
new file mode 100644
index 000000000..7a0e8d669
--- /dev/null
+++ b/src/shadcn/components/ui/accordion/AccordionContent.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/accordion/AccordionItem.vue b/src/shadcn/components/ui/accordion/AccordionItem.vue
new file mode 100644
index 000000000..a51087767
--- /dev/null
+++ b/src/shadcn/components/ui/accordion/AccordionItem.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/accordion/AccordionTrigger.vue b/src/shadcn/components/ui/accordion/AccordionTrigger.vue
new file mode 100644
index 000000000..91d238d9b
--- /dev/null
+++ b/src/shadcn/components/ui/accordion/AccordionTrigger.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/accordion/index.ts b/src/shadcn/components/ui/accordion/index.ts
new file mode 100644
index 000000000..b18018b56
--- /dev/null
+++ b/src/shadcn/components/ui/accordion/index.ts
@@ -0,0 +1,4 @@
+export { default as Accordion } from "./Accordion.vue"
+export { default as AccordionContent } from "./AccordionContent.vue"
+export { default as AccordionItem } from "./AccordionItem.vue"
+export { default as AccordionTrigger } from "./AccordionTrigger.vue"
diff --git a/src/renderer/src/components/ui/alert-dialog/AlertDialog.vue b/src/shadcn/components/ui/alert-dialog/AlertDialog.vue
similarity index 53%
rename from src/renderer/src/components/ui/alert-dialog/AlertDialog.vue
rename to src/shadcn/components/ui/alert-dialog/AlertDialog.vue
index 8fb30de85..92d80e55c 100644
--- a/src/renderer/src/components/ui/alert-dialog/AlertDialog.vue
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialog.vue
@@ -1,14 +1,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogAction.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogAction.vue
new file mode 100644
index 000000000..cbe61fc33
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogAction.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogCancel.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogCancel.vue
new file mode 100644
index 000000000..a13f720bc
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogCancel.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogContent.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogContent.vue
new file mode 100644
index 000000000..525eba703
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogContent.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogDescription.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogDescription.vue
new file mode 100644
index 000000000..81607ef9f
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogDescription.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogFooter.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogFooter.vue
new file mode 100644
index 000000000..295988361
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogFooter.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogHeader.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogHeader.vue
new file mode 100644
index 000000000..bad337d75
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogTitle.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogTitle.vue
new file mode 100644
index 000000000..59fa7388b
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogTitle.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/AlertDialogTrigger.vue b/src/shadcn/components/ui/alert-dialog/AlertDialogTrigger.vue
new file mode 100644
index 000000000..b00d31c7a
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/AlertDialogTrigger.vue
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert-dialog/index.ts b/src/shadcn/components/ui/alert-dialog/index.ts
new file mode 100644
index 000000000..cf1b45dff
--- /dev/null
+++ b/src/shadcn/components/ui/alert-dialog/index.ts
@@ -0,0 +1,9 @@
+export { default as AlertDialog } from "./AlertDialog.vue"
+export { default as AlertDialogAction } from "./AlertDialogAction.vue"
+export { default as AlertDialogCancel } from "./AlertDialogCancel.vue"
+export { default as AlertDialogContent } from "./AlertDialogContent.vue"
+export { default as AlertDialogDescription } from "./AlertDialogDescription.vue"
+export { default as AlertDialogFooter } from "./AlertDialogFooter.vue"
+export { default as AlertDialogHeader } from "./AlertDialogHeader.vue"
+export { default as AlertDialogTitle } from "./AlertDialogTitle.vue"
+export { default as AlertDialogTrigger } from "./AlertDialogTrigger.vue"
diff --git a/src/shadcn/components/ui/alert/Alert.vue b/src/shadcn/components/ui/alert/Alert.vue
new file mode 100644
index 000000000..c5ccf5954
--- /dev/null
+++ b/src/shadcn/components/ui/alert/Alert.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert/AlertDescription.vue b/src/shadcn/components/ui/alert/AlertDescription.vue
new file mode 100644
index 000000000..feb95bd0f
--- /dev/null
+++ b/src/shadcn/components/ui/alert/AlertDescription.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert/AlertTitle.vue b/src/shadcn/components/ui/alert/AlertTitle.vue
new file mode 100644
index 000000000..b57e1c14e
--- /dev/null
+++ b/src/shadcn/components/ui/alert/AlertTitle.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/alert/index.ts b/src/shadcn/components/ui/alert/index.ts
new file mode 100644
index 000000000..42d07b64c
--- /dev/null
+++ b/src/shadcn/components/ui/alert/index.ts
@@ -0,0 +1,24 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Alert } from "./Alert.vue"
+export { default as AlertDescription } from "./AlertDescription.vue"
+export { default as AlertTitle } from "./AlertTitle.vue"
+
+export const alertVariants = cva(
+ "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
+ {
+ variants: {
+ variant: {
+ default: "bg-card text-card-foreground",
+ destructive:
+ "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+)
+
+export type AlertVariants = VariantProps
diff --git a/src/shadcn/components/ui/aspect-ratio/AspectRatio.vue b/src/shadcn/components/ui/aspect-ratio/AspectRatio.vue
new file mode 100644
index 000000000..15f4d3342
--- /dev/null
+++ b/src/shadcn/components/ui/aspect-ratio/AspectRatio.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/aspect-ratio/index.ts b/src/shadcn/components/ui/aspect-ratio/index.ts
new file mode 100644
index 000000000..e658f55a0
--- /dev/null
+++ b/src/shadcn/components/ui/aspect-ratio/index.ts
@@ -0,0 +1 @@
+export { default as AspectRatio } from "./AspectRatio.vue"
diff --git a/src/shadcn/components/ui/avatar/Avatar.vue b/src/shadcn/components/ui/avatar/Avatar.vue
new file mode 100644
index 000000000..6db67497a
--- /dev/null
+++ b/src/shadcn/components/ui/avatar/Avatar.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/avatar/AvatarFallback.vue b/src/shadcn/components/ui/avatar/AvatarFallback.vue
new file mode 100644
index 000000000..a635180b0
--- /dev/null
+++ b/src/shadcn/components/ui/avatar/AvatarFallback.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/avatar/AvatarImage.vue b/src/shadcn/components/ui/avatar/AvatarImage.vue
new file mode 100644
index 000000000..726974c33
--- /dev/null
+++ b/src/shadcn/components/ui/avatar/AvatarImage.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/avatar/index.ts b/src/shadcn/components/ui/avatar/index.ts
new file mode 100644
index 000000000..cf0e00318
--- /dev/null
+++ b/src/shadcn/components/ui/avatar/index.ts
@@ -0,0 +1,3 @@
+export { default as Avatar } from "./Avatar.vue"
+export { default as AvatarFallback } from "./AvatarFallback.vue"
+export { default as AvatarImage } from "./AvatarImage.vue"
diff --git a/src/shadcn/components/ui/badge/Badge.vue b/src/shadcn/components/ui/badge/Badge.vue
new file mode 100644
index 000000000..de3243638
--- /dev/null
+++ b/src/shadcn/components/ui/badge/Badge.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/badge/index.ts b/src/shadcn/components/ui/badge/index.ts
new file mode 100644
index 000000000..ac4c0015f
--- /dev/null
+++ b/src/shadcn/components/ui/badge/index.ts
@@ -0,0 +1,26 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Badge } from "./Badge.vue"
+
+export const badgeVariants = cva(
+ "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
+ {
+ variants: {
+ variant: {
+ default:
+ "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
+ secondary:
+ "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
+ destructive:
+ "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
+ outline:
+ "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+)
+export type BadgeVariants = VariantProps
diff --git a/src/shadcn/components/ui/breadcrumb/Breadcrumb.vue b/src/shadcn/components/ui/breadcrumb/Breadcrumb.vue
new file mode 100644
index 000000000..9566adeb4
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/Breadcrumb.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/breadcrumb/BreadcrumbEllipsis.vue b/src/shadcn/components/ui/breadcrumb/BreadcrumbEllipsis.vue
new file mode 100644
index 000000000..c9f37bb5b
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/BreadcrumbEllipsis.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+ More
+
+
diff --git a/src/renderer/src/components/ui/breadcrumb/BreadcrumbItem.vue b/src/shadcn/components/ui/breadcrumb/BreadcrumbItem.vue
similarity index 54%
rename from src/renderer/src/components/ui/breadcrumb/BreadcrumbItem.vue
rename to src/shadcn/components/ui/breadcrumb/BreadcrumbItem.vue
index 42e721cda..d330aa820 100644
--- a/src/renderer/src/components/ui/breadcrumb/BreadcrumbItem.vue
+++ b/src/shadcn/components/ui/breadcrumb/BreadcrumbItem.vue
@@ -1,16 +1,17 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/breadcrumb/BreadcrumbLink.vue b/src/shadcn/components/ui/breadcrumb/BreadcrumbLink.vue
new file mode 100644
index 000000000..4db100a74
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/BreadcrumbLink.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/breadcrumb/BreadcrumbList.vue b/src/shadcn/components/ui/breadcrumb/BreadcrumbList.vue
new file mode 100644
index 000000000..bf076b82a
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/BreadcrumbList.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/breadcrumb/BreadcrumbPage.vue b/src/shadcn/components/ui/breadcrumb/BreadcrumbPage.vue
new file mode 100644
index 000000000..36d2d7d73
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/BreadcrumbPage.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/breadcrumb/BreadcrumbSeparator.vue b/src/shadcn/components/ui/breadcrumb/BreadcrumbSeparator.vue
new file mode 100644
index 000000000..71890c588
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/BreadcrumbSeparator.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/breadcrumb/index.ts b/src/shadcn/components/ui/breadcrumb/index.ts
new file mode 100644
index 000000000..f4eafdc09
--- /dev/null
+++ b/src/shadcn/components/ui/breadcrumb/index.ts
@@ -0,0 +1,7 @@
+export { default as Breadcrumb } from "./Breadcrumb.vue"
+export { default as BreadcrumbEllipsis } from "./BreadcrumbEllipsis.vue"
+export { default as BreadcrumbItem } from "./BreadcrumbItem.vue"
+export { default as BreadcrumbLink } from "./BreadcrumbLink.vue"
+export { default as BreadcrumbList } from "./BreadcrumbList.vue"
+export { default as BreadcrumbPage } from "./BreadcrumbPage.vue"
+export { default as BreadcrumbSeparator } from "./BreadcrumbSeparator.vue"
diff --git a/src/shadcn/components/ui/button/Button.vue b/src/shadcn/components/ui/button/Button.vue
new file mode 100644
index 000000000..b58e1b215
--- /dev/null
+++ b/src/shadcn/components/ui/button/Button.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/button/index.ts b/src/shadcn/components/ui/button/index.ts
new file mode 100644
index 000000000..53b8435ff
--- /dev/null
+++ b/src/shadcn/components/ui/button/index.ts
@@ -0,0 +1,37 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Button } from "./Button.vue"
+
+export const buttonVariants = cva(
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+ {
+ variants: {
+ variant: {
+ default:
+ "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
+ outline:
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
+ secondary:
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+ ghost:
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+ icon: "size-9",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+export type ButtonVariants = VariantProps
diff --git a/src/shadcn/components/ui/calendar/Calendar.vue b/src/shadcn/components/ui/calendar/Calendar.vue
new file mode 100644
index 000000000..7ef5e863a
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/Calendar.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ day }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarCell.vue b/src/shadcn/components/ui/calendar/CalendarCell.vue
new file mode 100644
index 000000000..08747e408
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarCell.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarCellTrigger.vue b/src/shadcn/components/ui/calendar/CalendarCellTrigger.vue
new file mode 100644
index 000000000..c3a61c073
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarCellTrigger.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarGrid.vue b/src/shadcn/components/ui/calendar/CalendarGrid.vue
new file mode 100644
index 000000000..4fff8e49f
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarGrid.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarGridBody.vue b/src/shadcn/components/ui/calendar/CalendarGridBody.vue
new file mode 100644
index 000000000..976dc3e8b
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarGridBody.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarGridHead.vue b/src/shadcn/components/ui/calendar/CalendarGridHead.vue
new file mode 100644
index 000000000..1829aa41a
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarGridHead.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarGridRow.vue b/src/shadcn/components/ui/calendar/CalendarGridRow.vue
new file mode 100644
index 000000000..2c5acdda8
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarGridRow.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarHeadCell.vue b/src/shadcn/components/ui/calendar/CalendarHeadCell.vue
new file mode 100644
index 000000000..febf4e08d
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarHeadCell.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarHeader.vue b/src/shadcn/components/ui/calendar/CalendarHeader.vue
new file mode 100644
index 000000000..15dc789c6
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarHeader.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarHeading.vue b/src/shadcn/components/ui/calendar/CalendarHeading.vue
new file mode 100644
index 000000000..7ff7d84c0
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarHeading.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+ {{ headingValue }}
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarNextButton.vue b/src/shadcn/components/ui/calendar/CalendarNextButton.vue
new file mode 100644
index 000000000..aa4e6f3c3
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarNextButton.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/CalendarPrevButton.vue b/src/shadcn/components/ui/calendar/CalendarPrevButton.vue
new file mode 100644
index 000000000..d8a4e6295
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/CalendarPrevButton.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/calendar/index.ts b/src/shadcn/components/ui/calendar/index.ts
new file mode 100644
index 000000000..f222de0ba
--- /dev/null
+++ b/src/shadcn/components/ui/calendar/index.ts
@@ -0,0 +1,12 @@
+export { default as Calendar } from "./Calendar.vue"
+export { default as CalendarCell } from "./CalendarCell.vue"
+export { default as CalendarCellTrigger } from "./CalendarCellTrigger.vue"
+export { default as CalendarGrid } from "./CalendarGrid.vue"
+export { default as CalendarGridBody } from "./CalendarGridBody.vue"
+export { default as CalendarGridHead } from "./CalendarGridHead.vue"
+export { default as CalendarGridRow } from "./CalendarGridRow.vue"
+export { default as CalendarHeadCell } from "./CalendarHeadCell.vue"
+export { default as CalendarHeader } from "./CalendarHeader.vue"
+export { default as CalendarHeading } from "./CalendarHeading.vue"
+export { default as CalendarNextButton } from "./CalendarNextButton.vue"
+export { default as CalendarPrevButton } from "./CalendarPrevButton.vue"
diff --git a/src/shadcn/components/ui/card/Card.vue b/src/shadcn/components/ui/card/Card.vue
new file mode 100644
index 000000000..0b25134c2
--- /dev/null
+++ b/src/shadcn/components/ui/card/Card.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/CardAction.vue b/src/shadcn/components/ui/card/CardAction.vue
new file mode 100644
index 000000000..751136348
--- /dev/null
+++ b/src/shadcn/components/ui/card/CardAction.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/CardContent.vue b/src/shadcn/components/ui/card/CardContent.vue
new file mode 100644
index 000000000..ae5148b26
--- /dev/null
+++ b/src/shadcn/components/ui/card/CardContent.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/CardDescription.vue b/src/shadcn/components/ui/card/CardDescription.vue
new file mode 100644
index 000000000..6a95e1f17
--- /dev/null
+++ b/src/shadcn/components/ui/card/CardDescription.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/CardFooter.vue b/src/shadcn/components/ui/card/CardFooter.vue
new file mode 100644
index 000000000..aac6c568a
--- /dev/null
+++ b/src/shadcn/components/ui/card/CardFooter.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/CardHeader.vue b/src/shadcn/components/ui/card/CardHeader.vue
new file mode 100644
index 000000000..f42bd22f3
--- /dev/null
+++ b/src/shadcn/components/ui/card/CardHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/CardTitle.vue b/src/shadcn/components/ui/card/CardTitle.vue
new file mode 100644
index 000000000..3f87f362f
--- /dev/null
+++ b/src/shadcn/components/ui/card/CardTitle.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/card/index.ts b/src/shadcn/components/ui/card/index.ts
new file mode 100644
index 000000000..16277580b
--- /dev/null
+++ b/src/shadcn/components/ui/card/index.ts
@@ -0,0 +1,7 @@
+export { default as Card } from "./Card.vue"
+export { default as CardAction } from "./CardAction.vue"
+export { default as CardContent } from "./CardContent.vue"
+export { default as CardDescription } from "./CardDescription.vue"
+export { default as CardFooter } from "./CardFooter.vue"
+export { default as CardHeader } from "./CardHeader.vue"
+export { default as CardTitle } from "./CardTitle.vue"
diff --git a/src/shadcn/components/ui/checkbox/Checkbox.vue b/src/shadcn/components/ui/checkbox/Checkbox.vue
new file mode 100644
index 000000000..8702d1603
--- /dev/null
+++ b/src/shadcn/components/ui/checkbox/Checkbox.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/checkbox/index.ts b/src/shadcn/components/ui/checkbox/index.ts
new file mode 100644
index 000000000..3391a8575
--- /dev/null
+++ b/src/shadcn/components/ui/checkbox/index.ts
@@ -0,0 +1 @@
+export { default as Checkbox } from "./Checkbox.vue"
diff --git a/src/shadcn/components/ui/collapsible/Collapsible.vue b/src/shadcn/components/ui/collapsible/Collapsible.vue
new file mode 100644
index 000000000..b2efa1a90
--- /dev/null
+++ b/src/shadcn/components/ui/collapsible/Collapsible.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/collapsible/CollapsibleContent.vue b/src/shadcn/components/ui/collapsible/CollapsibleContent.vue
new file mode 100644
index 000000000..4b52fab08
--- /dev/null
+++ b/src/shadcn/components/ui/collapsible/CollapsibleContent.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/collapsible/CollapsibleTrigger.vue b/src/shadcn/components/ui/collapsible/CollapsibleTrigger.vue
new file mode 100644
index 000000000..52209f66d
--- /dev/null
+++ b/src/shadcn/components/ui/collapsible/CollapsibleTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/collapsible/index.ts b/src/shadcn/components/ui/collapsible/index.ts
new file mode 100644
index 000000000..86a031d52
--- /dev/null
+++ b/src/shadcn/components/ui/collapsible/index.ts
@@ -0,0 +1,3 @@
+export { default as Collapsible } from "./Collapsible.vue"
+export { default as CollapsibleContent } from "./CollapsibleContent.vue"
+export { default as CollapsibleTrigger } from "./CollapsibleTrigger.vue"
diff --git a/src/shadcn/components/ui/combobox/Combobox.vue b/src/shadcn/components/ui/combobox/Combobox.vue
new file mode 100644
index 000000000..9d9aef89f
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/Combobox.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxAnchor.vue b/src/shadcn/components/ui/combobox/ComboboxAnchor.vue
new file mode 100644
index 000000000..23e06d868
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxAnchor.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxEmpty.vue b/src/shadcn/components/ui/combobox/ComboboxEmpty.vue
new file mode 100644
index 000000000..fd01eab1d
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxEmpty.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxGroup.vue b/src/shadcn/components/ui/combobox/ComboboxGroup.vue
new file mode 100644
index 000000000..ce5b31b19
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxGroup.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+ {{ heading }}
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxInput.vue b/src/shadcn/components/ui/combobox/ComboboxInput.vue
new file mode 100644
index 000000000..d05a3e5e9
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxInput.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxItem.vue b/src/shadcn/components/ui/combobox/ComboboxItem.vue
new file mode 100644
index 000000000..1d6eb54f7
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxItem.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxItemIndicator.vue b/src/shadcn/components/ui/combobox/ComboboxItemIndicator.vue
new file mode 100644
index 000000000..eba7ec1fb
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxItemIndicator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxList.vue b/src/shadcn/components/ui/combobox/ComboboxList.vue
new file mode 100644
index 000000000..787973635
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxList.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxSeparator.vue b/src/shadcn/components/ui/combobox/ComboboxSeparator.vue
new file mode 100644
index 000000000..18a88955d
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxTrigger.vue b/src/shadcn/components/ui/combobox/ComboboxTrigger.vue
new file mode 100644
index 000000000..95938fe97
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxTrigger.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/ComboboxViewport.vue b/src/shadcn/components/ui/combobox/ComboboxViewport.vue
new file mode 100644
index 000000000..d1f6db42b
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/ComboboxViewport.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/combobox/index.ts b/src/shadcn/components/ui/combobox/index.ts
new file mode 100644
index 000000000..7c7bfc785
--- /dev/null
+++ b/src/shadcn/components/ui/combobox/index.ts
@@ -0,0 +1,12 @@
+export { default as Combobox } from "./Combobox.vue"
+export { default as ComboboxAnchor } from "./ComboboxAnchor.vue"
+export { default as ComboboxEmpty } from "./ComboboxEmpty.vue"
+export { default as ComboboxGroup } from "./ComboboxGroup.vue"
+export { default as ComboboxInput } from "./ComboboxInput.vue"
+export { default as ComboboxItem } from "./ComboboxItem.vue"
+export { default as ComboboxItemIndicator } from "./ComboboxItemIndicator.vue"
+export { default as ComboboxList } from "./ComboboxList.vue"
+export { default as ComboboxSeparator } from "./ComboboxSeparator.vue"
+export { default as ComboboxViewport } from "./ComboboxViewport.vue"
+
+export { ComboboxCancel, ComboboxTrigger } from "reka-ui"
diff --git a/src/renderer/src/components/ui/context-menu/ContextMenu.vue b/src/shadcn/components/ui/context-menu/ContextMenu.vue
similarity index 65%
rename from src/renderer/src/components/ui/context-menu/ContextMenu.vue
rename to src/shadcn/components/ui/context-menu/ContextMenu.vue
index 363e9c6b2..12842213d 100644
--- a/src/renderer/src/components/ui/context-menu/ContextMenu.vue
+++ b/src/shadcn/components/ui/context-menu/ContextMenu.vue
@@ -1,15 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuCheckboxItem.vue b/src/shadcn/components/ui/context-menu/ContextMenuCheckboxItem.vue
new file mode 100644
index 000000000..e8b08d5d9
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuCheckboxItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuContent.vue b/src/shadcn/components/ui/context-menu/ContextMenuContent.vue
new file mode 100644
index 000000000..bca5fb4a4
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuContent.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuGroup.vue b/src/shadcn/components/ui/context-menu/ContextMenuGroup.vue
new file mode 100644
index 000000000..ca6c9c0f9
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuItem.vue b/src/shadcn/components/ui/context-menu/ContextMenuItem.vue
new file mode 100644
index 000000000..872e1d7b5
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuLabel.vue b/src/shadcn/components/ui/context-menu/ContextMenuLabel.vue
new file mode 100644
index 000000000..a6d31a6f3
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuLabel.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuPortal.vue b/src/shadcn/components/ui/context-menu/ContextMenuPortal.vue
new file mode 100644
index 000000000..34bdca5a0
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuPortal.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/context-menu/ContextMenuRadioGroup.vue b/src/shadcn/components/ui/context-menu/ContextMenuRadioGroup.vue
similarity index 59%
rename from src/renderer/src/components/ui/context-menu/ContextMenuRadioGroup.vue
rename to src/shadcn/components/ui/context-menu/ContextMenuRadioGroup.vue
index 33273a743..51fb4935d 100644
--- a/src/renderer/src/components/ui/context-menu/ContextMenuRadioGroup.vue
+++ b/src/shadcn/components/ui/context-menu/ContextMenuRadioGroup.vue
@@ -1,19 +1,22 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuRadioItem.vue b/src/shadcn/components/ui/context-menu/ContextMenuRadioItem.vue
new file mode 100644
index 000000000..65140bd31
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuRadioItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuSeparator.vue b/src/shadcn/components/ui/context-menu/ContextMenuSeparator.vue
new file mode 100644
index 000000000..44f9753e6
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuSeparator.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuShortcut.vue b/src/shadcn/components/ui/context-menu/ContextMenuShortcut.vue
new file mode 100644
index 000000000..e28dc30d7
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/context-menu/ContextMenuSub.vue b/src/shadcn/components/ui/context-menu/ContextMenuSub.vue
similarity index 60%
rename from src/renderer/src/components/ui/context-menu/ContextMenuSub.vue
rename to src/shadcn/components/ui/context-menu/ContextMenuSub.vue
index 7abc36038..769694402 100644
--- a/src/renderer/src/components/ui/context-menu/ContextMenuSub.vue
+++ b/src/shadcn/components/ui/context-menu/ContextMenuSub.vue
@@ -1,19 +1,22 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuSubContent.vue b/src/shadcn/components/ui/context-menu/ContextMenuSubContent.vue
new file mode 100644
index 000000000..5be195125
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuSubContent.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuSubTrigger.vue b/src/shadcn/components/ui/context-menu/ContextMenuSubTrigger.vue
new file mode 100644
index 000000000..1e43da415
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuSubTrigger.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/ContextMenuTrigger.vue b/src/shadcn/components/ui/context-menu/ContextMenuTrigger.vue
new file mode 100644
index 000000000..a33fcbae4
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/ContextMenuTrigger.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/context-menu/index.ts b/src/shadcn/components/ui/context-menu/index.ts
new file mode 100644
index 000000000..5919fd37d
--- /dev/null
+++ b/src/shadcn/components/ui/context-menu/index.ts
@@ -0,0 +1,14 @@
+export { default as ContextMenu } from "./ContextMenu.vue"
+export { default as ContextMenuCheckboxItem } from "./ContextMenuCheckboxItem.vue"
+export { default as ContextMenuContent } from "./ContextMenuContent.vue"
+export { default as ContextMenuGroup } from "./ContextMenuGroup.vue"
+export { default as ContextMenuItem } from "./ContextMenuItem.vue"
+export { default as ContextMenuLabel } from "./ContextMenuLabel.vue"
+export { default as ContextMenuRadioGroup } from "./ContextMenuRadioGroup.vue"
+export { default as ContextMenuRadioItem } from "./ContextMenuRadioItem.vue"
+export { default as ContextMenuSeparator } from "./ContextMenuSeparator.vue"
+export { default as ContextMenuShortcut } from "./ContextMenuShortcut.vue"
+export { default as ContextMenuSub } from "./ContextMenuSub.vue"
+export { default as ContextMenuSubContent } from "./ContextMenuSubContent.vue"
+export { default as ContextMenuSubTrigger } from "./ContextMenuSubTrigger.vue"
+export { default as ContextMenuTrigger } from "./ContextMenuTrigger.vue"
diff --git a/src/renderer/src/components/ui/dialog/Dialog.vue b/src/shadcn/components/ui/dialog/Dialog.vue
similarity index 53%
rename from src/renderer/src/components/ui/dialog/Dialog.vue
rename to src/shadcn/components/ui/dialog/Dialog.vue
index a04c02626..1b551d659 100644
--- a/src/renderer/src/components/ui/dialog/Dialog.vue
+++ b/src/shadcn/components/ui/dialog/Dialog.vue
@@ -1,14 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogClose.vue b/src/shadcn/components/ui/dialog/DialogClose.vue
new file mode 100644
index 000000000..a67680c17
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogClose.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogContent.vue b/src/shadcn/components/ui/dialog/DialogContent.vue
new file mode 100644
index 000000000..63775f8e6
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogContent.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+ Close
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogDescription.vue b/src/shadcn/components/ui/dialog/DialogDescription.vue
new file mode 100644
index 000000000..b1e542cb7
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogDescription.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogFooter.vue b/src/shadcn/components/ui/dialog/DialogFooter.vue
new file mode 100644
index 000000000..d059c2ef8
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogFooter.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogHeader.vue b/src/shadcn/components/ui/dialog/DialogHeader.vue
new file mode 100644
index 000000000..96cd2cd88
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogOverlay.vue b/src/shadcn/components/ui/dialog/DialogOverlay.vue
new file mode 100644
index 000000000..800170b63
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogOverlay.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogScrollContent.vue b/src/shadcn/components/ui/dialog/DialogScrollContent.vue
new file mode 100644
index 000000000..6a66bbc79
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogScrollContent.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {
+ const originalEvent = event.detail.originalEvent;
+ const target = originalEvent.target as HTMLElement;
+ if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) {
+ event.preventDefault();
+ }
+ }"
+ >
+
+
+
+
+ Close
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogTitle.vue b/src/shadcn/components/ui/dialog/DialogTitle.vue
new file mode 100644
index 000000000..999351a56
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogTitle.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/DialogTrigger.vue b/src/shadcn/components/ui/dialog/DialogTrigger.vue
new file mode 100644
index 000000000..aea70709c
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/DialogTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dialog/index.ts b/src/shadcn/components/ui/dialog/index.ts
new file mode 100644
index 000000000..6768b090c
--- /dev/null
+++ b/src/shadcn/components/ui/dialog/index.ts
@@ -0,0 +1,10 @@
+export { default as Dialog } from "./Dialog.vue"
+export { default as DialogClose } from "./DialogClose.vue"
+export { default as DialogContent } from "./DialogContent.vue"
+export { default as DialogDescription } from "./DialogDescription.vue"
+export { default as DialogFooter } from "./DialogFooter.vue"
+export { default as DialogHeader } from "./DialogHeader.vue"
+export { default as DialogOverlay } from "./DialogOverlay.vue"
+export { default as DialogScrollContent } from "./DialogScrollContent.vue"
+export { default as DialogTitle } from "./DialogTitle.vue"
+export { default as DialogTrigger } from "./DialogTrigger.vue"
diff --git a/src/renderer/src/components/ui/dropdown-menu/DropdownMenu.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenu.vue
similarity index 51%
rename from src/renderer/src/components/ui/dropdown-menu/DropdownMenu.vue
rename to src/shadcn/components/ui/dropdown-menu/DropdownMenu.vue
index b83d90b86..a311b9e4d 100644
--- a/src/renderer/src/components/ui/dropdown-menu/DropdownMenu.vue
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenu.vue
@@ -1,14 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
new file mode 100644
index 000000000..d6cee5532
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuContent.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuContent.vue
new file mode 100644
index 000000000..e726d435c
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuContent.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuGroup.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuGroup.vue
new file mode 100644
index 000000000..7049d928e
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuItem.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuItem.vue
new file mode 100644
index 000000000..5e9b474cd
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuItem.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuLabel.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuLabel.vue
new file mode 100644
index 000000000..0f654fe03
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuLabel.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
similarity index 59%
rename from src/renderer/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
rename to src/shadcn/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
index 4a727904c..cdba12968 100644
--- a/src/renderer/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
@@ -1,19 +1,22 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
new file mode 100644
index 000000000..7c2014530
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSeparator.vue
new file mode 100644
index 000000000..5e7980ba1
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSeparator.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuShortcut.vue
new file mode 100644
index 000000000..ce1382d12
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/dropdown-menu/DropdownMenuSub.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSub.vue
similarity index 62%
rename from src/renderer/src/components/ui/dropdown-menu/DropdownMenuSub.vue
rename to src/shadcn/components/ui/dropdown-menu/DropdownMenuSub.vue
index e0f4bd778..84b393314 100644
--- a/src/renderer/src/components/ui/dropdown-menu/DropdownMenuSub.vue
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSub.vue
@@ -1,19 +1,19 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSubContent.vue
new file mode 100644
index 000000000..d21bc9fff
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSubContent.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
new file mode 100644
index 000000000..249e5ade4
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/src/shadcn/components/ui/dropdown-menu/DropdownMenuTrigger.vue
new file mode 100644
index 000000000..1e4c830c2
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/DropdownMenuTrigger.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/dropdown-menu/index.ts b/src/shadcn/components/ui/dropdown-menu/index.ts
new file mode 100644
index 000000000..955fe3aa0
--- /dev/null
+++ b/src/shadcn/components/ui/dropdown-menu/index.ts
@@ -0,0 +1,16 @@
+export { default as DropdownMenu } from "./DropdownMenu.vue"
+
+export { default as DropdownMenuCheckboxItem } from "./DropdownMenuCheckboxItem.vue"
+export { default as DropdownMenuContent } from "./DropdownMenuContent.vue"
+export { default as DropdownMenuGroup } from "./DropdownMenuGroup.vue"
+export { default as DropdownMenuItem } from "./DropdownMenuItem.vue"
+export { default as DropdownMenuLabel } from "./DropdownMenuLabel.vue"
+export { default as DropdownMenuRadioGroup } from "./DropdownMenuRadioGroup.vue"
+export { default as DropdownMenuRadioItem } from "./DropdownMenuRadioItem.vue"
+export { default as DropdownMenuSeparator } from "./DropdownMenuSeparator.vue"
+export { default as DropdownMenuShortcut } from "./DropdownMenuShortcut.vue"
+export { default as DropdownMenuSub } from "./DropdownMenuSub.vue"
+export { default as DropdownMenuSubContent } from "./DropdownMenuSubContent.vue"
+export { default as DropdownMenuSubTrigger } from "./DropdownMenuSubTrigger.vue"
+export { default as DropdownMenuTrigger } from "./DropdownMenuTrigger.vue"
+export { DropdownMenuPortal } from "reka-ui"
diff --git a/src/shadcn/components/ui/form/FormControl.vue b/src/shadcn/components/ui/form/FormControl.vue
new file mode 100644
index 000000000..f3e071705
--- /dev/null
+++ b/src/shadcn/components/ui/form/FormControl.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/form/FormDescription.vue b/src/shadcn/components/ui/form/FormDescription.vue
new file mode 100644
index 000000000..bbcc01673
--- /dev/null
+++ b/src/shadcn/components/ui/form/FormDescription.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/form/FormItem.vue b/src/shadcn/components/ui/form/FormItem.vue
new file mode 100644
index 000000000..3cd3907e2
--- /dev/null
+++ b/src/shadcn/components/ui/form/FormItem.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/form/FormLabel.vue b/src/shadcn/components/ui/form/FormLabel.vue
new file mode 100644
index 000000000..48b292391
--- /dev/null
+++ b/src/shadcn/components/ui/form/FormLabel.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/form/FormMessage.vue b/src/shadcn/components/ui/form/FormMessage.vue
new file mode 100644
index 000000000..2044833bd
--- /dev/null
+++ b/src/shadcn/components/ui/form/FormMessage.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/form/index.ts b/src/shadcn/components/ui/form/index.ts
new file mode 100644
index 000000000..1eb05f11a
--- /dev/null
+++ b/src/shadcn/components/ui/form/index.ts
@@ -0,0 +1,7 @@
+export { default as FormControl } from "./FormControl.vue"
+export { default as FormDescription } from "./FormDescription.vue"
+export { default as FormItem } from "./FormItem.vue"
+export { default as FormLabel } from "./FormLabel.vue"
+export { default as FormMessage } from "./FormMessage.vue"
+export { FORM_ITEM_INJECTION_KEY } from "./injectionKeys"
+export { Form, Field as FormField, FieldArray as FormFieldArray } from "vee-validate"
diff --git a/src/shadcn/components/ui/form/injectionKeys.ts b/src/shadcn/components/ui/form/injectionKeys.ts
new file mode 100644
index 000000000..42542a96f
--- /dev/null
+++ b/src/shadcn/components/ui/form/injectionKeys.ts
@@ -0,0 +1,4 @@
+import type { InjectionKey } from "vue"
+
+export const FORM_ITEM_INJECTION_KEY
+ = Symbol() as InjectionKey
diff --git a/src/shadcn/components/ui/form/useFormField.ts b/src/shadcn/components/ui/form/useFormField.ts
new file mode 100644
index 000000000..62d86c268
--- /dev/null
+++ b/src/shadcn/components/ui/form/useFormField.ts
@@ -0,0 +1,30 @@
+import { FieldContextKey } from "vee-validate"
+import { computed, inject } from "vue"
+import { FORM_ITEM_INJECTION_KEY } from "./injectionKeys"
+
+export function useFormField() {
+ const fieldContext = inject(FieldContextKey)
+ const fieldItemContext = inject(FORM_ITEM_INJECTION_KEY)
+
+ if (!fieldContext)
+ throw new Error("useFormField should be used within ")
+
+ const { name, errorMessage: error, meta } = fieldContext
+ const id = fieldItemContext
+
+ const fieldState = {
+ valid: computed(() => meta.valid),
+ isDirty: computed(() => meta.dirty),
+ isTouched: computed(() => meta.touched),
+ error,
+ }
+
+ return {
+ id,
+ name,
+ formItemId: `${id}-form-item`,
+ formDescriptionId: `${id}-form-item-description`,
+ formMessageId: `${id}-form-item-message`,
+ ...fieldState,
+ }
+}
diff --git a/src/renderer/src/components/ui/hover-card/HoverCard.vue b/src/shadcn/components/ui/hover-card/HoverCard.vue
similarity index 52%
rename from src/renderer/src/components/ui/hover-card/HoverCard.vue
rename to src/shadcn/components/ui/hover-card/HoverCard.vue
index f17c9d1ff..e45514a97 100644
--- a/src/renderer/src/components/ui/hover-card/HoverCard.vue
+++ b/src/shadcn/components/ui/hover-card/HoverCard.vue
@@ -1,14 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/hover-card/HoverCardContent.vue b/src/shadcn/components/ui/hover-card/HoverCardContent.vue
new file mode 100644
index 000000000..0a3fb88b0
--- /dev/null
+++ b/src/shadcn/components/ui/hover-card/HoverCardContent.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/hover-card/HoverCardTrigger.vue b/src/shadcn/components/ui/hover-card/HoverCardTrigger.vue
new file mode 100644
index 000000000..5cbc3d36c
--- /dev/null
+++ b/src/shadcn/components/ui/hover-card/HoverCardTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/hover-card/index.ts b/src/shadcn/components/ui/hover-card/index.ts
new file mode 100644
index 000000000..49b2930d2
--- /dev/null
+++ b/src/shadcn/components/ui/hover-card/index.ts
@@ -0,0 +1,3 @@
+export { default as HoverCard } from "./HoverCard.vue"
+export { default as HoverCardContent } from "./HoverCardContent.vue"
+export { default as HoverCardTrigger } from "./HoverCardTrigger.vue"
diff --git a/src/shadcn/components/ui/input/Input.vue b/src/shadcn/components/ui/input/Input.vue
new file mode 100644
index 000000000..010590c8a
--- /dev/null
+++ b/src/shadcn/components/ui/input/Input.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/input/index.ts b/src/shadcn/components/ui/input/index.ts
new file mode 100644
index 000000000..9976b86f5
--- /dev/null
+++ b/src/shadcn/components/ui/input/index.ts
@@ -0,0 +1 @@
+export { default as Input } from "./Input.vue"
diff --git a/src/shadcn/components/ui/label/Label.vue b/src/shadcn/components/ui/label/Label.vue
new file mode 100644
index 000000000..fa117c324
--- /dev/null
+++ b/src/shadcn/components/ui/label/Label.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/label/index.ts b/src/shadcn/components/ui/label/index.ts
new file mode 100644
index 000000000..036e35c34
--- /dev/null
+++ b/src/shadcn/components/ui/label/index.ts
@@ -0,0 +1 @@
+export { default as Label } from "./Label.vue"
diff --git a/src/renderer/src/components/ui/menubar/Menubar.vue b/src/shadcn/components/ui/menubar/Menubar.vue
similarity index 50%
rename from src/renderer/src/components/ui/menubar/Menubar.vue
rename to src/shadcn/components/ui/menubar/Menubar.vue
index 1b8188f18..0b420ae03 100644
--- a/src/renderer/src/components/ui/menubar/Menubar.vue
+++ b/src/shadcn/components/ui/menubar/Menubar.vue
@@ -1,35 +1,33 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarCheckboxItem.vue b/src/shadcn/components/ui/menubar/MenubarCheckboxItem.vue
new file mode 100644
index 000000000..50125b9e7
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarCheckboxItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarContent.vue b/src/shadcn/components/ui/menubar/MenubarContent.vue
new file mode 100644
index 000000000..9041325be
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarContent.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarGroup.vue b/src/shadcn/components/ui/menubar/MenubarGroup.vue
new file mode 100644
index 000000000..47164a399
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarItem.vue b/src/shadcn/components/ui/menubar/MenubarItem.vue
new file mode 100644
index 000000000..399947604
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarItem.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarLabel.vue b/src/shadcn/components/ui/menubar/MenubarLabel.vue
new file mode 100644
index 000000000..4b36bdbeb
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarLabel.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarMenu.vue b/src/shadcn/components/ui/menubar/MenubarMenu.vue
new file mode 100644
index 000000000..5d79ce9f2
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarMenu.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/menubar/MenubarRadioGroup.vue b/src/shadcn/components/ui/menubar/MenubarRadioGroup.vue
similarity index 60%
rename from src/renderer/src/components/ui/menubar/MenubarRadioGroup.vue
rename to src/shadcn/components/ui/menubar/MenubarRadioGroup.vue
index 60a8cd1d9..26d74b38c 100644
--- a/src/renderer/src/components/ui/menubar/MenubarRadioGroup.vue
+++ b/src/shadcn/components/ui/menubar/MenubarRadioGroup.vue
@@ -1,20 +1,22 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarRadioItem.vue b/src/shadcn/components/ui/menubar/MenubarRadioItem.vue
new file mode 100644
index 000000000..7c4211173
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarRadioItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarSeparator.vue b/src/shadcn/components/ui/menubar/MenubarSeparator.vue
new file mode 100644
index 000000000..5116bc667
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarSeparator.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarShortcut.vue b/src/shadcn/components/ui/menubar/MenubarShortcut.vue
new file mode 100644
index 000000000..5b8ac8053
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/menubar/MenubarSub.vue b/src/shadcn/components/ui/menubar/MenubarSub.vue
similarity index 61%
rename from src/renderer/src/components/ui/menubar/MenubarSub.vue
rename to src/shadcn/components/ui/menubar/MenubarSub.vue
index 6b76cd3e2..92898b381 100644
--- a/src/renderer/src/components/ui/menubar/MenubarSub.vue
+++ b/src/shadcn/components/ui/menubar/MenubarSub.vue
@@ -1,19 +1,23 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarSubContent.vue b/src/shadcn/components/ui/menubar/MenubarSubContent.vue
new file mode 100644
index 000000000..98d352455
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarSubContent.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarSubTrigger.vue b/src/shadcn/components/ui/menubar/MenubarSubTrigger.vue
new file mode 100644
index 000000000..c505e8566
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarSubTrigger.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/MenubarTrigger.vue b/src/shadcn/components/ui/menubar/MenubarTrigger.vue
new file mode 100644
index 000000000..5ba72057a
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/MenubarTrigger.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/menubar/index.ts b/src/shadcn/components/ui/menubar/index.ts
new file mode 100644
index 000000000..bebbb780c
--- /dev/null
+++ b/src/shadcn/components/ui/menubar/index.ts
@@ -0,0 +1,15 @@
+export { default as Menubar } from "./Menubar.vue"
+export { default as MenubarCheckboxItem } from "./MenubarCheckboxItem.vue"
+export { default as MenubarContent } from "./MenubarContent.vue"
+export { default as MenubarGroup } from "./MenubarGroup.vue"
+export { default as MenubarItem } from "./MenubarItem.vue"
+export { default as MenubarLabel } from "./MenubarLabel.vue"
+export { default as MenubarMenu } from "./MenubarMenu.vue"
+export { default as MenubarRadioGroup } from "./MenubarRadioGroup.vue"
+export { default as MenubarRadioItem } from "./MenubarRadioItem.vue"
+export { default as MenubarSeparator } from "./MenubarSeparator.vue"
+export { default as MenubarShortcut } from "./MenubarShortcut.vue"
+export { default as MenubarSub } from "./MenubarSub.vue"
+export { default as MenubarSubContent } from "./MenubarSubContent.vue"
+export { default as MenubarSubTrigger } from "./MenubarSubTrigger.vue"
+export { default as MenubarTrigger } from "./MenubarTrigger.vue"
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenu.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenu.vue
new file mode 100644
index 000000000..6858d831c
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenu.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenuContent.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuContent.vue
new file mode 100644
index 000000000..989f6ac70
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuContent.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenuIndicator.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuIndicator.vue
new file mode 100644
index 000000000..f7b20c76e
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuIndicator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenuItem.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuItem.vue
new file mode 100644
index 000000000..5a6e96633
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuItem.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenuLink.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuLink.vue
new file mode 100644
index 000000000..d2af4b47f
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuLink.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/navigation-menu/NavigationMenuList.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuList.vue
similarity index 50%
rename from src/renderer/src/components/ui/navigation-menu/NavigationMenuList.vue
rename to src/shadcn/components/ui/navigation-menu/NavigationMenuList.vue
index 4cf0d10eb..e32dfefb6 100644
--- a/src/renderer/src/components/ui/navigation-menu/NavigationMenuList.vue
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuList.vue
@@ -1,29 +1,28 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenuTrigger.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuTrigger.vue
new file mode 100644
index 000000000..17447a956
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuTrigger.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/NavigationMenuViewport.vue b/src/shadcn/components/ui/navigation-menu/NavigationMenuViewport.vue
new file mode 100644
index 000000000..b848080c3
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/NavigationMenuViewport.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/navigation-menu/index.ts b/src/shadcn/components/ui/navigation-menu/index.ts
new file mode 100644
index 000000000..90055919d
--- /dev/null
+++ b/src/shadcn/components/ui/navigation-menu/index.ts
@@ -0,0 +1,14 @@
+import { cva } from "class-variance-authority"
+
+export { default as NavigationMenu } from "./NavigationMenu.vue"
+export { default as NavigationMenuContent } from "./NavigationMenuContent.vue"
+export { default as NavigationMenuIndicator } from "./NavigationMenuIndicator.vue"
+export { default as NavigationMenuItem } from "./NavigationMenuItem.vue"
+export { default as NavigationMenuLink } from "./NavigationMenuLink.vue"
+export { default as NavigationMenuList } from "./NavigationMenuList.vue"
+export { default as NavigationMenuTrigger } from "./NavigationMenuTrigger.vue"
+export { default as NavigationMenuViewport } from "./NavigationMenuViewport.vue"
+
+export const navigationMenuTriggerStyle = cva(
+ "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1",
+)
diff --git a/src/renderer/src/components/ui/popover/Popover.vue b/src/shadcn/components/ui/popover/Popover.vue
similarity index 52%
rename from src/renderer/src/components/ui/popover/Popover.vue
rename to src/shadcn/components/ui/popover/Popover.vue
index da5f7096c..fc45d8693 100644
--- a/src/renderer/src/components/ui/popover/Popover.vue
+++ b/src/shadcn/components/ui/popover/Popover.vue
@@ -1,15 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/popover/PopoverAnchor.vue b/src/shadcn/components/ui/popover/PopoverAnchor.vue
new file mode 100644
index 000000000..ae3b86612
--- /dev/null
+++ b/src/shadcn/components/ui/popover/PopoverAnchor.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/popover/PopoverContent.vue b/src/shadcn/components/ui/popover/PopoverContent.vue
new file mode 100644
index 000000000..427493b42
--- /dev/null
+++ b/src/shadcn/components/ui/popover/PopoverContent.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/popover/PopoverTrigger.vue b/src/shadcn/components/ui/popover/PopoverTrigger.vue
new file mode 100644
index 000000000..c8738b91b
--- /dev/null
+++ b/src/shadcn/components/ui/popover/PopoverTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/popover/index.ts b/src/shadcn/components/ui/popover/index.ts
new file mode 100644
index 000000000..66edf89f6
--- /dev/null
+++ b/src/shadcn/components/ui/popover/index.ts
@@ -0,0 +1,4 @@
+export { default as Popover } from "./Popover.vue"
+export { default as PopoverAnchor } from "./PopoverAnchor.vue"
+export { default as PopoverContent } from "./PopoverContent.vue"
+export { default as PopoverTrigger } from "./PopoverTrigger.vue"
diff --git a/src/shadcn/components/ui/progress/Progress.vue b/src/shadcn/components/ui/progress/Progress.vue
new file mode 100644
index 000000000..292c422e2
--- /dev/null
+++ b/src/shadcn/components/ui/progress/Progress.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/progress/index.ts b/src/shadcn/components/ui/progress/index.ts
new file mode 100644
index 000000000..8598b9697
--- /dev/null
+++ b/src/shadcn/components/ui/progress/index.ts
@@ -0,0 +1 @@
+export { default as Progress } from "./Progress.vue"
diff --git a/src/shadcn/components/ui/radio-group/RadioGroup.vue b/src/shadcn/components/ui/radio-group/RadioGroup.vue
new file mode 100644
index 000000000..7b5f39101
--- /dev/null
+++ b/src/shadcn/components/ui/radio-group/RadioGroup.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/radio-group/RadioGroupItem.vue b/src/shadcn/components/ui/radio-group/RadioGroupItem.vue
new file mode 100644
index 000000000..17faf0718
--- /dev/null
+++ b/src/shadcn/components/ui/radio-group/RadioGroupItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/radio-group/index.ts b/src/shadcn/components/ui/radio-group/index.ts
new file mode 100644
index 000000000..7cb0e3b10
--- /dev/null
+++ b/src/shadcn/components/ui/radio-group/index.ts
@@ -0,0 +1,2 @@
+export { default as RadioGroup } from "./RadioGroup.vue"
+export { default as RadioGroupItem } from "./RadioGroupItem.vue"
diff --git a/src/shadcn/components/ui/scroll-area/ScrollArea.vue b/src/shadcn/components/ui/scroll-area/ScrollArea.vue
new file mode 100644
index 000000000..ea342bd57
--- /dev/null
+++ b/src/shadcn/components/ui/scroll-area/ScrollArea.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/scroll-area/ScrollBar.vue b/src/shadcn/components/ui/scroll-area/ScrollBar.vue
new file mode 100644
index 000000000..dfd207d82
--- /dev/null
+++ b/src/shadcn/components/ui/scroll-area/ScrollBar.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/scroll-area/index.ts b/src/shadcn/components/ui/scroll-area/index.ts
new file mode 100644
index 000000000..c416759cb
--- /dev/null
+++ b/src/shadcn/components/ui/scroll-area/index.ts
@@ -0,0 +1,2 @@
+export { default as ScrollArea } from "./ScrollArea.vue"
+export { default as ScrollBar } from "./ScrollBar.vue"
diff --git a/src/renderer/src/components/ui/select/Select.vue b/src/shadcn/components/ui/select/Select.vue
similarity index 53%
rename from src/renderer/src/components/ui/select/Select.vue
rename to src/shadcn/components/ui/select/Select.vue
index adc42fdfb..2e7647630 100644
--- a/src/renderer/src/components/ui/select/Select.vue
+++ b/src/shadcn/components/ui/select/Select.vue
@@ -1,15 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectContent.vue b/src/shadcn/components/ui/select/SelectContent.vue
new file mode 100644
index 000000000..f17b4db00
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectContent.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectGroup.vue b/src/shadcn/components/ui/select/SelectGroup.vue
new file mode 100644
index 000000000..9715238bf
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectGroup.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectItem.vue b/src/shadcn/components/ui/select/SelectItem.vue
new file mode 100644
index 000000000..bb31260d5
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectItem.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectItemText.vue b/src/shadcn/components/ui/select/SelectItemText.vue
new file mode 100644
index 000000000..a2101b120
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectItemText.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectLabel.vue b/src/shadcn/components/ui/select/SelectLabel.vue
new file mode 100644
index 000000000..1b6fb2381
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectLabel.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectScrollDownButton.vue b/src/shadcn/components/ui/select/SelectScrollDownButton.vue
new file mode 100644
index 000000000..7ff9fcb6c
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectScrollDownButton.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectScrollUpButton.vue b/src/shadcn/components/ui/select/SelectScrollUpButton.vue
new file mode 100644
index 000000000..7e3dcfe43
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectScrollUpButton.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectSeparator.vue b/src/shadcn/components/ui/select/SelectSeparator.vue
new file mode 100644
index 000000000..fd0fd4dc4
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectSeparator.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectTrigger.vue b/src/shadcn/components/ui/select/SelectTrigger.vue
new file mode 100644
index 000000000..f53f9e93e
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectTrigger.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/SelectValue.vue b/src/shadcn/components/ui/select/SelectValue.vue
new file mode 100644
index 000000000..0fa3c601b
--- /dev/null
+++ b/src/shadcn/components/ui/select/SelectValue.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/select/index.ts b/src/shadcn/components/ui/select/index.ts
new file mode 100644
index 000000000..96eae60cf
--- /dev/null
+++ b/src/shadcn/components/ui/select/index.ts
@@ -0,0 +1,11 @@
+export { default as Select } from "./Select.vue"
+export { default as SelectContent } from "./SelectContent.vue"
+export { default as SelectGroup } from "./SelectGroup.vue"
+export { default as SelectItem } from "./SelectItem.vue"
+export { default as SelectItemText } from "./SelectItemText.vue"
+export { default as SelectLabel } from "./SelectLabel.vue"
+export { default as SelectScrollDownButton } from "./SelectScrollDownButton.vue"
+export { default as SelectScrollUpButton } from "./SelectScrollUpButton.vue"
+export { default as SelectSeparator } from "./SelectSeparator.vue"
+export { default as SelectTrigger } from "./SelectTrigger.vue"
+export { default as SelectValue } from "./SelectValue.vue"
diff --git a/src/shadcn/components/ui/separator/Separator.vue b/src/shadcn/components/ui/separator/Separator.vue
new file mode 100644
index 000000000..a72f28718
--- /dev/null
+++ b/src/shadcn/components/ui/separator/Separator.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/separator/index.ts b/src/shadcn/components/ui/separator/index.ts
new file mode 100644
index 000000000..440728730
--- /dev/null
+++ b/src/shadcn/components/ui/separator/index.ts
@@ -0,0 +1 @@
+export { default as Separator } from "./Separator.vue"
diff --git a/src/renderer/src/components/ui/sheet/Sheet.vue b/src/shadcn/components/ui/sheet/Sheet.vue
similarity index 53%
rename from src/renderer/src/components/ui/sheet/Sheet.vue
rename to src/shadcn/components/ui/sheet/Sheet.vue
index a04c02626..dca84413c 100644
--- a/src/renderer/src/components/ui/sheet/Sheet.vue
+++ b/src/shadcn/components/ui/sheet/Sheet.vue
@@ -1,14 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetClose.vue b/src/shadcn/components/ui/sheet/SheetClose.vue
new file mode 100644
index 000000000..38c8aec2d
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetClose.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetContent.vue b/src/shadcn/components/ui/sheet/SheetContent.vue
new file mode 100644
index 000000000..7b492ff52
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetContent.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+ Close
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetDescription.vue b/src/shadcn/components/ui/sheet/SheetDescription.vue
new file mode 100644
index 000000000..707560976
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetDescription.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetFooter.vue b/src/shadcn/components/ui/sheet/SheetFooter.vue
new file mode 100644
index 000000000..6b1afad4e
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetFooter.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetHeader.vue b/src/shadcn/components/ui/sheet/SheetHeader.vue
new file mode 100644
index 000000000..b48133772
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetHeader.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetOverlay.vue b/src/shadcn/components/ui/sheet/SheetOverlay.vue
new file mode 100644
index 000000000..dd81d22e9
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetOverlay.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetTitle.vue b/src/shadcn/components/ui/sheet/SheetTitle.vue
new file mode 100644
index 000000000..1e29cd19e
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetTitle.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/SheetTrigger.vue b/src/shadcn/components/ui/sheet/SheetTrigger.vue
new file mode 100644
index 000000000..83ade9ceb
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/SheetTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sheet/index.ts b/src/shadcn/components/ui/sheet/index.ts
new file mode 100644
index 000000000..7c70e5d7e
--- /dev/null
+++ b/src/shadcn/components/ui/sheet/index.ts
@@ -0,0 +1,8 @@
+export { default as Sheet } from "./Sheet.vue"
+export { default as SheetClose } from "./SheetClose.vue"
+export { default as SheetContent } from "./SheetContent.vue"
+export { default as SheetDescription } from "./SheetDescription.vue"
+export { default as SheetFooter } from "./SheetFooter.vue"
+export { default as SheetHeader } from "./SheetHeader.vue"
+export { default as SheetTitle } from "./SheetTitle.vue"
+export { default as SheetTrigger } from "./SheetTrigger.vue"
diff --git a/src/shadcn/components/ui/sidebar/Sidebar.vue b/src/shadcn/components/ui/sidebar/Sidebar.vue
new file mode 100644
index 000000000..0f459ffa8
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/Sidebar.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarContent.vue b/src/shadcn/components/ui/sidebar/SidebarContent.vue
similarity index 63%
rename from src/renderer/src/components/ui/sidebar/SidebarContent.vue
rename to src/shadcn/components/ui/sidebar/SidebarContent.vue
index 4b6244a40..5c20f9443 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarContent.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarContent.vue
@@ -1,17 +1,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarFooter.vue b/src/shadcn/components/ui/sidebar/SidebarFooter.vue
similarity index 56%
rename from src/renderer/src/components/ui/sidebar/SidebarFooter.vue
rename to src/shadcn/components/ui/sidebar/SidebarFooter.vue
index 9d145c05d..bdfba909c 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarFooter.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarFooter.vue
@@ -1,17 +1,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarGroup.vue b/src/shadcn/components/ui/sidebar/SidebarGroup.vue
similarity index 59%
rename from src/renderer/src/components/ui/sidebar/SidebarGroup.vue
rename to src/shadcn/components/ui/sidebar/SidebarGroup.vue
index adc6843c8..7f22f9b91 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarGroup.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarGroup.vue
@@ -1,17 +1,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarGroupAction.vue b/src/shadcn/components/ui/sidebar/SidebarGroupAction.vue
new file mode 100644
index 000000000..7440df3df
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarGroupAction.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarGroupContent.vue b/src/shadcn/components/ui/sidebar/SidebarGroupContent.vue
similarity index 55%
rename from src/renderer/src/components/ui/sidebar/SidebarGroupContent.vue
rename to src/shadcn/components/ui/sidebar/SidebarGroupContent.vue
index 37390c931..b678f9650 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarGroupContent.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarGroupContent.vue
@@ -1,17 +1,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarGroupLabel.vue b/src/shadcn/components/ui/sidebar/SidebarGroupLabel.vue
new file mode 100644
index 000000000..8001df1d3
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarGroupLabel.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarHeader.vue b/src/shadcn/components/ui/sidebar/SidebarHeader.vue
similarity index 56%
rename from src/renderer/src/components/ui/sidebar/SidebarHeader.vue
rename to src/shadcn/components/ui/sidebar/SidebarHeader.vue
index eecaddb20..b9140736b 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarHeader.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarHeader.vue
@@ -1,17 +1,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarInput.vue b/src/shadcn/components/ui/sidebar/SidebarInput.vue
new file mode 100644
index 000000000..d41833fb1
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarInput.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarInset.vue b/src/shadcn/components/ui/sidebar/SidebarInset.vue
new file mode 100644
index 000000000..d3d03cab7
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarInset.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarMenu.vue b/src/shadcn/components/ui/sidebar/SidebarMenu.vue
similarity index 58%
rename from src/renderer/src/components/ui/sidebar/SidebarMenu.vue
rename to src/shadcn/components/ui/sidebar/SidebarMenu.vue
index 3bfd73e6d..6057cbf22 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarMenu.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarMenu.vue
@@ -1,17 +1,18 @@
-
-
-
-
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarMenuAction.vue b/src/shadcn/components/ui/sidebar/SidebarMenuAction.vue
new file mode 100644
index 000000000..fda540e5b
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuAction.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarMenuBadge.vue b/src/shadcn/components/ui/sidebar/SidebarMenuBadge.vue
similarity index 60%
rename from src/renderer/src/components/ui/sidebar/SidebarMenuBadge.vue
rename to src/shadcn/components/ui/sidebar/SidebarMenuBadge.vue
index f8789687f..923fca0bd 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarMenuBadge.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuBadge.vue
@@ -1,25 +1,26 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarMenuButton.vue b/src/shadcn/components/ui/sidebar/SidebarMenuButton.vue
similarity index 63%
rename from src/renderer/src/components/ui/sidebar/SidebarMenuButton.vue
rename to src/shadcn/components/ui/sidebar/SidebarMenuButton.vue
index ac6926bfe..7621f4754 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarMenuButton.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuButton.vue
@@ -1,8 +1,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ tooltip }}
-
-
-
-
-
+const delegatedProps = reactiveOmit(props, "tooltip")
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tooltip }}
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarMenuButtonChild.vue b/src/shadcn/components/ui/sidebar/SidebarMenuButtonChild.vue
new file mode 100644
index 000000000..317ecce4a
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuButtonChild.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarMenuItem.vue b/src/shadcn/components/ui/sidebar/SidebarMenuItem.vue
similarity index 56%
rename from src/renderer/src/components/ui/sidebar/SidebarMenuItem.vue
rename to src/shadcn/components/ui/sidebar/SidebarMenuItem.vue
index b6000734f..faf21e226 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarMenuItem.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuItem.vue
@@ -1,17 +1,18 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarMenuSkeleton.vue b/src/shadcn/components/ui/sidebar/SidebarMenuSkeleton.vue
similarity index 50%
rename from src/renderer/src/components/ui/sidebar/SidebarMenuSkeleton.vue
rename to src/shadcn/components/ui/sidebar/SidebarMenuSkeleton.vue
index 76053a129..6e2b1179b 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarMenuSkeleton.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuSkeleton.vue
@@ -1,33 +1,35 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarMenuSub.vue b/src/shadcn/components/ui/sidebar/SidebarMenuSub.vue
new file mode 100644
index 000000000..ea60ad27f
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuSub.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarMenuSubButton.vue b/src/shadcn/components/ui/sidebar/SidebarMenuSubButton.vue
new file mode 100644
index 000000000..17c13ac8a
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuSubButton.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarMenuSubItem.vue b/src/shadcn/components/ui/sidebar/SidebarMenuSubItem.vue
new file mode 100644
index 000000000..a0ff03a84
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarMenuSubItem.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarProvider.vue b/src/shadcn/components/ui/sidebar/SidebarProvider.vue
similarity index 65%
rename from src/renderer/src/components/ui/sidebar/SidebarProvider.vue
rename to src/shadcn/components/ui/sidebar/SidebarProvider.vue
index 577581190..30cf334eb 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarProvider.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarProvider.vue
@@ -1,27 +1,28 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarRail.vue b/src/shadcn/components/ui/sidebar/SidebarRail.vue
new file mode 100644
index 000000000..2359a3557
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarRail.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sidebar/SidebarSeparator.vue b/src/shadcn/components/ui/sidebar/SidebarSeparator.vue
new file mode 100644
index 000000000..5ce6f1924
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/SidebarSeparator.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/src/renderer/src/components/ui/sidebar/SidebarTrigger.vue b/src/shadcn/components/ui/sidebar/SidebarTrigger.vue
similarity index 54%
rename from src/renderer/src/components/ui/sidebar/SidebarTrigger.vue
rename to src/shadcn/components/ui/sidebar/SidebarTrigger.vue
index 4bcc61a36..706faf98f 100644
--- a/src/renderer/src/components/ui/sidebar/SidebarTrigger.vue
+++ b/src/shadcn/components/ui/sidebar/SidebarTrigger.vue
@@ -1,26 +1,27 @@
-
-
-
-
- Toggle Sidebar
-
-
+
+
+
+
+
+ Toggle Sidebar
+
+
diff --git a/src/shadcn/components/ui/sidebar/index.ts b/src/shadcn/components/ui/sidebar/index.ts
new file mode 100644
index 000000000..ef718a9ce
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/index.ts
@@ -0,0 +1,60 @@
+import type { VariantProps } from "class-variance-authority"
+import type { HTMLAttributes } from "vue"
+import { cva } from "class-variance-authority"
+
+export interface SidebarProps {
+ side?: "left" | "right"
+ variant?: "sidebar" | "floating" | "inset"
+ collapsible?: "offcanvas" | "icon" | "none"
+ class?: HTMLAttributes["class"]
+}
+
+export { default as Sidebar } from "./Sidebar.vue"
+export { default as SidebarContent } from "./SidebarContent.vue"
+export { default as SidebarFooter } from "./SidebarFooter.vue"
+export { default as SidebarGroup } from "./SidebarGroup.vue"
+export { default as SidebarGroupAction } from "./SidebarGroupAction.vue"
+export { default as SidebarGroupContent } from "./SidebarGroupContent.vue"
+export { default as SidebarGroupLabel } from "./SidebarGroupLabel.vue"
+export { default as SidebarHeader } from "./SidebarHeader.vue"
+export { default as SidebarInput } from "./SidebarInput.vue"
+export { default as SidebarInset } from "./SidebarInset.vue"
+export { default as SidebarMenu } from "./SidebarMenu.vue"
+export { default as SidebarMenuAction } from "./SidebarMenuAction.vue"
+export { default as SidebarMenuBadge } from "./SidebarMenuBadge.vue"
+export { default as SidebarMenuButton } from "./SidebarMenuButton.vue"
+export { default as SidebarMenuItem } from "./SidebarMenuItem.vue"
+export { default as SidebarMenuSkeleton } from "./SidebarMenuSkeleton.vue"
+export { default as SidebarMenuSub } from "./SidebarMenuSub.vue"
+export { default as SidebarMenuSubButton } from "./SidebarMenuSubButton.vue"
+export { default as SidebarMenuSubItem } from "./SidebarMenuSubItem.vue"
+export { default as SidebarProvider } from "./SidebarProvider.vue"
+export { default as SidebarRail } from "./SidebarRail.vue"
+export { default as SidebarSeparator } from "./SidebarSeparator.vue"
+export { default as SidebarTrigger } from "./SidebarTrigger.vue"
+
+export { useSidebar } from "./utils"
+
+export const sidebarMenuButtonVariants = cva(
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
+ {
+ variants: {
+ variant: {
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
+ outline:
+ "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
+ },
+ size: {
+ default: "h-8 text-sm",
+ sm: "h-7 text-xs",
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+export type SidebarMenuButtonVariants = VariantProps
diff --git a/src/shadcn/components/ui/sidebar/utils.ts b/src/shadcn/components/ui/sidebar/utils.ts
new file mode 100644
index 000000000..6e57eeb9b
--- /dev/null
+++ b/src/shadcn/components/ui/sidebar/utils.ts
@@ -0,0 +1,19 @@
+import type { ComputedRef, Ref } from "vue"
+import { createContext } from "reka-ui"
+
+export const SIDEBAR_COOKIE_NAME = "sidebar_state"
+export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
+export const SIDEBAR_WIDTH = "16rem"
+export const SIDEBAR_WIDTH_MOBILE = "18rem"
+export const SIDEBAR_WIDTH_ICON = "3rem"
+export const SIDEBAR_KEYBOARD_SHORTCUT = "b"
+
+export const [useSidebar, provideSidebarContext] = createContext<{
+ state: ComputedRef<"expanded" | "collapsed">
+ open: Ref
+ setOpen: (value: boolean) => void
+ isMobile: Ref
+ openMobile: Ref
+ setOpenMobile: (value: boolean) => void
+ toggleSidebar: () => void
+}>("Sidebar")
diff --git a/src/shadcn/components/ui/skeleton/Skeleton.vue b/src/shadcn/components/ui/skeleton/Skeleton.vue
new file mode 100644
index 000000000..f602817de
--- /dev/null
+++ b/src/shadcn/components/ui/skeleton/Skeleton.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/skeleton/index.ts b/src/shadcn/components/ui/skeleton/index.ts
new file mode 100644
index 000000000..e5ce72c35
--- /dev/null
+++ b/src/shadcn/components/ui/skeleton/index.ts
@@ -0,0 +1 @@
+export { default as Skeleton } from "./Skeleton.vue"
diff --git a/src/shadcn/components/ui/slider/Slider.vue b/src/shadcn/components/ui/slider/Slider.vue
new file mode 100644
index 000000000..5f63ba02d
--- /dev/null
+++ b/src/shadcn/components/ui/slider/Slider.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/slider/index.ts b/src/shadcn/components/ui/slider/index.ts
new file mode 100644
index 000000000..f7a7b0965
--- /dev/null
+++ b/src/shadcn/components/ui/slider/index.ts
@@ -0,0 +1 @@
+export { default as Slider } from "./Slider.vue"
diff --git a/src/shadcn/components/ui/sonner/Sonner.vue b/src/shadcn/components/ui/sonner/Sonner.vue
new file mode 100644
index 000000000..2fd1bb879
--- /dev/null
+++ b/src/shadcn/components/ui/sonner/Sonner.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/sonner/index.ts b/src/shadcn/components/ui/sonner/index.ts
new file mode 100644
index 000000000..6673112ed
--- /dev/null
+++ b/src/shadcn/components/ui/sonner/index.ts
@@ -0,0 +1 @@
+export { default as Toaster } from "./Sonner.vue"
diff --git a/src/shadcn/components/ui/switch/Switch.vue b/src/shadcn/components/ui/switch/Switch.vue
new file mode 100644
index 000000000..23f19d998
--- /dev/null
+++ b/src/shadcn/components/ui/switch/Switch.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/switch/index.ts b/src/shadcn/components/ui/switch/index.ts
new file mode 100644
index 000000000..cc081f3f1
--- /dev/null
+++ b/src/shadcn/components/ui/switch/index.ts
@@ -0,0 +1 @@
+export { default as Switch } from "./Switch.vue"
diff --git a/src/shadcn/components/ui/table/Table.vue b/src/shadcn/components/ui/table/Table.vue
new file mode 100644
index 000000000..d60092f2b
--- /dev/null
+++ b/src/shadcn/components/ui/table/Table.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableBody.vue b/src/shadcn/components/ui/table/TableBody.vue
new file mode 100644
index 000000000..105de1a32
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableBody.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableCaption.vue b/src/shadcn/components/ui/table/TableCaption.vue
new file mode 100644
index 000000000..e24c6845a
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableCaption.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableCell.vue b/src/shadcn/components/ui/table/TableCell.vue
new file mode 100644
index 000000000..cc0ebc946
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableCell.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableEmpty.vue b/src/shadcn/components/ui/table/TableEmpty.vue
new file mode 100644
index 000000000..21cdb2b37
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableEmpty.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableFooter.vue b/src/shadcn/components/ui/table/TableFooter.vue
new file mode 100644
index 000000000..7eab4d649
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableFooter.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableHead.vue b/src/shadcn/components/ui/table/TableHead.vue
new file mode 100644
index 000000000..f34e8a491
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableHead.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableHeader.vue b/src/shadcn/components/ui/table/TableHeader.vue
new file mode 100644
index 000000000..6f730876a
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/TableRow.vue b/src/shadcn/components/ui/table/TableRow.vue
new file mode 100644
index 000000000..ca09ea5bd
--- /dev/null
+++ b/src/shadcn/components/ui/table/TableRow.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/table/index.ts b/src/shadcn/components/ui/table/index.ts
new file mode 100644
index 000000000..3be308b55
--- /dev/null
+++ b/src/shadcn/components/ui/table/index.ts
@@ -0,0 +1,9 @@
+export { default as Table } from "./Table.vue"
+export { default as TableBody } from "./TableBody.vue"
+export { default as TableCaption } from "./TableCaption.vue"
+export { default as TableCell } from "./TableCell.vue"
+export { default as TableEmpty } from "./TableEmpty.vue"
+export { default as TableFooter } from "./TableFooter.vue"
+export { default as TableHead } from "./TableHead.vue"
+export { default as TableHeader } from "./TableHeader.vue"
+export { default as TableRow } from "./TableRow.vue"
diff --git a/src/shadcn/components/ui/table/utils.ts b/src/shadcn/components/ui/table/utils.ts
new file mode 100644
index 000000000..3d4fd12fa
--- /dev/null
+++ b/src/shadcn/components/ui/table/utils.ts
@@ -0,0 +1,10 @@
+import type { Updater } from "@tanstack/vue-table"
+
+import type { Ref } from "vue"
+import { isFunction } from "@tanstack/vue-table"
+
+export function valueUpdater(updaterOrValue: Updater, ref: Ref) {
+ ref.value = isFunction(updaterOrValue)
+ ? updaterOrValue(ref.value)
+ : updaterOrValue
+}
diff --git a/src/shadcn/components/ui/tabs/Tabs.vue b/src/shadcn/components/ui/tabs/Tabs.vue
new file mode 100644
index 000000000..3de650c05
--- /dev/null
+++ b/src/shadcn/components/ui/tabs/Tabs.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tabs/TabsContent.vue b/src/shadcn/components/ui/tabs/TabsContent.vue
new file mode 100644
index 000000000..4029692e0
--- /dev/null
+++ b/src/shadcn/components/ui/tabs/TabsContent.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tabs/TabsList.vue b/src/shadcn/components/ui/tabs/TabsList.vue
new file mode 100644
index 000000000..059db718d
--- /dev/null
+++ b/src/shadcn/components/ui/tabs/TabsList.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tabs/TabsTrigger.vue b/src/shadcn/components/ui/tabs/TabsTrigger.vue
new file mode 100644
index 000000000..7074068e6
--- /dev/null
+++ b/src/shadcn/components/ui/tabs/TabsTrigger.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tabs/index.ts b/src/shadcn/components/ui/tabs/index.ts
new file mode 100644
index 000000000..7f99b7f23
--- /dev/null
+++ b/src/shadcn/components/ui/tabs/index.ts
@@ -0,0 +1,4 @@
+export { default as Tabs } from "./Tabs.vue"
+export { default as TabsContent } from "./TabsContent.vue"
+export { default as TabsList } from "./TabsList.vue"
+export { default as TabsTrigger } from "./TabsTrigger.vue"
diff --git a/src/shadcn/components/ui/textarea/Textarea.vue b/src/shadcn/components/ui/textarea/Textarea.vue
new file mode 100644
index 000000000..e78707886
--- /dev/null
+++ b/src/shadcn/components/ui/textarea/Textarea.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/src/shadcn/components/ui/textarea/index.ts b/src/shadcn/components/ui/textarea/index.ts
new file mode 100644
index 000000000..8ce91e9c3
--- /dev/null
+++ b/src/shadcn/components/ui/textarea/index.ts
@@ -0,0 +1 @@
+export { default as Textarea } from "./Textarea.vue"
diff --git a/src/shadcn/components/ui/toggle/Toggle.vue b/src/shadcn/components/ui/toggle/Toggle.vue
new file mode 100644
index 000000000..3023a52fa
--- /dev/null
+++ b/src/shadcn/components/ui/toggle/Toggle.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/toggle/index.ts b/src/shadcn/components/ui/toggle/index.ts
new file mode 100644
index 000000000..d873390e7
--- /dev/null
+++ b/src/shadcn/components/ui/toggle/index.ts
@@ -0,0 +1,28 @@
+import type { VariantProps } from "class-variance-authority"
+import { cva } from "class-variance-authority"
+
+export { default as Toggle } from "./Toggle.vue"
+
+export const toggleVariants = cva(
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ outline:
+ "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground",
+ },
+ size: {
+ default: "h-9 px-2 min-w-9",
+ sm: "h-8 px-1.5 min-w-8",
+ lg: "h-10 px-2.5 min-w-10",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+export type ToggleVariants = VariantProps
diff --git a/src/renderer/src/components/ui/tooltip/Tooltip.vue b/src/shadcn/components/ui/tooltip/Tooltip.vue
similarity index 52%
rename from src/renderer/src/components/ui/tooltip/Tooltip.vue
rename to src/shadcn/components/ui/tooltip/Tooltip.vue
index b421f0fef..27bfef06b 100644
--- a/src/renderer/src/components/ui/tooltip/Tooltip.vue
+++ b/src/shadcn/components/ui/tooltip/Tooltip.vue
@@ -1,14 +1,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tooltip/TooltipContent.vue b/src/shadcn/components/ui/tooltip/TooltipContent.vue
new file mode 100644
index 000000000..8a2fa9bbe
--- /dev/null
+++ b/src/shadcn/components/ui/tooltip/TooltipContent.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tooltip/TooltipProvider.vue b/src/shadcn/components/ui/tooltip/TooltipProvider.vue
new file mode 100644
index 000000000..7c24f3800
--- /dev/null
+++ b/src/shadcn/components/ui/tooltip/TooltipProvider.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tooltip/TooltipTrigger.vue b/src/shadcn/components/ui/tooltip/TooltipTrigger.vue
new file mode 100644
index 000000000..b1a3fbcc7
--- /dev/null
+++ b/src/shadcn/components/ui/tooltip/TooltipTrigger.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/src/shadcn/components/ui/tooltip/index.ts b/src/shadcn/components/ui/tooltip/index.ts
new file mode 100644
index 000000000..8f8d514d9
--- /dev/null
+++ b/src/shadcn/components/ui/tooltip/index.ts
@@ -0,0 +1,4 @@
+export { default as Tooltip } from "./Tooltip.vue"
+export { default as TooltipContent } from "./TooltipContent.vue"
+export { default as TooltipProvider } from "./TooltipProvider.vue"
+export { default as TooltipTrigger } from "./TooltipTrigger.vue"
diff --git a/src/shadcn/lib/utils.ts b/src/shadcn/lib/utils.ts
new file mode 100644
index 000000000..c66a9d9cc
--- /dev/null
+++ b/src/shadcn/lib/utils.ts
@@ -0,0 +1,7 @@
+import type { ClassValue } from "clsx"
+import { clsx } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
diff --git a/tailwind.config.js b/tailwind.config.js
deleted file mode 100644
index 523088ddd..000000000
--- a/tailwind.config.js
+++ /dev/null
@@ -1,136 +0,0 @@
-const animate = require('tailwindcss-animate')
-/** @type {import('tailwindcss').Config} */
-module.exports = {
- darkMode: ['selector'],
- safelist: ['dark'],
- prefix: '',
-
- content: [
- './pages/**/*.{ts,tsx,vue}',
- './components/**/*.{ts,tsx,vue}',
- './app/**/*.{ts,tsx,vue}',
- './src/**/*.{ts,tsx,vue}',
- './node_modules/vue-renderer-markdown/dist/tailwind.ts'
- ],
-
- fontFamily: {
- display: ['Geist', 'sans-serif'],
- text: ['Geist', 'sans-serif']
- },
-
- theme: {
- container: {
- center: true,
- padding: '2rem',
- screens: {
- '2xl': '1400px'
- }
- },
- extend: {
- colors: {
- border: 'hsl(var(--border))',
- input: 'hsl(var(--input))',
- ring: 'hsl(var(--ring))',
- background: 'hsl(var(--background))',
- foreground: 'hsl(var(--foreground))',
- container: 'hsl(var(--container))',
-
- base: {
- 50: 'hsl(var(--base-50))',
- 100: 'hsl(var(--base-100))',
- 200: 'hsl(var(--base-200))',
- 300: 'hsl(var(--base-300))',
- 400: 'hsl(var(--base-400))',
- 500: 'hsl(var(--base-500))',
- 600: 'hsl(var(--base-600))',
- 700: 'hsl(var(--base-700))',
- 800: 'hsl(var(--base-800))',
- 900: 'hsl(var(--base-900))',
- 950: 'hsl(var(--base-950))',
- 1000: 'hsl(var(--base-1000))'
- },
- primary: {
- DEFAULT: 'hsl(var(--primary))',
- foreground: 'hsl(var(--primary-foreground))',
- 50: 'hsl(var(--primary-50))',
- 100: 'hsl(var(--primary-100))',
- 200: 'hsl(var(--primary-200))',
- 300: 'hsl(var(--primary-300))',
- 400: 'hsl(var(--primary-400))',
- 500: 'hsl(var(--primary-500))',
- 600: 'hsl(var(--primary-600))',
- 700: 'hsl(var(--primary-700))',
- 800: 'hsl(var(--primary-800))',
- 900: 'hsl(var(--primary-900))',
- 950: 'hsl(var(--primary-950))',
- 1000: 'hsl(var(--primary-1000))'
- },
- secondary: {
- DEFAULT: 'hsl(var(--secondary))',
- foreground: 'hsl(var(--secondary-foreground))'
- },
- destructive: {
- DEFAULT: 'hsl(var(--destructive))',
- foreground: 'hsl(var(--destructive-foreground))'
- },
- muted: {
- DEFAULT: 'hsl(var(--muted))',
- foreground: 'hsl(var(--muted-foreground))'
- },
- accent: {
- DEFAULT: 'hsl(var(--accent))',
- foreground: 'hsl(var(--accent-foreground))'
- },
- popover: {
- DEFAULT: 'hsl(var(--popover))',
- foreground: 'hsl(var(--popover-foreground))'
- },
- card: {
- DEFAULT: 'hsl(var(--card))',
- foreground: 'hsl(var(--card-foreground))'
- },
- usage: {
- low: 'hsl(var(--usage-low))',
- mid: 'hsl(var(--usage-mid))',
- high: 'hsl(var(--usage-high))'
- }
- },
- borderRadius: {
- xl: 'calc(var(--radius) + 4px)',
- lg: 'var(--radius)',
- md: 'calc(var(--radius) - 2px)',
- sm: 'calc(var(--radius) - 4px)'
- },
- keyframes: {
- 'accordion-down': {
- from: { height: 0 },
- to: { height: 'var(--radix-accordion-content-height)' }
- },
- 'accordion-up': {
- from: { height: 'var(--radix-accordion-content-height)' },
- to: { height: 0 }
- },
- 'collapsible-down': {
- from: { height: 0 },
- to: { height: 'var(--radix-collapsible-content-height)' }
- },
- 'collapsible-up': {
- from: { height: 'var(--radix-collapsible-content-height)' },
- to: { height: 0 }
- },
- pulse: {
- '0%, 100%': { opacity: '1' },
- '50%': { opacity: '0.3' }
- }
- },
- animation: {
- 'accordion-down': 'accordion-down 0.2s ease-out',
- 'accordion-up': 'accordion-up 0.2s ease-out',
- 'collapsible-down': 'collapsible-down 0.2s ease-in-out',
- 'collapsible-up': 'collapsible-up 0.2s ease-in-out',
- pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite'
- }
- }
- },
- plugins: [animate, require('@tailwindcss/typography'), require('tailwind-scrollbar-hide')]
-}
diff --git a/tsconfig.web.json b/tsconfig.app.json
similarity index 90%
rename from tsconfig.web.json
rename to tsconfig.app.json
index 5894ee0eb..ebd88b56d 100644
--- a/tsconfig.web.json
+++ b/tsconfig.app.json
@@ -17,7 +17,8 @@
"src/renderer/splash/**/*.vue",
"src/renderer/splash/assets/**/*",
"src/preload/*.d.ts",
- "src/shared/**/*"
+ "src/shared/**/*",
+ "src/shadcn/**/*"
],
"compilerOptions": {
"composite": true,
@@ -32,7 +33,10 @@
],
"@shared/*": [
"src/shared/*"
+ ],
+ "@shadcn/*": [
+ "src/shadcn/*"
]
}
}
-}
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index 31bac6e94..1a8a54147 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,4 +1,19 @@
{
"files": [],
- "references": [{ "path": "./tsconfig.node.json" }, { "path": "./tsconfig.web.json" }]
-}
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ },
+ {
+ "path": "./tsconfig.app.json"
+ }
+ ],
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@shadcn/*": [
+ "src/shadcn/*"
+ ]
+ }
+ }
+}
\ No newline at end of file